オープンソースインテリジェンス (OSINT) 収集を加速するフレームワーク
サイバーセキュリティの世界において、情報収集は攻撃・防御双方の成功の鍵を握ります。Recon-ng は、この分野で特に強力なツールとして知られています。Pythonで書かれたこのオープンソースインテリジェンス(OSINT)フレームワークは、セキュリティ専門家がターゲットシステムに関する包括的な情報を効率的に収集することを可能にします。
Recon-ngは、Metasploit Frameworkに似たインターフェースを持ち、Metasploitの使用経験があるユーザーにとっては学習曲線が緩やかです。しかし、Recon-ngは脆弱性攻撃 (Exploit) やソーシャルエンジニアリングを目的としたツールではなく、あくまでWebベースのオープンソース情報収集に特化しています。そのモジュール構造により、様々な情報源へのアクセスを自動化し、収集したデータを整理・分析する機能を提供します。
このガイドでは、Recon-ngのインストールから基本的な使い方、主要な機能であるワークスペースやモジュールの活用法、そしてレポーティング機能まで、ステップバイステップで解説します。🕵️♂️
Recon-ngとは? 🤔
Recon-ngは、オープンソースのWebベース偵察(情報収集)を迅速かつ徹底的に行うための強力な環境を提供する、フル機能の偵察フレームワークです。主な特徴は以下の通りです。
- モジュール構造: 機能ごとに独立したモジュールがあり、必要に応じて追加・削除・実行できます。
- Metasploitライクなインターフェース: Metasploit Frameworkに似たコマンド体系を持ち、経験者には馴染みやすいです。
- データベース連携: 収集した情報はワークスペース内のデータベースに整理・保存され、後からの分析や参照が容易です。
- APIキー管理: 外部サービス (Shodan, GitHubなど) のAPIを利用するモジュールのため、APIキーを安全に管理する機能があります。
- 豊富な機能: サブドメイン列挙、ホスト発見、WHOIS検索、OSINT収集、脆弱性スキャン(一部モジュール)、データ分析、レポート作成など、多岐にわたる情報収集が可能です。
- 拡張性: Pythonで書かれており、独自のモジュールを開発して機能を追加することも可能です。
- オープンソース: 無料で利用でき、GitHubで開発が進められています。
Recon-ngは、ペネトレーションテストやセキュリティ評価の初期段階における情報収集フェーズで非常に役立ちます。公開情報を効率的に収集し、攻撃対象領域 (Attack Surface) の把握に貢献します。
インストールとセットアップ ⚙️
Recon-ngのインストールは比較的簡単です。いくつかの方法がありますが、代表的なものを紹介します。
Kali Linux
Kali Linuxには、多くの場合Recon-ngがプリインストールされています(2022年11月時点でバージョン5.1.2が同梱)。もしインストールされていない場合や、最新版にアップデートしたい場合は、以下のコマンドを実行します。
sudo apt update && sudo apt install recon-ng
GitHubからクローン (Ubuntuなど他のLinuxディストリビューション)
gitとpip (Pythonのパッケージインストーラ) が必要です。まず、リポジトリをクローンします。
git clone https://github.com/lanmaster53/recon-ng.git
次に、クローンしたディレクトリに移動し、必要なPythonライブラリをインストールします。
cd recon-ng
pip install -r REQUIREMENTS
これでインストールは完了です。
起動
ターミナルから以下のコマンドでRecon-ngを起動します。
recon-ng
初回起動時には、以下のようなメッセージが表示されることがあります。これは、v5以降、モジュールがフレームワーク本体とは別に管理されるようになったためです。
[*] No modules enabled/installed.
起動すると、[recon-ng][default] >
のようなプロンプトが表示され、対話形式でコマンドを入力できるようになります。
Recon-ng v5の主な変更点 (2019年6月頃)
バージョン4.xから5.xへのアップデートでは、いくつかの大きな変更がありました。
- リポジトリがBitBucketからGitHubへ移行。
- Python 3 (3.6以上) が必須に。
- モジュール管理が「マーケットプレイス (Marketplace)」方式に変更。
- 一部コマンドの構文変更 (例:
add
->db insert
)。
特にモジュール管理の変更は重要で、v5以降は使用したいモジュールを個別にマーケットプレイスからインストールする必要があります。これにより、フレームワークとモジュールの開発・更新が分離され、柔軟性が向上しました。
基本的な使い方 🚀
Recon-ngの操作は、コマンドを入力して行います。help
コマンドで使用可能なコマンド一覧を確認できます。Tabキーによるコマンド補完も利用可能です。
ワークスペース (Workspaces)
ワークスペースは、調査対象ごとに情報を整理するための独立した環境(データベース)です。調査を開始する前に、対象ごとにワークスペースを作成することが推奨されます。
コマンド | 説明 | 例 |
---|---|---|
workspaces list |
存在するワークスペースの一覧を表示します。 | workspaces list |
workspaces create <名前> |
新しいワークスペースを作成し、そのワークスペースに切り替えます。 | workspaces create example.com |
workspaces select <名前> |
指定したワークスペースに切り替えます。 | workspaces select default |
workspaces delete <名前> |
指定したワークスペースを削除します(注意して使用してください)。 | workspaces delete old_project |
ワークスペースを作成または選択すると、プロンプトの[default]
の部分が選択中のワークスペース名に変わります (例: [recon-ng][example.com] >
)。
マーケットプレイス (Marketplace) とモジュール (Modules)
Recon-ng v5以降、モジュールは「マーケットプレイス」を通じて管理されます。使用したい機能(モジュール)をマーケットプレイスから検索し、インストールする必要があります。
コマンド | 説明 | 例 |
---|---|---|
marketplace search |
利用可能な全てのモジュールを一覧表示します。 | marketplace search |
marketplace search <キーワード> |
キーワードに一致するモジュールを検索します。 | marketplace search dns |
marketplace info <モジュール名> |
指定したモジュールの詳細情報(説明、オプション、依存関係、必要なAPIキーなど)を表示します。 | marketplace info recon/domains-hosts/google_site_web |
marketplace install <モジュール名> |
指定したモジュールをインストールします。 | marketplace install recon/domains-hosts/google_site_web |
marketplace install all |
利用可能な全てのモジュールをインストールします。(時間がかかる場合があります) | marketplace install all |
marketplace remove <モジュール名> |
指定したモジュールをアンインストールします。 | marketplace remove recon/domains-hosts/google_site_web |
modules search |
現在インストールされているモジュールを一覧表示します。 | modules search |
modules load <モジュール名> |
指定したインストール済みモジュールをロードし、そのコンテキストに移動します。部分的な名前でも、一意に特定できればロード可能です。 | modules load google_site_web |
モジュールをロードすると、プロンプトがさらに変化し、ロード中のモジュール名が追加されます (例: [recon-ng][example.com][google_site_web] >
)。
現在のコンテキスト(モジュール)から抜けるにはback
コマンドを使用します。
モジュールの実行
モジュールをロードしたら、次はオプションを設定して実行します。
- モジュールのロード:
modules load <モジュール名>
- オプションの確認:
options list
またはinfo
コマンドで、設定可能なオプションとその説明、現在の値、必須かどうか (Required) を確認します。 - オプションの設定:
options set <オプション名> <値>
でオプション値を設定します。多くの場合、SOURCE
オプションに調査対象のドメインなどを設定します。 - 実行:
run
コマンドでモジュールを実行します。 - 結果の確認: モジュール実行後、収集された情報はデータベースに保存されます。
show <テーブル名>
コマンドで確認できます (例:show hosts
,show contacts
,show domains
)。
実行例: Googleを使ってサブドメインを検索する
# ワークスペース作成 (既にあれば select)
workspaces create mytarget.com
# google_site_web モジュールを検索・インストール (初回のみ)
marketplace search google_site
marketplace install recon/domains-hosts/google_site_web
# モジュールをロード
modules load google_site_web
# オプションを確認
options list
# Name Current Value Required Description
# ------ ------------- -------- -----------
# SOURCE default yes source of input (see 'info' for details)
# 調査対象ドメインを設定
options set SOURCE mytarget.com
# SOURCE => mytarget.com
# モジュールを実行
run
# [*] Searching Google for subdomains of mytarget.com...
# [...]
# [*] Hosts found: 5
# [*] New hosts found: 5
# ---snip---
# 結果を確認
show hosts
# +-----------------+------------+----------+-----------+--------+
# | host | ip_address | latitude | longitude | module |
# +-----------------+------------+----------+-----------+--------+
# | www.mytarget.com | | | | google_site_web |
# | mail.mytarget.com | | | | google_site_web |
# | dev.mytarget.com | | | | google_site_web |
# | api.mytarget.com | | | | google_site_web |
# | blog.mytarget.com | | | | google_site_web |
# +-----------------+------------+----------+-----------+--------+
APIキーの管理 (Keys)
一部のモジュール (例: Shodan, GitHub, VirusTotal, FullContact など) は、外部サービスのAPIを利用するためにAPIキーが必要です。これらのキーはkeys
コマンドで管理します。
コマンド | 説明 | 例 |
---|---|---|
keys list |
登録されているAPIキーの一覧を表示します。 | keys list |
keys add <キー名> <キーの値> |
新しいAPIキーを追加します。キー名は通常、モジュールの情報 (marketplace info <モジュール名> ) で確認できます。 |
keys add shodan_api XXXXXXXXXXXXXXXX |
keys remove <キー名> |
指定したAPIキーを削除します。 | keys remove shodan_api |
APIキーが必要なモジュールをインストールすると、[!] 'キー名' key not set. モジュール名 module will likely fail at runtime. See 'keys add'.
のような警告が表示されることがあります。その場合は、必要なAPIキーを取得し、keys add
コマンドで登録してください。
データベース操作 (DB) と結果表示 (Show) 📊
Recon-ngは収集した情報をSQLiteデータベースに格納します。db
コマンドやshow
コマンドでデータを操作・表示できます。
データの挿入 (db insert)
モジュールのSOURCE
オプションにdefault
を設定した場合など、手動で起点となるデータをデータベースに追加する必要がある場合があります。例えば、調査対象のドメインをdomains
テーブルに追加するには以下のようにします。
[recon-ng][mytarget.com] > db insert domains
domain (TEXT): mytarget.com
[*] 1 rows affected.
同様に、db insert hosts
, db insert contacts
などで他のテーブルにもデータを追加できます。
データの表示 (show)
show
コマンドは、データベース内の特定のテーブルの内容を表示するために使います。非常によく使うコマンドです。
コマンド | 説明 |
---|---|
show dashboard or dashboard |
現在のワークスペースの統計情報(ホスト数、連絡先数など)のサマリーを表示します。 |
show schema |
データベースのスキーマ(テーブル構造)を表示します。どのようなテーブルがあるか確認できます。 |
show <テーブル名> |
指定したテーブルの内容を一覧表示します。主なテーブルには以下のようなものがあります。
|
例:収集されたホスト情報を表示
[recon-ng][mytarget.com] > show hosts
+-----------------+---------------+----------+-----------+--------------------+
| host | ip_address | latitude | longitude | module |
+-----------------+---------------+----------+-----------+--------------------+
| www.mytarget.com| 192.0.2.1 | 35.6895 | 139.6917 | google_site_web |
| mail.mytarget.com| 192.0.2.2 | | | brute_hosts |
| api.mytarget.com | 198.51.100.10 | 40.7128 | -74.0060 | censys_subdomains |
+-----------------+---------------+----------+-----------+--------------------+
SQLクエリ (query)
より複雑なデータ検索や操作を行いたい場合は、query
コマンドで直接SQL文を実行できます。
[recon-ng][mytarget.com] > query SELECT host, ip_address FROM hosts WHERE module = 'brute_hosts'
+-------------------+------------+
| host | ip_address |
+-------------------+------------+
| mail.mytarget.com | 192.0.2.2 |
+-------------------+------------+
query
コマンドはSELECTだけでなく、UPDATEやDELETEなどのSQL文も実行できますが、データベースを直接変更する操作は慎重に行ってください。
レポート作成 (Reporting) 📄
収集した情報をまとめるために、Recon-ngはレポーティング機能を提供しています。複数のフォーマットでレポートを出力できます。
まず、利用可能なレポートモジュールを検索し、インストールします。
marketplace search reporting
# +---------------------+---------+-----------+------------+---+---+
# | Path | Version | Status | Updated | D | K |
# +---------------------+---------+-----------+------------+---+---+
# | reporting/csv | 1.1 | installed | 2022-10-17 | | |
# | reporting/html | 1.1 | installed | 2022-10-17 | | |
# | reporting/json | 1.1 | installed | 2022-10-17 | | |
# | reporting/list | 1.0 | installed | 2019-06-24 | | |
# | reporting/proxifier | 1.0 | installed | 2019-06-24 | | |
# | reporting/pushpin | 1.1 | installed | 2019-10-14 | | ● |
# | reporting/xlsx | 1.0 | installed | 2021-04-08 | ● | |
# | reporting/xml | 1.1 | installed | 2021-03-24 | | |
# +---------------------+---------+-----------+------------+---+---+
# D = Has dependencies. See info for details. K = Requires keys. See info for details.
marketplace install reporting/html # 例: HTML形式のレポートをインストール
次に、使用したいレポートモジュールをロードし、オプションを設定して実行します。
modules load reporting/html
# オプションを確認
options list
# Name Current Value Required Description
# -------- ------------- -------- -----------
# CREATOR Recon-ng User no report creator
# CUSTOMER Recon-ng no report customer
# FILENAME /home/user/.recon-ng/workspaces/mytarget.com/results.html yes path and filename for report output
# SANITIZE True yes mask sensitive data strings
# オプションを設定 (必要に応じて)
options set CREATOR "あなたの名前"
options set CUSTOMER "クライアント名"
options set FILENAME "/path/to/save/report.html" # 出力先とファイル名を指定
# レポートを実行
run
# [*] Report generated: /path/to/save/report.html
指定した場所にレポートファイル (この例ではHTMLファイル) が生成されます。HTMLレポートは、収集された情報をテーブル形式で分かりやすく表示し、サマリーも含まれます。CSV、JSON、XMLなどの形式も利用可能です。
レポートは、調査結果を文書化し、関係者と共有するための重要なステップです。Recon-ngのレポート機能を活用することで、効率的に報告書を作成できます。
その他の便利な機能 ✨
グローバルオプション (goptions)
goptions
コマンドは、全てのモジュールに影響するグローバルな設定を管理します。例えば、DNSリゾルバ、プロキシ、スレッド数、タイムアウト値、ユーザーエージェント文字列などを設定できます。
goptions list # 現在のグローバルオプションを表示
goptions set NAMESERVER 1.1.1.1 # デフォルトのDNSサーバーを変更
goptions set THREADS 20 # スレッド数を変更 (適用されるモジュールのみ)
スクリプト実行 (script / resource)
一連のRecon-ngコマンドをファイルに保存し、自動実行させることができます。これはリソースファイルと呼ばれます。
script record <ファイル名>
: これ以降のコマンドをファイルに記録開始します。script stop
: 記録を停止します。script execute <ファイル名>
またはresource <ファイル名>
: ファイルに記録されたコマンドを実行します。recon-ng -r <ファイル名>
: Recon-ng起動時にリソースファイルを実行します。
定型的な調査手順を自動化するのに便利です。
スプーリング (spool)
spool start <ファイル名>
コマンドで、コンソールへの出力を指定したファイルにも記録できます。spool stop
で記録を停止します。作業ログを残すのに役立ちます。
スナップショット (snapshots)
snapshots
コマンドは、現在のワークスペースの状態(データベースの内容)をスナップショットとして保存したり、過去のスナップショットを復元したりする機能を提供します。調査の途中で状態を保存しておきたい場合に便利です。
snapshots take <名前>
: 現在のワークスペースのスナップショットを作成します。snapshots list
: 保存されているスナップショットの一覧を表示します。snapshots load <名前>
: 指定したスナップショットを現在のワークスペースに復元します(現在のデータは上書きされます)。snapshots delete <名前>
: 指定したスナップショットを削除します。
シェルコマンド実行 (shell)
Recon-ngのプロンプトから抜けることなく、一時的にOSのシェルコマンドを実行したい場合は、shell <コマンド>
を使用します (例: shell ls -l
)。
Recon-web
Recon-ngにはWebベースのユーザーインターフェース (recon-web
) も用意されています。ターミナルで recon-web
を実行すると、Webサーバーが起動し (デフォルトは http://127.0.0.1:5000)、ブラウザからアクセスしてRecon-ngの機能を利用できます。コマンドライン操作に慣れていない場合に便利かもしれません。
recon-web
まとめ 🎉
Recon-ngは、オープンソースインテリジェンス (OSINT) 収集のための非常に強力で柔軟なフレームワークです。モジュール式のアーキテクチャ、Metasploitライクなインターフェース、データベース連携、APIキー管理、レポーティング機能などを備え、効率的な情報収集活動を支援します。
ワークスペースで調査対象を整理し、マーケットプレイスから必要なモジュールをインストール・ロードし、オプションを設定して実行するという基本的な流れを理解すれば、様々な公開情報源からターゲットに関する情報を収集できます。
このガイドが、Recon-ngを効果的に活用するための一助となれば幸いです。ただし、繰り返しになりますが、ツールの使用は常に法と倫理の範囲内で行ってください。Happy Reconnaissance! 😊
コメント