From a471214d07244eb61492d5a5ef1bedbb18a47e83 Mon Sep 17 00:00:00 2001 From: Nasreddine Bencherchali <8741929+nasbench@users.noreply.github.com> Date: Sun, 4 Aug 2024 17:57:35 +0200 Subject: [PATCH 01/31] rename --- .github/workflows/jekyll-gh-pages.yml | 50 --- V2_changes.md | 27 -- ...ndix_modifier.md => appendix_modifiers.md} | 176 ++++---- appendix/appendix_tags.md | 21 +- appendix/appendix_taxonomy.md | 6 +- .../detection-rule-schema.json | 0 .../meta-filter-schema.json | 228 +++++----- {schema => json-schema}/meta-rule-schema.json | 406 +++++++++--------- .../sigma_meta_filter.md | 2 +- .../sigma_meta_rules.md | 2 +- .../sigma_rules.md | 6 +- version_2_changes.md | 23 + 12 files changed, 447 insertions(+), 500 deletions(-) delete mode 100644 .github/workflows/jekyll-gh-pages.yml delete mode 100644 V2_changes.md rename appendix/{appendix_modifier.md => appendix_modifiers.md} (97%) rename {schema => json-schema}/detection-rule-schema.json (100%) rename {schema => json-schema}/meta-filter-schema.json (96%) rename {schema => json-schema}/meta-rule-schema.json (96%) rename Sigma_meta_filter.md => specification/sigma_meta_filter.md (98%) rename Sigma_meta_rules.md => specification/sigma_meta_rules.md (99%) rename Sigma_specification.md => specification/sigma_rules.md (99%) create mode 100644 version_2_changes.md diff --git a/.github/workflows/jekyll-gh-pages.yml b/.github/workflows/jekyll-gh-pages.yml deleted file mode 100644 index 85430f5..0000000 --- a/.github/workflows/jekyll-gh-pages.yml +++ /dev/null @@ -1,50 +0,0 @@ -# Sample workflow for building and deploying a Jekyll site to GitHub Pages -name: Deploy Jekyll with GitHub Pages dependencies preinstalled - -on: - # Runs on pushes targeting the default branch - push: - branches: ["main","jekyll"] - - # Allows you to run this workflow manually from the Actions tab - workflow_dispatch: - -# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages -permissions: - contents: read - pages: write - id-token: write - -# Allow one concurrent deployment -concurrency: - group: "pages" - cancel-in-progress: true - -jobs: - # Build job - build: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v3.3.0 - - name: Setup Pages - uses: actions/configure-pages@v3.0.4 - - name: Build with Jekyll - uses: actions/jekyll-build-pages@v1.0.7 - with: - source: ./ - destination: ./_site - - name: Upload artifact - uses: actions/upload-pages-artifact@v1 - - # Deployment job - deploy: - environment: - name: github-pages - url: ${{ steps.deployment.outputs.page_url }} - runs-on: ubuntu-latest - needs: build - steps: - - name: Deploy to GitHub Pages - id: deployment - uses: actions/deploy-pages@v1.2.4 diff --git a/V2_changes.md b/V2_changes.md deleted file mode 100644 index e1e89c1..0000000 --- a/V2_changes.md +++ /dev/null @@ -1,27 +0,0 @@ -The following is a non-exhaustive list of changes between the v1 and v2 specifications. - - -# Sigmac - -Warning `sigmac` will not be able to convert all the specification of this version. \ -Only `pySigma` and the corresponding `sigma-cli` provide full support for version 2. - -# Date - -Legacy sigma rule use YYYY/MM/DD or YYYY-MM-DD format for the date. \ -Version 2 only use ISO 8601 with separator format : YYYY-MM-DD - -# New Modifiers - -- `windash` : creates all possible permutations of the `-` and `/` characters. Windows command line flags can often be indicated by both characters. Using the `windash` modifier converts `-` values into `/` and vice versa and uses all possible permutation of strings in the selection. This will be used for all `CommandLine` fields in windows > `process_creation` rules. -- `exists` that allows to define that a certain field exists or doesn't exists in a log event by providing - a boolean value. Currently we use filters with `field: null` as a workaround for this purpose, which is less descriptive. - - -# Correlation - -- Remove aggregation expression in Sigma rule file, see [Sigma meta rules](/Sigma_meta_rules.md) - -# Global filter - -- Adds the ability to make filter rule files, see [Sigma meta filter](/Sigma_meta_filter.md) diff --git a/appendix/appendix_modifier.md b/appendix/appendix_modifiers.md similarity index 97% rename from appendix/appendix_modifier.md rename to appendix/appendix_modifiers.md index ed12940..4508c67 100644 --- a/appendix/appendix_modifier.md +++ b/appendix/appendix_modifiers.md @@ -1,88 +1,88 @@ -# Modifiers - -The following document defines the standardized modifiers that can be used in Sigma. - -* Version 2.0.0 -* Release date 2024-01-01 - -## Summary -- [Summary](#summary) -- [General](#general) - - [String only](#string-only) - - [Numeric only](#numeric-only) - - [Ip only](#ip-only) - - [String Encoding](#string-encoding) -- [Specific](#specific) -- [History](#history) - - -## General - -* `all`: Normally, lists of values are linked with *OR* in the generated query. This modifier - changes this to *AND*. This is useful if you want to express a command line invocation with different - parameters where the order may vary and removes the need for some cumbersome workarounds. - - Single item values are not allowed to have an `all` modifier as some back-ends cannot support it. - If you use it as a workaround to duplicate a field in a selection, use a new selection instead. - -* `startswith`: The value is expected at the beginning of the field's content. (replaces e.g. 'adm*') -* `endswith`: The value is expected at the end of the field's content (replaces e.g. '*\cmd.exe') -* `contains`: Puts `*` wildcards around the values, such that the value is matched anywhere in the - field. - -* `exists`: Defines that a certain field has to exist or must not exist in a log event by providing a boolean value. -* `cased`: Values are applied case sensitively. Default Sigma behaviour is case-insensitive matching. - -### String only - -* `windash`: Creates all possible permutations of the `-` and `/` characters. Windows command line flags can often be indicated by both characters. Using the `windash` modifier converts `-` values into `/` and vice versa and uses all possible permutation of strings in the selection. -* `re`: Value is handled as a regular expression by backends. Regex is matched case-sensitive by default - * `i`: (insensitive) `re` sub-modifier to enable case-sensitive matching. - * `m`: (multi line) `re` sub-modifier to match across multiple lines. `^` /`$` match the start/end of line. - * `s`: (single line) `re` sub-modifier to enable that dot (`.`) matches all characters, including the newline character. - - -### Numeric only - -* `lt`: Field is less than the value -* `lte`: Field is less or equal than the value -* `gt`: Field is greater than the value -* `gte`: Field is greater or equal than the value - - -### Ip only - -* `cidr`: The value is handled as an CIDR by backends - - -### String Encoding - -* `base64`: The value is encoded with Base64. -* `base64offset`: If a value might appear somewhere in a base64-encoded string the representation - might change depending on the position of the value in the overall string. There are three variants for shifts - by zero to two bytes and except the first and last byte the encoded values have a static part in - the middle that can be recognized. - -* `utf16le`: Transforms value to UTF16-LE encoding, e.g. `cmd` > `63 00 6d 00 64 00` (only used in combination with base64 modifiers) -* `utf16be`: Transforms value to UTF16-BE encoding, e.g. `cmd` > `00 63 00 6d 00 64` (only used in combination with base64 modifiers) -* `wide`: Alias for `utf16le` modifier -* `utf16`: Prepends a [byte order mark](https://en.wikipedia.org/wiki/Byte_order_mark) and encodes UTF16, e.g. `cmd` > `FF FE 63 00 6d 00 64 00` (only used in combination with base64 modifiers) - - -## Specific - -* `expand`: Modifier for expansion of placeholders in values. The final behavior of the replacement is determined by processing pipeline transformations. Current possibilities in pySigma are: - * Expand to value list (`ValueListPlaceholderTransformation`/`value_placeholders`) - * Replace with query expression in target query language (`QueryExpressionPlaceholderTransformation`/`query_expression_placeholders`) - * Replace placeholder with wildcard `*`, which should only be used as last resort. (`WildcardPlaceholderTransformation`/`wildcard_placeholders`) - -* `fieldref`: Modifies a plain string into a field reference. A field reference can be used to compare fields of matched - events directly at query/matching time. - -## History -* 2023-05-27 - * Update from PySigma 0.7.6 - * Add `fieldref` -* 2023-05-21 v1.0.3 - * Creation of the file -* 2017 Sigma creation +# Modifiers + +The following document defines the standardized modifiers that can be used in Sigma. + +* Version 2.0.0 +* Release date 2024-08-12 + +## Summary +- [Summary](#summary) +- [General](#general) + - [String only](#string-only) + - [Numeric only](#numeric-only) + - [Ip only](#ip-only) + - [String Encoding](#string-encoding) +- [Specific](#specific) +- [History](#history) + + +## General + +* `all`: Normally, lists of values are linked with *OR* in the generated query. This modifier + changes this to *AND*. This is useful if you want to express a command line invocation with different + parameters where the order may vary and removes the need for some cumbersome workarounds. + + Single item values are not allowed to have an `all` modifier as some back-ends cannot support it. + If you use it as a workaround to duplicate a field in a selection, use a new selection instead. + +* `startswith`: The value is expected at the beginning of the field's content. (replaces e.g. 'adm*') +* `endswith`: The value is expected at the end of the field's content (replaces e.g. '*\cmd.exe') +* `contains`: Puts `*` wildcards around the values, such that the value is matched anywhere in the + field. + +* `exists`: Defines that a certain field has to exist or must not exist in a log event by providing a boolean value. +* `cased`: Values are applied case sensitively. Default Sigma behaviour is case-insensitive matching. + +### String only + +* `windash`: Creates all possible permutations of the `-` and `/` characters. Windows command line flags can often be indicated by both characters. Using the `windash` modifier converts `-` values into `/` and vice versa and uses all possible permutation of strings in the selection. +* `re`: Value is handled as a regular expression by backends. Regex is matched case-sensitive by default + * `i`: (insensitive) `re` sub-modifier to enable case-sensitive matching. + * `m`: (multi line) `re` sub-modifier to match across multiple lines. `^` /`$` match the start/end of line. + * `s`: (single line) `re` sub-modifier to enable that dot (`.`) matches all characters, including the newline character. + + +### Numeric only + +* `lt`: Field is less than the value +* `lte`: Field is less or equal than the value +* `gt`: Field is greater than the value +* `gte`: Field is greater or equal than the value + + +### Ip only + +* `cidr`: The value is handled as an CIDR by backends + + +### String Encoding + +* `base64`: The value is encoded with Base64. +* `base64offset`: If a value might appear somewhere in a base64-encoded string the representation + might change depending on the position of the value in the overall string. There are three variants for shifts + by zero to two bytes and except the first and last byte the encoded values have a static part in + the middle that can be recognized. + +* `utf16le`: Transforms value to UTF16-LE encoding, e.g. `cmd` > `63 00 6d 00 64 00` (only used in combination with base64 modifiers) +* `utf16be`: Transforms value to UTF16-BE encoding, e.g. `cmd` > `00 63 00 6d 00 64` (only used in combination with base64 modifiers) +* `wide`: Alias for `utf16le` modifier +* `utf16`: Prepends a [byte order mark](https://en.wikipedia.org/wiki/Byte_order_mark) and encodes UTF16, e.g. `cmd` > `FF FE 63 00 6d 00 64 00` (only used in combination with base64 modifiers) + + +## Specific + +* `expand`: Modifier for expansion of placeholders in values. The final behavior of the replacement is determined by processing pipeline transformations. Current possibilities in pySigma are: + * Expand to value list (`ValueListPlaceholderTransformation`/`value_placeholders`) + * Replace with query expression in target query language (`QueryExpressionPlaceholderTransformation`/`query_expression_placeholders`) + * Replace placeholder with wildcard `*`, which should only be used as last resort. (`WildcardPlaceholderTransformation`/`wildcard_placeholders`) + +* `fieldref`: Modifies a plain string into a field reference. A field reference can be used to compare fields of matched + events directly at query/matching time. + +## History +* 2023-05-27 + * Update from PySigma 0.7.6 + * Add `fieldref` +* 2023-05-21 v1.0.3 + * Creation of the file +* 2017 Sigma creation diff --git a/appendix/appendix_tags.md b/appendix/appendix_tags.md index 04d7ae7..24cc029 100644 --- a/appendix/appendix_tags.md +++ b/appendix/appendix_tags.md @@ -2,8 +2,8 @@ The following document defines the standardized tags that can be used to categorize the different Sigma rules. -* Version 1.2.0 -* Release date 2023-11-23 +* Version 2.0.0 +* Release date 2024-08-12 ## Summary @@ -19,10 +19,11 @@ The following document defines the standardized tags that can be used to categor ## Namespaces -* attack: Categorization according to [MITRE ATT&CK](https://attack.mitre.org). To get the current supported version of ATT&CK please visite [MITRE CTI](https://github.com/mitre/cti) +* attack: Categorization according to [MITRE ATT&CK](https://attack.mitre.org). To get the current supported version of ATT&CK please visit [MITRE CTI](https://github.com/mitre/cti) * car: Link to the corresponding [MITRE Cyber Analytics Repository (CAR)](https://car.mitre.org/) * stp: Rating of detection analytic robustness according to the [MITRE Summiting the Pyramid](https://center-for-threat-informed-defense.github.io/summiting-the-pyramid/) scheme. -* tlp: [Traffic Light Protocol](https://www.first.org/tlp/) +* tlp: [Traffic Light Protocol](https://www.first.org/tlp/). +* detection: Categorization according to the types of rules provided in the [SigmaHQ rule repository](https://github.com/SigmaHQ/sigma). ### Namespace: attack @@ -71,7 +72,7 @@ specify the robustness in the following ways: ### Namespace: cve -Use the CVE tag from the [mitre](https://cve.mitre.org) in lower case seperated by dots. Example tag: `cve.2021.44228`. +Use the CVE tag from the [mitre](https://cve.mitre.org) in lower case seperated by dots. Example tag: `cve.2021-44228`. ### Namespace: tlp @@ -79,13 +80,15 @@ All TLP levels defined by the [FIRST TLP-SIG](https://www.first.org/tlp/) in low ### namespace: detection -Use the detection tag to indicate the type of a rule. Example tag: `detection.threat_hunting`. +Use the detection tag to indicate the type of a rule. Example tag: `detection.threat-hunting`. * dfir -* emerging_threats -* threat_hunting +* emerging-threats +* threat-hunting ## History +* 2024-08-12 Tags V2.0.0 + * Release of V2.0.0 of the specification * 2023-11-23 Tags V1.2.0 * Add Summiting the Pyramid * 2023-06-20 Tags V1.1.0 @@ -93,5 +96,5 @@ Use the detection tag to indicate the type of a rule. Example tag: `detection.th * 2022-12-19 Tags V1.0.1 * Minor updates and tweaks * 2022-09-18 Tags V1.0.0 - * Initial formalisation from the sigma wiki + * Initial formalization from the sigma wiki * 2017 Sigma creation diff --git a/appendix/appendix_taxonomy.md b/appendix/appendix_taxonomy.md index 60a39f2..0ad5f26 100644 --- a/appendix/appendix_taxonomy.md +++ b/appendix/appendix_taxonomy.md @@ -1,9 +1,9 @@ # Sigma Taxonomy -The following document defines the field names and log sources that should be used in SIGMA rules to ensure sharable rules. +The following document defines the field names and log sources that are allowed to be used in SIGMA rules that are shared on the official SigmaHQ repository. -* Version 1.3.5 -* Release date 2023/01/21 +* Version 2.0.0 +* Release date 2024/08/12 ## Summary diff --git a/schema/detection-rule-schema.json b/json-schema/detection-rule-schema.json similarity index 100% rename from schema/detection-rule-schema.json rename to json-schema/detection-rule-schema.json diff --git a/schema/meta-filter-schema.json b/json-schema/meta-filter-schema.json similarity index 96% rename from schema/meta-filter-schema.json rename to json-schema/meta-filter-schema.json index f6e4525..1b7bbac 100644 --- a/schema/meta-filter-schema.json +++ b/json-schema/meta-filter-schema.json @@ -1,114 +1,114 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Sigma Global Filter specification V2.0.0 (2024/01/01)", - "type": "object", - "required": [ - "title", - "logsource", - "filter" - ], - "properties": { - "title": { - "type": "string", - "maxLength": 256, - "description": "A brief title for the rule that should contain what the rules is supposed to detect" - }, - "id": { - "type": "string", - "description": "A globally unique identifier for the Sigma rule. This is recommended to be a UUID v4, but not mandatory.", - "format": "uuid" - }, - "description": { - "type": "string", - "description": "A short description of the rule and the malicious activity that can be detected", - "maxLength": 65535 - }, - "date": { - "type": "string", - "description": "Creation date of the meta filter. Use the format YYYY-MM-DD", - "pattern": "^\\d{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$" - }, - "modified": { - "type": "string", - "description": "Last modification date of the meta filter. Use the format YYYY-MM-DD", - "pattern": "^\\d{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$" - }, - "logsource": { - "type": "object", - "description": "The log source that the rule is supposed to detect malicious activity in.", - "properties": { - "category": { - "description": "Group of products, like firewall or process_creation", - "type": "string" - }, - "product": { - "description": "A certain product, like windows", - "type": "string" - }, - "service": { - "description": "A subset of a product's logs, like sshd", - "type": "string" - } - } - }, - "filter": { - "type": "object", - "required": ["rules","selection","condition"], - "description": "A set of search-identifiers that represent properties of searches on log data", - "additionalProperties": { - "description": "A Search Identifier: A definition that can consist of two different data structures - lists and maps.", - "anyOf": [ - { - "type": "array", - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "integer" - }, - { - "type": "object", - "items": { - "type": "string" - } - } - ] - } - }, - { - "type": "object", - "items": { - "type": "string" - } - } - ] - }, - "properties": { - "rules": { - "type": "array", - "description": "list of the rule where add the filter", - "minItems": 1, - "uniqueItems": true, - "items": { - "type": "string" - } - }, - "selection": { - "type": "array", - "description": "the filter detection logic", - "minItems": 1, - "uniqueItems": true, - "items": { - "type": "string" - } - }, - "condition": { - "type": "string", - "description": "The relationship between the search identifiers to create the detection logic. selection or not selection" - } - } - } - } -} +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Sigma Global Filter specification V2.0.0 (2024/01/01)", + "type": "object", + "required": [ + "title", + "logsource", + "filter" + ], + "properties": { + "title": { + "type": "string", + "maxLength": 256, + "description": "A brief title for the rule that should contain what the rules is supposed to detect" + }, + "id": { + "type": "string", + "description": "A globally unique identifier for the Sigma rule. This is recommended to be a UUID v4, but not mandatory.", + "format": "uuid" + }, + "description": { + "type": "string", + "description": "A short description of the rule and the malicious activity that can be detected", + "maxLength": 65535 + }, + "date": { + "type": "string", + "description": "Creation date of the meta filter. Use the format YYYY-MM-DD", + "pattern": "^\\d{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$" + }, + "modified": { + "type": "string", + "description": "Last modification date of the meta filter. Use the format YYYY-MM-DD", + "pattern": "^\\d{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$" + }, + "logsource": { + "type": "object", + "description": "The log source that the rule is supposed to detect malicious activity in.", + "properties": { + "category": { + "description": "Group of products, like firewall or process_creation", + "type": "string" + }, + "product": { + "description": "A certain product, like windows", + "type": "string" + }, + "service": { + "description": "A subset of a product's logs, like sshd", + "type": "string" + } + } + }, + "filter": { + "type": "object", + "required": ["rules","selection","condition"], + "description": "A set of search-identifiers that represent properties of searches on log data", + "additionalProperties": { + "description": "A Search Identifier: A definition that can consist of two different data structures - lists and maps.", + "anyOf": [ + { + "type": "array", + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "integer" + }, + { + "type": "object", + "items": { + "type": "string" + } + } + ] + } + }, + { + "type": "object", + "items": { + "type": "string" + } + } + ] + }, + "properties": { + "rules": { + "type": "array", + "description": "list of the rule where add the filter", + "minItems": 1, + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "selection": { + "type": "array", + "description": "the filter detection logic", + "minItems": 1, + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "condition": { + "type": "string", + "description": "The relationship between the search identifiers to create the detection logic. selection or not selection" + } + } + } + } +} diff --git a/schema/meta-rule-schema.json b/json-schema/meta-rule-schema.json similarity index 96% rename from schema/meta-rule-schema.json rename to json-schema/meta-rule-schema.json index 53e14a9..f2fc607 100644 --- a/schema/meta-rule-schema.json +++ b/json-schema/meta-rule-schema.json @@ -1,204 +1,204 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "title": "Sigma Meta rule specification V2.0.0 (2024/xx/xx)", - "type": "object", - "required": [ - "title", - "correlation" - ], - "properties": { - "title": { - "type": "string", - "maxLength": 256, - "description": "A brief title for the rule that should contain what the rules is supposed to detect" - }, - "id": { - "type": "string", - "description": "A globally unique identifier for the Sigma rule. This is recommended to be a UUID v4, but not mandatory.", - "format": "uuid" - }, - "description": { - "type": "string", - "description": "A short description of the rule and the malicious activity that can be detected", - "maxLength": 65535 - }, - "author": { - "type": "string", - "description": "Creator of the rule. (can be a name, nickname, twitter handle, etc.)" - }, - "references": { - "type": "array", - "description": "References to the source that the rule was derived from. These could be blog articles, technical papers, presentations or even tweets", - "uniqueItems": true, - "items": { - "type": "string" - } - }, - "date": { - "type": "string", - "description": "Creation date of the meta rule. Use the ISO 8601 format YYYY-MM-DD", - "pattern": "^\\d{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$" - }, - "modified": { - "type": "string", - "description": "Last modification date of the meta rule. Use the ISO 8601 format YYYY-MM-DD", - "pattern": "^\\d{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$" - }, - "correlation": { - "type": "object", - "required": [ - "type", - "rules", - "timespan", - "condition" - ], - "description": "represents the correlation searched for on the log data", - "properties": { - "type": { - "type": "string", - "maxLength": 16, - "description": "Defines the corelation type", - "oneOf": [ - { - "const": "event_count" - }, - { - "const": "value_count" - }, - { - "const": "temporal" - }, - { - "const": "temporal_ordered" - } - ] - }, - "rules":{ - "description": "Refers to one or multiple Sigma or Correlations rules", - "uniqueItems": true, - "anyOf": [ - { - "type": "array", - "items": { - "anyOf":[ - { - "type": "string", - "minLength": 2 - }, - { - "type": "string", - "format": "uuid" - } - ] - - } - } - ] - }, - "alias":{ - "type": "object", - "description": "defines field name aliases that are applied to correlated Sigma rules", - "additionalProperties":{ - "anyOf": [ - { - "type": "object", - "items": { - "type": "string" - } - } - ] - } - }, - "group-by": { - "type": "array", - "description": "defines one or multiple fields which should be treated as separate event occurrence scope", - "uniqueItems": true, - "items": { - "type": "string" - } - }, - "timespan": { - "type": "string", - "maxLength": 10, - "description": "defines a time period in which the correlation should be applied. used: `number + letter (in lowercase)`" - }, - "condition": { - "type": "object", - "description": "The condition defines when a correlation matches", - "uniqueItems": true, - "minItems": 1, - "maxItems": 3, - "anyOf": [ - { - "gt": { - "description": "The count must be greater than the given value", - "type": "integer" - } - }, - { - "gte": { - "description": "The count must be greater than or equal the given value", - "type": "integer" - } - }, - { - "lt": { - "description": "The count must be lesser than the given value", - "type": "integer" - } - }, - { - "lte": { - "description": "The count must be lesser than or equal the given value", - "type": "integer" - } - }, - { - "eq": { - "description": "The count must be equal the given value", - "type": "integer" - } - }, - { - "field": { - "description": "name of the field to counts values", - "type": "string", - "maxLength": 256 - } - } - ] - } - } - }, - "level": { - "type": "string", - "description": "The criticality of a triggered rule", - "oneOf": [ - { - "const": "informational", - "description": "Rule is intended for enrichment of events, e.g. by tagging them. No case or alerting should be triggered by such rules because it is expected that a huge amount of events will match these rules" - }, - { - "const": "low", - "description": "Notable event but rarely an incident. Low rated events can be relevant in high numbers or combination with others. Immediate reaction shouldn't be necessary, but a regular review is recommended" - }, - { - "const": "medium", - "description": "Relevant event that should be reviewed manually on a more frequent basis" - }, - { - "const": "high", - "description": "Relevant event that should trigger an internal alert and requires a prompt review" - }, - { - "const": "critical", - "description": "Highly relevant event that indicates an incident. Critical events should be reviewed immediately. It is used only for cases in which probability borders certainty" - } - ] - }, - "generate": { - "type": "boolean", - "description": "defines if the rules referred from the correlation rule should be converted as stand-alone rules" - } - } +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "Sigma Meta rule specification V2.0.0 (2024/xx/xx)", + "type": "object", + "required": [ + "title", + "correlation" + ], + "properties": { + "title": { + "type": "string", + "maxLength": 256, + "description": "A brief title for the rule that should contain what the rules is supposed to detect" + }, + "id": { + "type": "string", + "description": "A globally unique identifier for the Sigma rule. This is recommended to be a UUID v4, but not mandatory.", + "format": "uuid" + }, + "description": { + "type": "string", + "description": "A short description of the rule and the malicious activity that can be detected", + "maxLength": 65535 + }, + "author": { + "type": "string", + "description": "Creator of the rule. (can be a name, nickname, twitter handle, etc.)" + }, + "references": { + "type": "array", + "description": "References to the source that the rule was derived from. These could be blog articles, technical papers, presentations or even tweets", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "date": { + "type": "string", + "description": "Creation date of the meta rule. Use the ISO 8601 format YYYY-MM-DD", + "pattern": "^\\d{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$" + }, + "modified": { + "type": "string", + "description": "Last modification date of the meta rule. Use the ISO 8601 format YYYY-MM-DD", + "pattern": "^\\d{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$" + }, + "correlation": { + "type": "object", + "required": [ + "type", + "rules", + "timespan", + "condition" + ], + "description": "represents the correlation searched for on the log data", + "properties": { + "type": { + "type": "string", + "maxLength": 16, + "description": "Defines the corelation type", + "oneOf": [ + { + "const": "event_count" + }, + { + "const": "value_count" + }, + { + "const": "temporal" + }, + { + "const": "temporal_ordered" + } + ] + }, + "rules":{ + "description": "Refers to one or multiple Sigma or Correlations rules", + "uniqueItems": true, + "anyOf": [ + { + "type": "array", + "items": { + "anyOf":[ + { + "type": "string", + "minLength": 2 + }, + { + "type": "string", + "format": "uuid" + } + ] + + } + } + ] + }, + "alias":{ + "type": "object", + "description": "defines field name aliases that are applied to correlated Sigma rules", + "additionalProperties":{ + "anyOf": [ + { + "type": "object", + "items": { + "type": "string" + } + } + ] + } + }, + "group-by": { + "type": "array", + "description": "defines one or multiple fields which should be treated as separate event occurrence scope", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "timespan": { + "type": "string", + "maxLength": 10, + "description": "defines a time period in which the correlation should be applied. used: `number + letter (in lowercase)`" + }, + "condition": { + "type": "object", + "description": "The condition defines when a correlation matches", + "uniqueItems": true, + "minItems": 1, + "maxItems": 3, + "anyOf": [ + { + "gt": { + "description": "The count must be greater than the given value", + "type": "integer" + } + }, + { + "gte": { + "description": "The count must be greater than or equal the given value", + "type": "integer" + } + }, + { + "lt": { + "description": "The count must be lesser than the given value", + "type": "integer" + } + }, + { + "lte": { + "description": "The count must be lesser than or equal the given value", + "type": "integer" + } + }, + { + "eq": { + "description": "The count must be equal the given value", + "type": "integer" + } + }, + { + "field": { + "description": "name of the field to counts values", + "type": "string", + "maxLength": 256 + } + } + ] + } + } + }, + "level": { + "type": "string", + "description": "The criticality of a triggered rule", + "oneOf": [ + { + "const": "informational", + "description": "Rule is intended for enrichment of events, e.g. by tagging them. No case or alerting should be triggered by such rules because it is expected that a huge amount of events will match these rules" + }, + { + "const": "low", + "description": "Notable event but rarely an incident. Low rated events can be relevant in high numbers or combination with others. Immediate reaction shouldn't be necessary, but a regular review is recommended" + }, + { + "const": "medium", + "description": "Relevant event that should be reviewed manually on a more frequent basis" + }, + { + "const": "high", + "description": "Relevant event that should trigger an internal alert and requires a prompt review" + }, + { + "const": "critical", + "description": "Highly relevant event that indicates an incident. Critical events should be reviewed immediately. It is used only for cases in which probability borders certainty" + } + ] + }, + "generate": { + "type": "boolean", + "description": "defines if the rules referred from the correlation rule should be converted as stand-alone rules" + } + } } \ No newline at end of file diff --git a/Sigma_meta_filter.md b/specification/sigma_meta_filter.md similarity index 98% rename from Sigma_meta_filter.md rename to specification/sigma_meta_filter.md index 420c612..eedcdb8 100644 --- a/Sigma_meta_filter.md +++ b/specification/sigma_meta_filter.md @@ -1,4 +1,4 @@ -# Sigma Filter +# Sigma Filters Specification The following document defines the standardized global filter that can be used with Sigma rules. diff --git a/Sigma_meta_rules.md b/specification/sigma_meta_rules.md similarity index 99% rename from Sigma_meta_rules.md rename to specification/sigma_meta_rules.md index 4ffbca7..762ff70 100644 --- a/Sigma_meta_rules.md +++ b/specification/sigma_meta_rules.md @@ -1,4 +1,4 @@ -# Sigma Correlation +# Sigma Correlation Rules Specification The following document defines the standardized correlation that can be used in Sigma rules. diff --git a/Sigma_specification.md b/specification/sigma_rules.md similarity index 99% rename from Sigma_specification.md rename to specification/sigma_rules.md index 2472178..1bc7257 100644 --- a/Sigma_specification.md +++ b/specification/sigma_rules.md @@ -1,9 +1,7 @@ -# Sigma specification +# Sigma Rules Specification - Version 2.0.0 -- Release date 2024/09/01 - -Take a look at [V1-V2 changes](V2_changes.md) +- Release date 2024/08/12 # Summary diff --git a/version_2_changes.md b/version_2_changes.md new file mode 100644 index 0000000..dc895f8 --- /dev/null +++ b/version_2_changes.md @@ -0,0 +1,23 @@ +The following is a non-exhaustive list of changes between the v1 and v2 specification. + +# Sigmac + +As of August 1st 2024 the `sigmac` toolchain has reached it's end of life, and its corresponding [repository](https://github.com/SigmaHQ/legacy-sigmatools) has been archived. The `sigmac` toolchain doesn't take into account new feature introduced in the second version specification. + +The `pySigma` library and it's corresponding command line interface `sigma-cli`, provide full support for version 2 of the specification. + +# Date + +The latest version of the specification drops support for the date format using a slash `/` separator (YYYY/MM/DD), and now it only recommend the usage of the ISO 8601 format with the a `-` separator (YYYY-MM-DD). + +# Modifiers + +The latest version of the specification and by extension the `pySigma` library, introduces a new set of modifier. You can check the full list of all supported modifiers in the [modifiers appendix](./appendix/appendix_modifiers.md). + +# Correlation + +The latest version of the specification drops the usage of the old aggregation expression, in favour of a new format titles meta rules. Check out the [Sigma Meta Rules Specification](/sigma_meta_rules.md) files for a detailed description of the format. + +# Sigma Filters + +Check out the [Sigma Meta Filter Specification](/Sigma_meta_filter.md) for a detailed description of the format. From addb8ee94ef003308b9f426d7d707a3fabb7d279 Mon Sep 17 00:00:00 2001 From: Nasreddine Bencherchali <8741929+nasbench@users.noreply.github.com> Date: Sun, 4 Aug 2024 18:44:48 +0200 Subject: [PATCH 02/31] more updates --- appendix/appendix_tags.md | 4 ++-- json-schema/detection-rule-schema.json | 4 ++-- json-schema/meta-filter-schema.json | 4 ++-- json-schema/meta-rule-schema.json | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/appendix/appendix_tags.md b/appendix/appendix_tags.md index 24cc029..c31cad2 100644 --- a/appendix/appendix_tags.md +++ b/appendix/appendix_tags.md @@ -62,7 +62,7 @@ by MITRE defines two score dimensions for scoring of the robustness: Details for both dimensions are [defined here](https://center-for-threat-informed-defense.github.io/summiting-the-pyramid/levels/). The *stp* namespace allows to score the robustness of the detection implemented by a Sigma rule according to this -scheme. Because the event robustness depends on the event log source that is an enviromental property, Sigma allows to +scheme. Because the event robustness depends on the event log source that is an environmental property, Sigma allows to specify the robustness in the following ways: * *analytic-only* defines just the analytic robustness in a tag like `stp.4`. This is usually appropriate for generic @@ -72,7 +72,7 @@ specify the robustness in the following ways: ### Namespace: cve -Use the CVE tag from the [mitre](https://cve.mitre.org) in lower case seperated by dots. Example tag: `cve.2021-44228`. +Use the CVE tag from the [mitre](https://cve.mitre.org) in lower case separated by dots. Example tag: `cve.2021-44228`. ### Namespace: tlp diff --git a/json-schema/detection-rule-schema.json b/json-schema/detection-rule-schema.json index 629ad47..b2d7e63 100644 --- a/json-schema/detection-rule-schema.json +++ b/json-schema/detection-rule-schema.json @@ -1,6 +1,6 @@ { - "$schema": "https://json-schema.org/draft/2020-12/schema", - "title": "Sigma rule specification V2.0.0 (2024/xx/xx)", + "$schema": "https://json-schema.org/draft/2020-12/schema#", + "title": "Sigma rule specification V2.0.0 (2024/08/12)", "type": "object", "required": ["title", "logsource", "detection"], "properties": { diff --git a/json-schema/meta-filter-schema.json b/json-schema/meta-filter-schema.json index 1b7bbac..2bcce50 100644 --- a/json-schema/meta-filter-schema.json +++ b/json-schema/meta-filter-schema.json @@ -1,6 +1,6 @@ { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Sigma Global Filter specification V2.0.0 (2024/01/01)", + "$schema": "https://json-schema.org/draft/2020-12/schema#", + "title": "Sigma Global Filter specification V2.0.0 (2024/08/12)", "type": "object", "required": [ "title", diff --git a/json-schema/meta-rule-schema.json b/json-schema/meta-rule-schema.json index f2fc607..89aaf18 100644 --- a/json-schema/meta-rule-schema.json +++ b/json-schema/meta-rule-schema.json @@ -1,6 +1,6 @@ { "$schema": "https://json-schema.org/draft/2020-12/schema", - "title": "Sigma Meta rule specification V2.0.0 (2024/xx/xx)", + "title": "Sigma Meta rule specification V2.0.0 (2024/08/12)", "type": "object", "required": [ "title", @@ -201,4 +201,4 @@ "description": "defines if the rules referred from the correlation rule should be converted as stand-alone rules" } } -} \ No newline at end of file +} From af969728e2c9919e25a67445084cb4f9349a1bd6 Mon Sep 17 00:00:00 2001 From: Nasreddine Bencherchali <8741929+nasbench@users.noreply.github.com> Date: Sun, 4 Aug 2024 19:15:53 +0200 Subject: [PATCH 03/31] Update appendix_tags.md --- appendix/appendix_tags.md | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/appendix/appendix_tags.md b/appendix/appendix_tags.md index c31cad2..1b0977d 100644 --- a/appendix/appendix_tags.md +++ b/appendix/appendix_tags.md @@ -78,13 +78,23 @@ Use the CVE tag from the [mitre](https://cve.mitre.org) in lower case separated All TLP levels defined by the [FIRST TLP-SIG](https://www.first.org/tlp/) in lower case. Example tag: `tlp.amber`. +The following tags are currently supported: + +* `tlp.red` +* `tlp.amber` +* `tlp.amber-strict` +* `tlp.green` +* `tlp.clear` + ### namespace: detection Use the detection tag to indicate the type of a rule. Example tag: `detection.threat-hunting`. -* dfir -* emerging-threats -* threat-hunting +The following tags are currently supported: + +* `detection.dfir` +* `detection.emerging-threats` +* `detection.threat-hunting` ## History * 2024-08-12 Tags V2.0.0 From 0a14ddb607a95fa8e6601ef7a2b6f34ef0635625 Mon Sep 17 00:00:00 2001 From: Nasreddine Bencherchali <8741929+nasbench@users.noreply.github.com> Date: Sun, 4 Aug 2024 19:27:14 +0200 Subject: [PATCH 04/31] remove config --- _config.yml | 46 -------------------------- json-schema/detection-rule-schema.json | 2 +- specification/sigma_rules.md | 4 +-- 3 files changed, 3 insertions(+), 49 deletions(-) delete mode 100644 _config.yml diff --git a/_config.yml b/_config.yml deleted file mode 100644 index 94c42f2..0000000 --- a/_config.yml +++ /dev/null @@ -1,46 +0,0 @@ -title: Specs -description: All the specifications of Sigma format -show_downloads: false -color-scheme: auto -logo: /images/Sigma_0.3.png -favicon: true - -plugins: - - jekyll-sitemap - - jekyll-seo-tag - - jemoji - - jekyll-remote-theme - -remote_theme: BDHU/minimalist - -sidebar: - - name: Home - icon: - link: /sigma-specification/index.html - - name: Rules - icon: - link: /sigma-specification/Sigma_specification.html - - name: Tags - icon: - link: /sigma-specification/Tags_specification.html - - name: Taxonomy - icon: - link: /sigma-specification/Taxonomy_specification.html - - name: SigmaHQ Filename Normalisation - icon: - link: /sigma-specification/sigmahq/Sigmahq_filename_rule.html - - name: Github repository - icon: - link: https://github.com/SigmaHQ/sigma-specification - - name: SigmaHQ Rules - icon: - link: https://github.com/SigmaHQ/sigma - - name: PySigma Converter - icon: - link: https://github.com/SigmaHQ/pySigma - -# https://github.com/github/pages-gem/issues/399#issuecomment-301827749 -# When running locally, we run into the following error — -# GitHub Metadata: No GitHub API authentication could be found. Some fields may be missing or have incorrect data. -# Adding the following line to avoid the issue -github: [metadata] \ No newline at end of file diff --git a/json-schema/detection-rule-schema.json b/json-schema/detection-rule-schema.json index b2d7e63..17f7adc 100644 --- a/json-schema/detection-rule-schema.json +++ b/json-schema/detection-rule-schema.json @@ -34,7 +34,7 @@ "description": "The rule was derived from the referred rule or rules, which may remain active" }, { - "const": "obsoletes", + "const": "obsolete", "description": "The rule obsoletes the referred rule or rules, which aren't used anymore" }, { diff --git a/specification/sigma_rules.md b/specification/sigma_rules.md index 1bc7257..564cb33 100644 --- a/specification/sigma_rules.md +++ b/specification/sigma_rules.md @@ -180,13 +180,13 @@ related: - id: 08fbc97d-0a2f-491c-ae21-8ffcfd3174e9 type: derived - id: 929a690e-bef0-4204-a928-ef5e620d6fcc - type: obsoletes + type: obsolete ``` Currently the following types are defined: * `derived`: The rule was derived from the referred rule or rules, which may remain active. -* `obsoletes`: The rule obsoletes the referred rule or rules, which aren't used anymore. +* `obsolete`: The rule obsoletes the referred rule or rules, which aren't used anymore. * `merged`: The rule was merged from the referred rules. The rules may still exist and are in use. * `renamed`: The rule had previously the referred identifier or identifiers but was renamed for whatever reason, e.g. from a private naming scheme to UUIDs, to resolve collisions etc. It's not From 5372368102345f6e0e6f476f3bef4151b1b04fe1 Mon Sep 17 00:00:00 2001 From: Nasreddine Bencherchali <8741929+nasbench@users.noreply.github.com> Date: Sun, 4 Aug 2024 20:03:41 +0200 Subject: [PATCH 05/31] Update appendix_tags.md --- appendix/appendix_tags.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/appendix/appendix_tags.md b/appendix/appendix_tags.md index 1b0977d..fb41804 100644 --- a/appendix/appendix_tags.md +++ b/appendix/appendix_tags.md @@ -33,17 +33,17 @@ The following document defines the standardized tags that can be used to categor Tactics: -* initial_access: [Initial Access](https://attack.mitre.org/tactics/TA0001/) +* initial-access: [Initial Access](https://attack.mitre.org/tactics/TA0001/) * execution: [Execution](https://attack.mitre.org/tactics/TA0002/) * persistence: [Persistence](https://attack.mitre.org/tactics/TA0003/) -* privilege_escalation: [Privilege Escalation](https://attack.mitre.org/tactics/TA0004/) -* defense_evasion: [Defense Evasion](https://attack.mitre.org/tactics/TA0005/) -* credential_access: [Credential Access](https://attack.mitre.org/tactics/TA0006/) +* privilege-escalation: [Privilege Escalation](https://attack.mitre.org/tactics/TA0004/) +* defense-evasion: [Defense Evasion](https://attack.mitre.org/tactics/TA0005/) +* credential-access: [Credential Access](https://attack.mitre.org/tactics/TA0006/) * discovery: [Discovery](https://attack.mitre.org/tactics/TA0007/) -* lateral_movement: [Lateral_Movement](https://attack.mitre.org/tactics/TA0008/) +* lateral-movement: [Lateral_Movement](https://attack.mitre.org/tactics/TA0008/) * collection: [Collection](https://attack.mitre.org/tactics/TA0009/) * exfiltration: [Exfiltration](https://attack.mitre.org/tactics/TA0010/) -* command_and_control: [Command and Control](https://attack.mitre.org/tactics/TA0011/) +* command-and-control: [Command and Control](https://attack.mitre.org/tactics/TA0011/) * impact: [Impact](https://attack.mitre.org/tactics/TA0040/) ### Namespace: car From 050b0d4d74f5ab01d5ff9deec8fe868372798180 Mon Sep 17 00:00:00 2001 From: Nasreddine Bencherchali <8741929+nasbench@users.noreply.github.com> Date: Sun, 4 Aug 2024 20:05:49 +0200 Subject: [PATCH 06/31] typo fixes --- sigmahq/sigmahq_conventions.md | 4 ++-- specification/sigma_rules.md | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/sigmahq/sigmahq_conventions.md b/sigmahq/sigmahq_conventions.md index d221000..7e9ccd5 100644 --- a/sigmahq/sigmahq_conventions.md +++ b/sigmahq/sigmahq_conventions.md @@ -77,7 +77,7 @@ All newly created rules must start with a status of `experimental` ## Description - All rule descriptions must explain what the rule detects. A best practice therefore is to start with the word `Detects` -- If a description text is too long or it's expressing multiple ideas. It's advised to use the pipe symbole `|` to signify a multiline string. Example: +- If a description text is too long or it's expressing multiple ideas. It's advised to use the pipe symbol `|` to signify a multiline string. Example: ```yml description: | @@ -88,7 +88,7 @@ description: | ## References - All rules must provide a public reference, if possible. -- References to the MITRE ATT&CK website are not allowed. Instead they shloud be expressed as tags using the appropriate MITRE tags. +- References to the MITRE ATT&CK website are not allowed. Instead they should be expressed as tags using the appropriate MITRE tags. - References to git-based platforms such as Github or Gitlab must be provided as permalinks instead of main or master branch links. This is to avoid any future confusion in the intended reference in case the maintainers of said branches introduce new changes. ## Detection diff --git a/specification/sigma_rules.md b/specification/sigma_rules.md index 564cb33..d152d07 100644 --- a/specification/sigma_rules.md +++ b/specification/sigma_rules.md @@ -32,7 +32,7 @@ - [Maps](#maps) - [Field Usage](#field-usage) - [Special Field Values](#special-field-values) - - [Field Existance](#field-existance) + - [Field Existance](#field-existence) - [Value Modifiers](#value-modifiers) - [Modifier Types](#modifier-types) - [Placeholders](#placeholders) @@ -512,7 +512,7 @@ condition: selection and not filter ``` -### Field Existance +### Field Existence In some case a field can be optional in the event. You can use the `exists` modifiers to check it. @@ -624,7 +624,7 @@ The condition is the most complex part of the specification and will be subject - 1/all of them Logical OR (`1 of them`) or AND (`all of them`) across all defined search identifiers not starting with an underscore `_`. The search identifiers - themselves are logically linked with their default behaviour for maps (AND) and lists (OR). + themselves are logically linked with their default behavior for maps (AND) and lists (OR). The usage of `all of them` is discouraged, as it prevents the possibility of downstream users of a rule to generically filter unwanted matches. See `all of {search-identifier-pattern}` in the next section as the preferred method. @@ -695,7 +695,7 @@ The level field contains one of five string values. It describes the criticality **Use:** optional -A Sigma rule can be categorised with tags. Tags should generally follow this syntax: +A Sigma rule can be categorized with tags. Tags should generally follow this syntax: * Character set: lower-case letters, numerals, underscores and hyphens * no spaces From d66bdc17ff5198deaeebe1b12d1b9cfc521b1b32 Mon Sep 17 00:00:00 2001 From: Nasreddine Bencherchali <8741929+nasbench@users.noreply.github.com> Date: Sun, 4 Aug 2024 20:29:07 +0200 Subject: [PATCH 07/31] rename files --- ...difiers.md => sigma-modifiers-appendix.md} | 0 ...ppendix_tags.md => sigma-tags-appendix.md} | 0 ...taxonomy.md => sigma-taxonomy-appendix.md} | 0 ...ma.json => sigma-correlations-schema.json} | 0 ....json => sigma-detection-rule-schema.json} | 0 ...-schema.json => sigma-filters-schema.json} | 0 ...rule.md => sigmahq_filename_convention.md} | 0 ...ventions.md => sigmahq_rule_convention.md} | 11 +- ...le_rule.md => sigmahq_title_convention.md} | 196 +++++++++--------- ... sigma-correlation-rules-specification.md} | 0 ..._rules.md => sigma-rules-specification.md} | 0 ...lter.md => sigma_filters-specification.md} | 0 version_2_changes.md => version-2-changes.md | 0 13 files changed, 106 insertions(+), 101 deletions(-) rename appendix/{appendix_modifiers.md => sigma-modifiers-appendix.md} (100%) rename appendix/{appendix_tags.md => sigma-tags-appendix.md} (100%) rename appendix/{appendix_taxonomy.md => sigma-taxonomy-appendix.md} (100%) rename json-schema/{meta-rule-schema.json => sigma-correlations-schema.json} (100%) rename json-schema/{detection-rule-schema.json => sigma-detection-rule-schema.json} (100%) rename json-schema/{meta-filter-schema.json => sigma-filters-schema.json} (100%) rename sigmahq/{Sigmahq_filename_rule.md => sigmahq_filename_convention.md} (100%) rename sigmahq/{sigmahq_conventions.md => sigmahq_rule_convention.md} (95%) rename sigmahq/{sigmahq_title_rule.md => sigmahq_title_convention.md} (97%) rename specification/{sigma_meta_rules.md => sigma-correlation-rules-specification.md} (100%) rename specification/{sigma_rules.md => sigma-rules-specification.md} (100%) rename specification/{sigma_meta_filter.md => sigma_filters-specification.md} (100%) rename version_2_changes.md => version-2-changes.md (100%) diff --git a/appendix/appendix_modifiers.md b/appendix/sigma-modifiers-appendix.md similarity index 100% rename from appendix/appendix_modifiers.md rename to appendix/sigma-modifiers-appendix.md diff --git a/appendix/appendix_tags.md b/appendix/sigma-tags-appendix.md similarity index 100% rename from appendix/appendix_tags.md rename to appendix/sigma-tags-appendix.md diff --git a/appendix/appendix_taxonomy.md b/appendix/sigma-taxonomy-appendix.md similarity index 100% rename from appendix/appendix_taxonomy.md rename to appendix/sigma-taxonomy-appendix.md diff --git a/json-schema/meta-rule-schema.json b/json-schema/sigma-correlations-schema.json similarity index 100% rename from json-schema/meta-rule-schema.json rename to json-schema/sigma-correlations-schema.json diff --git a/json-schema/detection-rule-schema.json b/json-schema/sigma-detection-rule-schema.json similarity index 100% rename from json-schema/detection-rule-schema.json rename to json-schema/sigma-detection-rule-schema.json diff --git a/json-schema/meta-filter-schema.json b/json-schema/sigma-filters-schema.json similarity index 100% rename from json-schema/meta-filter-schema.json rename to json-schema/sigma-filters-schema.json diff --git a/sigmahq/Sigmahq_filename_rule.md b/sigmahq/sigmahq_filename_convention.md similarity index 100% rename from sigmahq/Sigmahq_filename_rule.md rename to sigmahq/sigmahq_filename_convention.md diff --git a/sigmahq/sigmahq_conventions.md b/sigmahq/sigmahq_rule_convention.md similarity index 95% rename from sigmahq/sigmahq_conventions.md rename to sigmahq/sigmahq_rule_convention.md index 7e9ccd5..b797355 100644 --- a/sigmahq/sigmahq_conventions.md +++ b/sigmahq/sigmahq_rule_convention.md @@ -1,7 +1,8 @@ # SigmaHQ Rule Conventions This document describes an additional set of rule conventions enforced by the SigmaHQ rule repository in order to ensure an easy to maintain rule base. -For the general Sigma specification please read the [Sigma_specification.md](../Sigma_specification.md). + +For the general Sigma rule specification please read see [this](/specification/sigma_rules.md) ## Summary @@ -116,7 +117,11 @@ detection: - '\example_3.exe' ``` -## False Postives +### Condition + + + +## False Positives - If the rule author expects false positives (found during testing or via external references), then it must be expressed as clear as possible. For example: @@ -131,4 +136,4 @@ falsepositives: Also please note the following -- Keywords such as `None`, `Pentest`, `Penetration Test`, `Red Team` are not accepted as valid values. +- Keywords such as `None`, `Pentest`, `Penetration Test`, `Red Team`, Etc, are not accepted as valid values. diff --git a/sigmahq/sigmahq_title_rule.md b/sigmahq/sigmahq_title_convention.md similarity index 97% rename from sigmahq/sigmahq_title_rule.md rename to sigmahq/sigmahq_title_convention.md index ddc88e8..c0a55d6 100644 --- a/sigmahq/sigmahq_title_rule.md +++ b/sigmahq/sigmahq_title_convention.md @@ -1,98 +1,98 @@ -# SigmaHQ Rule Conventions - -This document provides general guidelines and tips on how to write titles for sigma rules. - -Note that this is by no means an exhaustive list. It is meant to be a general guide for inspiration and to have an easily sharable resource for new contributors (e.g. a resource to link at in PR discussions). - -## Summary - -- [Summary](#summary) -- [Generality](#generality) -- [Structure](#structure) - - [Prefix (Optional)](#prefix-optional) - - [Suffix (Optional)](#suffix-optional) - - [Main Title](#main-title) - -## Generality - -Bearing in mind that the title is one of the first things that an analyst will see. It should therefore be used as a clue and be as clear as possible to guide the assessment of the alert. - -The title and level of the rule must be consistent - -## Structure - -Titles can be split with "-" : `Prefix - Main Title - Sufix` - -### Prefix (Optional) - -It is used to give a category, type of malware or name a threat actor. The choice depends highly on the type of rule. - -Examples: - -- HackTool -- PUA -- Remote Access Tool - -Specific wording example: - -- "ATP27 - " -- "ATP29 - " -- "UNC2452 - " -- "UNC4841 - " - -### Suffix (Optional) - -Sometimes the detections are duplicated across different `logsource`s with little changes to their logic. This is common in the case of Process Creation rules targeting the PowerShell process. Those rules are typically duplicated for the different PowerShell `logsource`s using ScriptBlockText to check for the same characteristics. A suffix in this case will be used to differentiate between the rules of the different `logsource`s. - -Example: - -```yaml -title: Invoke-Obfuscation Obfuscated IEX Invocation -title: Invoke-Obfuscation Obfuscated IEX Invocation - PowerShell -title: Invoke-Obfuscation Obfuscated IEX Invocation - PowerShell Module -title: Invoke-Obfuscation Obfuscated IEX Invocation - Security -title: Invoke-Obfuscation Obfuscated IEX Invocation - System -``` - -### Main Title - -The point of a description is to explain the alert in a meaningful way. - -The title does not need to use the terms "Detect" or "Detection". It doesn't have to be a sentence. A keyword style increases the information density. - -We use a simple formula to describe the alert. -Example: - -- "7Zip Compressing ..." -- "Add User to ..." -- "Bypass UAC Using ..." -- "Renamed xxx Execution" -- "UAC Bypass Using ..." - -Rules of level `informational` or `low` are not intended to be used to create alerts on their own. Their purpose is to conserve events or criteria of relevance, to be used in correlations or for ideas for threat hunting. A rule of those levels will by definition not create false positives as they should not be used for alerting. - -The title should therefore be general and should not indicate that the rule describes suspicious or malicious behavior. - -Example : `Net.exe Execution` - -`medium` rules can have environment dependent false positives and require a tuning/evaluation phase before deploying to production environments. - -Keywords used to indicate this: - -- "Potential " - -`high` rules requires a prompt review. - -Keywords used to indicate this: - -- "Suspicious " - -`critical` rules should be reviewed immediately -The title must therefore be precise and indicate the specific threat. - -Keywords used to indicate this: - -- "Malware" -- "Exploit" -- "... Attempt" -- " Activity" +# SigmaHQ Rule Conventions + +This document provides general guidelines and tips on how to write titles for sigma rules. + +Note that this is by no means an exhaustive list. It is meant to be a general guide for inspiration and to have an easily sharable resource for new contributors (e.g. a resource to link at in PR discussions). + +## Summary + +- [Summary](#summary) +- [Generality](#generality) +- [Structure](#structure) + - [Prefix (Optional)](#prefix-optional) + - [Suffix (Optional)](#suffix-optional) + - [Main Title](#main-title) + +## Generality + +Bearing in mind that the title is one of the first things that an analyst will see. It should therefore be used as a clue and be as clear as possible to guide the assessment of the alert. + +The title and level of the rule must be consistent + +## Structure + +Titles can be split with "-" : `Prefix - Main Title - Sufix` + +### Prefix (Optional) + +It is used to give a category, type of malware or name a threat actor. The choice depends highly on the type of rule. + +Examples: + +- HackTool +- PUA +- Remote Access Tool + +Specific wording example: + +- "ATP27 - " +- "ATP29 - " +- "UNC2452 - " +- "UNC4841 - " + +### Suffix (Optional) + +Sometimes the detections are duplicated across different `logsource`s with little changes to their logic. This is common in the case of Process Creation rules targeting the PowerShell process. Those rules are typically duplicated for the different PowerShell `logsource`s using ScriptBlockText to check for the same characteristics. A suffix in this case will be used to differentiate between the rules of the different `logsource`s. + +Example: + +```yaml +title: Invoke-Obfuscation Obfuscated IEX Invocation +title: Invoke-Obfuscation Obfuscated IEX Invocation - PowerShell +title: Invoke-Obfuscation Obfuscated IEX Invocation - PowerShell Module +title: Invoke-Obfuscation Obfuscated IEX Invocation - Security +title: Invoke-Obfuscation Obfuscated IEX Invocation - System +``` + +### Main Title + +The point of a description is to explain the alert in a meaningful way. + +The title does not need to use the terms "Detect" or "Detection". It doesn't have to be a sentence. A keyword style increases the information density. + +We use a simple formula to describe the alert. +Example: + +- "7Zip Compressing ..." +- "Add User to ..." +- "Bypass UAC Using ..." +- "Renamed xxx Execution" +- "UAC Bypass Using ..." + +Rules of level `informational` or `low` are not intended to be used to create alerts on their own. Their purpose is to conserve events or criteria of relevance, to be used in correlations or for ideas for threat hunting. A rule of those levels will by definition not create false positives as they should not be used for alerting. + +The title should therefore be general and should not indicate that the rule describes suspicious or malicious behavior. + +Example : `Net.exe Execution` + +`medium` rules can have environment dependent false positives and require a tuning/evaluation phase before deploying to production environments. + +Keywords used to indicate this: + +- "Potential " + +`high` rules requires a prompt review. + +Keywords used to indicate this: + +- "Suspicious " + +`critical` rules should be reviewed immediately +The title must therefore be precise and indicate the specific threat. + +Keywords used to indicate this: + +- "Malware" +- "Exploit" +- "... Attempt" +- " Activity" diff --git a/specification/sigma_meta_rules.md b/specification/sigma-correlation-rules-specification.md similarity index 100% rename from specification/sigma_meta_rules.md rename to specification/sigma-correlation-rules-specification.md diff --git a/specification/sigma_rules.md b/specification/sigma-rules-specification.md similarity index 100% rename from specification/sigma_rules.md rename to specification/sigma-rules-specification.md diff --git a/specification/sigma_meta_filter.md b/specification/sigma_filters-specification.md similarity index 100% rename from specification/sigma_meta_filter.md rename to specification/sigma_filters-specification.md diff --git a/version_2_changes.md b/version-2-changes.md similarity index 100% rename from version_2_changes.md rename to version-2-changes.md From 85e93a500cc4a02a5c635ae7bc386550132e38d5 Mon Sep 17 00:00:00 2001 From: Nasreddine Bencherchali <8741929+nasbench@users.noreply.github.com> Date: Mon, 5 Aug 2024 00:45:07 +0200 Subject: [PATCH 08/31] updates --- README.md | 28 ++++++++++++++++++++----- images/Sigma_0.3.png | Bin 27681 -> 0 bytes images/sigma_logo_dark.png | Bin 0 -> 97205 bytes images/sigma_logo_light.png | Bin 0 -> 70358 bytes sigmahq/sigmahq_filename_convention.md | 3 +-- sigmahq/sigmahq_rule_convention.md | 7 +++++-- sigmahq/sigmahq_title_convention.md | 6 +++--- 7 files changed, 32 insertions(+), 12 deletions(-) delete mode 100644 images/Sigma_0.3.png create mode 100644 images/sigma_logo_dark.png create mode 100644 images/sigma_logo_light.png diff --git a/README.md b/README.md index 8e175c8..3e78cd8 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,26 @@ -# Sigma-Specification - -This repository is used to maintain the specification for the Sigma format. - -[Web version](https://sigmahq.github.io/sigma-specification/) +# Sigma Specification - Generic Signature Format for SIEM Systems + + +

