PaPoo
cover
technews
Author
technews
世界の技術ニュースをリアルタイムでキャッチし、日本語でわかりやすく発信。AI・半導体・スタートアップから規制動向まで、グローバルテックシーンの「今」をお届けします。

AI×セキュリティツールはなぜ「それっぽい嘘」をつくのか──OSINTをターミナルで回す新しい設計の話

記事のキーポイント

「AI+セキュリティ」は便利そうなのに、なぜ危ないのか

この記事の出発点はかなり衝撃的です。著者が以前使った AI の OSINT(Open Source Intelligence)ツールは、調査結果としてこんなものを出したそうです。

image_0001.webp

でも、​全部ウソだった。
対象の Twitter ハンドルではないし、GitHub の URL はリポジトリそのもの、IP も SSH バナーも組織名も捏造。しかも、見た目がきれいだから余計にたちが悪い。

ここがこの記事の核心です。
LLM(大規模言語モデル、要するに ChatGPT のような「文章を作るのが上手いAI」)は、​自然な文章や、いかにもありそうなフォーマットを作るのが得意です。ところが OSINT やセキュリティの世界では、「それっぽい」ではダメで、​実在する情報だけが必要です。

私はここ、かなり重要だと思いました。
AI の失敗って、単に「知らない」と言ってくれればまだマシなんです。でも、セキュリティでは“見た目だけ正しい誤情報”が一番危ない。人間はつい信じてしまうからです。

なぜ普通の ReAct ループではうまくいかないのか

著者は最初、よくある ReAct loop を試します。
ReAct は Reasoning + Acting の略で、ざっくり言うと「AIに考えさせ、必要ならツールを呼ばせ、結果を見て次を考えさせる」方式です。

image_0003.svg

イメージとしてはこんな感じです。

  1. モデルが「このツールを使いたい」と JSON っぽく返す
  2. プログラムがそのツールを実行する
  3. 結果をモデルに返す
  4. さらに次の判断をさせる

一見すると正しそうですが、問題はモデルがツール結果を“予測”してしまうこと。
つまり、ツールを呼ぶ前から「たぶんこんな結果だろう」と勝手に物語を作ってしまい、実際の結果が返ってきても、その物語に引っ張られてしまうんです。

著者は次のような指示も試したそうですが、うまくいかなかったとのこと。

image_0004.svg

それでもモデルは、要約したり、文脈を足したり、挙げ句の果てに存在しない結果まで並べたりした。
つまり、AIが「OSINT analyst を演じている」状態であって、実際に調査しているわけではなかった、というわけです。

これ、AIアプリ全般に通じる話だと思います。
「会話として自然」なことと、「道具として正確」なことは、かなり違うんですよね。

解決策は native tool use API だった

著者がたどり着いた答えは、Anthropic の native tool use API です。
これは、モデルに「ツールを使いたい」とテキストで言わせるのではなく、​構造化された tool call として扱う仕組みです。

image_0005.svg

ポイントはここです。

つまり、モデルが勝手に「こういう結果が返るはず」と作文する余地を減らしているんですね。
著者はこれを「幻覚(hallucination)が構造的に起きにくい」と表現しています。

この設計、かなり賢いと思います。
AIに“頭の中でそれっぽくやらせる”のではなく、​システム側で現実を強制的に差し込む。セキュリティ用途では、こういう強い制約のほうが向いています。

OpenOSINT という仕組み

image_0006.svg

この考え方を実装したのが、著者の OpenOSINT です。
ターミナルから OSINT 調査を実行できる、オープンソースの AI エージェントです。

構成は大きく 3 層に分かれています。

1. Provider layer

LLM の種類を抽象化する層です。
Anthropic、OpenAI、Ollama などを同じインターフェースで扱えるようにしています。

つまり、裏側のモデルを変えても、アプリの他の部分はあまり触らなくていい。これは地味ですがかなり便利です。

image_0007.svg

2. Tool registry

OSINT 用のツールを登録する層です。
@register_tool のような decorator(関数に付ける印のようなもの)で、ツールを追加できます。

