← 기사 목록
日本語https://qiita.com/tags/ai/feed

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

추출된 키워드

35
AIエージェント·5OpenOSINT·5OSINT調査·5Pythonフレームワーク·4holehe·4sherlock·4HaveIBeenPwned v3·4Anthropic·4tool use API·4Claude Desktop·4Claude Code·4MCPサーバー·4ダイレクトCLI·4AI REPL·4llama3.2·3Ollama·3phoneinfoga·3Pastebinダンプ·3Google Dork·3sublist3r·3ipinfo.io·3python-whois·3claude-...·3WHOIS検索·3Markdownレポート·3psbdmp.ws·3GitHub·2Shodan·2VirusTotal·2CCPA·2GDPR·2Python 3.10·2MITライセンス·2Rich·2prompt_toolkit·2

원문

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

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

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

デモ

実際のセッション例:

$ 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調査の典型的なワークフローはこうです:

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

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

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
sherlock300以上のプラットフォームのアカウント
search_breach
HaveIBeenPwned v3情報漏洩履歴と漏洩データ種別
search_whois
python-whois登録者、レジストラ、作成日
search_ip
ipinfo.io位置情報、ASN、ホスト名
search_domain
sublist3rサブドメイン列挙
generate_dorks
built-in12個のGoogle Dork URL(ネットワーク通信なし)
search_paste
psbdmp.wsPastebinダンプの言及検索
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等)への準拠はユーザーの責任です。