WazuhでRule ID 204 "Agent event queue is flooded" が発生した際にどんなイベントが多いのかを確認する方法、あるいは視野の話

Wazuhでは各サーバにあるWazuh agent(実体はossec-agentd)(以下、エージェント)からイベントを受け取ってそのイベントを解析して様々な検知をしてくれます。

なぜ唐突にWazuhなのかについて、詳しくはこことかここをご覧ください。

ところがエージェントが取り扱うイベントが多いと "Agent event queue is flooded" つまり、バッファ溢れを起こしてしまいます。

バッファ溢れに関しては、Wazuhも公式ドキュメントにそのしくみと詳細な対策方法を書いてくれています

documentation.wazuh.com

そして、上記にある各種設定を調整してもバッファ溢れが発生する場合は、そもそもエージェントが取り扱うイベントが多すぎるということになります。

設定では厳しいので、エージェントが受け取っているイベントの見直しが必要になるのですが、エージェントが受け取っているイベントはログファイルだったりファイル更新イベントだったり多岐に渡っているので、何のイベントが多いのか特定は容易ではありません。

エージェントがどんなイベントを受け取っているのかを確認する方法

  1. まず https://github.com/wazuh/wazuh からソースコードをcloneします
  2. https://github.com/wazuh/wazuh/blob/5ebeae15e201b9e9f8d7be2216f0ebd6fc2aa98c/src/client-agent/buffer.c#L64mdebug2("Send messages to buffer: %s", msg); を差し込んておきます
  3. ビルドします
  4. 対象環境のwazuh-agentを止めます systemctl stop wazuh-agent.service
  5. ビルドした ossec-agentd を差し替えます
  6. /var/ossec/etc/local_internal_options.confagent.debug=2 を追記します
  7. wazuh-agentを起動します systemctl start wazuh-agent.service
  8. /var/ossec/logs/ossec.log で受け取っているイベント確認します

はい、ただのprintデバッグですね

利用しているOSSをソフトウェアとみるかソースコードとみるか

エージェントのバッファ溢れはprintデバッグのあと解決に到るまではすぐだったのですが、実は、恥ずかしながら、そのただのprintデバッグにいきつくまでに非常に長い時間がかかってしまっています

そして、(確認する方法3のforkリポジトリのURLからわかるように) @pyama86 から「ビルドできるよ」としれっと示唆してもらって、初めて、やっと、printデバッグにいきつくわけです。

PHPのアプリケーションなら確実に最初にprintデバッグしてるはずなのにです。

振り返ってみると、今回私は Wazuh を「オープンなソフトウェア(OsS)」と見ていて、ソースコードがあるのに関わらず読むとか追記するという頭に最初からなっていなかったように思えました。

これを「オープンなソースコードOSs)」と見ていたら、イベントのバッファを定義している変数なり構造体なりをコードから探すでしょうし、必要な情報を出力するようにするくらいはしたはずです。

MySQLPostgreSQLOsSと見ています。Serverless FrameworkやtcpdumpOSsと見ていたなという経験があります。同じOSSなのに、自分の中での取り扱いが違うみたいです。

おそらくですが、自分のなかにOsSとみるかOSsとみるかの境目があるんだと思います。

@pyama86 はそれを「視野」と言っていました。

その視野は決して1次元で考えられるものではないでしょうし、人それぞれの過去の経験によるものなんだと思うのですが、その視野をできるかぎり「OSSソースコードとみるほう」に寄せていったほうがエンジニアとして成長できるし、意識しないと広がらないな...と感じたできごとでした。