AIペンテスターがリスクのある操作を行う前に確認するようになりました
エージェント型スキャンで、リスクのある操作の前に承認を求められるようになりました。エージェントの対応方法を選び、Approvalsタブから回答し、誰も回答しない場合の動作を決められます。
課題
エージェント型スキャンは、ペンテスターと同じようにアプリケーションをテストします。計画を立て、さまざまな方法を試し、検出した内容を追跡します。それが徹底した調査につながる一方で、自律的な実行をためらうチームがある理由でもあります。
エージェントの操作の大半は、ページを読み取り、レスポンスを調べるといった無害な偵察です。ただし、性質の異なる操作もあります。
- SMSの送信は、実在する人に届きます。
- ファイルの公開は、他の人に見える内容を変えます。
- SQLインジェクションの悪用は、誰かが所有するデータを読み取ります。
- 指定されていないホストのテストは、評価の範囲を逸脱します。
こうした操作については、スキャン全体を見張り続けることなく、実行前に判断したいと考えるチームもあるでしょう。
実装した機能
承認機能を追加しました。エージェントはリスクのある操作の前に停止して確認を求め、そのリクエストはスキャン内で回答を待ちます。例えば、SQLインジェクションの可能性を検出すると、「このSQLインジェクションの悪用を進めてもよいですか?」と尋ねます。
これらの操作への対応方法を選択し、スキャンページから回答し、誰も回答しない場合の動作を決められます。
リスクのある操作への対応方法を選択
承認はスキャンの設定項目です。エージェント型スキャンを作成する際、Guardrailsステップを開きます。Approval of actionsで、3つの選択肢から一つ選びます。

- Run without asking:エージェントがリスクのある操作を自律的に実行します。確認は求めません。これがデフォルトです。
- Ask me, block if no answer:エージェントが回答を待ちます。誰も回答しなければ、操作は実行されません。
- Ask me, run if no answer:エージェントが回答を待ちます。誰も回答しなければ、自らの判断で実行します。
この設定はDeep Agentic Scan、Mobile Shielding、Single Vulnerability Assessmentプロファイルで利用できます。Dig Deeperでは、追加評価にも設定が引き継がれます。
確認が必要な場面をエージェントが判断
この設定が、すべてのツール呼び出しを停止するわけではありません。エージェントは、重要な場面で確認します。
- SMSの送信やコンテンツの公開など、実在する人に影響する操作の前
- 破壊的な操作、または取り消せない操作の前
- スキャンの範囲を逸脱する操作の前
- 行き詰まって安全に判断できない場合。例えば、対象が範囲内か判断できないときや、ユーザーだけが持つ認証情報やコードが必要なとき
それぞれのリクエストには、エージェントが実行したい内容とその理由を記したメッセージが含まれます。
Approvalsタブから回答
人間の判断を組み込んだスキャンでは、結果メニューのRisksの下にApprovalsタブが表示されます。回答待ちのリクエスト数を示すオレンジ色の点が、エージェントが対応を必要としていることを知らせます。回答待ちのリクエストが先頭に表示されます。

ページを開いたままにする必要はありません。Ostorlabは、そのスキャンを閲覧できるadminまたはuserロールのアカウントにタブへのリンクをメールで送り、アプリ内通知も追加します。複数のリクエストが待機していても、同じスキャンについて各ユーザーに通知する頻度は最大で10分に1回です。
承認、拒否、返信
各リクエストには3つの回答方法があります。
- Approve:エージェントは記載した操作だけを実行します。後続のリクエストには新たな承認が必要です。
- Deny:エージェントは実行せず、再試行したり拒否を回避したりしません。
- Add a messageでメッセージを追加してからSend reply:メッセージが回答としてエージェントに届きます。質問へのリクエストなら、その答えになります。操作の実行を求めるリクエストなら、承認ではなく指示として扱われます。エージェントは再検討し、それでも実行を希望する場合は改めて確認します。
返信では、同僚に伝えるような指示を送れます。例えば「ステージング環境で読み取り専用の実証を行ってください。顧客データは抽出しないでください」と伝えられます。

