コンテンツにスキップ

メタイベントフィルタの使用

調査によって、オンに設定されたテーブルのメタイベントすべてが収集され、選択した 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