| Match/Query Classes |
| ------------------- |
|
|
| ExistsMatch |
| ^^^^^^^^^^^ |
|
|
| Checks to see if a specific field exists in a document |
|
|
| .. code-block:: python |
| :linenos: |
|
|
| from mozdef_util.query_models import ExistsMatch |
|
|
| ExistsMatch("randomfield") |
|
|
|
|
| TermMatch |
| ^^^^^^^^^ |
|
|
| Checks if a specific field matches the key |
|
|
| .. code-block:: python |
| :linenos: |
|
|
| from mozdef_util.query_models import TermMatch |
|
|
| TermMatch("details.ip", "127.0.0.1") |
|
|
|
|
| TermsMatch |
| ^^^^^^^^^^ |
|
|
| Checks if a specific field matches any of the keys |
|
|
| .. code-block:: python |
| :linenos: |
|
|
| from mozdef_util.query_models import TermsMatch |
|
|
| TermsMatch("details.ip", ["127.0.0.1", "1.2.3.4"]) |
|
|
|
|
| WildcardMatch |
| ^^^^^^^^^^^^^ |
|
|
| Allows regex to be used in looking for documents that a field contains all or part of a key |
|
|
| .. code-block:: python |
| :linenos: |
|
|
| from mozdef_util.query_models import WildcardMatch |
|
|
| WildcardMatch('summary', 'test*') |
|
|
|
|
| PhraseMatch |
| ^^^^^^^^^^^ |
|
|
| Checks if a field contains a specific phrase (includes spaces) |
|
|
| .. code-block:: python |
| :linenos: |
|
|
| from mozdef_util.query_models import PhraseMatch |
|
|
| PhraseMatch('summary', 'test run') |
|
|
|
|
| BooleanMatch |
| ^^^^^^^^^^^^ |
|
|
| Used to apply specific "matchers" to a query. This will unlikely be used outside of SearchQuery. |
|
|
| .. code-block:: python |
| :linenos: |
|
|
| from mozdef_util.query_models import ExistsMatch, TermMatch, BooleanMatch |
|
|
| must = [ |
| ExistsMatch('details.ip') |
| ] |
| must_not = [ |
| TermMatch('type', 'alert') |
| ] |
|
|
| BooleanMatch(must=must, should=[], must_not=must_not) |
|
|
|
|
| MissingMatch |
| ^^^^^^^^^^^^ |
|
|
| Checks if a field does not exist in a document |
|
|
| .. code-block:: python |
| :linenos: |
|
|
| from mozdef_util.query_models import MissingMatch |
|
|
| MissingMatch('summary') |
|
|
|
|
| RangeMatch |
| ^^^^^^^^^^ |
|
|
| Checks if a field value is within a specific range (mostly used to look for documents in a time frame) |
|
|
| .. code-block:: python |
| :linenos: |
|
|
| from mozdef_util.query_models import RangeMatch |
|
|
| RangeMatch('utctimestamp', "2016-08-12T21:07:12.316450+00:00", "2016-08-13T21:07:12.316450+00:00") |
|
|
|
|
| QueryStringMatch |
| ^^^^^^^^^^^^^^^^ |
|
|
| Uses a custom query string to generate the "match" based on (Similar to what you would see in kibana) |
|
|
| .. code-block:: python |
| :linenos: |
|
|
| from mozdef_util.query_models import QueryStringMatch |
|
|
| QueryStringMatch('summary: test') |
|
|
|
|
| SubnetMatch |
| ^^^^^^^^^^^^^^^^ |
|
|
| Checks if an IP field is within the bounds of a subnet |
|
|
| .. code-block:: python |
| :linenos: |
|
|
| from mozdef_util.query_models import SubnetMatch |
|
|
| SubnetMatch('details.sourceipaddress', '10.1.1.0/24') |
|
|
|
|
| Aggregation |
| ^^^^^^^^^^^ |
|
|
| Used to aggregate results based on a specific field |
|
|
| .. code-block:: python |
| :linenos: |
|
|
| from mozdef_util.query_models import Aggregation, SearchQuery, ExistsMatch |
|
|
| search_query = SearchQuery(hours=24) |
| must = [ |
| ExistsMatch('seenindicator') |
| ] |
| search_query.add_must(must) |
| aggr = Aggregation('details.ip') |
| search_query.add_aggregation(aggr) |
| results = search_query.execute(es_client, indices=['events','events-previous']) |
|
|