AIは脆弱性チェックの作成を任せられるか? Intruder社の調査結果

はじめに:AIによる脆弱性チェックの可能性

脆弱性管理は常に時間との戦いです。攻撃者は素早く動き、スキャンには時間がかかります。もしスキャナーが追いつかなければ、システムは危険に晒されます。この課題に対し、Intruder社のセキュリティチームは、AIが新しい脆弱性チェックをより迅速に構築できるか、そしてその際に高い品質基準を維持できるかという研究プロジェクトを開始しました。検出の信頼性がなければ、スピードだけでは意味がありません。誤検知が多い、あるいは実際の脆弱性を見逃すチェックは、誰の役にも立たないからです。本記事では、AIとの実験結果、うまくいった点、そして課題について共有します。

アプローチの比較:ワンショット vs. エージェント型

当初、私たちは単純な方法から始めました。LLMチャットボットにプロンプトを入力し、Nucleiテンプレートを作成できるか試したのです。しかし、結果は散々なものでした。出力には存在しない機能が参照され、無効な構文が吐き出され、弱いマッチングやエクストラクターが使用されました。これはChatGPT、Claude、Geminiのいずれでも同様でした。

そこで、私たちはエージェント型アプローチを試みました。チャットボットとは異なり、エージェントはツールを使用し、参照資料を検索し、ルールに従うことができます。当初は懐疑的でしたが、改善はすぐに現れました。Cursorのエージェントを使用すると、最小限のプロンプトで、初期実行からの出力品質がはるかに有望であることがすぐにわかりました。

そこから、ルールを重ね、厳選されたNucleiテンプレートのリポジトリをインデックス化しました。これにより、エージェントは確固たる例から学習し、一貫性のない点を減らし、適切な機能を使用するように促されました。テンプレートの品質は著しく向上し、エンジニアが手動で作成したものに非常に近いものになりました。しかし、これは「設定して放置」できるものではありませんでした。放置すると、エージェントは依然として軌道修正を必要としました。しかし、明確なプロンプトを与えることで、手動で書かれたかのようなチェックを生成することができました。この時点で、私たちの目標は完全な自動化ではなく、品質基準を下げずに高品質なチェックをより迅速に出荷するための生産性向上ツールへとシフトしました。

現在のワークフロー

私たちが現在採用しているプロセスは、標準的なプロンプトとルールを使用します。エンジニアは以下の主要な入力情報を提供します。

  • 対象となるページ
  • 使用するマッチングのタイプ(もしあれば)
  • 脆弱性スキャン結果のために抽出する主要データ

これらの情報に基づいて、エージェントがテンプレートを構築します。これは完全に「雰囲気でコーディング」されたものではありませんが、はるかに高速であり、エンジニアがより深い研究に時間を費やすことを可能にします。

成功事例

攻撃対象領域のチェック

エージェント型AIは、公開テンプレートが存在しないチェックの作成に特に役立っています。その好例が、インターネットに公開されている管理パネルの検出です。これらのチェックは原理的には単純ですが、大規模に作成するには時間がかかります。自動化により、はるかに多くのチェックをより迅速に作成できます。主要なスキャナーでカバーされていない製品が非常に多いことに驚くことがよくあります。このプロセスは、そうしたギャップを埋め、顧客に攻撃対象領域の全体像を提供するために役立ちます。もしVMスキャナーが公開されたパネルを検出せず、かつシステム規模が大きい場合、それらが存在することすら知ることができない可能性があるからです。

保護されていないElasticsearch

私たちは、エージェント型ワークフローの迅速な成功例として、保護されていないElasticsearchのチェックを作成しました。公開されているNuclei検出テンプレートは存在しましたが、最悪のケース、つまり誰でもデータを読み取れるように完全に公開されているインスタンスはカバーしていませんでした。私たちは、このケースを確実に検出したいと考えました。

エージェントに与えた情報は以下の通りです。

  • タスクを2〜3文で記述したもの(例:Elasticsearchインスタンスを検出し、Xエンドポイントにリクエストを送信し、その後Yエンドポイントにフォローアップリクエストを送信して、データが実際に公開されているかを確認する)
  • Elasticsearchサーバーをホストするテストターゲットのリスト
  • テストしたい方法に対して脆弱なターゲットの例
  • 脆弱ではないターゲットの例

エージェントは、私たちが設定したカスタムルールを使用してプロセスを繰り返し実行しました。最終的な結果は、データソースをリストアップし、有望なエンドポイントを追跡して、認証されていないユーザーがデータを読み取れるかどうかを確認するNucleiテンプレートでした。これは、自動スキャンに適した、動作するマッチングと抽出機能を持つマルチリクエストテンプレートです。セキュリティエンジニアリングチームによる手動入力と判断は依然として必要でしたが、エージェントが反復的な重労働を処理してくれました。

課題

これまでの私たちの探求は、いくつかの障害や再考なしには進みませんでした。

  • 現在の出力の限界: ルールを設定しても、エージェントが逸脱することがあります。例えば、公開された管理パネルのチェックを作成しましたが、十分な強度を持つマッチングを含まず、誤検知のリスクがありました。追加のプロンプトで修正されましたが(その製品に固有のファビコンマッチングを追加)、エージェントにはまだガードレールが必要であることを示しています。信頼できる最強のマッチングを確実に選択し、それらを検証できるようになるまでは、人間の監視が不可欠です。
  • curl出力の切り捨て: Cursorはトークンを節約するために、しばしば「curl」の応答を「head」を介してパイプします。残念ながら、これにより理想的なマッチングとなるユニークな識別子を見逃すことがあります。これは効率化機能ですが、私たちにとっては不利に働き、まだ完全に解決されていません。
  • 基本的なことの忘れ: Cursorは、ホストリストに対して実行するための「-l」のようなNuclei自身のフラグを見落とし、代わりに手動ループをスクリプト化することがあります。私たちは、主要なNuclei機能を思い出させ、その非効率性を排除するための新しいルールに取り組んでいます。

今後の展望

AIは、複雑なタスクを完全に置き換える万能薬として至る所で宣伝されています。私たちの視点から見ると、その多くはマーケティングの誇大広告です。セキュリティエンジニアリングをAIエージェントに厳密な監視なしで完全に任せるには、まだ長い道のりがあります。不可能だとは言いませんが、今のところ、完全な自動化を主張する者には慎重です。

私たちは、生産性向上ツールとして、そして可能な限り安全な自動化に向けて、脆弱性管理におけるAIの活用を推進し続けます。しかし、今日の結論は明確です。脆弱性を見逃さず、誤検知を生成しない高品質なカスタムチェックを提供するためには、専門のエンジニアが不可欠です。