ルール構文
ルールは、XMLベースの言語を使用して定義された一連の式です。
ESET Inspect Webコンソールには定義済みのルールセットが含まれていますが、独自のルールを追加し、編集できます。
ルールの一般的な本文構造は次のとおりです。
<rule> <definition> <ancestor></ancestor> <parentprocess></parentprocess> <process></process> <operations> <operation></operation> </operations> </definition> <description> <name></name> <category></category> <explanation></explanation> <os></os> <mitreattackid></mitreattackid> <maliciousCauses></maliciousCauses> <benignCauses></benignCauses> <recommendedActions></recommendedActions> </description> <maliciousTarget name=""/> <actions> <action name="action" /> </actions> </rule> |
Definition タグ
ancestor - 追加の属性を取ることができます。
•distance - 照合する祖先の現在のプロセスからの実際の距離を指定します。つまり、1は親プロセス、2は祖父母プロセスとなります。指定しない場合、プロパティはすべてのプロセスの祖先と照合されます
•unique - 祖先タグが祖先ツリー内の重複プロセスを削除できるようにします。たとえば、マルウェアは検出を回避するために同じプロセスのインスタンスを複数作成しますが(explorer -> cmd -> cmd -> cmd -> マルウェア)、この属性はこれらの重複を取り除きます(explorer -> cmd -> マルウェア)
Processとparentprocess
このprocess部分を使用して、セキュリティエンジニアはイベントを特定のプロセスに制限できるため、"OutlookでEXEファイルを作成する"などのルールを記述できます。プロセス要素が空の場合、operationsとparentprocessはすべてのプロセスに対して評価されます。
このparentprocess部分はプロセスと似ていますが、セキュリティエンジニアは親プロセス属性をテストできます。これにより、"Wordによって起動されたPowerShellはインターネットに接続する"などのルールが可能になります。
process、parentprocess、ancestor、operationは式要素を使用して、検出をトリガーする必要があるかどうかを確認するために評価する論理式を記述します。式は、条件と論理演算子で構成されます。条件はいくつかのプロパティの値をチェックし、論理演算子はこれらの条件を論理式にグループ化します。
式の例:
<operator type="and"> <condition component="FileItem" property="Path" condition="notstarts" value="%SYSTEM%" /> <operator type="or"> <condition component="FileItem" property="FileNameWithoutExtension" condition="is" value="svchost" /> <condition component="FileItem" property="FileNameWithoutExtension" condition="is" value="smss" /> <condition component="FileItem" property="FileNameWithoutExtension" condition="is" value="lsass" /> <condition component="FileItem" property="FileNameWithoutExtension" condition="is" value="csrss" /> <condition component="FileItem" property="FileNameWithoutExtension" condition="is" value="wininit" /> <condition component="FileItem" property="FileNameWithoutExtension" condition="is" value="services" /> <condition component="FileItem" property="FileNameWithoutExtension" condition="is" value="winlogon" /> <condition component="FileItem" property="FileNameWithoutExtension" condition="is" value="system" /> <condition component="FileItem" property="FileNameWithoutExtension" condition="is" value="userinit" /> <condition component="FileItem" property="FileNameWithoutExtension" condition="is" value="conhost" /> </operator> </operator> |
Operations
このoperations部分では、プロセスによって実行される操作によって検出が発生するかどうかを定義します。空の場合、プロセスがイベントを生成すると検出がトリガーされます。
操作は、type属性を持つ操作要素と式要素を使用して定義されます。
<operation type="WriteFile">Expression</operation>
サポートされている操作の詳細な一覧については、操作のトピックを参照してください。
Operator
サポートされている論理演算子はAND、OR、NOTです。論理演算子は入れ子にすることができます。したがって、論理演算子は別の論理演算子の引数になることができます。論理演算子の他に、条件要素を論理演算子の引数として使用できます。次の例で示すように、演算子タグを使用できます。
<process> <operator type ="AND"> <condition component ="FileItem" property ="Path" condition ="starts" value ="% TEMP %"/> <condition component ="FileItem" property ="FileName" condition ="is" value ="svchost"/> </operator> </process> |
条件要素は、以下の3つの部分で構成されています。
•操作の引数またはプロセスのプロパティ
•ルールの作成者が指定した値
•値とプロパティの関係
プロパティは階層的に「コンポーネント」にグループ化されます。
検出3つのレベルの重大度があります。1-39 > Info、40-69 > Warning、70-100 > Threat
プロパティのタイプとその関係(条件属性)は、次のようになっています。
|
is(not)set |
is(not) |
is(not)empty |
(not)starts |
(not)contains |
(not)ends |
less, lessOrEqual, greater, greaterOrEqual |
|---|---|---|---|---|---|---|---|
String |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
|
Int |
✔ |
✔ |
|
|
✔ |
|
✔ |
値 |
✔ |
✔ |
✔ |
|
|
|
|
Bool |
✔ |
✔ |
|
|
|
|
|
日付 |
✔ |
✔ |
|
|
|
|
✔ |
文字列のセット |
✔ |
|
✔ |
|
✔ |
|
|
IPv4アドレス |
✔ |
✔ |
✔ |
|
|
|
|
IPv6アドレス |
✔ |
✔ |
✔ |
|
|
|
|
IPv4アドレスのセット |
✔ |
|
✔ |
|
✔ |
|
|
IPv6アドレスのセット |
✔ |
|
✔ |
|
✔ |
|
|
Description タグ
Descriptionは必須で、名前とカテゴリを含める必要がありますが、残りは省略可能です。以下のフィールドはESET Inspectの検出詳細に表示されるので、定義すると便利です。
name - ルールの一意の名前。ルールのリストに表示されます。
category - ルールを分類できます。独自のカテゴリを指定できます。
explanation - ルールがトリガーされる理由を説明します
os - このタグには、ルールが適用されるオペレーティングシステムが含まれます。可能な値は、Windows, Linux, OSX, ANYです。
mitreattackid - MITRE ATT&CK®のIDが含まれます
maliciousCauses - イベントの悪意のある原因、またはルールをトリガーした変更について説明します
benignCauses - イベントの無害な原因、またはルールをトリガーした変更について説明します
recommendedActions - セキュリティエンジニアが行う推奨アクションについて説明します。ユーザーは次のマークダウンを使用できます。
•[navigation:computer_details] - ユーザーに表示される既定の名はComputer Details
•[navigation:executable_details] - ユーザーに表示される既定の名はExecutable Details
•[navigation:process_details] - ユーザーに表示される既定の名はProcess Details
•[remediation:shutdown] - ユーザーに表示される既定の名はShutdown Computer
•[remediation:reboot] - ユーザーに表示される既定の名はReboot Computer
•[remediation:kill] - ユーザーに表示される既定の名はKill Process
•[remediation:block] - ユーザーに表示される既定の名はBlock Hash
•[misc:download] - ユーザーに表示される既定の名はDownload file
さらに、各コマンドでは、既定のテキストの代わりに代替テキストを表示できます。表示する代替テキストを指定するには、コマンドの後にパイプ記号とテキストを指定します。たとえば、[navigation:computer_details|GoToComDet]にすると、既定のコンピューターの詳細の代わりにGoToComDetが表示されます。その他の使用例については、監査メインウィンドウの検出ルールタブでルールc0601を検索してください。
guid - 内部ルールに使用されます。外部ルールでは、GUIDが自動的に生成されます。これは、エクスポート/インポート時にルールを一意に識別するために使用されます。
maliciousTarget タグ
maliciousTargetタグを使用して、ユーザーアクションの影響を受けるターゲットを指定できます。たとえば、実行可能ファイルのブロックを選択した場合、変更はmaliciousTargetによって異なります。maliciousTargetをcurrentまたはparentとして指定すると、実行可能ファイルをブロックするユーザーアクションは、それぞれblockProcessExecutableまたはblockParentProcessExecutableに変更されます。アクションタグの動作は変更されません。可能な値は、current、module、none、parentです。
maliciousProcessタグはmaliciousTargetタグに置き換えられました。現在もレガシーをサポートしていますが、maliciousTargetタグを使用することをお勧めします。
Actions タグ
アクションタグを使用すると、ルールがトリガーされたときに実行される一連のアクションを指定できます。 サポートされているアクションの詳細な一覧については、アクションのトピックを参照してください。
アクションを1つのアクション要素にまとめることができます。
<action name="BlockProcessExecutable"/>
または、複数のアクション要素を1つのアクション要素にスタックします(次の例を参照)。
<actions> <action name="BlockProcessExecutable"/> … </actions> |
1つのルールから複数のアクションをトリガーできます。