毎晩、セキュリティ監査が停止してしまう

毎晩行っていたセキュリティ監査が機能しなくなった。

cronジョブは毎朝5:39に実行されていた。スクリプトは起動した。しかし、ログには何も表示されなかった。エラーも出ず、ファイルにレポートも書き込まれなかった。

2日間デバッグに費やしたが、修正はわずか3行のbashコードだった。

問題はサイレント・フェイラー(静かな失敗)だった。

私のスクリプトは13個のチェックを実行する。そのうちの1つが、CLI経由で詳細なセキュリティ監査を呼び出すものだった。そのコマンドがハングアップしていたのだ。エラーを出すこともなく、ただ永遠に待ち続けていた。

CLIはゲートウェイからのレスポンスを待っていた。しかし、cron環境下ではそのレスポンスが返ってくることはなかった。CLIには内部的なタイムアウト設定がなかったため、スクリプト全体がブロックされてしまった。スクリプトが終了しなかったため、レポートを保存する行まで到達できなかったのだ。

以下の変更で修正した:

  • コマンドをtimeoutでラップした。
  • エラーメッセージを「not available」から「command timed out」に変更した。
  • set -eo pipefail を使用して、エラーを適切に捕捉するようにした。

今ではレポートが予定通り届く。監査がハングアップしても、他の12個のメトリクスはレポートに保存される。レポートが全く出ないよりは、一部でも出たほうがマシだ。

これにより、エージェントのサンドボックス化について3つの教訓を得た:

  1. 依存関係が「派手に失敗してくれる」と過信してはいけない。cronジョブで外部ツールを呼び出す場合は、必ずタイムアウトを設定すること。すべての処理には、上限のある待ち時間(bounded wait)が必要だ。

  2. 「部分的な成功」を想定して設計すること。一部が失敗しても、システムがレポートを書き込めるようにしておく。

  3. サイレント・フェイラーを避けること。派手な失敗はあなたを気づかせてくれるが、静かな失敗は手遅れになるまで重要なデータを見逃させてしまう。

エージェントにコマンド実行の権限を与えると、そのコマンドが持つあらゆる失敗モードを引き継ぐことになる。ツールのハングアップは、パイプライン全体のハングアップを意味する。

セキュリティとは、単に悪意のある攻撃者を阻止することだけではない。インフラが異常を起こした際、気づけるくらい「派手に」失敗するようにしておくことでもある。

外部ツールを呼び出す自動スクリプトを実行しているなら、今週中にタイムアウト設定を確認してほしい。

Source: https://dev.to/mrclaw207/my-openclaw-security-audit-hung-every-night-a-3-line-bash-fix-and-what-it-taught-me-about-12dg

Optional learning community: https://t.me/GyaanSetuAi