詳細トピック: リスト
ポリシールールでは、リストを使用して、警告が生成されるタイミングと方法をさらに細かく制御できます。リストは、特定の動作をブロックまたは許可するようにポリシーを設定する際に特に便利です。
リストの種類
Sophos Linux Sensor (SLS) は、リストで 5つデータの種類に対応しています: 名前、ホスト、パス、数字、系統 (実験的)。リストのデータの種類は、比較対象のフィールドのデータの種類に対応します。たとえば、次のルールでは、programName
がパスフィールドであるため、Process_Injection-programName-allowList
がデータの種類、Paths であることを想定しています。
ignore programName IN $Process_Injection-programName-allowList
Names
名前リストには文字列が保存され、glob 形式に対応しています。たとえば、"alpine"
と "al*"
は、共に名前リストの有効なエントリです。
Hosts
ホストリストには、IP アドレスが、CIDR ブロックまたはドメイン名 (IP アドレスに解決されます) として保存されます。たとえば、"8.8.8.8/8"
と "www.sophos.com"
は、共にホストリストの有効なエントリです。
Paths
パスリストには、プログラムパスやファイルパスが保存されます。パスは、ワイルドカード演算子「*」を使用して記述できます。これは、パターンに適合するパスすべてに一致します。たとえば、"/bin/bash"
と "/bin/*/bash"
は、共にパストリストの有効なエントリです。
Numbers
数字リストには、整数が保存されます。たとえば、10
は数字リストの有効なエントリです。
Lineage (試験的)
系統リストには、プロセスの系統シーケンスを示す文字列のリストが保存されます。系統は、現在、試験的な機能であるため、ソフォスでは系統リストの使用は推奨していません。
許可リストとブロックリストの調整
ほとんどの SLS 検出には、必要および不要なシステム動作を記述するための拡張可能な方法として、複数のリスト (具体的には、許可リストとブロックリスト) が組み込まれています。検出には、一般的な許可リストとブロックリストのアクション用のリストが組み込まれています。たとえば、特定の検出が環境内で誤検知を生成した場合、リストにアクションを追加 (または削除) して、環境で行われる標準的な運用に合わせて、検出機能を調整できます。
これらのリストを使用すると、プログラム名、ユーザー名、コンテナイメージ名、親プログラム名 (検出によって現在検査されているプログラムを実行したプログラム)、および先祖プログラム名 (親プログラムと同様ですが、親の親、親の祖父など、システムの起動プロセスまでさかのぼって一致します) など、警告要素を許可リストでカスタマイズできます。
SLS のコンテンツに含まれているリストには、調整が容易にできるように、一貫して名前が付けられています。これらのリストの標準的な命名規則は、次に示すように、リストが適用される検出、許可/ブロックされる警告要素、およびアクション (許可またはブロック) の組み合わせです。
$Snake_Cased_Detection-$alertElement-$actionList
リストを変更するには、次の 3つの異なる動作がサポートされています。
add
: リストに項目を追加する場合。remove
: リストから項目を削除する場合。replace
: リスト全体の内容を置き換える場合。これは、追加と削除の両方を行う場合に使用します。
リストを変更する場合は、behavior:
属性を使用して動作を指定します。この動作については、後でいくつかの例で説明します。
コンテンツの場合、リストには次の 2種類があります: 共有リスト、ローカルリスト。
共有リスト
共有リストを使用すると、有効化されているすべての検出で、実行されているアプリケーションを許可またはブロックできます。このようなリストによって、保護されない範囲が大きくなり、攻撃者が検出を回避する手段として悪用される恐れがある、滅多に使用しないようにしてください。
共有リストはすべての検出に適用されるため、Global-$alertElement-$actionList
の形式が使用されます。
たとえば一般に、Tenable の Nessus 脆弱性スキャナなど、脆弱性管理ツールに関連付けられている、ユーザーによるアクションを許可リストに追加することが望ましいと考えられます。Nessus は、組織のネットワークの広大な領域に定期的に接続し、コマンドを実行してパッチレベルを判断し、既知の脆弱性の存在を検出します。このアクティビティによって大量の警告が生成される可能性があるため、Nessus OS ユーザーを共有許可リストに追加して、生成される可能性のある警告を抑制することが望ましい場合があります。Nessus を追加するには、ホストの設定ファイル (/etc/sophos/runtimedetections-rules.yaml
) に次の情報を追加する必要があります。
Global-userName-allowList:
behavior: add
list:
- "nessus"
共有リストはデフォルトで空で、許可リストには何も追加されていません。ただし、このリストは、デフォルトでほとんどの検出で使用されています。共有リストに、前の例のユーザー名「Nessus」のように、項目を追加するとします。この場合、ユーザー名でフィルタリングできる検出は、そのユーザーからの警告を自動的に無視します。
もう 1つの一般的な共有リストは SystemUpdatePrograms
です。デフォルトでこのリストは、パッケージ管理プログラム (yum
や dpkg
など)、およびパッケージマネージャによって使用される、関連したヘルパープログラムで構成されています。しかし、多くの組織では、Puppet などの設定管理ツールを使用してフリート設定を管理しています。このため、システム設定管理に関連するタスクの実行が許可されているとツールとして、Puppet エージェント (puppet
) をマークすることを推奨します。これを実現するには、次の例に従って、puppet
を SystemUpdatePrograms
リストに追加します。
SystemUpdatePrograms:
behavior: add
list:
- "/opt/puppetlabs/bin/puppet"
これらの行によって、システムの変更に焦点を当てた検出では、動作がプログラム /opt/puppet/puppet-agent
によるものである場合には、警告が生成されません。
検出ローカルリスト
ほとんどの検出には、共有リストに加えて、単一の検出ポリシーのみに適用される独自のリストが含まれます。検出ローカルリストを使用すると、各検出で、悪意のあるまたは無害な警告と見なすコンテンツを詳細に制御でき、誤検知の警告を削減するのに非常に役立ちます。
検出ローカルリストには、調整が容易になるように、一貫した名前が付けられます。これらのリストの標準的な命名規則は、次に示すように、検出名、許可またはブロックするイベントの要素、およびアクション (許可またはブロック) の組み合わせです。
$Snake_Cased_Detection_Name-$alertElementName-$actionList
たとえば、Process Injection 検出には、次のようなリストがあります。
Process_Injection-programName-allowList
Process_Injection-userName-allowList
Process_Injection-imageName-allowList
Process_Injection-parentProgramName-allowList
Process_Injection-ancestorProgramName-allowList
変更可能な検出と述部の完全なリストは、コンテンツファイル /var/lib/sophos/content/runtimedetections-content.yaml
にあります。
警告が生成されないように、各リストに追加できます。これらのリストを使用すると、許可リストでプログラム名、ユーザー名、コンテナイメージ名、親プログラム名、および祖先プログラム名をカスタマイズできます。
たとえば、Process Injection 検出は、他のプロセスでデバッグ手法を使用してプログラムを監視します。一部の APM (アプリケーションパフォーマンス管理) ツールでは、デバッグ手法を使用してアプリケーションのプロファイルを作成し、システムコールの使用状況に関する情報を提供します。これによって、標準的なシステム操作に対して、大量の警告が生成される可能性があります。APM プログラムの名前が /opt/myAPM/ap-monitor
であるとした場合、ホストの設定ファイル (/etc/sophos/runtimedetections-rules.yaml
) に次のスニペットを追加します。
Process_Injection-programName-allowList:
behavior: add
list:
- "/opt/myAPM/ap-monitor"
カスタムリストの作成
カスタム検出を作成する場合、ルールセットで SLS が参照するカスタムリストを定義すると便利です。
リスト名は、すべてのストラテジーおよびリスト名の設定ファイル内で一意である必要があります (注: ストラテジー名とは異なり、リスト名にスペース文字を含めることはできません)。次の表は、リストを定義するために必要な、名前以外の属性の概要を示しています。
リストの属性 | 種類 | 必須 | 説明 |
---|---|---|---|
種類 | string | はい | リストのデータの種類。 |
description | string | いいえ | このリストの説明。 |
list | list | はい | 実際の要素のリスト。各リストの type と一致する必要があります。各要素には、任意で説明を付けることができます。 |
次は、承認済みのシェルプログラムのカスタムリストの例です。
AuthorizedShellPrograms:
type: paths
description: allowlist of authorized programs
list:
- "/bin/bash"
- "/bin/sh"
- "/usr/sbin/*sh":
最終行は、ワイルドカード文字を使用して、"/usr/sbin/" ではじまり、"sh" で終わるすべてのプログラムを指定します。
次に、このカスタムリストを、それを指定する検出と共に、ホストの /etc/sophos/runtimedetections-rules.yaml
設定ファイルに追加する必要があります。