+
+ + + Sigma Logo + +

+
+
+ +

+Sigma Official Badge GitHub Repo stars +GitHub all releases +
+ +Open Source Security Index - Fastest Growing Open Source Security Projects + +

+ +Welcome to the Sigma specification repository ## Version Management diff --git a/images/Sigma_0.3.png b/images/Sigma_0.3.png deleted file mode 100644 index 0bd0db1432a8091d6825d417ea0d2141271d08fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27681 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 jKDj0Sc~uJ0&$0v{o$|a)QWbb2U{=Z*U zS5I|M_e}Rp&+KfrYPYAWUcGwt>Q&XNSJlygzI;nOwk>v}B@nrx1U8aF0d0c~#D9-pj0f+z zAu=!VsoNB_N}yuppn<%IOs04;V#6rp-K+Jy3q*d}G%-9dC}AGl1Og8q^pc8vCXkIK zQAPsUGI63*i?D&<%I8ELSNdlw#Mtn#7$cGX{&J*j+ys|EXhZQg64^isIoU{3Xdt88EBB~*`E=EyY8mJ4Y}K4ry*jlm`PZ7 zEomejD_4sx&pum`U{VO_Oj`V7_6~s!IjKA>o#+xMX(;B9qwSF>jU=7Ph>osqk!@{7 z?giK|c`?}6C&orb%5sxVr$zdPtA!XCfSuDP3isZN--tF>vDhMLL}kSh^SdqmyeXoEf3PbX{=+w9zx61?%2+J280T z(Ow#$wRz(;9{xfJ*oeAIphTnS9BG&2b7P^6gc?MAWT6;JXGJF4hBm@Fb(#siTwdW% zx*!HlKqJVHiNb|TWy8^V=zHJu&k0ZijWje#nm!$s_#ImE8zA~Qhj1Ev%QhX95pdl& z;MI?*pv;>L<`&-6CX`Pe6`Q(fsTd8I*|fB^iTr6NLIbqOiq(xItZd2{X2Tm5xu0B$ z7Uas`O+w8yyyzIERg8v`)H1(W>29WmC#WHqX@cU7niU?Fo;YwX3yYuZaM@61>^Ed(xs3v?e`ej3baj>*lc-2sXW-A;Xs1>9Zsba{6)a6h$a>{~Yc80I>lFOA5 zY`_xmo~CKA*0o>X-Ifp#r*SIXsfrx;SS8%BcufHJU-)qV+rxSSy{t%;b0vXcr z1}Cr3Fx=a<--wr94L9!w&MAcJu;bsX!?+Kb@dg~CD>}eioVb}9YU0NA`x*-PgZdwB z(Rmcf(Kab+l9G;DM6BpzV^NnMH8;kmMy`zf(KUxDu$qZD1R~Jl>UPzxQsqX-za;N! z(r6;yhQf9NS&j^rma(I|2R19TfiWY|MB?95uvNTSlSYW5iBH~0!J)+ndU_qo8cB_t z>FM_ioOzfID31^?qI;h&ttXioN53c17x3fiu!#oVJ$9HGSI(cFF>~IRG=l1Gv{6bs zUJJC0Y$Rn_)s!mT)yl0Oi-vBc8I(UwlyDgVOEvDV_$V|rP7rOtcGK~d?!dj-hx4>A zTyxOJHk9W`z_el?E&j&khDviRHye!RG0>VIQ(HdKzvatP2gaWjOvqV5h%Hn4bs z(prJB$p9&Q?LhIJCRGa84A$t8W7sP6qmB{Bu*w@m(rF1WKdv~{*Ivb5N!R7n6dP|dB$X7vTJ^ ze+a5jU9Pxy_EIwqX`2plAHh|xp~uX+VSaBzk%LZ3^c{C(AOqaE#D|64et^~zh!X_V zjihtsHDUx?DE*FmSh&1jm-(@gnOT{pU!(XNfQAR%E8!wOxVHrnOBjZ-ovKN~zXQvv z!`0q>4FzPlR)RH-Y`~%$Gs*w>Qn~$ro2x74Pn!gI+^*2M0z2fM3%0`wA38}k6tkZu zHSAQXP(yIoJr&Q9Hl3MDL9lnBP`J~C*W2&o<7aFfbjbIqB=VLGWz(w)?#ze9PGOlo zkID;j%scnvU&t*3)GllY)EJT{HVk=j!xDGukBJ<%7Njm-7TQRrOxqrf#Cd*X*e5}G zR}0gXhxCE3vO4j{)Jor1S+lF9S8Y09{+i6TA#fcZ>F)N1lKm*C;MOHqh=Jblp|-uF zLyUg#c&UNVyyU+#kCu(6_0p@wV1JqPotQRD zeiBZc3r?b$oF&he1)DDUd4jFl=4GP$3#Qm?8oLaR7Ick&$_DdFBi-&(_dLST@&2K`(Y!1gRR>!@2Jyg^fliY?vHexNIIA zf+94M_Rg+iBashyiu5N!BXJ6SsayCE&(_jNSiE8lIfXTcAZiEBaJYpr_0wfyOg`NW zkxE4HlR*`TFD6muV99r05F1ucE=e)A#jD$WfN30Gk-VL2R zPiYX@K)7+qo2_jmKEX9%&|6~$gQbmy$_0kLoC>4CIQN#*KQ3C|IvWNr7vV6Lp)ri! zd$$-p@2kp4rL99d1dYS5MTl=338m2dF0`SLb?jC76>9k1CB@J)8{_W5VWW`KWs=to z#DhVT_pHquR$btQCLfx+Y%Qm;(iIA+<8NIw>k7iwES#M(CCtwzsAS?KG57d2qz52v}RlwPbN+rKj{C{U1$qRxM{=c_Yhv9UEGGiX5it`Amhr~ zfGKaIwMaR^m5cLNfG&tmW5#Pg{2-CjkLhf1;2K!FkB~<4oar5Ca2+A0E1N?R!as>2%sP3uk?q=nOl_ zwmAO17%s(Ecm{q6jzdS%M1_C+&}D0vXqcuMR2Ia!@5bD^aL%Ji*E`1%1epJ9oJC8V0$ zQvj`4AlqPKiEG@EV>OiW8U%xl`j1tp%^O$8;vp7si=3DQB2`jw1Az@MZ7kl|LU5NY zMFL|nXb&TfC9ZKnuGmmY8;NQdatR;Le|Yb_>{>C14NiP_xYF~VxTWN>|344hu_B*w z>011F5-2-8_BRqXf&#W3@BtwkhdL#)AbOvBE?%xNuv_ue*}CzUKxj|(HWH;p_~5VO z(kn!7Z|QqE^(xB42kwa7Qz;&EVBI)MAW)-t8i~{**kXX~1w7Kck&UEl3f_3Ijbt2~ zM=|RXjpAt}G*7t?g}do5xFm7=qsT_7uV?CZ;@&s3l<-%IX(5e}fJdXun7QDQ;&QRk zNPbklk-***t?eD6wWE`dB}EE{?u?BLivb)+jMi1Q9Nl>NYw)V&BE^p`;L6{3FO*1H z+s zU5$;^!Hr}azPQC5`j0$}S1wxRj{OWaOv@ue<-G+56}KV|uVs8_q2P;NVXl4oHP9kx zWN2(^KW& zyZ-EXUlIK{jhgS|$ldgMvoyybDgs&QtaxmLL>%!3PI$jy;|g*Em_;$q;;603U`}5UPpByP=Lou}pgeEsp3%s5Y%Gi4gc!6Ra%4_rXxGmSon_d=m(DrOf|p*2B}qy`hs!&k3i&jz#nUL3~wdQjMIMJfq0~W z{D2uZ8U4Q6RtsxwOM_qRA6htH4kZv^6|&+`#M2-#6lF_~C(VuWpdRG!pHRREooA$Zi$A`aa2CVPgE}GE zpshfg!S6bIdc+7S8RH0|s%a>)mrA>(YnyGvi@wjYC=pN&ysD$`=h+v2r7!FT(N-3_ z0mGv!#%WAO4CPdK6aWuR6JPt8$V~5tn_=SWFwTKvW_i&=0oGV^Rm5 zr;)_dNK6ulS2be-1N`Oi%Ef`yzJ79OINSPR{%{4FesoWm4W;N%z7)RV735?ikv+Y( z-i`q%hePhq}yEt^sv_a{@;!%bt1Mtr^@wGnyFE+^2P}mJRFI*Bx z1er>05EvN)D7#w7%qIq!$fy(+kYOp8I^AG!cPqXW%L@VS4-814R&nw)(1N{wyqMvg z{8W+t%YK*>uGtv(G!$tcgdE8g!az(gnhCU4&!tzDq*LvXb(*}!fdD(5N;t42V+D8` z4Ip^TElqH?27%_|+TSd9qw%|5@G0LXs)a}2623He0_h>wKzJM=Nw7ZpdtWR`CTBuu zEoL)GdS5LBb|*4+v!EmmMqIc7n=oD!WdzKYPA38Mm9wfcc{B>EX>j%B!Gu&T2ggN) zqLFapQ_ypt&MDhSW4Tz3QHfTM=V+OGV^X+T8o3Cm?V;II+ZEn6KJ-+%m(Xd~>@$#!hyTb3XM`g+X}aQD&v zusiVIXT+7NMnr;+si_R~`gqO!*g*Wb0MzD(#SMFh9;*J371v&VNfax#YKn~YlsHZ{ z5}w>NCI+^Y%2u9~?XJi%V*N`ht0S+{xm9NmYV=I#Y1mKPdU~FnI4{D&*QoHWLY&94^Jj4 z{A#F?ds=cMp^b!%Ql00+9@k_hLrwKjO(jPrVZf^2_8aK&?;>j?<0DEm% zB`{8B6^5hZC(7OJWhHx3FuZhJyj=7S1uklO%BT9HCPj_ni4F{8ms~6a&Uz~jI|^;0 zG?KtVl>#qDL-}wic;Z1!Rq$QSJ_;v?gF&1uJ!RT74Gz7tVXzaaD-_L*NPqeak&=x> zA0w)wCPE`2r%|*7ap1O!M#3_?4F#3-DFU=ZA>}T%ffGI;rc4cbdaW^|-!s{)$ej5> zkr^42c93_-DttCNrSZp<&7jQB_;Z*n2YS44shUF&fznuo(aPy9w@2o9kLfrx^=vy$ z44inh(?GnM1mt?rP@8F$GiC|5e)N)t!XlS877i=NSU-{1;J`y05m)A9_k*EXnRNnd!JAF4f(lFjNT&LBrxl7mGAW{W)d!B}CeDjX9 z|3v(&Ojwwo`Dj|EKMdaw*L)JL>G*M~4Qqb9&w6~+Sea-nn*g3(jAG>@#3gqLbmqdm zxgvHw#bl0er=F);ZomEZ_=ZjirOE(Z$S}+xp;k(RRmKC>EI#lLq^WVk4)N9b5|4hJ zpAG}`H^5%UI8BRwI)rb-?I8M@PRBcG*8w)0aoTCxI_%(;Zv7Ui} z7EEx|!OHHeMZ%v|r+#JSz=6`M^|$k#1lh+iM=ITvnrypmt_s2_BL(X7P@F ztj>exe)PeAl&|^&@X7TM0}K2_&LWrq5h3 z4zByYEbqow}`}V(1zV+3^lQig&+O zEys>GD>i>Cf$@|;Rjc=!;o^EoSWgFB{`1GHJh+vm6Z^LFIKy~opdZ^=xQ6PbL&z{b z)*+tZku}Zh(l~qBIx7Jy0el;?8X*)FNlXqcU{{gv+aC>i@~yQB~aXq7DX136p5igs6;wetj5vTIJ!V-nJC#z7#wc#>)CF5 zanI{AiA)_QOu;RqRstash}03L@3-K1Y<{{dkcMX}!?W{q@_pmJEiZ_?oW=yEn()Am z?rw4a{#}veH{lCw3t%M>Q34e^M7UMrOl_n^qF(LcktzKCBv(r&l9R6*kzqp`x&#FA zb)*aq$!u@$6#1dylm7OW?v)d%e3n-$fksKd=t8AghA9*ML`J2P6x&dXs#l0Z3YQ*(;DkA(hA~qOTut>UV`peaV<_c z-V%GwhG&AMm;YQ8{`x2R7Cp2}iBgfma(*Vtdn&H%tj9{A0TL)tC^Pn*_f{N5Am69; z=C73rrZ-q8>0EgY&SiVvwHCa%!J!r$8kl|TQ8Dt(FB(cjcU(t_6nkwj5f`eg6s2R} zm&!#=y{KHeF1sF!!Ovq&C;IWGoZ4isxl$DF_?=;`FvAiti9)I{WApmen_YIA$O9$& z7}$A543<{HB0DK6KIro;MfU}LBi&x0Q}ag|40_f(!6Z=n*f@eR>A37#vE|w5Z{+gy z(ZV;rB=V0xDn@y13O{R%J3FeHS(J9z%5qd`-1K;3RurI|xTXXDz)45r``kIvO~rx( zDWf=P<;*``6mG{G(l`vAITUbUnaaaUAyr86V25fL_Yz7dgid}xNbOlAxf7B8L?i9) zPz?Vt!q#gg5J>`_4iUU&; z`~t^WEap=uZlLSKx7!g@DY1;_w>?G{Eiibdm^`AAc$q@sHTP{?{ZJ&Lbwq+PC|9t4 zWIY24;$LI|sPD(^TKdblG2px3=O}|`qpSox5^zt>305Yu0m^9&NAC`NwK}RY;qKAw zr9YKNS@V=(b#6IN_fu;n9xf6M(CXm@#l>|ITmv6E8OKmM+xH{nHPqKD#5UVP{b0Jp zz8cb9gV&iNWRM_Am@>gArw2EMFY{Gis&M#M1N10@d%Hc6IDvZg3 zW;+#9k9+jt;GG|04eSKt$sIdE75V?xNY+tB`oJWh2~$)Af7iP-1&-2Iyi@UNe<@lh zze%a?{+EX2(9cF`xc7wMH4IE%%4GHpb^yNv zK1KkKtNaxp4|>^vsZ2OElnyD5FPAEy9RI7+@{Y8(mr4H&(nool^bsG8zauQaC#Um5 z_|>>VWg5Vzk7V+}?2I=Yvnw8llu&lLL>p-N)EC82#7}6nc6JJUQH9!(6L$WOyCVy3 zc_MO?!6LGHg)w4+aYBQf|AVZfjF|sZrayOqPF<~;u*S{KQBHJ-euCvA4rs)&D9Vx5 zaZiH&&N`s)fL#GUFXkEAbbuGgJHT&u((>b#LDmRfp;u)hUXTNg-GbmI3^@Np*c~B* zcqI&Yfqa^@lJchu+1xL}i0QS1wte@fWW&%r@Dz5-O8y&H22cK_0X21_N@+XyJ9v^@ zsys{6pq8-JzPZW~#AOl2Mx$L38rf%BGx2vRR>&r(p)(2jt&r3c4fGxW65|i_N|cEw zLlrQs7&H2GGZ5ql{b>6Yf)ZB&Lw>R3Sw$8Vlccd6_m*I+q5?sK2u2Bl>M2ExBtc}7 zfjLZoe@@%dyY33Il^NsF^@HE|B5+wh=7pf?3gRnfuvz?USV0c_T@-=GRw@9v*F?Z= zI10+u-pEXmU*MAnz<(N%k01-BVp7PTdxK)TiiGQoKy&Ht;5>9k!i4C#=rS3@Hhf3{ z-4-2}il}n`4bHx1D3yp(B=Q)A3zv%i7o)8M@wI@$1NTV_1q}!HU}iRLT=mu9nC66{ zEFZz;ap3gS5NZ5XL^CSM3_P(^iu(fW*2@c1{% zI+Bnt>Saz?3`K%R&CXxrwThukxb=Ro*NOpIN0qf(I+GTIryLI@0$t0?wNOgx1TPFt zdLFU?3rR0z}aC(CV{Hp{@75E7g%{cD+h2^Dj5Rb*Y zt=e4|R65kd`XIO;2088Hhc!CPAvnZ2HVQX};Tk;c_{fi3$FR*kb4=~^aP-rmx=(M=DMmQL2Jzv*Hu!jVgJzlvG)&Zq=ns6b2tkzTr>dC1 z;gh3##=Fpx(XbA}>Sr5Z=Sq)^;kd(T@JC}gH#REr=l?`>Ty_nftgwUQ!rl%l7o}LD zb@KAL6{j|&E%V5Y%JW%rKfYA-zwko&L#~-C$5#Y{VDwDv%rp`2yjjK08 z=epeOl>r_wANI)W(g?JxDm&@YA@OTt5I9+-k{ili7bD$-LPZ%{Lm18lRG$ZgbkWu% zLNZ7S?5c<0-LlArBR~Hz4baCsZi%r-OGep#dbXV=`cF7YDknLea67Cyt#H{1D4(N% zXz1XN4id!=UkgxI`?A%de+$m9jp4X9l)2^#ykY!X@CHS~7Z_dMe1r<(DlEhv>w`8; z5b~G{W^SpLA$HoRY1x|nxN*|^(?$&k<;%3?@~$S0$xl%Fa{2kvK7;Ty6Gnff^g((0 zX_#S6FDRXkGx6)?_cWlWN~QaX8^nvxP);Rnsv@7+wpP*A)q|;pQZA6J(Sc=GE}`M5 z4{8vlOnAqYJ?VoY^Y(X%0lv&v+P+KZ_yJvbt9WQ3PHK~igzpXMY0lIlcT* z1>$L>i$AheAZnwllR#fk1^qy5UL%kyI*Dx$x1fvRFDV zzd`iz#CtBfHj~2?rmJU)7(Dp{FpZrvQlv#*n^dApwShaik3~a2GfR#Xy1cG~&53{Vb0!u~x z^KK{?PJ!@wijIp{V$pO9);;ub06yYL1fd{WF`enamU(`LLn;utCc^0q*GIH9!puU8 z{4Az7+b6+}rC}v7StStKyMhE#Ua>HRPr1lx5n;4ol(K36`gie?-m9^=Iw(eYh>@H! z0jH9KQb3RUTT2lrJKlIh?S0^m>&BLsHYI9}g9O zU~5`zox5zU7N9I*}-UApcDoYYeC zxs80ju;VWm&w1KUuNlL-j6vl~l3$%q5Y2k$9h7IaFnI)I+{9*QEU#Q>HITaM=+Y~d zi&QaAww}IFffYqTlXSF4g*3%zlkXyQ;`($W?B8Xq<@UF~om;P^BOI5j95md2kJ?Z{ zYaMWBndx=jCM?vS&mXX6@qvHP@tQw|qw-*;h5uosdzFSIb=PGwc{2S;7E*IyW!!nx@;^_z{^U2yeIj$0t;1O$1(}cTgmL6T{*bN@X}ZjG znpP&0c}*^#e+A6g-!Y!}?^${0OIt_9OPyzkZHF(pbHAGx&)LX$oen(xam~UxZ$p@9 zd{61>TNlka#)~7y(ye1J&5vZYg>)b2zn1j$^GW)dhV(UUEz`Nn?z|DC-^cj>40p8d z)H<|UTVX{U(_&1m0be{*Wj@nr9Qxxr%?s!~i*jyX42vA-%D!yCNdCVV&|kRaS! zI3@=t0lvb>pHqgjF#2CW7?uH!zje{9E9lqh$oITe_q7fTJSPvhVmPQyYE~%BR6A3- z5H@|k`R9T0PwV)4-eKqbbn}K)r`I!&W}}Tt-QVO1mH%&qU#elObnOqiAGUn$S$;Sg zpJyZ4nnknLg6_abVT45%-@p zC(hmpuqWYX)UZ}2hb+0{;3977ttK7hu>f($%w4|rooc=zx*$sMm4OQ#=0-s{aeF>pv_0eQpq8^GUHLe>F<)rnDtE1^u}OP{3gl(*zP z9$(&Wb_RT!2*U^6 zF4B~Am#>p(w=SIh^)UQOaL}1aWkNh{_2@Kgz}g?>{>#M&{tonr`UKLxJSfeYlV|_0 zgF`DpD->5war5-&0cEm@uyi4Ff9IIK>LGVoopvTu>c%`*&N);A*8oIHzl!d=U* z%;*ntbyX-q8JaLyG@nD5mvvQ0fE|IAt}EUo5v7yFNvHE-9#LqUykJ}M?~#`WVcXtOL|vj5Y@=0V@GYVB8c6)=vV@ ziAc6uQjc!haP_Xq(zMj91gr$YB+yWWvgdyDFU53aaTqi8gctJZH*UV`s`d5E!_u}A znCud0h(dui!cA8tkG94`_;@CEY1QP2=P$b+!c|bH7C=KGg zf6SK$WHK3+UVk_m)mpHyr~KT%-*e-aYoTG&S_w>c2_&LWqFE(S66zl^r-$l8!&I1X zb*urlG4K64kv--l(elb&MG9x25VctyKdye)-q=ZFot3~Omq5*1?<*@4LupXhjv|qY z!#Q{GBPaqk+9KRUW_8?;ET~e)-_&r*}cuw@ygofYbDTB5~y0C z?7r{39kS`vQ{_uTi-Q`FIp~!2M5IH@UYk-zw=X`TC>LT<6zcV z30MgTQI$fOzTdoq@%Ha;!v$zqC0dcl)9?$T^$TAUsaL-S=gjtrxL+U)&u{!U<}>$eh^>=KAHx|Vx1 zEG-hbRsv<>e3rCr+0|lT%hor&(TydY&WN7vwkzEITKjlM%f#NT1So-u7D~7>QICT8 zNLYP19gl;z*+yh9xqPctCVZmPijRzS^z=Mnm5J>@Rsy9GD7z>-W54-9XGbb3a@nM) zObS!FMdthqu&-pWG?ylZ;E}J~CL>ui>@^fmfe??+I*69Gc3f@Zp4VjzEC&W&Bw5<=)C;oXj;xF@RrT!h)B1# ziaheokBx~juFYUGTpsH+0M+C=u)%Kls^ubuUAh9a1@5U)EFvS1{FWC*;n9b=6;F(S zw^4p4**Yr$D}hi6gpRi5raD|VQ5QNi)=gS}afKKh;J1vba~%2GySl{ibythAYp;?- zq~%a@LZ#9k>Pb>T^jvYH+^Ro3Fo1<%{h6k?Jfy@n+ix$nESQT8YH6W%z4D8PS~R%J zfBvLIHlKR!{r6mZU))?QzLmgakU*e?viIKeT5}<#mlgqkxN!}gxP8Sc(f`7WA=u$y z_Se?-4$;=pCHjs(LJY_bj1Qt?!Bh2M`K4kH0Y{zSLu~{XMBfQVNyXN(=tClN;5)=% zZ!cGLJZUNi3gG{Fk=kwtk>Z_J2o;OcB1mrV0UmQ1@iz&qOxR*r2~0W(pj(%^Q0s)2 z3ICj@Ih~hXC$>Dxv!>&@ET%PGQ>TjFV~>!Qfa=8TxXKFfcVd^i)Mn0-hr^3hZ1h9H zbzgS9=*O1+9HvNdT^C;P8#?&|;3p%klp-&r?t1tu4CaaPyRW1!-F_=LE%0ciRd^Z zVQM%9*BV?{esUc@0eW~XthtnYo?2+yv|EP+N)!q{UHj{xqDkYxQ6{tovI|ZW`CQn< zD1ZVwWY4zSijhV566AlLl!`zp5~U;na67MDzhDP8I-i%d{GRa za*XKg>JDHc97L-tJLes83WXm7kxHb*y|M(-BmngB?Q}l}OPq@yipwm-n-IQ9q=9GoPDMr`j*W>YU^hH=IfGOKv$M$Q`D=)U5H$kqurh-IJpk5nW|i6ARE-JxX5w%6K3ua%0N0;#o?%$6jH`Rt11xqT`JFiH6^Ltps98z*Q)LsdPW0g@S9S zKl(y!7Y-g8{`@B$%LEEUPDPkY9hHeL1he2EEAvc?!Lv^ltsU(;w&Fd9DILq(><&DJ zEf5_CrO{W3f8d--ZI{9 z-N32G!XR;;zR)s}ilhO`M3%x?PhqZ(QfZ5^H-+yBNvD-c^Xit>C6xvM${c>GUO)oi zcjJ;SAiAy~D8&@694^26OkFb$APxqe@G(KYB7Kt^c)#_fW$^rfY^nl**6VTIL!yRz z0sdHZT~+2W5;+!1YVXoC>_yIW2luwQYMXm0UMZv#k6u&5Sh$s)S(*#VVkkweA4F!0 zABTs*OMW7iOOyf%#IyqhM92kAU~ zBhB5o_VK0V69=C0tX;J)wE4(Z9}KEUFEz(P8I5`@0Xp#Luh*dS(kcOY*`d888xvBB zOj|~|+kO-I5pr$}8}?)q!cTZx5~+OQkj9iHG?&{$W12XEtsm^YJ1UD#Z`m;_epEcr zrF9glEKE8M4{nD>cwW@Bq*DcM{1@cV+Z;aMYx3Smf4D-Sn5j%8HwF1tZxqH_@#gU8 zWlMmntOI$M)14@(>xAQ2DcRPrB?oW5EOq8!w0Ebeg|@h~*wdS`;h`&na*We>gVNU% zRs(PUMcSPb<}L1seh>2pA0NeSRa{ykOdnr zTw6fYxPiz}jhR1LV|q7vwY)g#E^rCO^dS9y5t7V~fKv%2aDA;(qFUoQC;3(>5!QQg z{Up1Se`;Bp!i5YDskI7pWa*rn8{bHeo44b^B5@QaTYZ$zV-!*YQRs~$&Ja5Q+@s^j zgUp&tl;go!6E3+SO(SHy!psxAnj1E-zfu%~;oz9-0am82pS7PKYD5jOBaXFgITD~Tmz z0ImsBlC z{f<}R{P~t0A`N8XOAAS=hf2ZR_ zL5+-4jwa&Rke8Pu2AosF;t^NLQVB~c;pKSqCj{<|fZgPWk4HFIp}0LydE`@%2;9ki zCsZYl9%&wRqRPP|3Zgiw!`!;t+;W7aDdaNOg~c@zjt0fX6lFvWV(Spca%uSK;^6!H zK@63Ftt=B4H>zTJ!Qa9#qKJ#qypIh^4|!KxS3%??4D19BD#+{d&_s2J2v#V}$er?H zEhQJNBk~b(Q#tApqa0&n(Jd|2UQ~I)O11f}tNz_A*h zJZ>Ts@1(eC!tgE?;6faW~GNgNleE5yPSj3|tQ#hiM zPAZaSQ<4>G0*!bHF6n^!-wNm@(T!3nVDPk(%q^fq0;rG2SSJ-+xfevYEg@P*K%xo- z2MyMd)oMsfRl)~WB0c*cC=~91t?XLy&0^1dC(J~tOln*)&}ny4szqwWmq%rWjW;T8 zB|MOtpwg>Uviinr1%g~&5h17PN!D3}{6bM8DHJryPy%KIziF(k0m2h&m1ZW9{Z8(( zZxlqwhtD>qKjn$=n?SP65zAekT64srJWpul!aKO)qGPB-1C6m)Ae0Q{IKIswoVBKn zX%^*Bjex=xirbm^<-Bk-GgGd$WRE@uAjdM0DrJ1ylhPyP1AjP@fCnc{L<@15i2?9h%&pL`FjN>Q5B9efk(=_zabrL)`g2qHvCX`RGrf>}s^suNcrE{WFBwkW2ki{GrC z3QDD(Y=0^)adft=dff%(D>q2V0f6-tawiR~v{GFn$=rMI%DB5Jqhvp+a8NgR zVJeopI2QKAL!KJMvZFxCPEmogG$?JOVdWKy!%aHkl!xg2EGRp%ybz|HAQcQF8{(8@ zB7bR}95qi2^lgchv)q63-~$tG{RFb6kek`<62cshFxV+1&I6tRW%TfyU|?L|7mHht z5QV~F*%_sA??3OWI4mh-sP^S3Pmae?kzBXnbOW9S>Jz2Nm?!h+l|B6E$lpEY8Mq@~ z{{qc2WuZv(q_o_4Zc+9f3ZF>o8bn8XiWxL>hr{UkSQ#NaS&nzaT~jW;4Bf3F3bK1{ zA{7J*rSRDxhTU$2&Q-YQu2|Eafi1mKk)RsNiu3mKmf{*olBHK~d8P54-fstH!s=(Il94IVj$;X;I&L82caN2o zKnum`>~i`Ol}a2utxRZ@&=1Sxln;yE7rDkoEmPTLTU+JlQTc+S(j-y|;4 z5nU&bD{#una)y<(kSV+>BFTEA{iH$$X*R}k4(VSSLL=h479puaz>w=hh>G`(*dnct zqPN7CbfYTCU_1e=!?64j^^bD#Vd?4xFQZV@I)dz4=wQPi|A^oy9@X(hyxeZD7I}P= zr)a5AxsXDre4>(9c+wgHEk|i_P%c0fWG`MS+=HegP;9~4Nk2Z`uB;PBBq17Q^Iuj! z9D!urQP4R#-Kn;7mgNt$BOT0KmPkk>X!qlybR#zc;=>JvkRwY{n>IXilU>lv!mmy&QB%4_7u5I`PidX zf{TArsVFNbg%5OPf3^af*kUXrpnUC6l*JSJl_F(%1Kf`TVB-ctC)1rX+FOqiIAza` zfL1dKvPnC69TP(AF2>V^#GBw>n}LbyM^ULXtKE)pOEZ+)t*jX{=Lhs|qr<}D;8`ar zeET=fr$|{yuD^_(gRSq+J>yyds+~Af3(1AcN{C#jgtQ8xM=KQag%7wdTO|gt8#XR) z-P=r+UpM4O*3%rAsX%2LF6C#_hE=7&5N^i<%n_`He7QA0()&JP`5=AW5xqN|- zxvY56FPCy@Ox&RS7++)h_aJ?!5=5R4Ad5KXsk{^PIBntNMV`|fhfe3p zYeX+jSc|JnT5zEDz)44=SnB&hEFb?utdnoWD|O?s*>LEP^IkD>*Ka3BQYJCzCXO1` zxf9Q5oC%@|_jKy95-0L>IN<)a5@Ms`-4SKR%mp~fyKq5i#ztp%I&cPxVPq)Av_ca_ zTj$5q2S0hbNIlI(Ug$I3i6tkhJ8N`(r!B&N{!qcFJ01&Tze_(pGdeahqERE?`7yHg z7oNx04L{+2dl~Z{u;YrvL#x@X6A!aZ96N`$G4 ziX`=}Lq*3)AC&t`auLrr@#jw^Hf7p0EW{oK9m1)Oqu5Lyj6{X@p(&exe-k#>SXYY# zd=|z`)On=6E=b4e!MlR;w#p<(D&q&!T~~4dh4MH&0j4iIG-5E#P*aUD(XsM6(f9mw zHE~WQ!Y4NC@=4QUxOO(-e!o>H zeu<24*rQO$N<}M0u3bQ}KDpn+ijst-Y+c^ zt4vJU)Yo4|nN*#zRVG!7u5Jl~7G;CK8-mU*|C|NPG^Pr}3+Icrj?hQv@tLOLz@_%B zZ~<0@;}a@PL2F1VlM|yW6OkF+zLb)MG=l`JGHHfdDCMEVLLo}1m4Y}q-Jq4Cug*@9 z{lU+~a5amxrTo+dLQAA)+wDaE@!Y(IX%3a5{OA|gZkT1D7@opZ=OuMvXc7}mz*2b> z%4F9`EW)NPdXR;JrIPf^!nl?lkk*Q0sibgR!RSX9iMGxJEtRm$tAJn+$u9h$NX>eO7#iSf3AH@pH5iHDO=DezZw>SN%Bi8@;zP$Io_gl4A|LZ<=>eTbBI(zS`u2v%_TC}#0#TxnFEP!5h023+FMn4=e z%R|m5{89Kc7Gch^5_O~a`f#^cM3MFAB4Beg&{uh8DfC}Ti2lndUs9g9G>rkYbD@z*ts=;}m7vHNS`R9_7 zyZicA+|WGmIU8vcoftn;mv=B7dRgoSEWqdpY7_1G^&%*qa9kB*2+uq0vJVa7BiXS) zk$hGml3HX${2wfv5@tY|Qnvn4=g>9+jW3PC3USs(O>}vkHyf#rq_hb;;$oXYUey3T z00dv{ld+4dv40UqbTzROjC99&LiM_C5yl#{HMfSEodzymcTW!U~Pz6j<_=GU%w78Lp`tZ(^X*DCgd@fwEMVO6F7ey9B?ck}E z!pQn}^vLJ`GG-NIJWF*il$9~<@U;LF9VGtbV?^+I5)2W@_vcm|6UHWuPlv?`6zPJ9 zoXc3Q>83(61W2Tk0I8n@D92|A3Tr zNo<}C%j`&4f{H?VV|ZGp0&D~db6FhQo(sVh2$5^4Yf~KeCs)7D&_$Siue=SI^U!|X z-SGK&kk=nlqshUO!%zv4rF8Wt-_oIR-uuv7V5f-8c*wHn!b{?dj6^p+zB4w{#w#%l zq5JF~cSxS@aZYuMVsTq-ugS;r9u4~wb%#}wM6hGm$9e;urG8k`58UE+93O4ysp%Jg z(+BZP2tIvt=Dfgj@+8}PC{3FxEPEb&*())u%TeHMzzq^Uc~UKRXp=|m?)f`=y@v@2 zsmEPxxa#$h#6iy=JDe(Mo+uUo*M@#7vpbl5)2a%OScT5p%QXiwc%`iLL~rT;WWYqp zUE05AZLLa9yLle5!T%)%rcnt&?UWe=J-r|%m`va3>wYfOI>q(4@KvW3*^ZH?$a7jf zohfqD6I*xgW}KHIc{kIfNsuMK#h$1@B-e|}mM%(yNnctm6W&%uHK$GJS;>90@2^3@ z=@Dx$`wnEUS_hW>SeUn-T@XqhM$6Cl zMfYGD<&_2}*2rjUt2{O1H8w@!kVQ#jVN!FlQ|V*FWvOC19k$(Jp%N#?vC4xo>z|B&yc&qex&1>?3?A2a`O-tcg| z99~~dqX-}SJ77MTz9a}b-OVB4TU|2tf9`$0s9@+LzT+7J_Ty78_kV=*Kkx!xn*Zso zT@6!liKSi-W0VkD#^R-0=5385!WYOc&fDgW+{-}tUUw1o1$@X2v2p93I1fp0mBKN+*96u`DEQA!B)rk`@TuNj33wf`31S5!m5Q>`4SU@=QE}H)CamaM^q@f&N=?ssUK+8QJb0zw*UF#07-(WE%Jj1hE1S2-UnLg-i*_eKD z_JrU^HBo|XWX4U2Dh1F%sP?6BfIX5`>L#G65k83+2(e-7sf(8oDuzIZh~aF>X0`58 zf#Ur;)kK_S|3eH|UC3zfYV`WZp2X=76Uj+d#*r|8+ zk$98^;REueX8w-i6%Q}x;9M<);q|@4F?*wCrFV=fNtLMQBsl@G@?o~^m6Q~wt%RA% zM${jM9@Ynf&s%`KS!7LrSbiZ8CijT??A8i*-bREZ2-$?P<9cms>U=|LyapHQi{3UH zI(o~FA-Q}WdcLIH`=$@oV9$Q-|6XQF#q`n!#jd-IwrLN4P*dN4BHq`kv*^OK+^Lj69-hJLGB!G?Sj}Wlh^J$ z=OLft72Ni!>lcUiI zzp#7NDK^=>r!@Dinu-rhM!h99B2ZN)L>_YWi_geO+sERY9ZK9yA5aW}!+70KdgF`v z1i_oKyOi4Kt3)g)BL*Y*-2!r27=fq2QQDBUW#HY_Vr!z0$1QW>{)7(ZRQFcw{wYH5 zaGE_?_i8TIkoM5w75;Dy$Y$(lkzVpRT6QiiEB?D#dtKc`qYe8b?e^X7ym9~-7+2dA zX0EI&kI85j&zsXVZX2N-_uBC>K{1&*UiVHk!C$XAKg82c1ER&p4mrA&Y`-pn_RL%L zsntb5U+g&nXN7O#6;obTtqDUe+oe zD>a&R9uVaye9lkGg!c3czhs7`H2O?lH{=X=S53##-!8^@+!A+r&izC`M#rCf<}!WP zW0HSv>MROlu0gvE@i*eLVK)O+pd>hZxuVDkwBz zY?4q?(ICgN?KxlAf@BX|7q+H!OzG+sAspw6qdf7*1~i@?qW+^x_(z+d4nWlg=w$ib z1ashWxlqmrf0qvWPVPKO`kQyd*Ygt$M?*gcgi5AQ`uD$x6 z6pViI%d(eYjvS8qr~dnG9oK)|_~&zh+z*Dc)Q61E_~4zlo#;;IqA842-s)3_(s3@D z#jf08yZC-NlW9tK<*e$9JN~Z$$QX&>(9Dxa*T(n#1|tD?SUBP{SKNWpL`qH;>bR`_ z-#Ba=hol>pV)n=X7eq0Qz&ndEpt`PZygJ`@+mg702Z4T|gdCR3iv!gemYCw^?r@u7%i`zy zHfSfI+X;0#8>Wde@|JncKlF81jlE?!J6Bnt{WohegD;y2M7hF6Tvz-!m>i#YGB1C- z9*qMk9|$^v_A?|2sZn?^%BW!qEkH16>Zq~VeJgF#05bmE(-TKuOk78c1?0+;TFQTS_K)W8umT-EqV+S3lURExcQx$fmpaGB>f^Qo#_?yG8yI9 zD7lVvvt-(9+OM@-%_Y}xE4csfo*KY~N%2Zu9(^36S`5H4AVm+43c&#F1r}q7O~G?P z+3s`2Vi_9=hhRhy#wMNK}eAh`NIIjk@m9n}qFvCo~qGN3js96?8U0adl% z_?;siQJu7GpfE~^zYDkX1u7M4a%_{vT8>KhlP1{WbsV~+CBtZdjMx5~J%S=+iVc4L z!(6=4-aYQRDIBuyPid*#YR>N_VLxIvpch zj`EuhmlufV0`~;F{c)3v{~nA%zEmzb7}_7`c52QKS2=L?bvbFojk9#7QIk!izD)8nLSv+uY3F zrc5St_*Uy~QLrT-;(Z{xnADO`KG zO^gY)7AgWzgDv#Dx;Tx1hNsV%ocdo3jid=5e*3ARM$YV%9t{==_4)8w%mWQW1x<6E z-@J-OjAQq9Glwpiq_*#r?Wz>BGx8p)-_cuI0HVDW4)L zD5&*t%+N&s9QM#_>vhD8^cut+witlbdQI#XC`}V;1aWhB1iHTn7+oclj4vX#5fj6s zHVGHrxQ$WSuldeqf|d?~#NuQ~-`j7v%e4&EyZxJxUnwb#!Wf(&T`K&W^B4?6ysk8Q z2-@*_7n>~F53ozxb*PvB{^Kybx0}C`JW`xY8x>yzvc75s$FIe&o>RN)asgE|uSWsC z*ki^;AF zF`wPopc=yW(S-B4*p1KiiUiHkMi!d&rTBIP*DBU8N({lMB!&BhgBe;%iUg@r5oj1l zt0&^XC!fs@hc-VlAoYWRJ-H%9C4r=aW~zNNnr*1EWmNX~!n`D?(`Gmg0~2G~X*oz!<6gZ4b$yq-yfBcY*mBNstjG{nQ-Tq3#G0>!Xg^&Ja{i2)Pcfaqud^7z>}h|@DtUM7hLdf zN#Q%;QB5#1RaW+Y>Jmax06J8}NhGTI@1pzdGnVb_@ChCBuw=v>GDuI)Q&&T`Elrn`s;(TisNiq#%m-L~t5&zB3dO)Lj05*Wv#9S`9F4Vu&&C05)pE>LW$NS2Ga zco86uO@~3L16xo9HQaK)66q6v^wH5paGX*)Q0Cb_!gz?Yu@Z2+~Xdp4@D8~|< z0&S=msF<`_m@>bMQ8Cco#Yp(p$^5Jg9^3#J?_X*EXn>TiLTNm%0w>P_=Ntp)22yzG zP;@)`i;hVudCIjq&3*Leg!NUpVuHCa%Ri;tJhH06a zQX2=+P~fU^{VtC%G)*1AF#!uwXF=kX>~=5E$I>jvy=vfn5pH{l<`Fjed=K;z)5L;f zW7#6{d=Fg;GP2UrY7_duEv0~;-R!Q*AzzdyJ5wqGWbUv8p>NCnPhM=hTIH# zeiG(7q6mi-q~}jBE{BP>1HN7hA|%sHnXTT!0n!_3)&@UdO@^!U-3Nuiet)wZn^6W% zMO19V4gP^Tb`6btP#CEYfb14)`f_$fE-%3H|#DclpLD_29z9z0z%Hz3YO+NjAD_V$Y5eaJP*9^ znOxhOIMd84F*^Z;ePN@UbGY;6H>0OrUJ|kK)i#wO<;L0lh+?OYFF`Rs3uvIe28L1! zmWiTV(BDu{-0`4m+#4PsRdpZwu%-dI)}FZlj=a_SeH?Qs@p6iuXa{ik3c?(Z?FeEYOgxeTw$`G|K+EAkka zQkH@c;v_H*5UanW2bKKVZNsP$`}y;b5h{AanugC%JYgpRos%f$cnLiF=mNW=DyW*OrnWdoE(hE$I z3wT2E=+CHCoTxD0#FUHjL-Gn(pi0rlJ`-BM|RE!A-O;m+aydRyGGyGg?GN zOs;S3*3WKQsXLAHA74z^X#1+^SunjwqgfX;1NF_>;lDa`C3qS(>BSvw-YH`&Vz>;F z#(RP&dW~2tHeuE{l|1D+C2wooDbU#hQwlg7cQu!cU@S97>s1h@r00G^#Uw~PmpCT+ z#M6hUCGxV9S|6&{R9fK8xkafRWRDJN3sH(#=8KEzRwWL4{t=}!X}E&NyLb6f3Zj20 z>)Ub)mp)A{ShG#~`;&0oH?j_#-nGiluLrw+r2rRi%hrC2`BGcov}YvuvES*Z1`gCq zL?mw^X5&*-a*Ub`3+Z3k-=F8>G^<$Vl0%b_uJCB7n3&?m2)0tuLN`!)8xa~`ni5rg z68RbK?QGa=Xqp~GW4Hma0#O_)T2RQdstwC;Vo7S)7S)S8BLMqblWVa9Qapv4$$m+x zE-%bBW%ASSY+z|o+fm83M1veWeSc*-{LW_IhIyTKy7^F6b{4wi%WWd1@=%+>avF0M zLARu^L9xu0^_lPdyOa1EFLY(uKiX9j~g zP8s_OVe7#?p=kKmg{Z8Glsmj9>`lMcIaC9R!e+suOmDa;`RwNMcOp)oBDFi1+z*Dx zYT0&0@I4HedBoO|j8Z`?4*(=38zRo zk&D$VR%h?hErjU21~kWu9X)Czb5Y_OxHZ}3!mR5f9_r}F{_#)a3V095DWlZ9lG744 zF%YKepsrYBY!!g1z-V3X=mHKNXfO5 zhT37eD&;Eiz_0-DS{2*(m33uVvQ?w`!GL0E3SRqA#f zgxi~5>f<1NlZ}yhZ8lq;I)pt8PJlbOF`Nqqra4hzh)E4FriVQSlpC#&GAzOh5jOJ=2Lh>gFMc0om;dcJ5ID4K7YG242i0xfy7Wwu+W)^Y{x#; z=^+PgJR*zIeUN0dS8;C0hHqM~r8t5IHr=v?x`&X3kE&ISA~VEc z8}%_Q99j#)R-Qn1Zw?$wf-fxEm4ag%g4lsxoex{>k-3#|k>5}C3^m+D}}I8k_;ty_Zu$cj!o*wifA>!QAF9o()mzd@eW))GKsVBA@Wu^j}^@=q1A*nG?fc zX^o%?ax;>>L69}{nSRXdsayD}K%&(p45k~ON5PFbYR5CQzaDRo;fpsu=uEW!5&%VQ z91!;)s8EoT&TlO>+dHz-8sMFyTzkC-52WrZTwLY5A~2>799>HpV0%qy`8vv%UgWU9 zMhZ9#^ke1(8V>pv0OM`8nX}oU@1t$Gvq4h6gzmq;czi@l+3^jC>RwCDiYe3696t zqDTq@;91yb?>tvOj(@x3?vjQ%$xCDFV*KKC9o>)b=E5!#1;sIWUXqKCE=hLUtr{ub zFZazqPp6SGWAn4fvoG}-W$}cKLNl${itZ8&DpMJ}QmlV(E`kr~j@se`#U`6li7cz2s_HOD4{eU($0Pp!hZcOT6>%Wegb z1aS%dS&fOtHU96A+a@kQcysWzY8TGVuu^P zXywO(O#|#@j((KdQqhQAXlGI)`$40V^DNq+~3Ydjmo`Iirc-?P7U*@weD z@SzdKji`$5NI-fMY19;CS0+j$C?{IV_`dgnoe_ zom~kdyg7Z-$Sf3k;rMZqix4Pl-Sm4haM~mJ0Ol z22+*-Qm`$=d2N*UK|WB|bI~W7SXv<@w2wq%K^|KM9HCy};^vV*egQ!T_8tF5M?e9( zVN-^KiZW!c?!MSTcUWzcLncAsmS&J2b&v!sR_AuyP{@0{GlUnPo4bYLo$eH$lrG&! zh2a`jE?r145{Wr7|ESlXp z&g~7ocLsr~P7jq()ClraOb;u@HyvC` zP!*JO#vBCw)MHmyxfVR1fI)iS7lmrlk=cv|BQ!GU135ntW6^Z7CqKub%N#B@%gSEP z?J+4IeTMFU#ItVHZuRx0MLLfd9zeXJOC=m?GZ@8$j_7V+swSTynf74<2o!5SnbS!T zLquUf3z=N4x(AR{4+eXBsIWl5`g1h(Sb9duM@KUxl(UR<4nUp`UMyw`Jg+W`yf5`q z0OvJt&^+mNpBPgb#Y*PXEL#vc%%tkcN*F3$BE@@sy8=-+Y4HiOc;3Tgl>9MpU{E!I z7QJ;7Q|{-e6J(5){;z^n?&(%egd;FXRj|Y+m>U=CcKkyZqiCGCr*Yw@L=VR;&Eb{1GfCEvSW( z7S}Sgt$?WLgfYn!;REdC42|M@3AL~tTqSb~#tX6fsjHd_93Y8Y$gV-P)#o7qYif(n zg>*pJds7h)*FQ`t+2pMY_d(Dqr~SI7SCDz!7w+bp=HLGjK>5YMpK}C-O$D`N3Z*VT zbkX@8?c>r8EBStuTOGQ7Doc=bmgv}g;AAmsJrfvKb1f|FnLQN;|E#g*;6ZYY`^d14 z%4Y(1hY`>Iv_ch3`w-#x$3eAmlY?l!8Joqd%cj`o4Z(quz!AS%`X}qHWxc^>J1ME} z!}Tudkp;Gm{nhYs4EM3RTMFb@agQ#6v6iYfDN-P_%3iFPabN&ub=zJC)h3E|cvki#2P4;K%%*zhBf2C4Oh1 zQAPvSRK*PSgIVA7qBq~ceSfcZr$ISz-U=WrL(?B4^(+j8Z3%$c?o~s(?}h{LB^>Jf z*i9g)b8Fw0ozV6fVTVBz4H5FK825db>b#PGM}Omw3=NBISf0ilDe#5hydO{V9j3oe362q= ziS77Go0R2{l3w^)nW;(i%wrUBHsu_Ifp4W$h)Q=;d4ZMO)>~hdR_K3mB2<}yTm}5+ zXUAVVelG&*w2>}w#u=%hL=W_S{m09?D+X0Bsi3ev7xZAKtv|X8HRNB+iv2WLPAl!< z*3fW#7{t|Emi2pHm=;Vg1*SBiY+hKN6UaS@SZ@xNUuXh12HA0^WR|PMpNXXiE?(R?2#P2`LMg_hFGk3}W1wnIA4`c93TJidUOBmrFpz74}6&&*Ed7PB}bUfl)N#$g=jRJO%Jj7xn1y!0mumcV-jRP*uQAd^GR7Gy$xe=q z9dFTZT+|#b|2zbv0e~(*C%a_Lv{0IrYQ3Wjr2$yDf+GqSLvb;f(Ei_WeV;;Db!6c91{uJ8EI?|pSr-Gbz6@^irIjxxKOsMrcGmQ z&paColURrYl$u{a?Y5ClZeiqpR!WB>Tb-0P#@gQnV#lf1!8LOJRV5Oqz(Y-NNwl@@&lf2H zcHcwBbyz`AK1HFSVY%0DWpmSo3l9!XWFAGo&{=Kg$J{7Vw#wARCw&W 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