メッセージの入力中は、Approveボタンが無効になります。承認にはメッセージを付けられないためです。Denyは引き続き利用でき、入力したメッセージを拒否理由として送信します。
複数のリクエストが待機していて、すべて信頼できる場合は、Approve allで確認後にまとめて回答できます。
判断を待つ間もスキャンは継続
回答待ちのリクエストがブロックするのは、そのリクエストが対象とする操作だけです。スキャンの他のテストは続くため、数時間回答を待つリクエストがあっても評価全体は停止しません。
誰も回答しない場合
デフォルトでは、エージェントは各リクエストへの回答を最大24時間待ちます。その後の動作は、選択したモードで決まります。
- Ask me, block if no answerでは、操作を実行せず、他のテストを続けます。
- Ask me, run if no answerでは、エージェントが自らの判断で操作を実行します。
例外は、対象が範囲内かどうかという質問です。誰も回答しない場合、どちらのモードでも対象を範囲外と判断し、操作を行いません。拒否や返信によって操作の実行が許可されることはありません。
すべての回答を記録
回答済みのリクエストは、回答内容とともにHistoryに移動します。
- Approved:承認済み
- Denied:拒否済み。理由も記録
- Replied:返信済み。メッセージも記録
- Timed out:エージェントが待機を終了するまでに回答なし

adminまたはuserロールのユーザーがリクエストに回答できます。Readerはタブを開いて内容を閲覧できますが、回答はできません。
利用を開始
エージェント型スキャンを作成し、Guardrailsステップを開いて、リスクのある操作への対応方法を選択します。Ask me, block if no answerから始めれば、リスクのある操作には必ず人間が関与し、それ以外のスキャンは引き続き進行します。
承認機能ガイドでは、設定と回答の方法を順に説明しています。10月の変更履歴には、同時にリリースされた他の機能も掲載されています。
よくある質問
承認機能とは何ですか? エージェント型スキャンが、リスクのある操作を行う前に確認を求められる機能です。リクエストはスキャンのApprovalsタブで回答を待ち、承認、拒否、または独自の指示を含む返信で対応できます。
エージェントは毎回の操作前に確認しますか? いいえ。この設定は、すべてのツール呼び出しを停止するものではありません。実在する人に影響する操作、破壊的または取り消せない操作、スキャンの範囲を逸脱する操作の前や、行き詰まって安全に判断できない場合に確認します。
リクエストが回答待ちの間、他のスキャンはどうなりますか? 継続します。ブロックされるのは、判断を待っている操作だけです。
自分の指示を回答として送れますか? はい。メッセージを追加し、返信として送信してください。操作に対する返信は、承認ではなく指示です。エージェントは再検討し、それでも実行を希望する場合は改めて確認します。
誰も回答しない場合はどうなりますか? デフォルトでは、エージェントは最大24時間待ちます。Ask me, block if no answerでは、操作を実行しません。Ask me, run if no answerでは、自らの判断で実行します。ただし、範囲に関する質問では対象を範囲外として扱います。
どのスキャンが承認機能に対応していますか? Deep Agentic Scan、Mobile Shielding、Single Vulnerability Assessmentプロファイルです。各プロファイルのGuardrailsステップに設定があります。
リクエストに回答できるのは誰ですか? adminまたはuserロールのユーザーです。Readerはリクエストを閲覧できますが、回答はできません。
承認機能を有効にするにはどうすればよいですか? スキャンを作成する際、Guardrailsステップを開き、Approval of actionsでAsk me, block if no answerまたはAsk me, run if no answerを選択します。承認機能ガイドで手順全体を説明しています。
初めての承認設定でサポートが必要な場合は、support@ostorlab.devまでメールでお問い合わせください。