AIエージェントがプルリクエストを通じてセキュリティ修正を提案
セキュリティアラートが発生します。LLMがコンテキストを読み取り、設定の修正案を作成します。GitHubのプルリクエストを作成し、別のLLMがその内容をレビューします。最終的に、人間がその修正をマージします。
エージェントが本番環境に直接触れることはありません。エージェントが自律的にマージすることもありません。
通常のKubernetesコントローラーは、単にリトライを繰り返すだけです。設定ミスによってPodがクラッシュした場合、コントローラーはそれを永遠に再起動し続けますが、根本原因を解決することはありません。セキュリティも同様の問題を抱えています。SIEMがアラートを上げても、人間がそれを読み、修正案を書かなければなりません。このプロセスは時間がかかります。
私たちはこの問題を解決するためにエージェントを構築しました。このエージェントはセキュリティアラートを読み取り、インフラストラクチャを確認してドラフトを作成します。これはオートパイロットではなく、ドラフト生成器です。それ以外のすべては、人間とGitOpsの制御下に置かれます。
仕組み:
• Wazuhが攻撃を検知し、アラートをデータベースに保存します。 • ブリッジが新しいアラートを取得し、エージェントを起動します。 • エージェントは制限されたツールを使用します。ファイルの読み書き、ブランチの作成、GitHub APIの使用が可能です。また、編集できるのは設定ファイルのみです。 • ArgoCDがリポジトリを監視します。人間がプルリクエストをマージするまで、何もデプロイされません。
2つの安全レイヤーを使用しています:
コードチェック。LLMではないルールを用いて差分(diff)を検証します。変更が設定ファイル内に留まっているか、サーバーパスがアラートと一致しているか、差分のサイズは適切かなどを確認します。検証に失敗した場合、プルリクエストは停止します。
2つ目のLLMによるレビュー。異なるモデルファミリーがプルリクエストを読み、意見を提供します。モデルは自分自身の回答に同意しやすいため、あえて異なるモデルを使用しています。また、プルリクエストのテキストを鵜呑みにしないようモデルに指示しています。これにより、攻撃者がアラート内にコマンドを隠蔽することを防ぎます。
開発中に変更した点:
• クラウドLLMから、Ollamaを使用した自社サーバーへと移行しました。これにより、データのプライバシーを維持し、サービスの停止を防ぐことができます。 • 「ToolCalling」エージェントを「CodeAgent」に置き換えました。小型モデルは綺麗なJSONを送信するのが苦手ですが、CodeAgentは代わりにPythonを記述します。これにより、エラーとステップ数が20以上から3〜8へと減少しました。 • 「run_shell」ツールを特定のGitツールに置き換えました。これにより、「rm -rf」のような危険なコマンドの実行を防ぎます。 • ネットワークの安定性を高めるため、「push」構成から「pull」構成に変更しました。
私たちはLLMを「仕事の早いジュニアデベロッパー」のように扱っています。エージェントと本番環境の間には人間と二次チェックが存在するため、そのドラフトは非常に有用なものとなります。
Source: https://dev.to/aisecops/an-ai-agent-that-proposes-security-fixes-as-pull-requests-2hjj
Optional learning community: https://t.me/GyaanSetuAi