cb?df3tQo3JGJa#`-D$&L8anJIK=F|DdBL<1b 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 U^U{L~0QLS!i_42ui0J$OAD3Z%E&u=k literal 0 HcmV?d00001 diff --git a/images/sigma_logo_light.png b/images/sigma_logo_light.png new file mode 100644 index 0000000000000000000000000000000000000000..3babfa42d51408dc2c257596b6792010b7177c62 GIT binary patch literal 70358 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%0AmOx>EV_wiQj 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 literal 0 HcmV?d00001 diff --git a/sigmahq/sigmahq_filename_convention.md b/sigmahq/sigmahq_filename_convention.md index c43d7a0..c240dcb 100644 --- a/sigmahq/sigmahq_filename_convention.md +++ b/sigmahq/sigmahq_filename_convention.md @@ -2,9 +2,8 @@ This document describe a soft convention to name rule files. The following convention has been set to help with the management of the rules files repository and is not part of the SIGMA specification. -## Summary +## Summary -- [Summary](#summary) - [Product](#product) - [Cloud](#cloud) - [Category](#category) diff --git a/sigmahq/sigmahq_rule_convention.md b/sigmahq/sigmahq_rule_convention.md index b797355..962d691 100644 --- a/sigmahq/sigmahq_rule_convention.md +++ b/sigmahq/sigmahq_rule_convention.md @@ -55,7 +55,7 @@ level [required] ## Filenames -All rule filename must follow the convention described in [Sigmahq_filename_rule.md](./Sigmahq_filename_rule.md) +All rule filename must follow the convention described in the [SigmaHQ Filename Convention](./sigmahq_filename_convention.md) file. ## Indentation @@ -119,7 +119,10 @@ detection: ### Condition - +- When possible, it is recommended to use conditions in the form `1 of selection_*` or `1 of selection_*` in order to make them more readable. +- When filtering values in the condition, it's recommended to name the filters in one of two ways: + - `filter_main_*`: For filters that are mandatory to the rule's logic, or if the excluded behavior or software is present by default or very common. + - `filter_optional_*`: For filters that are based on behaviors or software that aren't part of the default installation of the OS or service being targeted. ## False Positives diff --git a/sigmahq/sigmahq_title_convention.md b/sigmahq/sigmahq_title_convention.md index c0a55d6..a17ae40 100644 --- a/sigmahq/sigmahq_title_convention.md +++ b/sigmahq/sigmahq_title_convention.md @@ -4,7 +4,7 @@ This document provides general guidelines and tips on how to write titles for si Note that this is by no means an exhaustive list. It is meant to be a general guide for inspiration and to have an easily sharable resource for new contributors (e.g. a resource to link at in PR discussions). -## Summary +## Table Of Content - [Summary](#summary) - [Generality](#generality) @@ -13,7 +13,7 @@ Note that this is by no means an exhaustive list. It is meant to be a general gu - [Suffix (Optional)](#suffix-optional) - [Main Title](#main-title) -## Generality +## Summary Bearing in mind that the title is one of the first things that an analyst will see. It should therefore be used as a clue and be as clear as possible to guide the assessment of the alert. @@ -21,7 +21,7 @@ The title and level of the rule must be consistent ## Structure -Titles can be split with "-" : `Prefix - Main Title - Sufix` +Titles can be split with "-" : `Prefix - Main Title - Suffix` ### Prefix (Optional) From cb1e1f1c3a239c290351cd1039f10399ae7c806a Mon Sep 17 00:00:00 2001 From: Nasreddine Bencherchali <8741929+nasbench@users.noreply.github.com> Date: Mon, 5 Aug 2024 00:55:29 +0200 Subject: [PATCH 09/31] Update sigma-rules-specification.md --- specification/sigma-rules-specification.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/specification/sigma-rules-specification.md b/specification/sigma-rules-specification.md index d152d07..d82054b 100644 --- a/specification/sigma-rules-specification.md +++ b/specification/sigma-rules-specification.md @@ -78,7 +78,7 @@ To keep the rules interoperable use: - Strings values use Single quotes `'` . If the string contains a single quote, double quotes may be used instead - Numeric values don't use any quotes -Simple Sigma example +Below is a simple Sigma rule example: ```yaml title: Whoami Execution @@ -137,7 +137,7 @@ scope [optional] [arbitrary custom fields] ``` -The Json schema is defined in [sigma-schema.json](schema/sigma-schema.json) +The Json schema is defined in [sigma-detection-rule-schema.json](/json-schema/sigma-detection-rule-schema.json) # Components @@ -194,7 +194,8 @@ Currently the following types are defined: * `similar`: Use to relate similar rules to each other (e.g. same detection content applied to different log sources, rule that is a modified version of another rule with a different level) ## Name -**Attributes:** name + +**Attribute:** name **Use:** optional From 30d77bc737ea947e1a22e56c05625cc7863e7405 Mon Sep 17 00:00:00 2001 From: Nasreddine Bencherchali <8741929+nasbench@users.noreply.github.com> Date: Mon, 5 Aug 2024 01:16:37 +0200 Subject: [PATCH 10/31] even more updates --- README.md | 45 +++++++++++-------- ...tion.md => sigmahq-filename-convention.md} | 0 ...nvention.md => sigmahq-rule-convention.md} | 0 ...vention.md => sigmahq-title-convention.md} | 0 ...tion.md => sigma-filters-specification.md} | 0 5 files changed, 26 insertions(+), 19 deletions(-) rename sigmahq/{sigmahq_filename_convention.md => sigmahq-filename-convention.md} (100%) rename sigmahq/{sigmahq_rule_convention.md => sigmahq-rule-convention.md} (100%) rename sigmahq/{sigmahq_title_convention.md => sigmahq-title-convention.md} (100%) rename specification/{sigma_filters-specification.md => sigma-filters-specification.md} (100%) diff --git a/README.md b/README.md index 3e78cd8..ca83cb7 100644 --- a/README.md +++ b/README.md @@ -20,33 +20,40 @@

