4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OpenOSINT: ターミナルから自律的にOSINT調査を実行するAIエージェント

4
Posted at

OPENOSINTは、AIエージェントがOSINT調査を自動的に実行するオープンソースのPythonフレームワークです。

ターゲットを自然言語で入力するだけで、エージェントが適切なツールを選択し、発見した情報に基づいて自動的に連鎖させ、構造化されたMarkdownレポートを保存します。

デモ

OpenOSINT デモ

実際のセッション例:

$ openosint
openosint ❯ investigate target@example.com

  → generate_dorks('target@example.com')
  → search_email('target@example.com')
  ✓ Found: Spotify, WordPress, Gravatar, Office365

  → search_breach('target@example.com')
  ✓ Found in 2 breaches: LinkedIn (2016), Adobe (2013)

  → search_username('target_handle')
  ✓ Found on: GitHub, Reddit, HackerNews, Twitter

  ╭──────────────── Report ────────────────╮
  │ ## Online Presence                     │
  │ Spotify · WordPress · Gravatar         │
  │                                        │
  │ ## Data Breaches                       │
  │ LinkedIn (2016) · Adobe (2013)         │
  ╰────────────────────────────────────────╯

  ✓ Report saved → reports/2026-05-16_report.md

メールアドレス → 関連アカウント → ユーザー名の自動ピボット → プラットフォーム横断検索まで、人の手を介さずに実行されます。

なぜ作ったのか

OSINT調査の典型的なワークフローはこうです:

  1. ターミナルを開いてholeheでメールを調査
  2. 見つかったユーザー名をコピー
  3. sherlockに切り替えてユーザー名を検索
  4. ブラウザでHaveIBeenPwnedを確認
  5. 別のタブでWHOIS検索
  6. ノートを取りながら繰り返す

ツールはすべてサイロ化されています。ピボットはすべて手動です。調査のロジックは頭の中にしかなく、ターミナルを閉じると消えてしまいます。

OpenOSINTはこの問題を解決します。

幻覚が構造的に不可能な理由

ほとんどのAIツールにはツール結果の幻覚という根本的な問題があります。モデルが実際のツール出力ではなく、もっともらしい結果を生成してしまう可能性があります。

OpenOSINTはAnthropicのネイティブtool use APIを使用しています。

while True:
    response = client.messages.create(
        model="claude-...",
        tools=TOOL_SCHEMAS,
        messages=messages
    )

    if response.stop_reason == "end_turn":
        break  # 調査完了

    if response.stop_reason == "tool_use":
        tool_results = []

        for block in response.content:
            if block.type == "tool_use":
                # 実際のバイナリを実行(holehe、sherlock等)
                real_output = await execute_tool(block.name, block.input)

                tool_results.append({
                    "type": "tool_result",
                    "tool_use_id": block.id,
                    "content": real_output  # 実際の出力、生成ではない
                })

        messages.append({"role": "assistant", "content": response.content})
        messages.append({"role": "user", "content": tool_results})

モデルがツールを呼び出す必要がある場合、ハードストップします。実際のバイナリが実行されます。実際の出力がコンテキストに戻ります。

モデルはツール結果を生成しません。読むだけです。

sherlockが12件のプロフィールを見つけた場合、その12件のURLがそのままコンテキストに戻ります。モデルは存在しない13件目を追加することができません。

9つのツール

ツール バックエンド 取得できる情報
search_email holehe メールに紐づくSNSアカウント
search_username sherlock 300以上のプラットフォームのアカウント
search_breach HaveIBeenPwned v3 情報漏洩履歴と漏洩データ種別
search_whois python-whois 登録者、レジストラ、作成日
search_ip ipinfo.io 位置情報、ASN、ホスト名
search_domain sublist3r サブドメイン列挙
generate_dorks built-in 12個のGoogle Dork URL(ネットワーク通信なし)
search_paste psbdmp.ws Pastebinダンプの言及検索
search_phone phoneinfoga キャリア、国、回線種別

依存バイナリが未インストールの場合、そのツールはエラー文字列を返し、他のツールは通常通り動作し続けます。

3つのインターフェース

インタラクティブAI REPL(デフォルト)

$ openosint
# または
$ openosint shell

自然言語でターゲットや質問を入力できます:

openosint ❯ investigate target@example.com
openosint ❯ johndoe99の全アカウントを探して
openosint ❯ example.comのサブドメインは?
openosint ❯ +14155552671はモバイル番号?

調査後、レポートは自動的にreports/ディレクトリにMarkdown形式で保存されます。

REPLコマンド一覧:

コマンド 説明
clear 会話メモリをリセット
save 最後のレポートを手動保存
tools 利用可能なツールと状態を表示
config 現在の設定を表示
help 全コマンドを表示
exit または Ctrl-D 終了

ダイレクトCLI(AI不要)

スクリプティングや自動化に最適:

# メールアカウント列挙(デフォルトタイムアウト:120秒)
openosint email target@example.com

# カスタムタイムアウト
openosint email target@example.com -t 60

# ユーザー名検索(デフォルトタイムアウト:180秒)
openosint username johndoe99

# 詳細出力
openosint -v email target@example.com

Anthropic APIキー不要で動作します。

MCPサーバー

全9ツールをMCP対応クライアントに公開します。

Claude Codeへの登録:

claude mcp add openosint python /path/to/OpenOSINT/openosint/mcp_server.py
claude mcp list  # 確認

Claude Desktopの設定(~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "openosint": {
      "command": "python",
      "args": ["/path/to/OpenOSINT/openosint/mcp_server.py"]
    }
  }
}

OllamaでローカルLLMも使用可能(APIキー不要):

openosint --provider ollama --ollama-model llama3.2

アーキテクチャ

コードベースは5つのレイヤーで構成されています。上位レイヤーのインポートは禁止です:

openosint/tools/        コアツール
                        実際のバイナリとAPIの非同期ラッパー
                        ステートレス。AI不要。純粋な関数。

openosint/agent.py      AIエージェント
                        Anthropic tool useループ
                        セッションごとの会話履歴

openosint/repl.py       インタラクティブREPL(prompt_toolkit + Rich)
openosint/mcp_server.py MCPサーバー(stdio転送)
openosint/cli.py        CLIエントリーポイント

AIレイヤーは完全にオプションです。APIキーがなくても、CLIとMCPサーバーは独立して動作します。

インストール

git clone https://github.com/OpenOSINT/OpenOSINT.git
cd OpenOSINT
pip install -e .

またはPyPIから直接インストール:

pip install openosint

外部ツールのインストール:

pip install holehe sherlock-project sublist3r

オプション設定:

export ANTHROPIC_API_KEY=sk-ant-...   # AI REPLに必要
export HIBP_API_KEY=your_key          # HaveIBeenPwned v3
export IPINFO_TOKEN=your_token        # ipinfo.io レート制限緩和
export VIRUSTOTAL_API_KEY=your_key    # VirusTotal
export SHODAN_API_KEY=your_key        # Shodan

まとめ

OpenOSINTは以下の3つのインターフェースで使用できます:

  • openosint — AI REPL(自動チェーニングによる完全調査)
  • openosint email / openosint username — ダイレクトCLI(スクリプティング)
  • MCPサーバー — Claude Code / Claude Desktopでの調査実行

MITライセンス。Python 3.10以上。承認された調査目的のみ使用可能です。

GitHubでスターをつけていただけると嬉しいです ⭐

⚠️ 本ツールは、承認されたセキュリティ調査、ペネトレーションテスト、調査報道のみを目的としています。適用される法律(GDPR、CCPA等)への準拠はユーザーの責任です。

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?