GitHub user ottobackwards reopened a pull request:

    https://github.com/apache/metron/pull/856

    METRON-1339 Stellar Shell functionality to verify stored stellar statements 

    This will allow users to check their deployed statements, say after 
upgrade, when they are at rest ( and would fail on use ).
    In other words, they were valid when stored, but are not now because of 
stellar changes, such as new keywords.
    
    The interface `StellarConfiguredStatementReporter`, which is 
`@IndexSubclasses` ( ClassIndex) marked, allows the shell to discover reporters 
that can provide statements for validation.  This discovery allows de-coupling 
of stellar and 'hosts' that know about the location of the stored statements, 
and the configuration structure details.
    
    > We do mention the configurations in the shell output at this time.
    
    `metron-common` implements this interface, and can run through visiting all 
the configurations.
    
    A new magic keyword was added ` %validate_configured_expressions`
    When executed, the shell 
    
    - discovers the reporters through class index 
    - visits the reports, with callbacks for visits or errors
    - per visit ( which is called for a specific stellar statement ) the 
statement is compiled and errors reported
    - if the entire config fails ( threat triage stellar errors fail on 
deserialize so we don't get to do ANY enrichment visits in that case ) the 
error callback handles that
    
    I'm getting this out there, still a couple of things todo:
    
    [x] ~~full dev run. I have been testing with stellar external to full dev 
iteratively~~
    [x] ~~readme~~
    [x] ~~steps to test~~
    [x] ~~unit test~~
    [x] ~~ThreatTriage Rule Reason~~
    
    
    ## Testing
    - deploy full dev
    - edit the squid parser transformation(s) such that the stellar would not 
compile, such as adding a dangling  `=` in zookeeper
    ```json
    { 
    "parserClassName": "org.apache.metron.parsers.GrokParser", 
    "sensorTopic": "squid", 
    "parserConfig": { 
    "grokPath": "/patterns/squid", 
    "patternLabel": "SQUID_DELIMITED", 
    "timestampField": "timestamp" 
    }, 
    "fieldTransformations" : [ 
    { 
    "transformation" : "STELLAR" 
    ,"output" : [ "full_hostname", "domain_without_subdomains" ] 
    ,"config" : { 
    "full_hostname" : "URL_TO_HOST(url) =" 
    ,"domain_without_subdomains" : "DOMAIN_REMOVE_SUBDOMAINS(full_hostname)" 
    } 
    } 
    ] 
    }
    
    ```
    
    - edit the snort threat triage rules in it's enrichment config in zookeeper 
( here with an extra `)` )
    
    ```json
    { 
    "enrichment" : { 
    "fieldMap": 
    { 
    "geo": ["ip_dst_addr", "ip_src_addr"], 
    "host": ["host"] 
    } 
    }, 
    "threatIntel" : { 
    "fieldMap": 
    { 
    "hbaseThreatIntel": ["ip_src_addr", "ip_dst_addr"] 
    }, 
    "fieldToTypeMap": 
    { 
    "ip_src_addr" : ["malicious_ip"], 
    "ip_dst_addr" : ["malicious_ip"] 
    }, 
    "triageConfig" : { 
    "riskLevelRules" : [ 
    { 
    "rule" : "not(IN_SUBNET(ip_dst_addr, '192.168.0.0/24')) )", 
    "score" : 10 
    } 
    ], 
    "aggregator" : "MAX" 
    } 
    } 
    } 
    ```
    
    ## Working with zookeeper
    I am not a zk cli maestro, so I took the easy way out and used 
[ZK-WEB](https://github.com/qiuxiafei/zk-web).
    Following the readme instructions it was very simple to clone, edit the 
config for full dev, and run from source.  If you log in with the creds in the 
config you can edit the nodes.
    
    
    ## Results
    When you run the magic command, it will report the failed stellar 
statements, and the failed enrichment config:
    
    ```bash
    [Stellar]>>> %validate_configured_expressions
    Discovered 1 reporters
    Visiting all configurations.  ThreatTriage rules are checked when loading 
the configuration, thus an invalid ThreatTriage rule will fail the entire 
Enrichement Configuration.
    Apache Metron
    Visiting Apache Metron
    
    
    ==================================================
    
    
    validating Apache Metron->PARSER->squid->full_hostname
    [!] Error Visiting Apache Metron->PARSER->squid->full_hostname
    Syntax error @ 1:17 token recognition error at: '='
    --
    [!] : URL_TO_HOST(url) =
    
    
    ==================================================
    
    
    
    
    ==================================================
    
    
    validating Apache Metron->PARSER->squid->domain_without_subdomains
    
    
    ==================================================
    
    
    [!] Configuration Apache Metron->ENRICHMENT->snort is not valid, please 
review
    
    Done validation
    [Stellar]>>>
    ```
    
    ### For all changes:
    - [x] Is there a JIRA ticket associated with this PR? If not one needs to 
be created at [Metron 
Jira](https://issues.apache.org/jira/browse/METRON/?selectedTab=com.atlassian.jira.jira-projects-plugin:summary-panel).
 
    - [x] Does your PR title start with METRON-XXXX where XXXX is the JIRA 
number you are trying to resolve? Pay particular attention to the hyphen "-" 
character.
    - [x] Has your PR been rebased against the latest commit within the target 
branch (typically master)?
    
    
    ### For code changes:
    - [ ] Have you included steps to reproduce the behavior or problem that is 
being changed or addressed?
    - [x] Have you included steps or a guide to how the change may be verified 
and tested manually?
    - [x] Have you ensured that the full suite of tests and checks have been 
executed in the root metron folder via:
      ```
      mvn -q clean integration-test install && build_utils/verify_licenses.sh 
      ```
    
    - [ ] Have you written or updated unit tests and or integration tests to 
verify your changes?
    - [ ] If adding new dependencies to the code, are these dependencies 
licensed in a way that is compatible for inclusion under [ASF 
2.0](http://www.apache.org/legal/resolved.html#category-a)? 
    - [x] Have you verified the basic functionality of the build by building 
and running locally with Vagrant full-dev environment or the equivalent?
    
    ### For documentation related changes:
    - [ ] Have you ensured that format looks appropriate for the output in 
which it is rendered by building and verifying the site-book? If not then run 
the following commands and the verify changes via 
`site-book/target/site/index.html`:
    
      ```
      cd site-book
      mvn site
      ```

You can merge this pull request into a Git repository by running:

    $ git pull https://github.com/ottobackwards/metron 
stellar_verify_deployed_shell

Alternatively you can review and apply these changes as the patch at:

    https://github.com/apache/metron/pull/856.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #856
    
----
commit a5087f3a170eeda6ee778397c919d9eddd5597e2
Author: Otto Fowler <ottobackwa...@gmail.com>
Date:   2017-11-30T14:15:40Z

    Stellar shell functionality to verify stellar statements.
    
    This will allow users to check their deployed statements, say after 
upgrade, when they are at rest ( and would fail on use ).
    In other words, they were valid when stored, but are not now because of 
stellar changes, such as new keywords.
    
    The interface StellarConfiguredStatementReporter, which is @IndexSubclasses 
marked, allows the shell to discover
    reporters that can provide statements for validation.  This discovery 
allows de-coupling of stellar and 'hosts' that
    know about the location of the stored statements, and the configuration 
structure details.
    
    We do mention the configurations in the shell output at this time.
    
    metron-common implements this interface, and can run through visiting all 
the configurations.

commit 96df802318d74bf8dfcd3bcae9208f63c3d034f0
Author: Otto Fowler <ottobackwa...@gmail.com>
Date:   2017-11-30T16:25:58Z

    add readme and remove some newlines

commit dcd55e8f4a72e5c3e694807e13c7eebc53d1860f
Author: Otto Fowler <ottobackwa...@gmail.com>
Date:   2017-11-30T23:34:38Z

    add tests for StellarStatementReporter

commit c0315b8291557de94dcf701d8def16d0b2866798
Author: Otto Fowler <ottobackwa...@gmail.com>
Date:   2017-12-01T01:18:45Z

    refactor to utility classes, first step in major refactor

commit 65278a67a07f1c4c23ab2d95ebb6de92e1cac731
Author: Otto Fowler <ottobackwa...@gmail.com>
Date:   2017-12-01T16:46:57Z

    Refactor based on review and inspiration from review.
    Although the original implementation was functional, it required 
maintainence to keep current.
    The suggested 'best state' was to have it be possible, maybe through 
annotations, for the validation
    system to be able to handle any config, regarless or composition using 
annotations.
    That would leave it up to the implementor to propertly annotate thier 
configurations, and allow for support of new fields.
    
    This is an implementation of that.
    
    I have refactored the implemenations and details, but kept the discovery 
and mechanics ( loading and visitation ) somewhat the same.
    Hopefully keeping the good and reworking to a more sustainable solution.
    
    Several annotations where created to marks ceratin stellar configruation 
objects or scenarios.
    A holder object, to hold the configuration object, but knows how to process 
the annotations and run the visitation was added.
    This holder object and the annotations have parameters and handling for 
several special scenarios, such as 2x nested maps.
    
    This implementation should facilitate follow on work to validate files and 
streams and blobs by using implementing the StellarValidator interface
    and re-using the holder concept ( replacing the providers )

commit 70de632ee583b45c028b23d8305d76e4b6bc70c5
Author: Otto Fowler <ottobackwa...@gmail.com>
Date:   2017-12-01T16:59:39Z

    fix imports

commit 8726a15a3db35bf24408e723ec069a391df16820
Author: Otto Fowler <ottobackwa...@gmail.com>
Date:   2017-12-01T19:53:52Z

    small refactor and javadoc work

commit a6a9a4e5d558209175a8e5d2fa532c845efa830d
Author: Otto Fowler <ottobackwa...@gmail.com>
Date:   2017-12-03T13:22:50Z

    format and javadoc

commit 3f12c2dace1157ffd4e870df39864b61b71c1270
Author: Otto Fowler <ottobackwa...@gmail.com>
Date:   2017-12-03T20:31:30Z

    refactor name and tests

commit 5516bad34573ef11dc40eb9ed23b241e7d84c75f
Author: Otto Fowler <ottobackwa...@gmail.com>
Date:   2017-12-04T00:54:08Z

    fix for exception change

commit b3e7cfb8ac76d618d35da97895169b9069e7fba0
Author: Otto Fowler <ottobackwa...@gmail.com>
Date:   2017-12-04T01:17:56Z

    fix regression after fixing mapping in prior commit

commit c067c9b8e39b91556790645bdae7b3f55d89d6eb
Author: Otto Fowler <ottobackwa...@gmail.com>
Date:   2017-12-04T16:18:30Z

    Merge remote-tracking branch 'apache/master' into 
stellar_verify_deployed_shell

commit a814a0e0e497bbb1e45b4694b78d585136c756c8
Author: Otto Fowler <ottobackwa...@gmail.com>
Date:   2017-12-05T16:12:48Z

    Merge remote-tracking branch 'apache/master' into 
stellar_verify_deployed_shell

commit 7b28be6e2da9756a3cb4f3234308118e99a2e17c
Author: Otto Fowler <ottobackwa...@gmail.com>
Date:   2017-12-07T11:55:05Z

    Merge remote-tracking branch 'apache/master' into 
stellar_verify_deployed_shell

----


---

Reply via email to