-Welcome to the Sigma specification repository +Welcome to the Sigma specification repository. -## Version Management +## A Quick Rundown -The version number is in the form of 3 digits 'A.B.C': +Here's what you can expect from each of the main subfolders within this repo. Please take a minute to educate yourself! -- 'A' A major version that could break existing converters -- 'B' A minor version with additions or modifications of functionality affecting but not breaking the converters -- 'C' Reorganization of section, addition of examples etc. +### Specification -## Current Version +[Specification](./specification/) will contain markdown files describing the Sigma specification format in details. -The Sigma rules format specifications is described in the file [Sigma_specification](Sigma_specification.md) -The Sigma Meta rules format specifications is described in the file [Sigma_meta_rules](Sigma_meta_rules.md) -The Sigma Meta filter format specifications is described in the file [Sigma_meta_filter](Sigma_meta_filter.md) +* [Sigma Rules Specification](./specification/sigma-rules-specification.md) - Describes what constitute a Sigma rule. +* [Sigma Correlation Specification](./specification/sigma-correlation-rules-specification.md) - Describes the Sigma correlation format. +* [Sigma Filters Specification](./specification/sigma-filters-specification.md) - Described the Sigma filters format. -There exists other files in the repository to describe the different modifiers, fields and tags to be used in Sigma rules: +### JSON Schema -- [appendix_modifier](appendix/appendix_modifier.md) is a document that defines the different modifiers that can be used in a Sigma rule. -- [appendix_tags](appendix/appendix_tags.md) is a document that defines the standardized tags that can be used to categorize the different Sigma rules. -- [appendix_taxonomy](appendix/appendix_taxonomy.md) is a document that defines the different field names and log sources that should be used to ensure sharable rules. +[Json-Schema](./json-schema/) will contain the Sigma specification format in JSON. + +## Appendix + +[Appendix](./appendix/) will contain additional files providing additional details to certain fields of a Sigma rule + +* [Sigma Modifiers Appendix](appendix/sigma-modifiers-appendix.md) is a document that defines the different modifiers that can be used in a Sigma rule. +* [Sigma Tags Appendix](appendix/sigma-tags-appendix.md) is a document that defines the tags namespaces that can be used to categorize the different Sigma rules. +* [Sigma Taxonomy Appendix](appendix/sigma-taxonomy-appendix.md) is a document that defines the different field names and log sources that are currently supported by SigmaHQ in order to ensure sharable rules. ## SigmaHQ -The following files are not part of the sigma specification. -They are only helpers for the management of the main [rule repository](https://github.com/SigmaHQ/sigma/tree/master/rules) under SigmaHQ +[SigmaHQ](./sigmahq/) will contain markdown files that describe rules and recommendations that are applied to the rules hosted in SigmaHQ main rule repository. + +> **Note** +> +> The SigmaHQ folder and the files contains within are not part of the sigma specification. They are there to ensure and easier management of the rules hosted in the main [rule repository](https://github.com/SigmaHQ/sigma/tree/master/rules) -[SigmaHQ Filename Normalisation](/sigmahq/Sigmahq_filename_rule.md) -[SigmaHQ Rule Conventions](/sigmahq/sigmahq_conventions.md) -[SigmaHQ Title Normalisation](/sigmahq/sigmahq_title_rule.md) +* [SigmaHQ Rule Convention](/sigmahq/sigmahq-rule-convention.md) +* [SigmaHQ Filename Convention](/sigmahq/sigmahq-filename-convention.md) +* [SigmaHQ Title Convention](/sigmahq/sigmahq-title-convention.md) diff --git a/sigmahq/sigmahq_filename_convention.md b/sigmahq/sigmahq-filename-convention.md similarity index 100% rename from sigmahq/sigmahq_filename_convention.md rename to sigmahq/sigmahq-filename-convention.md diff --git a/sigmahq/sigmahq_rule_convention.md b/sigmahq/sigmahq-rule-convention.md similarity index 100% rename from sigmahq/sigmahq_rule_convention.md rename to sigmahq/sigmahq-rule-convention.md diff --git a/sigmahq/sigmahq_title_convention.md b/sigmahq/sigmahq-title-convention.md similarity index 100% rename from sigmahq/sigmahq_title_convention.md rename to sigmahq/sigmahq-title-convention.md diff --git a/specification/sigma_filters-specification.md b/specification/sigma-filters-specification.md similarity index 100% rename from specification/sigma_filters-specification.md rename to specification/sigma-filters-specification.md From 5ede4c433a65fd19cccac1d71a2343da8e25a7cb Mon Sep 17 00:00:00 2001 From: Nasreddine Bencherchali <8741929+nasbench@users.noreply.github.com> Date: Mon, 5 Aug 2024 01:17:33 +0200 Subject: [PATCH 11/31] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index ca83cb7..2e5cc97 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@

