メタイベントフィルタの使用
調査によって、オンに設定されたテーブルのメタイベントすべてが収集され、選択した Blob ストレージの場所に書き込まれます。これによって、Kafka にデータを出力するマイクロサービスや、単一のディレクトリからファイルを提供する静的な Web サーバーなど、特定のワークロードで大量のデータが生成される可能性があります。このような場合は、ポート 9092 にデータを書き込んでいる接続イベントや、Web サーバーのディレクトリからのファイルイベントを削除すると好ましいことがあります。
これにはフィルタを使用します。フィルタでは、メタイベントを生成するかどうかを決定する一連のルールを指定できます。これによって、重複するイベントが削減され、クエリ時間の短縮、帯域幅の使用量の削減、およびセンサーのパフォーマンスの向上が可能になります。
構文
メタイベントフィルタはテーブル単位で指定され、カスタム検出と同じ構文ルールを使用します。フィルタを作成する最初の手順として、フィルタが default match
または default ignore
するかを決定します。カスタムルールを追加する前に、デフォルトアクションを指定する必要があります。
default match
は、センサーが、デフォルトですべての受信メタイベントと一致し、その後、保存しないメタイベントはルールによって無視されることを意味します。この例として、Kafka ワーカーノードが、すべての接続メタイベントに一致し、ポート 9092 への接続を行っているメタイベントはすべて無視することが挙げられます。default ignore
は、センサーが、デフォルトですべてのメタイベントを無視することを意味します。その後、ルールは、出力する必要がある特定のケースと一致します。この例として、すべてのファイルイベントは無視するが、ファイルの整合性を監視するために、ファイルの作成時と変更時に一致することが挙げられます。
フィルタを作成する次の手順は、フィルタを適用するフィールドを決定することです。各メタイベントの種類には、コンテナ ID から接続ポートへのファイルパスまで、フィルタリングできる有効な一連のフィールドがあります。このページの終わりに、詳細な参考情報が記載されています。これによって、これらのイベントの種類を関連する値と比較して、条件を満たした場合に一致または無視することができます。たとえば、ポート 9092 へのトラフィックすべてをフィルタリングする場合、ルールは次のようになります。ignore outboundPort == 9092
ルールを作成したら、それを基にフィルタを構築できます。フィルタは、リストに編成された一連のルールです。フィルタに複数のルールがある場合は、ルールはすべて表示されている順序で評価されます。先ほど挙げた Kafka の例のフィルタは次のようになります。
filter:
- ignore outboundPort == 9092
- default match
そのフィルタを設定ファイルに適用すると次のようになります。
investigations:
metaevent_dispatcher_enabled: true
enable_incremental_flush: false
reporting_interval: 5s
sinks:
- name: <a_folder_name>
backend: aws
automated: true
type: parquet
flight_recorder:
enabled: true
tables:
... all other tables ...
- name: "connection_events"
rows: 1000
enabled: true
filter:
- ignore outboundPort == 9092
- default match
複数のルールを使用する例として、静的 Web サーバーのファイル整合性の監視もあります。この場合、ファイルの読み取りが行われることは予期されるので、ファイルの作成と変更のみが保存されます。
filter:
- match operation == "create"
- match operation == "modify"
- default ignore
設定ファイルに適用すると、そのフィルタは次の例のようになります。
investigations:
reporting_interval: 5s
sinks:
- name: <a_folder_name>
backend: file
automated: true
type: json
flight_recorder:
enabled: true
tables:
... all other tables ...
- name: "file_events"
rows: 1000
enabled: true
filter:
- match eventType == "FILE_OPERATION_CREATE"
- match eventType == "FILE_OPERATION_MODIFY"
- default ignore
成功とエラー:
フィルタがセンサーの設定に追加され、センサーが再起動されると、次の例のようなログエントリが表示されるはずです。
2021-04-30T13:00:00.337Z INFO Program filtering active
この行は、フィルタの構文が正しく、フィルタが適用されていることを意味します。種類やフィールド名が正しくないなど、フィルタに問題がある場合は、次の例のようなログエントリが表示されます。
2021-04-30T12:55:43.382Z WARN Investigations event filters could not be applied: "evntType" is not a valid field for this strategy.Valid fields are [ancestorProgramName commandLine containerId
containerIsPrivileged containerLifetime containerName currentWorkingDirectory fileContainerId fileHash filePath gid group hasIncidentID hasNetworkServiceAncestor imageId imageName lineage loginGid loginG
roup loginUid loginUser namespace operation parentProgramArguments parentProgramName podName programArguments programDepth programHash programLifetime programName sourceFilePath uid userName] (in policy "
file_operation_metaevent_filter", rule "match evntType == \"FILE_OPERATION_CREATE\""). unexpected $end in rule: match eventType == "FILE_OPERATION_CREATE" Invalid expression in rule: match eventType == "
FILE_OPERATION_CREATE"
この場合、eventType で「e」が脱字していたというスペルミスがありました。
参考
フィルタで使用されるすべてのフィールドは次のとおりです。
フィールド | イベントの種類 | 説明 |
---|---|---|
containerId | all | プロセスが実行されているコンテナ ID |
containerName | all | コンテナ名 |
containerLifetime | all | イベントが発生した時点までのコンテナが実行されていた時間。 |
containerIsPrivileged | all | コンテナは cap_sys_admin 権限で実行 |
imageId | all | イベントが発生したコンテナのイメージ ID |
imageName | all | イベントが発生したコンテナのイメージ名 |
namespace | all | プログラムのコンテナが存在する Kubernetes 名前空間の名前 |
podName | all | プログラムのコンテナが存在する Kubernetes ポッドの名前 |
programName | all | イベントを生成したプログラムの名前 |
parentProgramName | all | イベントを生成したプログラムの親の名前 |
programArguments | all | イベントを生成したプログラムに渡される引数 |
parentProgramArguments | all | イベントを生成したプログラムの親に渡される引数 |
programLifetime | all | プログラムの有効期間。 |
programDepth | all | プロセスの実行の深さ |
ancestorProgramName | all | イベントを生成したプログラムの一致する先祖 |
lineage | all | イベントのプログラム系列 (現在、引数なしのプログラムパスに基づく) |
programHash | all | イベントが発生したプログラムの SHA256 ハッシュ |
hasNetworkServiceAncestor | all | ネットワークサービスからの子孫であるプログラム |
currentWorkingDirectory | all | イベントを生成したプログラムの現在の作業ディレクトリ |
hasIncidentID | all | プログラムまたはその先祖の 1つが警告を生成 |
commandLine | all | シェルプログラムで監視されたコマンドライン入力 |
userName | all | イベントを生成したプログラムのユーザー名 |
group | all | イベントを生成したプログラムのグループ名 |
uid | all | イベントを生成したプログラムの UID |
gid | all | イベントを生成したプログラムの GID |
loginUser | all | イベントを生成したログインのユーザー名 |
loginGroup | all | イベントを生成したログインのグループ名 |
loginUid | all | イベントを生成したログインの UID |
loginGid | all | イベントを生成したログインの GID |
eventType | all | イベントを生成したアクションの種類。以下参照。 |
filePath | file_events | ファイルイベントのファイルパス。ソースとターゲットの両方を参照するファイルイベントの場合、ターゲットパスを意味します。 |
operation | file_events | ファイルイベントの操作の種類。可能な値: open、create、link、modify、append、rename、delete、setattr、getattr。 |
sourceFilePath | file_events | ファイルイベントのソースパス |
fileContainerId | file_events | ファイルが存在するコンテナの ID |
fileHash | file_events | イベントが発生したファイルパスの SHA256 ハッシュ |
remoteHost | connections | 接続イベントのホスト IP アドレス |
outboundPort | connections | 接続イベントの送信ポート |
interfaceIP | connections | ネットワークサービスイベントの IP アドレス |
inboundPort | connections | 接続イベントの受信ポート |
creatorProgramName | process_events | 新しいファイルを前回変更したプログラムの名前 |
creatorParentProgramName | process_events | 新しいファイルを前回変更したプログラムの親の名前 |
creatorAncestorProgramName | process_events | ファイルを変更したプログラムの一致する先祖 |
creatorLineage | process_events | ファイルを変更したプログラムの系列 |
creatorProgramArguments | process_events | 新しいファイルを変更したプログラムに渡される引数 |
creatorParentProgramArguments | process_events | 新しいファイルを変更したプログラムの親に渡される引数 |
creatorUserName | process_events | 新しいファイルを変更したプログラムのユーザー名 |
creatorGroup | process_events | 新しいファイルを変更したプログラムのグループ名 |
creatorUid | process_events | 新しいファイルを変更したプログラムの UID |
creatorGid | process_events | 新しいファイルを変更したプログラムの GID |
creatorLoginUser | process_events | 新しいファイルを変更したログインのユーザー名 |
creatorLoginGroup | process_events | 新しいファイルを変更したログインのグループ名 |
creatorLoginUid | process_events | 新しいファイルを変更したログインの UID |
creatorLoginGid | process_events | 新しいファイルを変更したログインの GID |
targetUid | process_events | プログラムは、UID を targetUid に変更しようとしています |
targetEuid | process_events | プログラムは、EUID を targetEuid に変更しようとしています |
targetSuid | process_events | プログラムは、SUID を targetSuid に変更しようとしています |
targetFsuid | process_events | プログラムは、FSUID を targetFsuid に変更しようとしています |
targetGid | process_events | プログラムは、GID を targetGid に変更しようとしています |
targetEgid | process_events | プログラムは、EGID を targetEgid に変更しようとしています |
targetSgid | process_events | プログラムは、SGID を targetSgid に変更しようとしています |
targetFsgid | process_events | プログラムは、FSGID を targetFsgid に変更しようとしています |
eventType の可能な値:
- CONTAINER_EVENT_START
- CONTAINER_EVENT_TYPE_CREATED
- CONTAINER_EVENT_TYPE_RUNNING
- CONTAINER_EVENT_TYPE_EXITED
- CONTAINER_EVENT_TYPE_DESTROYED
- CONTAINER_EVENT_TYPE_UPDATED
- CONTAINER_EVENT_END
- PROCESS_EVENT_START
- PROCESS_EVENT_TYPE_FORK
- PROCESS_EVENT_TYPE_EXEC
- PROCESS_EVENT_TYPE_EXIT
- PROCESS_EVENT_TYPE_UPDATE
- PROCESS_EVENT_TYPE_UPDATE_CONTAINER
- PROCESS_EVENT_TYPE_UPDATE_CREDENTIALS
- PROCESS_EVENT_END
- FILE_EVENT_START
- FILE_EVENT_TYPE_OPEN_READ_ONLY
- FILE_EVENT_TYPE_CREATE
- FILE_EVENT_TYPE_DELETE
- FILE_EVENT_TYPE_HARD_LINK
- FILE_EVENT_TYPE_SYM_LINK
- FILE_EVENT_TYPE_MODIFY
- FILE_EVENT_TYPE_RENAME
- FILE_EVENT_TYPE_OPEN_FOR_WRITE
- FILE_EVENT_TYPE_CLOSE_FOR_WRITE
- FILE_EVENT_TYPE_ATTRIBUTE_CHANGE
- FILE_EVENT_TYPE_GET_ATTRIBUTES
- FILE_EVENT_END
- NETWORK_EVENT_START
- SYSCALL_EVENT_ACCEPT
- SYSCALL_ACCEPT_ENTER_EVENT
- SYSCALL_ACCEPT_EXIT_EVENT
- SYSCALL_EVENT_BIND
- SYSCALL_BIND_ENTER_EVENT
- SYSCALL_BIND_EXIT_EVENT
- SYSCALL_EVENT_CONNECT
- SYSCALL_CONNECT_ENTER_EVENT
- SYSCALL_CONNECT_EXIT_EVENT
- SYSCALL_EVENT_LISTEN
- SYSCALL_LISTEN_ENTER_EVENT
- SYSCALL_LISTEN_EXIT_EVENT
- SYSCALL_EVENT_RECVFROM
- SYSCALL_RECVFROM_ENTER_EVENT
- SYSCALL_RECVFROM_EXIT_EVENT
- SYSCALL_EVENT_SENDTO
- SYSCALL_SENDTO_ENTER_EVENT
- SYSCALL_SENDTO_EXIT_EVENT
- NETWORK_EVENT_CONNECT
- NETWORK_EVENT_END
- NETWORKBOUND_IO_EVENT
- INTERACTIVE_SHELL_EVENT
- NETWORK_SERVICE_CREATED_EVENT
- FILE_EVENT_TYPE_WRITE_BATCH_RAW
- FILE_EVENT_TYPE_WRITE_BATCH
- SHELL_COMMAND_EVENT
- NEW_FILE_EXEC_EVENT
- SET_CAPABILITIES_EVENT
- COMMAND_LINE_ACTIVITY_EVENT