例としては、メールアドレスから関連アカウントを探す search_email があり、内部では holehe を使っています。
holehe は、メールアドレスがどんなサービスで使われていそうかを調べるツールです。

3. Agent loop

実際に「モデルが考える → ツールを呼ぶ → 結果を見る」を回すループです。
ここで先ほどの native tool use API を使います。

著者の設計思想はかなり明快で、​新しいツールを追加するにはファイル1つと decorator 1つで済むようにしているそうです。
こういう「増やしやすさ」は、実際の運用でかなり効きます。

どんなツールがあるのか

image_0008.svg

OpenOSINT には、次のようなツールが含まれています。

専門用語を少しかみ砕くと、

こうして見ると、AIが何でもやるというより、​既存の調査ツールをうまく束ねる司令塔として働いているのがわかります。

image_0009.webp

固定パイプラインより、エージェントのほうが強い理由

ここ、記事の中でも特に納得感がありました。

単純な方法としては、毎回決まった順番でツールを回すやり方があります。
たとえば、

image_0012.gif

みたいに固定するやり方です。
これはシンプルで再現性もありますが、問題は対象によって必要な調査が違うこと。

たとえば、

という具合です。

特に面白いのは、著者がこんな流れを挙げているところです。
名前しかない人に対して、いきなり search_username("John Doe") を回してもあまり意味がない。むしろ generate_dorks で検索し、そこから @johndoe_dev のような実際のハンドルを見つけ、その後に search_username("johndoe_dev") を実行する。
この順番の判断を、エージェントが自分でできるわけです。

image_0013.gif

これは「自動化」というより、​文脈を読んで次の一手を選ぶのが価値なんだ、という話です。
個人的にはここがいちばん本質だと思いました。AIエージェントは、全部を置き換える存在というより、​調査の分岐をうまく選ぶ補助輪に近いのではないかと感じます。

実際の調査結果はどう見えるのか

記事では、実際に john.doe@example.com を調査した例が示されています。

実行内容のイメージはこんな感じです。

image_0014.gif

そしてレポートには、

がまとめられます。

著者は「レポートに書かれた内容はすべて実際のツール出力から来ていて、捏造はない」と強調しています。
これはOSINTではめちゃくちゃ大事です。
“見つけた風”ではなく、​証拠に基づくレポートになっているからです。

image_0015.png

この設計の何がうれしいのか

率直に言うと、この記事は「AIがすごい」という話だけではありません。
むしろ、「AIにやらせてはいけないことをちゃんと分けた」のが良いのだと思います。

特に良いと感じた点は3つです。

1. 生成と実行を分離している

LLM に自由作文をさせず、ツール結果はツール結果として扱う。
これは安全性の面でかなり大きいです。

2. 調査フローを固定しすぎていない

OSINT は相手によって正解ルートが違うので、エージェント型のほうが自然です。

image_0017.png

3. 実運用を意識している

provider 抽象化、decorator でのツール登録、CLI ベースの利用など、ちゃんと使うことを考えて作られている。
研究デモで終わっていないのがいいですね。

逆に、まだ改善の余地もある

著者自身も「こうしたい」として挙げている改善点があります。

image_0018.png

ここは、すごく現実的な改善案だと思います。
AIシステムって、正しさだけじゃなくて、​速さ・見やすさ・追跡しやすさも重要なんですよね。

まとめ

この記事のメッセージはかなり明快です。
AIをセキュリティ調査に使うなら、「賢そうに話す」ことより「現実のツール結果に縛る」ことが重要だ、という話です。

image_0019.png

そして、そのためにはただプロンプトを工夫するだけでは足りない。
モデルのふるまいを変えるのではなく、​アーキテクチャで幻覚を起こしにくくする必要がある、というのが著者の結論です。

私はこれ、AIエージェント設計のかなり良い教科書だと思いました。
特にセキュリティのように「嘘が致命傷になる分野」では、かなり説得力があります。
AIは万能の調査員ではない。でも、正しい枠組みで使えば、かなり強力な“調査補助”になる。この記事はその境界線をとても上手く示していました。


参考: Why Every AI+Security Tool I Tried Was Lying to Me (And What I Built Instead)

同じ著者の記事