-Welcome to the Sigma specification repository. +Welcome to the official Sigma Specification repository. ## A Quick Rundown @@ -38,7 +38,7 @@ Here's what you can expect from each of the main subfolders within this repo. Pl [Json-Schema](./json-schema/) will contain the Sigma specification format in JSON. -## Appendix +### Appendix [Appendix](./appendix/) will contain additional files providing additional details to certain fields of a Sigma rule @@ -46,7 +46,7 @@ Here's what you can expect from each of the main subfolders within this repo. Pl * [Sigma Tags Appendix](appendix/sigma-tags-appendix.md) is a document that defines the tags namespaces that can be used to categorize the different Sigma rules. * [Sigma Taxonomy Appendix](appendix/sigma-taxonomy-appendix.md) is a document that defines the different field names and log sources that are currently supported by SigmaHQ in order to ensure sharable rules. -## SigmaHQ +### SigmaHQ [SigmaHQ](./sigmahq/) will contain markdown files that describe rules and recommendations that are applied to the rules hosted in SigmaHQ main rule repository. From 2549a20e23ba337d379b7a2699c6d39cbce04ae0 Mon Sep 17 00:00:00 2001 From: Nasreddine Bencherchali <8741929+nasbench@users.noreply.github.com> Date: Mon, 5 Aug 2024 01:19:49 +0200 Subject: [PATCH 12/31] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 2e5cc97..68c9db5 100644 --- a/README.md +++ b/README.md @@ -12,8 +12,8 @@

