オープンソースインテリジェンス(OSINT)のための強力なフレームワーク
Recon-ng は、オープンソースの情報源から迅速かつ徹底的に情報を収集することを目的とした、Python で書かれた強力な Web 偵察フレームワークです。Metasploit Framework に似たインターフェースを持ち、多くのセキュリティ専門家やペネトレーションテスターにとって馴染みやすい操作感を提供します。ただし、Recon-ng は偵察、特に Web ベースのオープンソースインテリジェンス(OSINT)収集に特化しており、Metasploit のようなエクスプロイト機能は含んでいません。
このフレームワークはモジュール式であり、特定の情報収集タスクを実行するための独立した「モジュール」を追加・利用できます。これにより、サブドメインの列挙、WHOIS 情報の検索、SNS プロファイルの探索、脆弱性情報の収集など、多岐にわたる偵察活動を自動化・効率化できます。
そして、recon-web は Recon-ng の Web ベースのユーザーインターフェースです。これにより、収集したデータをブラウザ上で視覚的に確認し、管理することが可能になります。この記事では、Recon-ng の基本的な使い方と、recon-web インターフェースの活用方法について解説します。
Recon-ng のセットアップ
Recon-ng は多くのペネトレーションテスト用 Linux ディストリビューション(Kali Linux など)にプリインストールされています。もしインストールされていない場合や、他の OS で使用したい場合は、公式の GitHub リポジトリからソースコードをクローンしてインストールできます。
インストール手順 (ソースから)
- リポジトリのクローン:
git clone https://github.com/lanmaster53/recon-ng.git - ディレクトリ移動:
cd recon-ng - 依存関係のインストール:
pip install -r REQUIREMENTS※ Python 3.x と pip がインストールされている必要があります。
- Recon-ng の起動:
./recon-ng※ Kali Linux など、パスが通っている環境では単に
recon-ngで起動できます。
Docker を使用する場合
Docker を利用すると、環境構築の手間を省き、特に recon-web の API 機能をフルに活用したい場合に推奨されます。
- Docker Desktop をインストールします。
~/.recon-ngディレクトリが存在することを確認します。- リポジトリをクローンします:
git clone https://github.com/lanmaster53/recon-ng.git - ディレクトリに移動します:
cd recon-ng - Docker イメージをビルドします:
docker build --rm -t recon-ng . - Recon-ng コンソールを起動します:
docker run --rm -it -v $(pwd):/recon-ng -v ~/.recon-ng:/root/.recon-ng --entrypoint "./recon-ng" recon-ng recon-webを起動する場合は、--entrypointを"./recon-web"に変更し、--host 0.0.0.0をコマンド末尾に追加します。docker run --rm -it -p 5000:5000 -v $(pwd):/recon-ng -v ~/.recon-ng:/root/.recon-ng --entrypoint "./recon-web" recon-ng --host 0.0.0.0※
recon-webのタスク実行(API経由)には Redis が必要であり、Docker Compose を使用して Recon-ng、Redis、Worker のコンテナを起動することが推奨されます。
初めて Recon-ng を起動すると、モジュールがインストールされていない旨のメッセージが表示されることがあります。これは正常な状態です。
[*] No modules enabled/installed. Recon-ng の基本操作
Recon-ng は対話型のコンソールを提供します。Metasploit を使ったことがある方なら、多くのコマンドが似ていることに気づくでしょう。基本的なコマンドをいくつか紹介します。
| コマンド | 説明 |
|---|---|
help | 利用可能なコマンドの一覧を表示します。 |
workspaces | ワークスペース(調査プロジェクトごとのデータ保存領域)を管理します(create, list, load, remove)。 |
marketplace | モジュールマーケットプレイスを操作します(search, install, info, remove)。 |
modules | インストール済みのモジュールを操作します(load, search)。 |
use <module_name> | 特定のモジュールをロードします (modules load と同等)。 |
options | 現在ロードされているモジュールやグローバルのオプションを管理します(list, set, unset)。 |
info | 現在ロードされているモジュールの詳細情報を表示します。 |
input | モジュールの実行に必要な入力(例:ドメイン名)を設定します。 |
run | ロードされているモジュールを実行します。 |
db | ワークスペースのデータベースを操作します(insert, select, delete, query, schema)。 |
show | データベース内の特定のテーブル(domains, hosts, contacts など)の内容を表示します。 |
keys | サードパーティサービス(Shodan, Google, Twitter など)の API キーを管理します(add, list, remove)。 |
back | 現在のコンテキスト(モジュールなど)から一つ前のレベルに戻ります。 |
exit | Recon-ng フレームワークを終了します。 |
ワークスペースの管理
OSINT 調査では、収集した情報を整理することが重要です。Recon-ng のワークスペース機能を使うと、ターゲットごとにデータを分けて管理できます。
- ワークスペース作成:
workspaces create <workspace_name> - ワークスペース一覧:
workspaces list - ワークスペース読込:
workspaces load <workspace_name> - ワークスペース削除:
workspaces remove <workspace_name>
ワークスペースを作成またはロードすると、プロンプトが [recon-ng][<workspace_name>] > のように変化します。データはそのワークスペース内のデータベースに保存されます。
モジュールの検索とインストール
Recon-ng の真価はモジュールにあります。マーケットプレイスから必要なモジュールを探し、インストールして使用します。
- モジュール検索:
marketplace search [keyword](キーワードなしで全モジュール表示) - モジュール情報表示:
marketplace info <module_name> - モジュールインストール:
marketplace install <module_name> - 全モジュールインストール:
marketplace install all(多数のモジュールが一括でインストールされます) - モジュール削除:
marketplace remove <module_name>
モジュールはカテゴリ別に分類されています(例: recon, discovery, reporting, import, exploitation)。
API キーの設定
多くのモジュールは、外部サービス(Shodan, Twitter, GitHub, VirusTotal など)の API を利用します。これらのモジュールを使用するには、対応する API キーを取得し、Recon-ng に登録する必要があります。
keys add <key_name> <api_key_value>例えば、Shodan の API キーを追加する場合は以下のようになります。
keys add shodan_api <Your_Shodan_API_Key> 必要なキー名は、モジュールをインストールした際や info コマンドで確認できます。キーが設定されていない場合、警告メッセージが表示されることがあります。
recon-web の使い方
recon-web は Recon-ng の Web UI です。コンソール (CLI) から起動し、Web ブラウザ経由でアクセスします。収集したデータの可視化、管理、エクスポートに便利です。
recon-web の起動
Recon-ng のインストールディレクトリ(またはパスが通っている場所)で、以下のコマンドを実行します。
./recon-webまたは、Docker を使用している場合は、前述の Docker コマンドを使用します。
起動すると、通常は http://127.0.0.1:5000/ でリッスンしている旨のメッセージが表示されます。
* Serving Flask app "recon_web.api" (lazy loading) * Environment: production WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Debug mode: off * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) このアドレスに Web ブラウザでアクセスすると、recon-web のダッシュボードが表示されます。
recon-web のインターフェース
recon-web のインターフェースは比較的シンプルで、主に以下の機能を提供します。
- ワークスペースの選択: 左側のパネルで、調査対象のワークスペースを選択できます。
- データテーブルの表示: 選択したワークスペースに保存されているデータ(Domains, Hosts, Contacts, Credentials, Vulnerabilities など)をテーブル形式で表示します。
- データのフィルタリングとソート: 各テーブルのカラムヘッダーをクリックしてソートしたり、フィルタリング機能を使って特定のデータを抽出したりできます。
- データのエクスポート: 表示しているデータを様々な形式(JSON, XML, CSV, List, XLSX)でエクスポートできます。これはレポート作成に役立ちます。
- アクティビティの概要: ダッシュボードで、最近のアクティビティや収集されたデータの概要を確認できます。
recon-web は、CLI で収集したデータを視覚的に確認し、整理・分析するための補助的なツールとして非常に有用です。特に、大量のデータを扱う場合に、その全体像を把握しやすくなります。ただし、モジュールの実行自体は CLI で行うのが一般的です。
実践例: サブドメイン情報の収集
ここでは、特定のドメインに関するサブドメイン情報を収集する簡単な例を示します。
- Recon-ng を起動:
recon-ng - ワークスペースを作成・ロード: (例: example.com 用)
[recon-ng][default] > workspaces create example_com [recon-ng][example_com] > - ターゲットドメインをデータベースに追加:
[recon-ng][example_com] > db insert domains domain (TEXT): example.com [*] 1 rows affected.確認:
show domains - サブドメイン列挙モジュールを探す:
[recon-ng][example_com] > marketplace search hackertarget recon/domains-hosts/hackertarget Yes Retrieves hostnames from the HackerTarget API.※ ここでは例として `hackertarget` モジュールを使います。他のモジュール(例: `google_site_web`, `bing_domain_web`, `censys_subdomains` など)も利用可能です。一部は API キーが必要になる場合があります。
- モジュールをインストール (まだの場合):
[recon-ng][example_com] > marketplace install recon/domains-hosts/hackertarget [*] Module installed: recon/domains-hosts/hackertarget [*] Reloading modules... - モジュールをロード:
[recon-ng][example_com] > modules load recon/domains-hosts/hackertarget [recon-ng][example_com][hackertarget] > - モジュールのオプションを確認:
[recon-ng][example_com][hackertarget] > info Name: HackerTarget Host Search Author: Tim Tomes (@LaNMaSteR53) Version: 1.1 Description: Uses the HackerTarget API to find hostnames using the same infrastructure as the target. Updates the 'hosts' table with the results. Options: Name Current Value Required Description ------ ------------- -------- ----------- SOURCE default yes source of input (see 'show info' for details) Source Options: default SELECT DISTINCT domain FROM domains WHERE domain IS NOT NULL <string> string representing a single input <path> path to a file containing a list of inputs query <sql> database query returning one column Comments: * API Key: NoneSOURCE オプションが `default` になっているため、`domains` テーブルに入力したドメインが自動的に使われます。
- モジュールを実行:
[recon-ng][example_com][hackertarget] > run ----------- EXAMPLE.COM ----------- [*] Searching HackerTarget API for information on example.com... [*] Country: Unknown [*] Host: www.example.com [*] IP Address: 93.184.216.34 [*] Latitude: Unknown [*] Longitude: Unknown [*] Module: recon/domains-hosts/hackertarget [*] Region: Unknown ... (他のサブドメイン情報) ... [*] Hosts found: 10 [*] SUMMARY ---------- [*] 10 total hosts found. - 結果を確認:
[recon-ng][example_com][hackertarget] > show hosts +------------------------------------------------------------------------------------------+ | rowid | host | ip_address | region | country | latitude | longitude | +-------+------------------+----------------+----------+-----------+----------+-----------+ | 1 | www.example.com | 93.184.216.34 | Unknown | Unknown | Unknown | Unknown | | ... | ... | ... | ... | ... | ... | ... | +------------------------------------------------------------------------------------------+ - (オプション) recon-web で結果を視覚化: Recon-ng CLI を終了せずに別のターミナルを開き、
recon-webを起動してブラウザでアクセスし、`example_com` ワークスペースの `Hosts` テーブルを確認します。
まとめとヒント
Recon-ng は、OSINT と Web 偵察のための非常に強力で柔軟なフレームワークです。そのモジュール構造により、特定のニーズに合わせて偵察プロセスをカスタマイズできます。recon-web は、収集したデータを管理し、視覚化するための便利なインターフェースを提供します。
- ワークスペースを活用する: ターゲットごとにワークスペースを作成し、情報を整理しましょう。
- マーケットプレイスを探索する: 定期的に
marketplace searchやmarketplace infoを使い、利用可能なモジュールを確認しましょう。新しいモジュールが追加されることもあります。 - API キーを管理する: 多くの強力なモジュールは API キーを必要とします。必要なキーを取得し、
keys addで登録しましょう。keys listで登録済みのキーを確認できます。 show schemaを使う: データベースの構造を理解するにはshow schemaコマンドが役立ちます。db queryで高度な検索: SQL クエリを直接実行して、データベースから特定の情報を抽出できます(例:db query SELECT host FROM hosts WHERE region='California')。- ドキュメントとコミュニティ: 公式の Wiki や、ブログ記事、チュートリアル動画なども参考にしましょう。ただし、ツールは進化するため、最新の情報やコマンドを確認することが重要です。
- 倫理的な使用: Recon-ng は強力なツールですが、許可なくシステムやネットワークを調査することは違法となる可能性があります。必ず法と倫理に従って使用してください。バグバウンティプログラムの範囲内や、許可を得たペネトレーションテストで使用するのが一般的です。
Recon-ng と recon-web を使いこなすことで、情報収集フェーズの効率と精度を大幅に向上させることができます。ぜひ、様々なモジュールを試してみてください!