解析ルール
2024年8月22日
ID 175163
解析ルールは、カスタムフィード([Path
]要素を使用して指定したフィード)のルールです。これらのパラメータでは、フィードユーティリティによる各フィードの解析方法を指定します。
解析ルールは、カスタムフィードのフィードルールの[Parsing
]要素で定義します。
次に、カスタムフィードの解析ルールの例を示します。これらのルールでは、入力フィードは JSON 形式であることを指定します。MD5 解析ルールは、入力フィードの[files/md5
]フィールドで定義します。このフィールドの値は、MD5 ハッシュとして解析されます。
<Feed> ... <Parsing type="json"> <MD5 type="MD5">files/md5</MD5> </Parsing> ... <Feed> |
解析要素
親要素[Parsing
]には、ネストされたすべての解析ルールが含まれています。その属性により、入力形式を定義します。
この要素には、次の属性があります:
種別
入力フィードタイプを指定します。
この属性では、次の値が使用可能です:
json
、csv
、xml
、misp
、stix
、stix2
、pdf
、messageBody
、messageAttach
。フィードユーティリティは、STIX バージョン 1.0、1.1、2.0、および 2.1 をサポートしています。STIX の正確なバージョンは自動的に判別されます。
pdf フィードのディレクトリに追加されるファイルは、このファイルが前に処理された最後に作成されたファイル以前に作成された場合は、処理されません。
delimiter
CSV 入力フィードの区切り記号を指定します。既定では、この値は「
;
」です。rootElement
XML および JSON 入力フィードのルート要素パスを指定します。
- XML 入力フィード
他の文字または文字のグループの代わりとして、「
*
」および「?
」ワイルドカード文字を使用できます。「*」ワイルドカード文字は、文字のグループに使用できます。「?
」ワイルドカード文字は、単一の文字に使用できます。rootElement
パスの部分をワイルドカード記号のみでは指定できません。たとえば、「Feeds/*/Contents」
は無効です。 - JSON 入力フィード
任意のネストレベルのルート要素値を指定できます。ネストレベルの制限は、「
/
」文字で定義します。ルート要素パラメータを空にすることはできません。空でない場合は、ルート要素の値に空のネストレベル(部分文字列「
//
」)を含めず、「/
」文字で開始または終了しません。JSON フィードではルート要素にワイルドカードを使用できません。
- XML 入力フィード
次の例では、XML 入力フィードに[Parsing
]要素を使用する方法について示します。この場合、解析ルールは、[Feeds]→[Example]→[Contents
]要素の内部でネストされた要素に適用されます。
<Feed> ... <Parsing type="xml" rootElement="Feeds/Example/Contents"> ... </Parsing> ... <Feed> |
個別の解析ルール
入力フィードの個別のフィールドの解析ルールは、[Parsing
]要素内部でネストする必要があります。フィードユーティリティが入力フィードを処理する時には、これらのルールに従って出力フィードのフィールドを作成します。
各ルールは次の形式です:
<%OUTPUT_NAME% type="%VALUE_TYPE%">%INPUT_NAME%</%OUTPUT_NAME%>
上では、次のルール名要素が使用されています:
- %OUTPUT_NAME% では、出力フィード内のフィールドの名前を定義します。たとえば、%OUTPUT_NAME% が MD5 の場合、出力フィードでこの値を持つフィールドも MD5 という名前になります。
%OUTPUT_NAME% は、ネストされたフィールドを保存します。%INPUT_NAME% で指定されたフィールドがネストされている場合、出力フィードのフィールドもネストされます。たとえば、%OUTPUT_NAME% が MD5_HASH で %INPUT_NAME が files/md5 である場合、出力フィードのフィールドは files/MD5_HASH になります。
JSON 入力フィードでは、%OUTPUT_NAME% に必ず[
Field
]値を使用する必要があります。フィードユーティリティでは、元のフィードからのフィールド名を使用します。 - %VALUE_TYPE% は、このフィールドに保存されている値のタイプです。
これらの値は、指定したタイプに従ってフィードユーティリティで処理されます。たとえば、出力フィードにドメイン名と URL が含まれている場合、バイナリ形式にコンパイルされます。
次の値タイプが使用できます:
url
—この値タイプは URL に使用されます。ip
—この値タイプは IP アドレスに使用されます。md5
—この値タイプは MD5 ハッシュに使用されます。sha1
—この値タイプは SHA1 ハッシュに使用されます。sha256
—この値タイプは SHA256 ハッシュに使用されます。domain
—この値タイプはドメイン名に使用されます。context
—この値タイプは背景情報に使用されます。
- %INPUT_NAME% は、入力フィード内のフィールドの名前です。次の入力フィード形式に従って定義する必要があります:
- JSON 入力フィードでは、%INPUT_NAME% に、入力フィードからのフィールドの名前を含める必要があります。ネストされたフィールドを「
/
」で区切る必要があります。 - CSV 入力フィードでは、%INPUT_NAME% に、列番号を含める必要があります。
- XML 入力フィードでは、%INPUT_NAME% に、ルート要素のネストされた要素のいずれかへのパスを含める必要があります。ルート要素は、[
Parsing
]要素のrootElement
属性で定義します。パスは、大文字と小文字の区別があります。 - STIX および MISP 入力フィードでは、[
Parsing
]要素に、解析ルールを含める必要はありません。
- JSON 入力フィードでは、%INPUT_NAME% に、入力フィードからのフィールドの名前を含める必要があります。ネストされたフィールドを「
次の例は、JSON 入力形式の解析ルール構文を示しています:
<Feed> ... <Parsing type="json"> <Field type="url">URL</Field> <Field type="ip">IP</Field> <Field type="context">GEO</Field> <Field type="md5">files/md5</Field> </Parsing> ... <Feed> |
次の例は、CSV 入力形式の解析ルール構文を示しています:
<Feed> ... <Parsing type="csv" delimiter=";"> <url type="url">1</url> <IP type="ip">2</IP> <GEO type="context">3</GEO> <MD5 type="md5">4</MD5> </Parsing> ... <Feed> |
次の例は、XML 入力形式の解析ルール構文を示しています:
<Feed> ... <Parsing type="xml" rootElement="Feeds/Example/Contents"> <URL type="url">url</URL> <IP type="ip">ip</IP> <GEO type="context">context</GEO> <MD5 type="md5">md5_hash</MD5> </Parsing> ... <Feed> |
メールタイプのフィードの解析ルール
サードパーティのフィードの解析ルールを設定するには、type
属性で次の値を指定します:
messageBody
—メールボディの解析ルール。この値は、
Path
要素で POP3 または IMAP が有効な場合に適用されます。messageAttach
—メールの添付ファイルの解析ルール。この値は、
Path
要素で POP3 または IMAP が有効な場合に適用されます。
メッセージボディの解析(メールタイプのフィード)
フィードユーティリティは、Parsing
要素の type
属性で messageBody
値が設定されている場合にメールサーバーからロードされたメールのボディを解析します。
メッセージボディの解析では、Parsing
要素で指定された正規表現が使用されます。
メッセージボディの解析では、正規表現で 1 つ以上のルールを設定できます。
各ルールは次の形式です:
<%FIELD_NAME% type="%FIELD_TYPE%">%REG_EXP%</%FIELD_NAME%>
意味は次の通りです:
%FIELD_NAME% では、出力フィード内のフィールドの名前を定義します。たとえば、%FIELD_NAME% が MD5 の場合、出力フィードでこの値を持つフィールドも MD5 という名前になります。
%FIELD_TYPE% はインジケータータイプです。
%REG_EXP% は正規表現です。
各正規表現は、メッセージボディに適用されます。
フィードの形式は、ロードされたメールのコンテンツに従って設定されます。フィードの形式は、次の条件を満たす必要があります:
- すべてのロードされたメールの値は、1 つの結果のフィードで示されます。
フィードユーティリティは、フィードの最新の更新の日付を保存します。メールサーバーを処理する場合は、解析は前のフィードの更新以降に受信されたメールのみに適用されます。
- 結果のフィードの各エントリには、次のフィールドがあります:
message_from
—メッセージ送信者のメールアドレス。message_subject
—メールの件名。message_date
—メールサーバーがメールを受信した日付。
- 結果の各フィードエントリは、
type
属性が CONTEXT 以外の正規表現 1 つに対して取得されたインジケーターを 1 つだけ持ちます。 - 正規表現ごとに取得された値で
type
属性が CONTEXT 値の場合は、メールの各値は、結果のフィードの各エントリに示されます。値は結果のフィードエントリに示され、同じメールのインジケーター(IP/HASH/URL)を含みます。
1 つの正規表現(type 属性の値が CONTEXT で)に対して複数の値が取得された場合は、これらの値は、結果のフィールドの 1 つのエントリで指定されます。値は、「
;
」文字の連続で区切られます。 - フィードは、[
Excluded
]セクションで指定された条件を満たす値を含みません(下の「PDF フィードとメールフィードの Excluded 要素」セクションを参照)
メッセージの添付書類の解析(メールタイプのフィード)
[Parsing
]要素の type 属性で messageAttach
値が設定されている場合は、フィードユーティリティはメールサーバーからロードしたメールの添付ファイルを解析します。
添付ファイルのタイプで 1 つ以上のルールを設定できます。
各ルールは次の形式です:
<Attach type="%ATTACH_TYPE%"></Attach>
意味は次の通りです:
%ATTACH_TYPE% は添付ファイルのタイプです。
%ATTACH_TYPE% には次の値を指定できます:
csv
json
xml
stix
stix2
pdf
[Attach
]要素は、1 つ以上の値を持ちます。
正規表現で 1 つ以上のルールを設定できます。
各ルールは次の形式です:
<%FIELD_NAME% type="%FIELD_TYPE%">%REG_EXP%</%FIELD_NAME%>
意味は次の通りです:
%FIELD_NAME% では、出力フィード内のフィールドの名前を定義します。たとえば、%FIELD_NAME% が MD5 の場合、出力フィードでこの値を持つフィールドも MD5 という名前になります。
%REG_EXP% は正規表現です。
%FIELD_TYPE% はインジケータータイプです。[%FIELD_TYPE%]要素では、次の値を使用して type
属性を指定します:
- ip
- md5
- sha256
- sha1
- url
- context
次の例は、メッセージの添付ファイルの解析ルール構文を示しています:
<Attach type="pdf"> <hash1 type="md5">([\da-fA-F]{32})</hash1> <hash2 type="sha1">([\da-fA-F]{40})</hash2> </Attach> |
フィードユーティリティは、次の拡張子を持つファイルを解析します。
[ | ファイルの拡張子 |
csv | csv および txt |
json | json |
xml | xml |
stix1 | xml |
stix2 | json |
解析ルールが stix1 および xml(または stix2 および json)で同時に設定されている場合は、フィードユーティリティは次の処理を実行します:
- 添付ファイルを stix(xml/json 拡張子を持つ)として解析します。
- 解析中にエラーが発生し、ファイルが有効な stix フィードである場合は、このファイルはフィードの設定で指定された xml/json 添付ファイルの解析のルールに従って解析されません。
- 解析中にエラーが発生し、ファイルが有効な stix フィードでない場合は、このファイルはフィードの設定で指定された xml/json 添付ファイルの解析のルールに従って解析されます。
メールに複数の添付ファイルがある場合は、各添付ファイルの情報が 1 つの結果のフィードになります。
フィードの形式は、ロードされたメールのコンテンツに従って設定されます。フィードの形式は、次の条件を満たす必要があります:
- ロードされたすべてのメールの添付ファイルの値は、1 つの結果のフィードで示されます。
フィードユーティリティは、フィードの最新の更新の日付を保存します。メールサーバーを処理する場合は、解析は前のフィードの更新以降に受信されたメールのみに適用されます。
- 結果のフィードの各エントリには、次のフィールドがあります:
message_from
—メッセージ送信者のメールアドレス。message_subject
—メールの件名。message_date
—メールサーバーがメールを受信した日付。attach_name
—添付ファイルの名前。
- 結果の各フィードエントリは、
type
属性が CONTEXT 以外の正規表現 1 つに対して取得されたインジケーターを 1 つだけ持ちます。 - 正規表現ごとに取得された値で
type
属性が CONTEXT 値の場合は、メールの添付ファイルの各値は、結果のフィードの各エントリに示されます。値は結果のフィードエントリに示され、同じ添付ファイルのインジケーター(IP/HASH/URL)を含みます。
1 つの正規表現(type 属性の値が CONTEXT で)に対して複数の値が取得された場合は、これらの値は、結果のフィールドの 1 つのエントリで指定されます。値は、「
;
」文字の連続で区切られます。 - フィードは、[
Excluded
]セクションで指定された条件を満たす値を含みません(下の「PDF フィードとメールフィードの Excluded 要素」セクションを参照)。
PDF フィードとメールフィードの[Excluded]要素
pdf、messageBody
または messageAttach
値が[Parsing
]要素の type
属性で指定されている場合は、[Feed
]要素に[Excluded
]セクションを含め、結果のフィードのインジケーター除外ルールと共に <Item/> 要素を置くことができます。
[Excluded
]セクションは、次の形式になります:
<Excluded> <Item>{RegExp}</Item> ... </Excluded> |
{RegExp}
は正規表現です。
[Excluded
]セクションと[Item
]要素は必須ではありません。
次の例は、除外ルールを示します:
<Excluded> <Item>(\w{3}\s+\d+\s+[\d\:]+)\s</Item> <Item>(https:\/\/badurl\.com)</Item> </Excluded> |