-Sigma Official Badge GitHub Repo stars -GitHub all releases +Sigma Official Badge GitHub Repo stars +GitHub all releases
Open Source Security Index - Fastest Growing Open Source Security Projects From 1ba1521cc9064233e8e8c8c432d0ea70875c5cdf Mon Sep 17 00:00:00 2001 From: Nasreddine Bencherchali <8741929+nasbench@users.noreply.github.com> Date: Mon, 5 Aug 2024 01:20:51 +0200 Subject: [PATCH 13/31] Update README.md --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 68c9db5..0898f93 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,6 @@

Sigma Official Badge GitHub Repo stars -GitHub all releases
Open Source Security Index - Fastest Growing Open Source Security Projects From a08a6bc2fd6bd0ca6cabe12a54a2e2e557b9228e Mon Sep 17 00:00:00 2001 From: Nasreddine Bencherchali <8741929+nasbench@users.noreply.github.com> Date: Mon, 5 Aug 2024 10:41:39 +0200 Subject: [PATCH 14/31] updates --- appendix/sigma-tags-appendix.md | 34 +++++++++--------- favicon.ico | Bin 97742 -> 0 bytes json-schema/sigma-correlations-schema.json | 2 +- json-schema/sigma-detection-rule-schema.json | 2 +- json-schema/sigma-filters-schema.json | 2 +- .../sigma-correlation-rules-specification.md | 4 +-- specification/sigma-filters-specification.md | 4 +-- specification/sigma-rules-specification.md | 8 ++--- 8 files changed, 29 insertions(+), 27 deletions(-) delete mode 100644 favicon.ico diff --git a/appendix/sigma-tags-appendix.md b/appendix/sigma-tags-appendix.md index fb41804..8393e60 100644 --- a/appendix/sigma-tags-appendix.md +++ b/appendix/sigma-tags-appendix.md @@ -21,9 +21,10 @@ The following document defines the standardized tags that can be used to categor * attack: Categorization according to [MITRE ATT&CK](https://attack.mitre.org). To get the current supported version of ATT&CK please visit [MITRE CTI](https://github.com/mitre/cti) * car: Link to the corresponding [MITRE Cyber Analytics Repository (CAR)](https://car.mitre.org/) +* cve: Categorization according [MITRE CVE](https://cve.mitre.org/) +* detection: Categorization according to the types of rules provided in the [SigmaHQ rule repository](https://github.com/SigmaHQ/sigma). * stp: Rating of detection analytic robustness according to the [MITRE Summiting the Pyramid](https://center-for-threat-informed-defense.github.io/summiting-the-pyramid/) scheme. * tlp: [Traffic Light Protocol](https://www.first.org/tlp/). -* detection: Categorization according to the types of rules provided in the [SigmaHQ rule repository](https://github.com/SigmaHQ/sigma). ### Namespace: attack @@ -48,9 +49,23 @@ Tactics: ### Namespace: car -Use the CAR tag from the [analytics repository](https://car.mitre.org/analytics/) without the prepending `CAR-`. Example +Use the CAR tag from MITRE [analytics repository](https://car.mitre.org/analytics/) without the prepending `CAR-`. Example tag: `car.2016-04-005`. +### Namespace: cve + +Use the CVE tag from [MITRE](https://cve.mitre.org) in lower case separated by dots. Example tag: `cve.2021-44228`. + +### Namespace: detection + +Use the detection tag to indicate the type of a rule. Example tag: `detection.threat-hunting`. + +The following tags are currently supported: + +* `detection.dfir` +* `detection.emerging-threats` +* `detection.threat-hunting` + ### Namespace: stp The [Summiting the Pyramid](https://center-for-threat-informed-defense.github.io/summiting-the-pyramid/) scheme created @@ -70,10 +85,6 @@ specify the robustness in the following ways: * *complete* defines the whole score in a tag like `stp.3k`. Such a tag should be chosen if the detection refers to a concrete log source. -### Namespace: cve - -Use the CVE tag from the [mitre](https://cve.mitre.org) in lower case separated by dots. Example tag: `cve.2021-44228`. - ### Namespace: tlp All TLP levels defined by the [FIRST TLP-SIG](https://www.first.org/tlp/) in lower case. Example tag: `tlp.amber`. @@ -86,17 +97,8 @@ The following tags are currently supported: * `tlp.green` * `tlp.clear` -### namespace: detection - -Use the detection tag to indicate the type of a rule. Example tag: `detection.threat-hunting`. - -The following tags are currently supported: - -* `detection.dfir` -* `detection.emerging-threats` -* `detection.threat-hunting` - ## History + * 2024-08-12 Tags V2.0.0 * Release of V2.0.0 of the specification * 2023-11-23 Tags V1.2.0 diff --git a/favicon.ico b/favicon.ico deleted file mode 100644 index ccd77c5f5333eaf4fb8115ecdcc0bd2197b4241b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 97742 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%0Ad5XteR&stfjZMtSv(Wh7Sle%P{+&Ko zf1cCx5JT}xDn&b;e2P3%yy)K>+!gHgdmhRe#v$>eowosLWx9x|SfWBe{U{ zeI?}r?qDvi8~+GBpby8ZsN;|yH93VCBYw= zzNYo_+S}oZU!O($&`$2#^)}z?x89*M&u2yU%rkV>`CXlz9qZ@)m(DOnJJ24qizZR( zH=W zYGDs?=3Wt-x`WPH-0AKWaQ6$8&-0^ayv76X<8$~tzK8Fl9F)iLPn9V1-;4kwzz8q` zi~u9R2rvSS03*N%FanGKBftnS0*nA7zz8q`jDUOuLM)5`BftnS0*nA7zz8q`i~u8` H4T1jy!HQh} diff --git a/json-schema/sigma-correlations-schema.json b/json-schema/sigma-correlations-schema.json index 89aaf18..e694314 100644 --- a/json-schema/sigma-correlations-schema.json +++ b/json-schema/sigma-correlations-schema.json @@ -1,6 +1,6 @@ { "$schema": "https://json-schema.org/draft/2020-12/schema", - "title": "Sigma Meta rule specification V2.0.0 (2024/08/12)", + "title": "Sigma Meta rule specification V2.0.0 (2024-08-12)", "type": "object", "required": [ "title", diff --git a/json-schema/sigma-detection-rule-schema.json b/json-schema/sigma-detection-rule-schema.json index 17f7adc..22bcdb0 100644 --- a/json-schema/sigma-detection-rule-schema.json +++ b/json-schema/sigma-detection-rule-schema.json @@ -1,6 +1,6 @@ { "$schema": "https://json-schema.org/draft/2020-12/schema#", - "title": "Sigma rule specification V2.0.0 (2024/08/12)", + "title": "Sigma rule specification V2.0.0 (2024-08-12)", "type": "object", "required": ["title", "logsource", "detection"], "properties": { diff --git a/json-schema/sigma-filters-schema.json b/json-schema/sigma-filters-schema.json index 2bcce50..63084be 100644 --- a/json-schema/sigma-filters-schema.json +++ b/json-schema/sigma-filters-schema.json @@ -1,6 +1,6 @@ { "$schema": "https://json-schema.org/draft/2020-12/schema#", - "title": "Sigma Global Filter specification V2.0.0 (2024/08/12)", + "title": "Sigma Global Filter specification V2.0.0 (2024-08-12)", "type": "object", "required": [ "title", diff --git a/specification/sigma-correlation-rules-specification.md b/specification/sigma-correlation-rules-specification.md index 762ff70..2b8d465 100644 --- a/specification/sigma-correlation-rules-specification.md +++ b/specification/sigma-correlation-rules-specification.md @@ -3,7 +3,7 @@ The following document defines the standardized correlation that can be used in Sigma rules. * Version 2.0.0 -* Release date 2024/09/01 +* Release date 2024-09-01 - [Introduction](#introduction) - [Compatibility](#compatibility) @@ -557,5 +557,5 @@ detection: ``` # History -* 2024/09/01 Specification V2.0.0 +* 2024-09-01 Specification V2.0.0 * First release \ No newline at end of file diff --git a/specification/sigma-filters-specification.md b/specification/sigma-filters-specification.md index eedcdb8..556331e 100644 --- a/specification/sigma-filters-specification.md +++ b/specification/sigma-filters-specification.md @@ -3,7 +3,7 @@ The following document defines the standardized global filter that can be used with Sigma rules. * Version 2.0.0 -* Release date 2024/09/01 +* Release date 2024-09-01 - [Introduction](#introduction) - [Global filter](#global-filter) @@ -171,5 +171,5 @@ filter: ``` # History -* 2024/09/01 Specification V2.0.0 +* 2024-09-01 Specification V2.0.0 * First release \ No newline at end of file diff --git a/specification/sigma-rules-specification.md b/specification/sigma-rules-specification.md index d82054b..a4ce4bc 100644 --- a/specification/sigma-rules-specification.md +++ b/specification/sigma-rules-specification.md @@ -1,7 +1,7 @@ # Sigma Rules Specification - Version 2.0.0 -- Release date 2024/08/12 +- Release date 2024-08-12 # Summary @@ -732,9 +732,9 @@ Their maintenance can become difficult, with a meta-filter it is possible to wri See [Sigma Meta Filter](Sigma_meta_filter.md) # History -* 2024/09/01 Specification V2.0.0 +* 2024-09-01 Specification V2.0.0 * First release -* 2023/06/29 Specification V1.0.4 +* 2023-06-29 Specification V1.0.4 * Complete the information for multiple conditions -* 2022/12/28 Specification V1.0.3 +* 2022-12-28 Specification V1.0.3 * Add missing `timeframe` attribute From 4ea41da4ee6a0e527991f5ac53a5986182079f01 Mon Sep 17 00:00:00 2001 From: Nasreddine Bencherchali <8741929+nasbench@users.noreply.github.com> Date: Mon, 5 Aug 2024 10:55:15 +0200 Subject: [PATCH 15/31] Update sigma-taxonomy-appendix.md --- appendix/sigma-taxonomy-appendix.md | 52 ++++++++++++++++++++--------- 1 file changed, 37 insertions(+), 15 deletions(-) diff --git a/appendix/sigma-taxonomy-appendix.md b/appendix/sigma-taxonomy-appendix.md index 0ad5f26..5343525 100644 --- a/appendix/sigma-taxonomy-appendix.md +++ b/appendix/sigma-taxonomy-appendix.md @@ -3,7 +3,7 @@ The following document defines the field names and log sources that are allowed to be used in SIGMA rules that are shared on the official SigmaHQ repository. * Version 2.0.0 -* Release date 2024/08/12 +* Release date 2024-08-12 ## Summary @@ -151,25 +151,31 @@ For a better comprehension, the log sources are organized by directory name simi | windows | product: windows
category: sysmon_status | EventID:
- 4
- 16
Channel: Microsoft-Windows-Sysmon/Operational | | windows | product: windows
category: wmi_event | EventID:
- 19
- 20
- 21
Channel: Microsoft-Windows-Sysmon/Operational | | windows | product: windows
service: application | Channel: Application | +| windows | product: windows
service: application-experience | Channel:
- Microsoft-Windows-Application-Experience/Program-Telemetry
- Microsoft-Windows-Application-Experience/Program-Compatibility-Assistant | | windows | product: windows
service: applocker | Channel:
- Microsoft-Windows-AppLocker/MSI and Script
- Microsoft-Windows-AppLocker/EXE and DLL
- Microsoft-Windows-AppLocker/Packaged app-Deployment
- Microsoft-Windows-AppLocker/Packaged app-Execution | | windows | product: windows
service: appmodel-runtime | Channel: Microsoft-Windows-AppModel-Runtime/Admin | | windows | product: windows
service: appxdeployment-server | Channel: Microsoft-Windows-AppXDeploymentServer/Operational | | windows | product: windows
service: appxpackaging-om | Channel: Microsoft-Windows-AppxPackaging/Operational | | windows | product: windows
service: bitlocker | Channel: Microsoft-Windows-BitLocker/BitLocker Management | | windows | product: windows
service: bits-client | Channel: Microsoft-Windows-Bits-Client/Operational | +| windows | product: windows
service: capi2 | Channel: Microsoft-Windows-CAPI2/Operational | +| windows | product: windows
service: certificateservicesclient-lifecycle-system | Channel: Microsoft-Windows-CertificateServicesClient-Lifecycle-System/Operational | | windows | product: windows
service: codeintegrity-operational | Channel: Microsoft-Windows-CodeIntegrity/Operational | | windows | product: windows
service: dhcp | Channel: Microsoft-Windows-DHCP-Server/Operational | | windows | product: windows
service: diagnosis-scripted | Channel: Microsoft-Windows-Diagnosis-Scripted/Operational | | windows | product: windows
service: dns-client | Channel: Microsoft-Windows-DNS Client Events/Operational | | windows | product: windows
service: dns-server | Channel: DNS Server | -| windows | product: windows
service: dns-server-audit | Channel: Microsoft-Windows-DNS-Server/Audit | | windows | product: windows
service: dns-server-analytic | Channel: Microsoft-Windows-DNS-Server/Analytical | +| windows | product: windows
service: dns-server-audit | Channel: Microsoft-Windows-DNS-Server/Audit | | windows | product: windows
service: driver-framework | Channel: Microsoft-Windows-DriverFrameworks-UserMode/Operational | | windows | product: windows
service: firewall-as | Channel: Microsoft-Windows-Windows Firewall With Advanced Security/Firewall | -| windows | product: windows
service: ldap_debug | Channel: Microsoft-Windows-LDAP-Client/Debug | +| windows | product: windows
service: hyper-v-worker | Channel: Microsoft-Windows-Hyper-V-Worker | +| windows | product: windows
service: kernel-event-tracing | Channel: Microsoft-Windows-Kernel-EventTracing | +| windows | product: windows
service: kernel-shimengine | Channel:
- Microsoft-Windows-Kernel-ShimEngine/Operational
- WinEventLog:Microsoft-Windows-Kernel-ShimEngine/Diagnostic | +| windows | product: windows
service: ldap | Channel: Microsoft-Windows-LDAP-Client/Debug | | windows | product: windows
service: lsa-server | Channel: Microsoft-Windows-LSA/Operational | -| windows | product: windows
service: microsoft-servicebus-client | Channel: Microsoft-ServiceBus-Client | | windows | product: windows
service: msexchange-management | Channel: MSExchange Management | +| windows | product: windows
service: ntfs | Channel: Microsoft-Windows-Ntfs/Operational | | windows | product: windows
service: ntlm | Channel: Microsoft-Windows-NTLM/Operational | | windows | product: windows
service: openssh | Channel: OpenSSH/Operational | | windows | product: windows
service: powershell | Channel: Microsoft-Windows-PowerShell/Operational | @@ -177,9 +183,11 @@ For a better comprehension, the log sources are organized by directory name simi | windows | product: windows
service: printservice-admin | Channel: Microsoft-Windows-PrintService/Admin | | windows | product: windows
service: printservice-operational | Channel: Microsoft-Windows-PrintService/Operational | | windows | product: windows
service: security | Channel: Security | -| windows | product: windows
service: security-mitigations | Channel:
- Microsoft-Windows-Security-Mitigations/Kernel Mode
- Microsoft-Windows-Security-Mitigations/User Mode | -| windows | product: windows
service: smbclient-security | Channel: Microsoft-Windows-SmbClient/Security | +| windows | product: windows
service: security-mitigations | Channel:
- Microsoft-Windows-Security-Mitigations/Kernel Mode
- Microsoft-Windows-Security-Mitigations/User Mode | +| windows | product: windows
service: sense | Channel: Microsoft-Windows-SENSE/Operational | +| windows | product: windows
service: servicebus-client | Channel:
- Microsoft-ServiceBus-Client/Operational
- Microsoft-ServiceBus-Client/Admin | | windows | product: windows
service: shell-core | Channel: Microsoft-Windows-Shell-Core/Operational | +| windows | product: windows
service: smbclient-security | Channel: Microsoft-Windows-SmbClient/Security | | windows | product: windows
service: sysmon | Channel: Microsoft-Windows-Sysmon/Operational | | windows | product: windows
service: system | Channel: System | | windows | product: windows
service: taskscheduler | Channel: Microsoft-Windows-TaskScheduler/Operational | @@ -307,11 +315,25 @@ You can find all possible field values in the [Sysmon Community Guide](https://g ## History -* 2023/01/21 Taxonomy V1.3.5 +* 2024-08-12 Taxonomy V2.0.0 + * Release of V2.0.0 of the specification + * Fix the following windows services: + * Change `ldap_debug` to `ldap` + * Add new windows services: + * ``service: application-experience`` + * ``service: capi2`` + * ``service: certificateservicesclient-lifecycle-system`` + * ``service: hyper-v-worker`` + * ``service: kernel-event-tracing`` + * ``service: kernel-shimengine`` + * ``service: ntfs`` + * ``service: sense`` + * ``service: servicebus-client`` +* 2023-01-21 Taxonomy V1.3.5 * Add new product and its related service: * `product: github` * `service: audit` -* 2023/01/18 Taxonomy V1.3.4 +* 2023-01-18 Taxonomy V1.3.4 * Add the following new windows services: * `service: appxdeployment-server` * `service: lsa-server` @@ -327,19 +349,19 @@ You can find all possible field values in the [Sysmon Community Guide](https://g * Add missing category folder * Add missing product folder * Add description for a special case when using only the `product` logsource -* 2023/01/03 Taxonomy V1.3.3 +* 2023-01-03 Taxonomy V1.3.3 * Add windows service dns-server-analytic and bitlocker * Add all the W3C fields names to the category `webserver` * Update linux `file_create` category to `file_event` -* 2022/12/19 Taxonomy V1.3.2 +* 2022-12-19 Taxonomy V1.3.2 * Minor tweak and updates to the syntax and text -* 2022/11/13 Taxonomy V1.3.1 +* 2022-11-13 Taxonomy V1.3.1 * Add missing service shell-core -* 2022/11/01 Taxonomy V1.3.0 +* 2022-11-01 Taxonomy V1.3.0 * Add missing windows services -* 2022/10/25 Taxonomy V1.2.0 +* 2022-10-25 Taxonomy V1.2.0 * Order the windows logs -* 2022/10/19 Taxonomy V1.1.0 +* 2022-10-19 Taxonomy V1.1.0 * Fix links and spelling -* 2022/09/18 Taxonomy V1.0.0 +* 2022-09-18 Taxonomy V1.0.0 * First version From 3c3bf28e7beeed5792965b8c4491bc08665eabfc Mon Sep 17 00:00:00 2001 From: Nasreddine Bencherchali <8741929+nasbench@users.noreply.github.com> Date: Mon, 5 Aug 2024 12:20:26 +0200 Subject: [PATCH 16/31] final updates --- README.md | 6 +- appendix/sigma-modifiers-appendix.md | 6 +- appendix/sigma-tags-appendix.md | 11 +- appendix/sigma-taxonomy-appendix.md | 23 ++- ...on => sigma-correlation-rules-schema.json} | 0 .../sigma-correlation-rules-specification.md | 178 +++++++++--------- specification/sigma-filters-specification.md | 28 +-- specification/sigma-rules-specification.md | 165 ++++++++-------- 8 files changed, 211 insertions(+), 206 deletions(-) rename json-schema/{sigma-correlations-schema.json => sigma-correlation-rules-schema.json} (100%) diff --git a/README.md b/README.md index 0898f93..9b3fbcb 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,11 @@ Here's what you can expect from each of the main subfolders within this repo. Pl ### JSON Schema -[Json-Schema](./json-schema/) will contain the Sigma specification format in JSON. +[Json-Schema](./json-schema/) will contain a list of JSON schemas for the following. + +* [Sigma Rules](/json-schema/sigma-detection-rule-schema.json) +* [Sigma Correlation Rules](/json-schema/sigma-correlation-rules-schema.json) +* [Sigma Filters](/json-schema/sigma-filters-schema.json) ### Appendix diff --git a/appendix/sigma-modifiers-appendix.md b/appendix/sigma-modifiers-appendix.md index 4508c67..f9db18a 100644 --- a/appendix/sigma-modifiers-appendix.md +++ b/appendix/sigma-modifiers-appendix.md @@ -80,9 +80,11 @@ The following document defines the standardized modifiers that can be used in Si events directly at query/matching time. ## History -* 2023-05-27 + +* 2024-08-12 Modifiers Appendix v2.0.0 +* 2023-05-27 Modifiers Appendix v1.0.4 * Update from PySigma 0.7.6 * Add `fieldref` -* 2023-05-21 v1.0.3 +* 2023-05-21 Modifiers Appendix v1.0.3 * Creation of the file * 2017 Sigma creation diff --git a/appendix/sigma-tags-appendix.md b/appendix/sigma-tags-appendix.md index 8393e60..776f8fa 100644 --- a/appendix/sigma-tags-appendix.md +++ b/appendix/sigma-tags-appendix.md @@ -99,14 +99,13 @@ The following tags are currently supported: ## History -* 2024-08-12 Tags V2.0.0 - * Release of V2.0.0 of the specification -* 2023-11-23 Tags V1.2.0 +* 2024-08-12 Tags Appendix v2.0.0 +* 2023-11-23 Tags Appendix v1.2.0 * Add Summiting the Pyramid -* 2023-06-20 Tags V1.1.0 +* 2023-06-20 Tags Appendix v1.1.0 * Add detection namespace -* 2022-12-19 Tags V1.0.1 +* 2022-12-19 Tags Appendix v1.0.1 * Minor updates and tweaks -* 2022-09-18 Tags V1.0.0 +* 2022-09-18 Tags Appendix v1.0.0 * Initial formalization from the sigma wiki * 2017 Sigma creation diff --git a/appendix/sigma-taxonomy-appendix.md b/appendix/sigma-taxonomy-appendix.md index 5343525..717500e 100644 --- a/appendix/sigma-taxonomy-appendix.md +++ b/appendix/sigma-taxonomy-appendix.md @@ -315,8 +315,7 @@ You can find all possible field values in the [Sysmon Community Guide](https://g ## History -* 2024-08-12 Taxonomy V2.0.0 - * Release of V2.0.0 of the specification +* 2024-08-12 Taxonomy Appendix v v2.0.0 * Fix the following windows services: * Change `ldap_debug` to `ldap` * Add new windows services: @@ -329,11 +328,11 @@ You can find all possible field values in the [Sysmon Community Guide](https://g * ``service: ntfs`` * ``service: sense`` * ``service: servicebus-client`` -* 2023-01-21 Taxonomy V1.3.5 +* 2023-01-21 Taxonomy Appendix v1.3.5 * Add new product and its related service: * `product: github` * `service: audit` -* 2023-01-18 Taxonomy V1.3.4 +* 2023-01-18 Taxonomy Appendix v1.3.4 * Add the following new windows services: * `service: appxdeployment-server` * `service: lsa-server` @@ -349,19 +348,19 @@ You can find all possible field values in the [Sysmon Community Guide](https://g * Add missing category folder * Add missing product folder * Add description for a special case when using only the `product` logsource -* 2023-01-03 Taxonomy V1.3.3 +* 2023-01-03 Taxonomy Appendix v1.3.3 * Add windows service dns-server-analytic and bitlocker * Add all the W3C fields names to the category `webserver` * Update linux `file_create` category to `file_event` -* 2022-12-19 Taxonomy V1.3.2 +* 2022-12-19 Taxonomy Appendix v1.3.2 * Minor tweak and updates to the syntax and text -* 2022-11-13 Taxonomy V1.3.1 +* 2022-11-13 Taxonomy Appendix v1.3.1 * Add missing service shell-core -* 2022-11-01 Taxonomy V1.3.0 +* 2022-11-01 Taxonomy Appendix v1.3.0 * Add missing windows services -* 2022-10-25 Taxonomy V1.2.0 +* 2022-10-25 Taxonomy Appendix v1.2.0 * Order the windows logs -* 2022-10-19 Taxonomy V1.1.0 +* 2022-10-19 Taxonomy Appendix v1.1.0 * Fix links and spelling -* 2022-09-18 Taxonomy V1.0.0 - * First version +* 2022-09-18 Taxonomy v1.0.0 + * Initial release diff --git a/json-schema/sigma-correlations-schema.json b/json-schema/sigma-correlation-rules-schema.json similarity index 100% rename from json-schema/sigma-correlations-schema.json rename to json-schema/sigma-correlation-rules-schema.json diff --git a/specification/sigma-correlation-rules-specification.md b/specification/sigma-correlation-rules-specification.md index 2b8d465..d0a6a34 100644 --- a/specification/sigma-correlation-rules-specification.md +++ b/specification/sigma-correlation-rules-specification.md @@ -3,7 +3,7 @@ The following document defines the standardized correlation that can be used in Sigma rules. * Version 2.0.0 -* Release date 2024-09-01 +* Release date 2024-08-12 - [Introduction](#introduction) - [Compatibility](#compatibility) @@ -109,7 +109,7 @@ As a best practice use the prefix `mr_`. ### Schema -[meta-rule-schema](/schema/meta-rule-schema.json) +[Sigma Correlation Rules JSON Schema](/json-schema/sigma-correlation-rules-schema.json) ### Syntax @@ -332,14 +332,14 @@ Simple example : More than or equal 100 failed login attempts to a destination h title: Many failed logins id: 0e95725d-7320-415d-80f7-004da920fc11 correlation: - type: event_count - rules: - - 5638f7c0-ac70-491d-8465-2a65075e0d86 - group-by: - - ComputerName - timespan: 1h - condition: - gte: 100 + type: event_count + rules: + - 5638f7c0-ac70-491d-8465-2a65075e0d86 + group-by: + - ComputerName + timespan: 1h + condition: + gte: 100 ``` ### Value Count (value_count) @@ -360,16 +360,16 @@ Simple example : Failed logon attempts with more than 100 different user account title: Failed login id: 0e95725d-7320-415d-80f7-004da920fc12 correlation: - type: value_count - rules: - - 5638f7c0-ac70-491d-8465-2a65075e0d86 - group-by: - - ComputerName - - WorkstationName - timespan: 1d - condition: - field: User - gte: 100 + type: value_count + rules: + - 5638f7c0-ac70-491d-8465-2a65075e0d86 + group-by: + - ComputerName + - WorkstationName + timespan: 1d + condition: + field: User + gte: 100 ``` ### Temporal Proximity (temporal) @@ -384,14 +384,14 @@ Simple example : Reconnaissance commands defined in three Sigma rules are invoke ```yaml correlation: type: temporal - rules: - - recon_cmd_a - - recon_cmd_b - - recon_cmd_c - group-by: - - ComputerName - - User - timespan: 5m + rules: + - recon_cmd_a + - recon_cmd_b + - recon_cmd_c + group-by: + - ComputerName + - User + timespan: 5m ``` ### Ordered Temporal Proximity (temporal_ordered) @@ -403,13 +403,13 @@ Example: many failed logins as defined above are followed by a successful login ```yaml correlation: - type: temporal_ordered - rules: - - many_failed_logins - - successful_login - group-by: - - User - timespan: 1h + type: temporal_ordered + rules: + - many_failed_logins + - successful_login + group-by: + - User + timespan: 1h ``` Note: @@ -444,9 +444,9 @@ Rule internal_error ```yaml name: internal_error detection: - selection: - http.response.status_code: 500 - condition: selection + selection: + http.response.status_code: 500 + condition: selection ``` Rule new_network_connection @@ -454,11 +454,11 @@ Rule new_network_connection ```yaml name: new_network_connection detection: - selection: - event.category: network - event.type: connection - event.outcome: success - condition: selection + selection: + event.category: network + event.type: connection + event.outcome: success + condition: selection ``` The correlation rule @@ -466,21 +466,21 @@ The correlation rule title: — id: — correlation: - type: temporal - rules: - - internal_error - - new_network_connection - group-by: - - internal_ip - - remote_ip - timespan: 10s - aliases: - internal_ip: - internal_error: destination.ip - new_network_connection: source.ip - remote_ip: - internal_error: source.ip - new_network_connection: destination.ip + type: temporal + rules: + - internal_error + - new_network_connection + group-by: + - internal_ip + - remote_ip + timespan: 10s + aliases: + internal_ip: + internal_error: destination.ip + new_network_connection: source.ip + remote_ip: + internal_error: source.ip + new_network_connection: destination.ip ``` # Examples @@ -503,13 +503,13 @@ references: author: Florian Roth (Nextron Systems) date: 2023-06-16 correlation: - type: temporal_ordered - rules: - - multiple_failed_login - - successful_login - group-by: - - User - timespan: 10m + type: temporal_ordered + rules: + - multiple_failed_login + - successful_login + group-by: + - User + timespan: 10m falsepositives: - Unlikely level: high @@ -519,43 +519,43 @@ id: a8418a5a-5fc4-46b5-b23b-6c73beb19d41 description: Detects multiple failed logins within a certain amount of time name: multiple_failed_login correlation: - type: event_count - rules: - - failed_login - group-by: - - User - timespan: 10m - condition: - gte: 10 + type: event_count + rules: + - failed_login + group-by: + - User + timespan: 10m + condition: + gte: 10 --- title: Single failed login id: 53ba33fd-3a50-4468-a5ef-c583635cfa92 name: failed_login logsource: - product: windows - service: security + product: windows + service: security detection: - selection: - EventID: - - 529 - - 4625 - condition: selection + selection: + EventID: + - 529 + - 4625 + condition: selection --- title: Successful login id: 4d0a2c83-c62c-4ed4-b475-c7e23a9269b8 description: Detects a successful login name: successful_login logsource: - product: windows - service: security + product: windows + service: security detection: - selection: - EventID: - - 528 - - 4624 - condition: selection + selection: + EventID: + - 528 + - 4624 + condition: selection ``` # History -* 2024-09-01 Specification V2.0.0 - * First release \ No newline at end of file + +* 2024-08-12 Specification v2.0.0 diff --git a/specification/sigma-filters-specification.md b/specification/sigma-filters-specification.md index 556331e..d07a7c9 100644 --- a/specification/sigma-filters-specification.md +++ b/specification/sigma-filters-specification.md @@ -3,7 +3,7 @@ The following document defines the standardized global filter that can be used with Sigma rules. * Version 2.0.0 -* Release date 2024-09-01 +* Release date 2024-08-12 - [Introduction](#introduction) - [Global filter](#global-filter) @@ -29,9 +29,11 @@ The following document defines the standardized global filter that can be used w # Introduction The purpose of Filter rules is to apply the same tuning on many rules with the goal to suppress matches of multiple rules. This is most commonly useful for environment specific tuning where a false positive prone application is used in an organization and its false positives are accepted. + Example: A valid GPO script that triggers multiple Sigma rules. # Global filter + ## File Structure ### YAML File @@ -49,7 +51,7 @@ As a best practice use the prefix `mf_` ### Schema -[meta-filter-schema](/schema/meta-filter-schema.json) +[Sigma Filters JSON Schema](/json-schema/sigma-filters-schema.json) ### Syntax @@ -117,7 +119,7 @@ Use the ISO 8601 date with separator format : YYYY-MM-DD **Use:** mandatory -See log source in [sigma specification](Sigma_specification.md) +Read more on the `logsource` attribute in the [Sigma Rules Specification](/specification/sigma-rules-specification.md) ### Global Filter @@ -141,7 +143,7 @@ refers to one or multiple Sigma rules where to add the filter **Use:** mandatory -See Detection in [sigma specification](Sigma_specification.md) +Read more on the 'detection' section in the [Sigma Rules Specification](/specification/sigma-rules-specification.md) #### filter condition @@ -149,7 +151,7 @@ See Detection in [sigma specification](Sigma_specification.md) **Use:** mandatory -See Detection in [sigma specification](Sigma_specification.md) +Read more on the 'detection' field in the [Sigma Rules Specification](/specification/sigma-rules-specification.md) # Examples @@ -162,14 +164,14 @@ logsource: category: process_creation product: windows filter: - rules: - - 6f3e2987-db24-4c78-a860-b4f4095a7095 # Data Compressed - rar.exe - - df0841c0-9846-4e9f-ad8a-7df91571771b # Login on jump host - selection: - User|startswith: 'adm_' - condition: selection + rules: + - 6f3e2987-db24-4c78-a860-b4f4095a7095 # Data Compressed - rar.exe + - df0841c0-9846-4e9f-ad8a-7df91571771b # Login on jump host + selection: + User|startswith: 'adm_' + condition: selection ``` # History -* 2024-09-01 Specification V2.0.0 - * First release \ No newline at end of file + +* 2024-08-12 Specification v2.0.0 diff --git a/specification/sigma-rules-specification.md b/specification/sigma-rules-specification.md index a4ce4bc..cd74a9b 100644 --- a/specification/sigma-rules-specification.md +++ b/specification/sigma-rules-specification.md @@ -32,7 +32,7 @@ - [Maps](#maps) - [Field Usage](#field-usage) - [Special Field Values](#special-field-values) - - [Field Existance](#field-existence) + - [Field Existence](#field-existence) - [Value Modifiers](#value-modifiers) - [Modifier Types](#modifier-types) - [Placeholders](#placeholders) @@ -45,7 +45,7 @@ - [Tags](#tags) - [Scope](#scope) - [Rule Correlation](#rule-correlation) -- [Global filter](#global-filter) +- [Sigma Filters](#sigma-filters) - [History](#history) # Yaml File @@ -111,6 +111,7 @@ related [optional] taxonomy [optional] status [optional] description [optional] +license [optional] references [optional] author [optional] date [optional] @@ -169,7 +170,7 @@ It is better to write a rule with a new id for the following reasons: * Major changes in the rule. E.g. a different rule logic. * Derivation of a new rule from an existing or refinement of a rule in a way that both are kept active. -* Merge of rules. +* Merging of rules. To be able to keep track of the relationships between detections, Sigma rules may also contain references to related rule identifiers in the *related* attribute. \ @@ -218,7 +219,7 @@ Defines the taxonomy used in the Sigma rule. A taxonomy can define: The Default taxonomy is `sigma`. \ A custom taxonomy must be handled by the used tool or transformed into the default taxonomy. -More information in [Appendix Taxonomy](appendix/appendix_taxonomy.md) +More information on the default taxonomy can be found in the [Sigma Taxonomy Appendix](/appendix/sigma-taxonomy-appendix.md) file. ## Status @@ -229,11 +230,11 @@ More information in [Appendix Taxonomy](appendix/appendix_taxonomy.md) Declares the status of the rule: - `stable`: the rule is considered as stable and may be used in production systems or dashboards. -- `test`: an almost stable rule that possibly could require some fine tuning. +- `test`: a mostly stable rule that could require some slight adjustments depending on the environement. - `experimental`: an experimental rule that could lead to false positives results or be noisy, but could also identify interesting events. - `deprecated`: the rule is replaced or covered by another one. The link is established by the `related` field. -- `unsupported`: the rule cannot be use in its current state (special correlation log, home-made fields) +- `unsupported`: the rule cannot be use in its current state (old correlation format, custom fields) ## Description @@ -241,7 +242,7 @@ Declares the status of the rule: **Use:** optional -A short description of the rule and the malicious activity that can be detected (max. 65,535 characters) +A short and accurate description of the rule and the malicious or suspicious activity that can be detected (max. 65,535 characters) ## License @@ -266,7 +267,7 @@ If there is more than one, they are separated by a comma. **Use:** optional -References to the source that the rule was derived from. \ +References to the sources that the rule was derived from. \ These could be blog articles, technical papers, presentations or even tweets. ## Date @@ -288,6 +289,7 @@ Use the ISO 8601 date with separator format : YYYY-MM-DD Use the ISO 8601 date with separator format : YYYY-MM-DD Reasons to change the modified date: + * changed title * changed detection section * changed level @@ -324,19 +326,20 @@ e.g. "sshd" on Linux or the "Security" Eventlog on Windows systems. The `definition` can be used to describe the log source, including some information on the log verbosity level or configurations that have to be applied. \ It is not automatically evaluated by the converters but gives useful information to readers on how to configure the source to provide the necessary events used in the detection. -The 'category', 'product' and 'service' can be used alone or in any combination. \ +The `category`, `product` and `service` can be used alone or in any combination. \ Their values are in **lower case** and spaces are replaced by a `_` , characters `.` and `-` are allowed. + - Windows Channel "System" -> `service: system` - "Process Creation" -> `category: process_creation` - Cloud OneLogin events -> `service: onelogin.events` - Windows Channel "Microsoft-Windows-Windows Firewall With Advanced Security" -> `service: firewall-as` -You can use the values of 'category, 'product' and 'service' to point the converters to a certain index. \ -In the configuration files, it can be defined that the category 'firewall' converts to `( index=fw1* OR index=asa* )` during Splunk search conversion or the product 'windows' converts to `"_index":"logstash-windows*"` in Elasticsearch queries. +You can use the values of `category`, `product` and `service` to point the converters to a certain index. \ +In the configuration files, it can be defined that the category `firewall` converts to `( index=fw1* OR index=asa* )` during Splunk search conversion or the product `windows` converts to `"_index":"logstash-windows*"` in Elasticsearch queries. -The advantages of this abstractive approach is that it does not limit the rule to a specific telemetry. +The advantages of this abstract approach is that it does not limit the rule to a specific telemetry source. -Instead of definition of multiple rules for Sysmon, Windows Security Auditing and all other possible product-specific, a generic log sources may be used. \ +Instead creating multiple rules for the different telemetry sources such as `Sysmon`, `Microsoft-Windows-Security-Auditing`, `Microsoft-Windows-Kernel-Process` and all the other possible product-specific sources, a generic log source may be used. \ e.g.: ```yml @@ -344,9 +347,7 @@ category: process_creation product: windows ``` -The rule can be use with Sysmon, Windows Security Auditing and possible product-specific like EDR. - -More information in [appendix_taxonomy](appendix/appendix_taxonomy.md) and [SigmaHQ documentation](https://github.com/SigmaHQ/sigma/blob/master/documentation/README.md) +More details can be found in the [Sigma Taxonomy Appendix](/appendix/sigma-taxonomy-appendix.md) file, and [SigmaHQ Logsource Guides](https://github.com/SigmaHQ/sigma/tree/master/documentation/logsource-guides) ## Detection @@ -362,29 +363,29 @@ A definition that can consist of two different data structures - lists and maps. ### General -* All values are treated as case-insensitive strings -* You can use wildcard characters `*` and `?` in strings (see also escaping section below) -* Regular expressions are case-sensitive by default -* You don't have to escape characters except the string quotation marks `'` +* All values are treated as case-insensitive strings. +* You can use wildcard characters `*` and `?` in strings (see also [escaping](#escaping) section below). +* Regular expressions are case-sensitive by default. +* You don't have to escape characters except the string quotation marks `'`. ### String Wildcard Wildcards are used when part of the text is random. You can use : -* `?` to replace a single mandatory character -* `*` to replace an unbounded length wildcard +* `?` to replace a single mandatory character. +* `*` to replace an unbounded length wildcard. -example : +example: * `progA.exe or progB.exe or ...` will be `prog?.exe` * `antivirus_V1.exe or antivirus_V21.2.1.exe or ...` will be `antivirus_V*.exe` Sigma has special modifiers to facilitate the search of unbounded strings -* `*something` see [endswith modifier](#value-modifiers) -* `something*` see [startswith modifier](#value-modifiers) -* `*something*` see [contains modifier](#value-modifiers) +* `*something` see [endswith modifier](#value-modifiers). +* `something*` see [startswith modifier](#value-modifiers). +* `*something*` see [contains modifier](#value-modifiers). ### Escaping @@ -393,9 +394,9 @@ The backslash character `\` is used for escaping of wildcards `*` and `?` as wel Summarized, these are the following possibilities: * Plain backslash not followed by a wildcard can be expressed as single `\` or double backslash `\\`. For simplicity reasons the single notation is recommended. -* A wildcard has to be escaped to be handled as a plain character: `\*` -* The backslash before a wildcard has to be escaped to handle the value as a backslash followed by a wildcard: `\\*` -* Three backslashes are necessary to escape both, the backslash and the wildcard and handle them as plain values: `\\\*` +* A wildcard has to be escaped to be handled as a plain character. eg: `\*`, `\?`. +* The backslash before a wildcard has to be escaped to handle the value as a backslash followed by a wildcard: `\\*`. +* Three backslashes are necessary to escape both, the backslash and the wildcard and handle them as plain values: `\\\*`. * Three or four backslashes are handled as double backslash. Four is recommended for consistency reasons: `\\\\` results in the plain value `\\`. ### Lists @@ -409,21 +410,21 @@ Example for list of strings: Matches on 'EvilService' **or** 'svchost.exe -n evi ```yml detection: - keywords: - - 'EVILSERVICE' - - 'svchost.exe -n evil' + keywords: + - 'EVILSERVICE' + - 'svchost.exe -n evil' ``` Example for list of maps: ```yml detection: - selection: - - Image|endswith: '\\example.exe' - - Description|contains: 'Test executable' + selection: + - Image|endswith: '\\example.exe' + - Description|contains: 'Test executable' ``` -The example above matches an image value ending with `example.exe` or an executable with a description containing the string `Test executable` +The example above matches an image value ending with `example.exe` **or** an executable with a description containing the string `Test executable`. ### Maps @@ -431,35 +432,35 @@ Maps (or dictionaries) consist of key/value pairs, in which the key is a field i Examples: -Matches on Eventlog 'Security' **and** ( Event ID 517 **or** Event ID 1102 ) +The example below, matches on EventLog 'Security' **and** ( Event ID 517 **or** Event ID 1102 ) ```yml detection: - selection: - EventLog: Security - EventID: - - 517 - - 1102 -condition: selection + selection: + EventLog: Security + EventID: + - 517 + - 1102 + condition: selection ``` Matches on Eventlog 'Security' **and** Event ID 4679 **and** TicketOptions 0x40810000 **and** TicketEncryption 0x17 ```yml detection: - selection: - EventLog: Security - EventID: 4769 - TicketOptions: '0x40810000' - TicketEncryption: '0x17' -condition: selection + selection: + EventLog: Security + EventID: 4769 + TicketOptions: '0x40810000' + TicketEncryption: '0x17' + condition: selection ``` ### Field Usage 1. For fields with existing field-mappings, use the mapped field name. -Examples mapping `sigma` taxonomy name to windows event build in: +Below is an example mapping `sigma` taxonomy name to built-in windows events: ```yml fieldmappings: @@ -472,7 +473,8 @@ fieldmappings: 2. For new or rarely used fields, use them as they appear in the log source and strip all spaces. (This means: Only, if the field is not already mapped to another field name.) On Windows event log sources, use the field names of the details view as the general view might contain localized field names. -Examples: +Example: + * `New Value` -> `NewValue` * `SAM User Account` -> `SAMUserAccount` @@ -505,12 +507,11 @@ Example: ```yml detection: - selection: - EventID: 4738 - filter: - PasswordLastSet: null -condition: - selection and not filter + selection: + EventID: 4738 + filter: + PasswordLastSet: null + condition: selection and not filter ``` ### Field Existence @@ -521,10 +522,10 @@ Example: ```yml detection: - selection: - EventID: 4738 - PasswordLastSet|exists: true -condition: selection + selection: + EventID: 4738 + PasswordLastSet|exists: true + condition: selection ``` @@ -590,21 +591,21 @@ They are built by using a list under a search-identifiers. ```yml detection: - mimikatz_keywords: - - 'event::clear' - - 'event::drop' - condition: mimikatz_keywords + mimikatz_keywords: + - 'event::clear' + - 'event::drop' + condition: mimikatz_keywords ``` Give : "event::clear" **or** "event::drop" To have a **and** operator , we use the `'|all':` modifier ```yaml detection: - keywords_cmdlet: - '|all': - - 'OabVirtualDirectory' - - ' -ExternalUrl ' -condition: keywords_cmdlet + keywords_cmdlet: + '|all': + - 'OabVirtualDirectory' + - ' -ExternalUrl ' + condition: keywords_cmdlet ``` Give : "OabVirtualDirectory" **and** " -ExternalUrl " @@ -704,7 +705,7 @@ A Sigma rule can be categorized with tags. Tags should generally follow this syn * Keep tags short, e.g. numeric identifiers instead of long sentences * Feel free to send pull request or issues with proposals for new tags -[More information about tags](appendix/appendix_tags.md) +[More information about tags](/appendix/sigma-tags-appendix.md) ## Scope @@ -712,29 +713,27 @@ A Sigma rule can be categorized with tags. Tags should generally follow this syn **Use:** optional -A list of intended scope of the rule. +A list of the intended scopes of the rule. This would allow you to define if a rule is meant to trigger on specific set of types of machines that might have a specific software installed. -For example , you have a rule for a registry key with exist only on windows server./ -The logsource will be `category: registry_set` and the scope `server` +For example , if you have a rule for a registry key being set, where the key only exists on windows server installations./ +A scope with the value `server` can be added to limit this rule only to Windows Servers. # Rule Correlation Correlation allows several events to be linked together. / To make it easier to read these corelation rules, they are written in meta-rules. -See [Sigma Meta Rules](Sigma_meta_rules.md) +Check out the [Sigma Correlation Rules Specification](/specification/sigma-correlation-rules-specification.md) for more details. -# Global filter +# Sigma Filters To adapt the rules to the environment, it is sometimes useful to put the same exclusion in several rules. / Their maintenance can become difficult, with a meta-filter it is possible to write it in a single place. -See [Sigma Meta Filter](Sigma_meta_filter.md) +Check out the [Sigma Filters Specification](/specification/sigma-filters-specification.md) for more details. # History -* 2024-09-01 Specification V2.0.0 - * First release -* 2023-06-29 Specification V1.0.4 - * Complete the information for multiple conditions -* 2022-12-28 Specification V1.0.3 - * Add missing `timeframe` attribute + +* 2024-08-12 Specification v2.0.0 +* 2023-06-29 Specification v1.0.4 +* 2022-12-28 Specification v1.0.3 From 599518a0e3cc8edb07133df9c666077bf74bf711 Mon Sep 17 00:00:00 2001 From: Nasreddine Bencherchali <8741929+nasbench@users.noreply.github.com> Date: Mon, 5 Aug 2024 12:32:22 +0200 Subject: [PATCH 17/31] small update --- README.md | 4 ++++ version-2-changes.md | 34 ++++++++++++++++++++++++++-------- 2 files changed, 30 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 9b3fbcb..e1c0078 100644 --- a/README.md +++ b/README.md @@ -60,3 +60,7 @@ Here's what you can expect from each of the main subfolders within this repo. Pl * [SigmaHQ Rule Convention](/sigmahq/sigmahq-rule-convention.md) * [SigmaHQ Filename Convention](/sigmahq/sigmahq-filename-convention.md) * [SigmaHQ Title Convention](/sigmahq/sigmahq-title-convention.md) + +## Version 2 Changes + +You can read more on the potential breaking changes and additional features introduced in version 2.0.0 of the specification [here](version-2-changes.md) diff --git a/version-2-changes.md b/version-2-changes.md index dc895f8..e390cda 100644 --- a/version-2-changes.md +++ b/version-2-changes.md @@ -1,23 +1,41 @@ +# Changes and Feature Introduced in V2.0.0 + The following is a non-exhaustive list of changes between the v1 and v2 specification. -# Sigmac +## Sigmac As of August 1st 2024 the `sigmac` toolchain has reached it's end of life, and its corresponding [repository](https://github.com/SigmaHQ/legacy-sigmatools) has been archived. The `sigmac` toolchain doesn't take into account new feature introduced in the second version specification. The `pySigma` library and it's corresponding command line interface `sigma-cli`, provide full support for version 2 of the specification. -# Date +## Date & Modified Field The latest version of the specification drops support for the date format using a slash `/` separator (YYYY/MM/DD), and now it only recommend the usage of the ISO 8601 format with the a `-` separator (YYYY-MM-DD). -# Modifiers +## Tags Field + +The latest version of the specification changed the use of "underscore" and "dots" in favour of "dashes" for the following tag namespaces: + +* ATT&CK +* CVE +* Detection + +## Related Field + +The related field type `obsoletes` has been changed to `obsolete` for consistency purposes. + +## Rx Schema + +The latest version of the specification drops the support for the Rx-Schema in favour of a [JSON schema](/json-schema/). + +## Modifiers -The latest version of the specification and by extension the `pySigma` library, introduces a new set of modifier. You can check the full list of all supported modifiers in the [modifiers appendix](./appendix/appendix_modifiers.md). +The latest version of the specification and by extension the `pySigma` library, introduces a new set of modifier. You can check the full list of all currently supported modifiers in the [Sigma Modifiers Appendix](./appendix/sigma-modifiers-appendix.md). -# Correlation +## Correlation -The latest version of the specification drops the usage of the old aggregation expression, in favour of a new format titles meta rules. Check out the [Sigma Meta Rules Specification](/sigma_meta_rules.md) files for a detailed description of the format. +The latest version of the specification drops the usage of the old aggregation expression, in favour of a new format titled meta/correlation rules. Check out the [Sigma Correlation Rules Specification](/specification/sigma-correlation-rules-specification.md) for full details. -# Sigma Filters +## Sigma Filters -Check out the [Sigma Meta Filter Specification](/Sigma_meta_filter.md) for a detailed description of the format. +Check out the [Sigma Filters Specification](/specification/sigma-filters-specification.md) for a detailed description of the format. From 35152438c613647ae4935b5e7eb3ed60b141ea8a Mon Sep 17 00:00:00 2001 From: Nasreddine Bencherchali <8741929+nasbench@users.noreply.github.com> Date: Mon, 5 Aug 2024 12:34:30 +0200 Subject: [PATCH 18/31] folder change --- README.md | 6 +++--- {images => media/images}/sigma_logo_dark.png | Bin {images => media/images}/sigma_logo_light.png | Bin version-2-changes.md => other/version-2-changes.md | 0 4 files changed, 3 insertions(+), 3 deletions(-) rename {images => media/images}/sigma_logo_dark.png (100%) rename {images => media/images}/sigma_logo_light.png (100%) rename version-2-changes.md => other/version-2-changes.md (100%) diff --git a/README.md b/README.md index e1c0078..e78adf9 100644 --- a/README.md +++ b/README.md @@ -4,8 +4,8 @@


- - Sigma Logo + + Sigma Logo

@@ -63,4 +63,4 @@ Here's what you can expect from each of the main subfolders within this repo. Pl ## Version 2 Changes -You can read more on the potential breaking changes and additional features introduced in version 2.0.0 of the specification [here](version-2-changes.md) +You can read more on the potential breaking changes and additional features introduced in version 2.0.0 of the specification [here](./other/version-2-changes.md) diff --git a/images/sigma_logo_dark.png b/media/images/sigma_logo_dark.png similarity index 100% rename from images/sigma_logo_dark.png rename to media/images/sigma_logo_dark.png diff --git a/images/sigma_logo_light.png b/media/images/sigma_logo_light.png similarity index 100% rename from images/sigma_logo_light.png rename to media/images/sigma_logo_light.png diff --git a/version-2-changes.md b/other/version-2-changes.md similarity index 100% rename from version-2-changes.md rename to other/version-2-changes.md From 16d95c355ed2fa08fd36b6f0de876d08e69d3cbe Mon Sep 17 00:00:00 2001 From: Nasreddine Bencherchali <8741929+nasbench@users.noreply.github.com> Date: Mon, 5 Aug 2024 12:48:45 +0200 Subject: [PATCH 19/31] Update sigma-modifiers-appendix.md --- appendix/sigma-modifiers-appendix.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appendix/sigma-modifiers-appendix.md b/appendix/sigma-modifiers-appendix.md index f9db18a..23e063d 100644 --- a/appendix/sigma-modifiers-appendix.md +++ b/appendix/sigma-modifiers-appendix.md @@ -31,7 +31,7 @@ The following document defines the standardized modifiers that can be used in Si field. * `exists`: Defines that a certain field has to exist or must not exist in a log event by providing a boolean value. -* `cased`: Values are applied case sensitively. Default Sigma behaviour is case-insensitive matching. +* `cased`: Values are applied case sensitively. Default Sigma behavior is case-insensitive matching. ### String only From 77b23f5bd0ec59139eead8d535765a4274c47eb1 Mon Sep 17 00:00:00 2001 From: Florian Roth Date: Mon, 5 Aug 2024 13:02:31 +0200 Subject: [PATCH 20/31] fix: some fixes --- .../sigma-correlation-rules-specification.md | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/specification/sigma-correlation-rules-specification.md b/specification/sigma-correlation-rules-specification.md index d0a6a34..1448c42 100644 --- a/specification/sigma-correlation-rules-specification.md +++ b/specification/sigma-correlation-rules-specification.md @@ -44,13 +44,13 @@ The following document defines the standardized correlation that can be used in # Introduction -Sometimes you need more advanced searches than simple selections. -For that you can use meta-rules that correlate multiple Sigma rules. +Sometimes you need more advanced searches than simple selections. +For this purpose, you can use meta-rules that correlate multiple Sigma rules. ## Compatibility When generating a backend specific query, Sigma correlations might exceed the capabilities of that targeted backend. \ -Or the Sigma correlation might required a feature that is only supported partially by the target backend. \ +Or the Sigma correlation might require a feature that is only supported partially by the target backend. \ Therefore target-specific restrictions should be handled in a way that ensures that the generated queries do not create results that: * Could be misinterpreted @@ -68,7 +68,7 @@ The conversion backend should issue a warning to raise the user’s awareness ab Examples are: * Temporal relationships are recognized, but the order of the events cannot be recognized by the target system. This could cause false positives by differently ordered events. -* Temporal relationships are only recognized within static time boundaries, e.g. a timespan of 1h only matches if all events appear within a full hour, but not if some events appear in the previous and another event in the current hour. This could cause false negatives. +* Temporal relationships are only recognized within static time boundaries, e.g. a `timespan` of 1h only matches if all events appear within a full hour, but not if some events appear in the previous and another event in the current hour. This could cause false negatives. ## Expression of Relationships In The Condition of Sigma Rules @@ -84,9 +84,9 @@ Sigma correlations are not based on this approach for the following reasons: The purpose is to cover a detection like: -* X invalid login alerts on a unique host -* Invalid login alert on the same host but from X remote -* Alert A, B and C in the same timespan +* X invalid login alerts on a unique host. +* Invalid login alert on the same host but from X remote. +* Alert A, B and C in the same `timespan`. # Correlation rules @@ -100,7 +100,7 @@ To keep the file names interoperable use the following: - Length between 10 and 70 characters - Lowercase -- No special characters only letters (a-z) and digits (0-9) +- No special characters, only letters (a-z) and digits (0-9) - Use `_` instead of a space - Use `.yml` as a file extension @@ -114,7 +114,7 @@ As a best practice use the prefix `mr_`. ### Syntax A Sigma correlation is a dedicated YAML document. -Like sigma rules , correlation rules have a title and a unique id to identify them. +Like Sigma rules , correlation rules have a title and a unique id to identify them. ## Components @@ -174,7 +174,7 @@ These could be blog articles, technical papers, presentations or even tweets. **Use:** optional Creation date of the meta rule. \ -Use the ISO 8601 date with separator format : YYYY-MM-DD +Use the ISO 8601 date with separator format: `YYYY-MM-DD` ### Modified @@ -183,7 +183,7 @@ Use the ISO 8601 date with separator format : YYYY-MM-DD **Use:** optional *Last* modification date of the meta rule. \ -Use the ISO 8601 date with separator format : YYYY-MM-DD +Use the ISO 8601 date with separator format : `YYYY-MM-DD` ### Correlation section @@ -284,7 +284,7 @@ condition: gte: 100 ``` -To select a range , you can use the map AND +To define a range, you can use the conjunction 'AND' in the mapping. Example "101 to 200": ```yaml From 7df2fb827a6fff4740507e33d67e35ed0243fb62 Mon Sep 17 00:00:00 2001 From: Nasreddine Bencherchali <8741929+nasbench@users.noreply.github.com> Date: Mon, 5 Aug 2024 13:15:47 +0200 Subject: [PATCH 21/31] Update appendix/sigma-modifiers-appendix.md Co-authored-by: frack113 <62423083+frack113@users.noreply.github.com> --- appendix/sigma-modifiers-appendix.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/appendix/sigma-modifiers-appendix.md b/appendix/sigma-modifiers-appendix.md index 23e063d..660dc52 100644 --- a/appendix/sigma-modifiers-appendix.md +++ b/appendix/sigma-modifiers-appendix.md @@ -63,10 +63,10 @@ The following document defines the standardized modifiers that can be used in Si by zero to two bytes and except the first and last byte the encoded values have a static part in the middle that can be recognized. -* `utf16le`: Transforms value to UTF16-LE encoding, e.g. `cmd` > `63 00 6d 00 64 00` (only used in combination with base64 modifiers) -* `utf16be`: Transforms value to UTF16-BE encoding, e.g. `cmd` > `00 63 00 6d 00 64` (only used in combination with base64 modifiers) -* `wide`: Alias for `utf16le` modifier -* `utf16`: Prepends a [byte order mark](https://en.wikipedia.org/wiki/Byte_order_mark) and encodes UTF16, e.g. `cmd` > `FF FE 63 00 6d 00 64 00` (only used in combination with base64 modifiers) +* `base64` sub-modifier + * `utf16le`: Transforms value to UTF16-LE encoding, e.g. `cmd` > `63 00 6d 00 64 00` + * `utf16be`: Transforms value to UTF16-BE encoding, e.g. `cmd` > `00 63 00 6d 00 64` + * `utf16`: Prepends a [byte order mark](https://en.wikipedia.org/wiki/Byte_order_mark) and encodes UTF16, e.g. `cmd` > `FF FE 63 00 6d 00 64 00` ## Specific From ad5ca764fca87c96391d1b09e4d669652c5fe888 Mon Sep 17 00:00:00 2001 From: Nasreddine Bencherchali <8741929+nasbench@users.noreply.github.com> Date: Mon, 5 Aug 2024 13:15:51 +0200 Subject: [PATCH 22/31] Update sigmahq/sigmahq-title-convention.md Co-authored-by: frack113 <62423083+frack113@users.noreply.github.com> --- sigmahq/sigmahq-title-convention.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sigmahq/sigmahq-title-convention.md b/sigmahq/sigmahq-title-convention.md index a17ae40..df8032f 100644 --- a/sigmahq/sigmahq-title-convention.md +++ b/sigmahq/sigmahq-title-convention.md @@ -1,4 +1,4 @@ -# SigmaHQ Rule Conventions +# SigmaHQ Title Conventions This document provides general guidelines and tips on how to write titles for sigma rules. From 9cb652a2e7f990161f2b4a091f17c5e329f4056a Mon Sep 17 00:00:00 2001 From: Nasreddine Bencherchali <8741929+nasbench@users.noreply.github.com> Date: Mon, 5 Aug 2024 13:19:20 +0200 Subject: [PATCH 23/31] Update sigmahq-filename-convention.md --- sigmahq/sigmahq-filename-convention.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sigmahq/sigmahq-filename-convention.md b/sigmahq/sigmahq-filename-convention.md index c240dcb..be9e285 100644 --- a/sigmahq/sigmahq-filename-convention.md +++ b/sigmahq/sigmahq-filename-convention.md @@ -1,4 +1,4 @@ -# SigmaHQ Filename Normalisation +# SigmaHQ Filename Conventions This document describe a soft convention to name rule files. The following convention has been set to help with the management of the rules files repository and is not part of the SIGMA specification. @@ -97,7 +97,7 @@ The naming convetion for rules using linux services is the as follows: ### Windows -The naming convetion for rules using windows services is the as follows: +The naming convention for rules using windows services is the as follows: - Filename must start with `win_` - Followed by the service name and underscore at the end `service_`. Example: `applocker_` From b1f6855d281d6f3aa05f0b7028476920ff489457 Mon Sep 17 00:00:00 2001 From: Nasreddine Bencherchali <8741929+nasbench@users.noreply.github.com> Date: Mon, 5 Aug 2024 13:31:18 +0200 Subject: [PATCH 24/31] Update sigma-correlation-rules-specification.md --- specification/sigma-correlation-rules-specification.md | 1 - 1 file changed, 1 deletion(-) diff --git a/specification/sigma-correlation-rules-specification.md b/specification/sigma-correlation-rules-specification.md index 1448c42..94b92ad 100644 --- a/specification/sigma-correlation-rules-specification.md +++ b/specification/sigma-correlation-rules-specification.md @@ -253,7 +253,6 @@ The following format must be used: `number + letter (in lowercase)` - Xh hours - Xd days - example for 1h30 : `timespan: 90m` #### Condition From 32a754002630b452af01dad877b56b5275bbfafe Mon Sep 17 00:00:00 2001 From: Nasreddine Bencherchali <8741929+nasbench@users.noreply.github.com> Date: Mon, 5 Aug 2024 13:31:41 +0200 Subject: [PATCH 25/31] Update appendix/sigma-modifiers-appendix.md Co-authored-by: frack113 <62423083+frack113@users.noreply.github.com> --- appendix/sigma-modifiers-appendix.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/appendix/sigma-modifiers-appendix.md b/appendix/sigma-modifiers-appendix.md index 660dc52..332a27e 100644 --- a/appendix/sigma-modifiers-appendix.md +++ b/appendix/sigma-modifiers-appendix.md @@ -37,9 +37,10 @@ The following document defines the standardized modifiers that can be used in Si * `windash`: Creates all possible permutations of the `-` and `/` characters. Windows command line flags can often be indicated by both characters. Using the `windash` modifier converts `-` values into `/` and vice versa and uses all possible permutation of strings in the selection. * `re`: Value is handled as a regular expression by backends. Regex is matched case-sensitive by default - * `i`: (insensitive) `re` sub-modifier to enable case-sensitive matching. - * `m`: (multi line) `re` sub-modifier to match across multiple lines. `^` /`$` match the start/end of line. - * `s`: (single line) `re` sub-modifier to enable that dot (`.`) matches all characters, including the newline character. +* `re` sub-modifier + * `i`: (insensitive) to enable case-sensitive matching. + * `m`: (multi line) to match across multiple lines. `^` /`$` match the start/end of line. + * `s`: (single line) to enable that dot (`.`) matches all characters, including the newline character. ### Numeric only From 28356a6a749a4254c2ae560884e7ab00cc728bb3 Mon Sep 17 00:00:00 2001 From: Nasreddine Bencherchali <8741929+nasbench@users.noreply.github.com> Date: Mon, 5 Aug 2024 13:35:15 +0200 Subject: [PATCH 26/31] Update sigma-modifiers-appendix.md --- appendix/sigma-modifiers-appendix.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/appendix/sigma-modifiers-appendix.md b/appendix/sigma-modifiers-appendix.md index 332a27e..07ea933 100644 --- a/appendix/sigma-modifiers-appendix.md +++ b/appendix/sigma-modifiers-appendix.md @@ -35,9 +35,10 @@ The following document defines the standardized modifiers that can be used in Si ### String only -* `windash`: Creates all possible permutations of the `-` and `/` characters. Windows command line flags can often be indicated by both characters. Using the `windash` modifier converts `-` values into `/` and vice versa and uses all possible permutation of strings in the selection. +* `windash`: Creates all possible permutations of the `-`, `/`, `–` (en dash), `—` (em dash), and `―` (horizontal bar) characters. Windows command line flags can often be indicated by both characters. Using the `windash` modifier converts the aforementioned characters interchangeably and uses all possible permutation of strings in the selection. + * `re`: Value is handled as a regular expression by backends. Regex is matched case-sensitive by default -* `re` sub-modifier +* `re` sub-modifiers: * `i`: (insensitive) to enable case-sensitive matching. * `m`: (multi line) to match across multiple lines. `^` /`$` match the start/end of line. * `s`: (single line) to enable that dot (`.`) matches all characters, including the newline character. @@ -64,7 +65,7 @@ The following document defines the standardized modifiers that can be used in Si by zero to two bytes and except the first and last byte the encoded values have a static part in the middle that can be recognized. -* `base64` sub-modifier +* `base64` sub-modifiers: * `utf16le`: Transforms value to UTF16-LE encoding, e.g. `cmd` > `63 00 6d 00 64 00` * `utf16be`: Transforms value to UTF16-BE encoding, e.g. `cmd` > `00 63 00 6d 00 64` * `utf16`: Prepends a [byte order mark](https://en.wikipedia.org/wiki/Byte_order_mark) and encodes UTF16, e.g. `cmd` > `FF FE 63 00 6d 00 64 00` From 07cdebc84d97385a674f39b9cf35dd0ef19b542f Mon Sep 17 00:00:00 2001 From: Nasreddine Bencherchali <8741929+nasbench@users.noreply.github.com> Date: Mon, 5 Aug 2024 13:36:28 +0200 Subject: [PATCH 27/31] Update sigma-modifiers-appendix.md --- appendix/sigma-modifiers-appendix.md | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/appendix/sigma-modifiers-appendix.md b/appendix/sigma-modifiers-appendix.md index 07ea933..eb77d8b 100644 --- a/appendix/sigma-modifiers-appendix.md +++ b/appendix/sigma-modifiers-appendix.md @@ -15,7 +15,6 @@ The following document defines the standardized modifiers that can be used in Si - [Specific](#specific) - [History](#history) - ## General * `all`: Normally, lists of values are linked with *OR* in the generated query. This modifier @@ -43,7 +42,6 @@ The following document defines the standardized modifiers that can be used in Si * `m`: (multi line) to match across multiple lines. `^` /`$` match the start/end of line. * `s`: (single line) to enable that dot (`.`) matches all characters, including the newline character. - ### Numeric only * `lt`: Field is less than the value @@ -51,11 +49,9 @@ The following document defines the standardized modifiers that can be used in Si * `gt`: Field is greater than the value * `gte`: Field is greater or equal than the value - ### Ip only -* `cidr`: The value is handled as an CIDR by backends - +* `cidr`: The value is handled as an CIDR by backends. Supports both IPv4 and IPv6 notations. ### String Encoding @@ -70,7 +66,6 @@ The following document defines the standardized modifiers that can be used in Si * `utf16be`: Transforms value to UTF16-BE encoding, e.g. `cmd` > `00 63 00 6d 00 64` * `utf16`: Prepends a [byte order mark](https://en.wikipedia.org/wiki/Byte_order_mark) and encodes UTF16, e.g. `cmd` > `FF FE 63 00 6d 00 64 00` - ## Specific * `expand`: Modifier for expansion of placeholders in values. The final behavior of the replacement is determined by processing pipeline transformations. Current possibilities in pySigma are: From add661eecb8e55d25a3e87130a0388f35a8204a1 Mon Sep 17 00:00:00 2001 From: Nasreddine Bencherchali <8741929+nasbench@users.noreply.github.com> Date: Mon, 5 Aug 2024 13:37:58 +0200 Subject: [PATCH 28/31] Update version-2-changes.md --- other/version-2-changes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/other/version-2-changes.md b/other/version-2-changes.md index e390cda..63f24da 100644 --- a/other/version-2-changes.md +++ b/other/version-2-changes.md @@ -26,7 +26,7 @@ The related field type `obsoletes` has been changed to `obsolete` for consistenc ## Rx Schema -The latest version of the specification drops the support for the Rx-Schema in favour of a [JSON schema](/json-schema/). +The latest version of the specification drops the support for the [Rx-Schema](https://github.com/SigmaHQ/sigma-specification/blob/69ce07a4068a9668098eef148ab874862625bbeb/archives/wiki.md#rx-yaml) in favour of a [JSON schema](/json-schema/). ## Modifiers From e3d9af56a2329e4b4d04435b31fd1b20ae291132 Mon Sep 17 00:00:00 2001 From: Florian Roth Date: Mon, 5 Aug 2024 14:31:39 +0200 Subject: [PATCH 29/31] Update sigma-correlation-rules-specification.md --- specification/sigma-correlation-rules-specification.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/specification/sigma-correlation-rules-specification.md b/specification/sigma-correlation-rules-specification.md index 1448c42..aee9024 100644 --- a/specification/sigma-correlation-rules-specification.md +++ b/specification/sigma-correlation-rules-specification.md @@ -230,6 +230,8 @@ correlation: defines field name aliases that are applied to correlated Sigma rules. The defined aliases can then be defined in `group-by` and allows aggregation across different fields in different event types. +See the example in the chapter [Field Name Aliases](#field-name-aliases) to get a better understanding. + #### Grouping **Attribute:** group-by From 2ed4f1dde959ee65de1b1dbba1b5d1eac0ab49a8 Mon Sep 17 00:00:00 2001 From: Nasreddine Bencherchali <8741929+nasbench@users.noreply.github.com> Date: Mon, 5 Aug 2024 14:42:19 +0200 Subject: [PATCH 30/31] Update appendix/sigma-modifiers-appendix.md Co-authored-by: frack113 <62423083+frack113@users.noreply.github.com> --- appendix/sigma-modifiers-appendix.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appendix/sigma-modifiers-appendix.md b/appendix/sigma-modifiers-appendix.md index eb77d8b..8bf7afa 100644 --- a/appendix/sigma-modifiers-appendix.md +++ b/appendix/sigma-modifiers-appendix.md @@ -29,7 +29,7 @@ The following document defines the standardized modifiers that can be used in Si * `contains`: Puts `*` wildcards around the values, such that the value is matched anywhere in the field. -* `exists`: Defines that a certain field has to exist or must not exist in a log event by providing a boolean value. +* `exists`: Defines that a certain field has to exist or must not exist in a log event by providing a boolean value. Note that this check only verifies the presence of a field, not its value, be it empty or null. * `cased`: Values are applied case sensitively. Default Sigma behavior is case-insensitive matching. ### String only From f501bfa2f0d8e92bf582d5c86ce1c3d5c6962564 Mon Sep 17 00:00:00 2001 From: Nasreddine Bencherchali <8741929+nasbench@users.noreply.github.com> Date: Tue, 6 Aug 2024 11:38:38 +0200 Subject: [PATCH 31/31] Update sigmahq-title-convention.md --- sigmahq/sigmahq-title-convention.md | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/sigmahq/sigmahq-title-convention.md b/sigmahq/sigmahq-title-convention.md index df8032f..0167791 100644 --- a/sigmahq/sigmahq-title-convention.md +++ b/sigmahq/sigmahq-title-convention.md @@ -69,25 +69,33 @@ Example: - "Renamed xxx Execution" - "UAC Bypass Using ..." -Rules of level `informational` or `low` are not intended to be used to create alerts on their own. Their purpose is to conserve events or criteria of relevance, to be used in correlations or for ideas for threat hunting. A rule of those levels will by definition not create false positives as they should not be used for alerting. +#### Informational / Low Level Rules + +Events matching rules of level `informational` or `low` are not intended to be used to create alerts on their own. Their purpose is to conserve events or criteria of relevance, to be used in correlations or for ideas for threat hunting. A rule of those levels will by definition not create false positives as they should not be used for alerting. The title should therefore be general and should not indicate that the rule describes suspicious or malicious behavior. Example : `Net.exe Execution` -`medium` rules can have environment dependent false positives and require a tuning/evaluation phase before deploying to production environments. +#### Medium Level Rules + +Events matching `medium` level rules rules can have environment dependent false positives and require a tuning/evaluation phase before deploying to production environments. Keywords used to indicate this: - "Potential " -`high` rules requires a prompt review. +#### High Level Rules + +Events matching `high` level rules requires a prompt review. Keywords used to indicate this: - "Suspicious " -`critical` rules should be reviewed immediately +#### Critical Level Rules + +Events matching `critical` level rules should be reviewed immediately The title must therefore be precise and indicate the specific threat. Keywords used to indicate this: