From 08a1d4ef9f64685f23a942736b370c30ce138d0c Mon Sep 17 00:00:00 2001 From: Yamato Security <71482215+YamatoSecurity@users.noreply.github.com> Date: Tue, 19 Dec 2023 20:38:13 +0900 Subject: [PATCH 1/2] add list of unsupported modifiers --- README-Japanese.md | 12 ++++++++++++ README.md | 12 ++++++++++++ 2 files changed, 24 insertions(+) diff --git a/README-Japanese.md b/README-Japanese.md index a1bb3da1c..48a36e3dd 100644 --- a/README-Japanese.md +++ b/README-Japanese.md @@ -37,6 +37,7 @@ - [EventDataの例外的なパターン](#eventdataの例外的なパターン) - [同じ名前の複数のフィールド名からフィールドデータを出力する](#同じ名前の複数のフィールド名からフィールドデータを出力する) - [パイプ修飾子 (Pipe Modifiers)](#パイプ修飾子-pipe-modifiers) + - [対応していないパイプ修飾子](#対応していないパイプ修飾子) - [ワイルドカード](#ワイルドカード) - [イベントキー内のキーワードのネスト](#イベントキー内のキーワードのネスト) - [regexesとallowlistキーワード](#regexesとallowlistキーワード) @@ -505,6 +506,17 @@ detection: condition: keywords ``` +## 対応していないパイプ修飾子 + +以下の修飾子は、現在サポートされていないため、Sigmaリポジトリでこれらの修飾子を使用するルールは含まれていません: +- `expand` +- `gt` +- `gte` +- `lt` +- `lte` +- `utf16 / utf16le / utf16be / wide` +- `windash` + ## ワイルドカード Hayabusaルールではワイルドカードを使用することができます。以下の例では、`ProcessCommandLine` が "malware" という文字列で始まる場合、このルールでログが検知されます。この仕様はSigmaルールのワイルドカードと同じく、大文字小文字を区別しません。 diff --git a/README.md b/README.md index 248a2888f..08f231d73 100644 --- a/README.md +++ b/README.md @@ -37,6 +37,7 @@ This is the repository for [hayabusa](https://github.com/Yamato-Security/hayabus - [Abnormal patterns in EventData](#abnormal-patterns-in-eventdata) - [Outputting field data from multiple field names with the same name](#outputting-field-data-from-multiple-field-names-with-the-same-name) - [Pipe Modifiers](#pipe-modifiers) + - [Unsupported Pipe Modifiers](#unsupported-pipe-modifiers) - [Wildcards](#wildcards) - [Nesting keywords inside eventkeys](#nesting-keywords-inside-eventkeys) - [regexes and allowlist keywords](#regexes-and-allowlist-keywords) @@ -505,6 +506,17 @@ detection: condition: keywords ``` +## Unsupported Pipe Modifiers + +The following modifiers are currently not supported so we do not include any rules from the Sigma repository that use them: +- `expand` +- `gt` +- `gte` +- `lt` +- `lte` +- `utf16 / utf16le / utf16be / wide` +- `windash` + ## Wildcards Wildcards can be used in eventkeys. In the example below, if `ProcessCommandLine` starts with the string "malware", the rule will match. From 2e86adcfa69d83ad69515716d71f555943f75ca8 Mon Sep 17 00:00:00 2001 From: Yamato Security <71482215+YamatoSecurity@users.noreply.github.com> Date: Wed, 20 Dec 2023 07:09:33 +0900 Subject: [PATCH 2/2] update --- README-Japanese.md | 37 ++++++++++++++++++++++--------------- README.md | 36 ++++++++++++++++++++---------------- 2 files changed, 42 insertions(+), 31 deletions(-) diff --git a/README-Japanese.md b/README-Japanese.md index 48a36e3dd..348d5d19e 100644 --- a/README-Japanese.md +++ b/README-Japanese.md @@ -37,6 +37,8 @@ - [EventDataの例外的なパターン](#eventdataの例外的なパターン) - [同じ名前の複数のフィールド名からフィールドデータを出力する](#同じ名前の複数のフィールド名からフィールドデータを出力する) - [パイプ修飾子 (Pipe Modifiers)](#パイプ修飾子-pipe-modifiers) + - [対応しているSigmaのパイプ修飾子](#対応しているsigmaのパイプ修飾子) + - [追加のパイプ修飾子](#追加のパイプ修飾子) - [対応していないパイプ修飾子](#対応していないパイプ修飾子) - [ワイルドカード](#ワイルドカード) - [イベントキー内のキーワードのネスト](#イベントキー内のキーワードのネスト) @@ -461,9 +463,13 @@ detection: もし、最初の`Data`フィールドのデータだけを出力したい場合は、`details:`に `%Data[1]%` を指定すると `rundll32.exe`のみが出力されます。 + + ## パイプ修飾子 (Pipe Modifiers) -イベントキーにはパイプ修飾子を指定することができます。ここまで説明した書き方では完全一致しか表現できませんでしたが、パイプを使うことでより柔軟な検知ルールを記載できるようになります。以下の例では、ある`Data`フィールドの値に`EngineVersion=2`という文字列が入っている場合、条件にマッチすることになります。 +イベントキーにはパイプ修飾子を指定することができます。 +ここまで説明した書き方では完全一致しか表現できませんでしたが、パイプを使うことでより柔軟な検知ルールを記載できるようになります。 +以下の例では、ある`Data`フィールドの値に`EngineVersion=2`という文字列が入っている場合、条件にマッチすることになります。 ```yaml detection: @@ -474,26 +480,18 @@ detection: condition: selection ``` -パイプには以下のキーワードを指定できます。v1の時点で複数のパイプを連結することはできません。 通常は大文字小文字を区別しませんが、`|re`もしくは`|equalsfield`のキーワードを指定した場合は大文字小文字を区別します。 -- `|startswith`: 指定された文字列で始まることをチェックします。 -- `|endswith`: 指定された文字列で終わることをチェックします。 +### 対応しているSigmaのパイプ修飾子 + +- `|base64offset|contains`: データは、エンコードされた文字列内の位置によって、3つの異なる方法でbase64にエンコードされます。この修飾子は、文字列を3つのバリエーションにエンコードし、その文字列がbase64文字列のどこかにエンコードされているかどうかをチェックします。 +- `|cidr`: IPv4またはIPv6のCIDR表記をチェックします。(例:`192.0.2.0/24`) - `|contains`: 指定された文字列が含まれることをチェックします。 - `|contains|all`: 指定された複数の文字列が含まれることをチェックします。 - -この例では、`ForEach`と`Xor`という文字列の両方が`CommandLine`フィールドに存在する必要があります: -``` -CommandLine|contains|all: - - ForEach - - Xor -``` - +- `|startswith`: 指定された文字列で始まることをチェックします。 +- `|endswith`: 指定された文字列で終わることをチェックします。 - `|re`: 正規表現を使用します。(正規表現の書き方については を参照してください)。 > 注意: SigmaルールとHayabusaルールは正規表現の記法に一部差異があります。そのため、HayabusaではSigmaルールを正しく検知できない場合があります。 -- `|equalsfield`: 指定されたイベントキーと合致することをチェックします。2つのフィールドの値が一致しないことをチェックしたい場合は`condition`で`not`を使ってください。 -- `|endswithfield`: 指定されたイベントキーが指定された文字列で終わることをチェックします。指定されたイベントキーが指定された文字列で終わらないことをチェックしたい場合は`condition`で`not`を使ってください。 -- `|base64offset|contains`: データは、エンコードされた文字列内の位置によって、3つの異なる方法でbase64にエンコードされます。この修飾子は、文字列を3つのバリエーションにエンコードし、その文字列がbase64文字列のどこかにエンコードされているかどうかをチェックします。 - `'|all':`: このパイプ修飾子は、特定のフィールドに適用されるのではなく、すべてのフィールドに適用されるため、上記の修飾子とは異なります。 この例では、`Keyword-1`と`Keyword-2`という文字列の両方が存在する必要がありますが、任意のフィールドのどこにでも存在できます: @@ -506,9 +504,18 @@ detection: condition: keywords ``` +### 追加のパイプ修飾子 + +以下の修飾子はsigmaの仕様にはないが、特殊な使用例のために追加されたものであります: + +- `|equalsfield`: 指定されたイベントキーと合致することをチェックします。2つのフィールドの値が一致しないことをチェックしたい場合は`condition`で`not`を使ってください。 +- `|endswithfield`: 指定されたイベントキーが指定された文字列で終わることをチェックします。指定されたイベントキーが指定された文字列で終わらないことをチェックしたい場合は`condition`で`not`を使ってください。 + + ## 対応していないパイプ修飾子 以下の修飾子は、現在サポートされていないため、Sigmaリポジトリでこれらの修飾子を使用するルールは含まれていません: + - `expand` - `gt` - `gte` diff --git a/README.md b/README.md index 08f231d73..0ceec20f0 100644 --- a/README.md +++ b/README.md @@ -37,6 +37,8 @@ This is the repository for [hayabusa](https://github.com/Yamato-Security/hayabus - [Abnormal patterns in EventData](#abnormal-patterns-in-eventdata) - [Outputting field data from multiple field names with the same name](#outputting-field-data-from-multiple-field-names-with-the-same-name) - [Pipe Modifiers](#pipe-modifiers) + - [Supported Sigma Pipe Modifiers](#supported-sigma-pipe-modifiers) + - [Extra Pipe Modifiers](#extra-pipe-modifiers) - [Unsupported Pipe Modifiers](#unsupported-pipe-modifiers) - [Wildcards](#wildcards) - [Nesting keywords inside eventkeys](#nesting-keywords-inside-eventkeys) @@ -463,7 +465,9 @@ If you want to print out just the first `Data` field data, you can specify `%Dat ## Pipe Modifiers -A pipe can be used with eventkeys as shown below for matching strings. All of the conditions we have described so far use exact matches, but by using pipe modifiers, you can describe more flexible detection rules. In the following example, if a value of `Data` contains the string `EngineVersion=2`, it will match the condition. +A pipe can be used with eventkeys as shown below for matching strings. +All of the conditions we have described so far use exact matches, but by using pipe modifiers, you can describe more flexible detection rules. +In the following example, if a value of `Data` contains the string `EngineVersion=2`, it will match the condition. ```yaml detection: @@ -474,26 +478,18 @@ detection: condition: selection ``` -This is a list of what you can specify after the pipe. At the moment, hayabusa does not support chaining multiple pipes together. String matches are case insensitive. However, they become case sensitive whenever `|re` or `|equalsfield` are used. -- `|startswith`: Checks the string from the beginning -- `|endswith`: Checks the end of the string +### Supported Sigma Pipe Modifiers + +- `|base64offset|contains`: Data will be encoded to base64 in three different ways depending on its position in the encoded string. This modifier will encoded a string to all three variations and check if the string is encoded somewhere in the base64 string. +- `|cidr`: Matches on a IPv4 or IPv6 CIDR notation (Ex: `192.0.2.0/24`) - `|contains`: Checks if a word is contained in the data - `|contains|all`: Checks if multiple words are contained in the data - -In this example, both `ForEach` and `Xor` strings need to be present in the `CommandLine` field: -``` -CommandLine|contains|all: - - ForEach - - Xor -``` - +- `|startswith`: Checks the string from the beginning +- `|endswith`: Checks the end of the string - `|re`: Use regular expressions. (We are using the regex crate so please out the documentation at to learn how to write correct regular expressions.) > Caution: Regular expression syntax in sigma rules is still not defined so some sigma rules may not match correctly if they differ from the Rust regex syntax. -- `|equalsfield`: Check if two fields have the same value. You can use `not` in the `condition` if you want to check if two fields are different. -- `|endswithfield`: Check if the field on the left ends with the string of the field on the right. You can use `not` in the `condition` if they are different. -- `|base64offset|contains`: Data will be encoded to base64 in three different ways depending on its position in the encoded string. This modifier will encoded a string to all three variations and check if the string is encoded somewhere in the base64 string. - `'|all':`: This pipe modifier is different from those above because it does not get applied to a certain field but to all fields. In this example, both strings `Keyword-1` and `Keyword-2` need to exist but can exist anywhere in any field: @@ -506,9 +502,17 @@ detection: condition: keywords ``` +### Extra Pipe Modifiers + +The following modifiers are not in the sigma specification but have been added for very specific use cases. + +- `|equalsfield`: Check if two fields have the same value. You can use `not` in the `condition` if you want to check if two fields are different. +- `|endswithfield`: Check if the field on the left ends with the string of the field on the right. You can use `not` in the `condition` if they are different. + ## Unsupported Pipe Modifiers -The following modifiers are currently not supported so we do not include any rules from the Sigma repository that use them: +The following modifiers are currently not supported so we do not include any rules from the sigma repository that use them: + - `expand` - `gt` - `gte`