サイバーセキュリティの世界では、情報収集、特にオープンソースインテリジェンス(OSINT)が不可欠な最初のステップです。Recon-ngは、このプロセスを効率化するために設計された強力なPythonベースのフレームワークです。Metasploit Frameworkに似たインターフェースを持ちながら、OSINTと偵察に特化しており、Webベースの情報収集を迅速かつ徹底的に行うことができます。
Recon-ngには、対話型のコンソールであるrecon-ng
と、コマンドラインインターフェースであるrecon-cli
が含まれています。この記事では、特にrecon-cliに焦点を当て、その基本的な使い方から応用テクニックまでを詳しく解説します。Recon-ng全体のエコシステムを理解することで、recon-cli
の真価を発揮させることができます。
インストール 💻
Recon-ngは、多くのセキュリティディストリビューションにプリインストールされています。特にKali Linuxでは、デフォルトで含まれていることが多いです(2022年11月時点のv5.1.2など)。もしインストールされていない場合や、他のLinuxディストリビューション(Ubuntuなど)を使用している場合は、以下の手順でインストールできます。
-
Kali Linux / Debian系:
最新の状態に更新し、インストールします。
sudo apt update && sudo apt install recon-ng
-
Gitリポジトリから:
GitとPythonのパッケージマネージャーpipが必要です。
git clone https://github.com/lanmaster53/recon-ng.git cd recon-ng pip install -r REQUIREMENTS
インストール後、
./recon-ng
または./recon-cli
で起動できます。
インストールが完了すると、ホームディレクトリに.recon-ng
という隠しフォルダが作成されます。ここには設定ファイルやAPIキーを保存するデータベース(keys.db
)などが格納されます。
recon-cliの基本操作 🚀
recon-cli
は、recon-ng
の機能をコマンドラインから直接、非対話的に実行するためのツールです。スクリプト化や自動化に非常に便利です。
ヘルプの表示
利用可能なオプションを確認するには-h
または--help
を使用します。
recon-cli -h
これにより、以下のような主要なオプションが表示されます。
-w <workspace>
: 使用するワークスペースを指定(存在しない場合は作成)。-m <module>
: 実行するモジュールを指定。-o <name=value>
: モジュールオプションを設定。複数指定可能。-g <name=value>
: グローバルオプションを設定。複数指定可能。-x
: 指定したモジュールを実行。-C <command>
: グローバルコンテキストでコマンドを実行。-c <command>
: モジュールコンテキストでコマンドを実行(実行前)。-M
: 利用可能なモジュールを表示。-O
: 指定したモジュールのオプションを表示。-G
: 利用可能なグローバルオプションを表示。
基本的な実行例
例えば、特定のワークスペースでドメインのホスト情報を検索するモジュールを実行する場合、以下のようにコマンドを組み立てます。
recon-cli -w my_project -m recon/domains-hosts/hackertarget -o SOURCE=example.com -x
このコマンドは以下の処理を一行で実行します。
my_project
というワークスペースをロード(または作成)。recon/domains-hosts/hackertarget
モジュールをロード。- モジュールの
SOURCE
オプションにexample.com
を設定。 - モジュールを実行(
-x
)。
注意: recon-cli
はコマンドを順番に処理します。オプションの設定はモジュールのロード後に行われるように引数の順番を考慮する必要はありませんが、-x
は通常、最後に指定します。
ワークスペースの管理 🗂️
Recon-ngでは、「ワークスペース」という概念を用いて調査プロジェクトごとに情報を整理します。各ワークスペースは独立したデータベースを持ち、収集されたデータ(ドメイン、ホスト、連絡先など)や設定、レポートが保存されます。これにより、異なるターゲットや調査の情報が混在するのを防ぎます。
recon-cli
でワークスペースを操作するには、-w
オプションで対象のワークスペースを指定するか、-C
オプションでworkspaces
コマンドを実行します。
ワークスペースの操作コマンド(-Cオプション経由)
-
ワークスペース一覧表示:
recon-cli -C "workspaces list"
-
ワークスペース作成:
recon-cli -C "workspaces add new_project"
-
ワークスペース削除:
recon-cli -C "workspaces remove old_project"
-wオプションの利用
-w
オプションを使うと、指定したワークスペースのコンテキストで後続の処理(モジュールのロード、オプション設定、実行など)を行います。もし指定したワークスペースが存在しなければ、自動的に作成されます。
# 'target_company' ワークスペースでモジュールを実行。なければ作成される。
recon-cli -w target_company -m recon/domains-hosts/google_site_web -o SOURCE=target.com -x
ワークスペースは~/.recon-ng/workspaces/
ディレクトリ以下に、それぞれのデータベースや設定ファイルと共に保存されます。
モジュールの検索と利用 🧩
Recon-ngの心臓部はそのモジュール群です。これらは特定のOSINTタスクを実行するために設計されており、様々なカテゴリに分類されます。
- Recon: 主要な偵察モジュール。ドメイン、ホスト、連絡先などの情報を収集。
- Discovery: 脆弱性や公開されている情報(例: robots.txt)を発見。
- Import/Export: データのインポートやエクスポート。
- Reporting: 収集したデータをレポート形式(HTML, CSV, JSONなど)で出力。
- Exploitation: 限定的ながら、発見した脆弱性を利用するモジュールも存在(ただし、主な目的は偵察)。
Marketplace: モジュールの管理
Recon-ng v5以降、モジュールはデフォルトではインストールされていません。「Marketplace」を通じて必要なモジュールを検索し、インストールする必要があります。Marketplaceは、コミュニティによって維持されているモジュールのリポジトリです。
recon-cli
を使ってMarketplaceを操作するには-C
オプションを使用します。
-
Marketplaceのヘルプ表示:
recon-cli -C "marketplace help"
-
全モジュール検索:
recon-cli -C "marketplace search"
-
キーワードで検索: (例: ‘shodan’を含むモジュール)
recon-cli -C "marketplace search shodan"
-
特定のモジュールをインストール:
recon-cli -C "marketplace install recon/domains-hosts/shodan_hostname"
-
全てのモジュールをインストール (注意: 非推奨):
多くのモジュールはAPIキーを必要とし、未設定だとエラーが表示されるため、必要なものだけをインストールするのが推奨されます。
# 実行には注意が必要 # recon-cli -C "marketplace install all"
-
モジュールの情報表示:
recon-cli -C "marketplace info recon/domains-hosts/hackertarget"
-
Marketplaceの更新:
recon-cli -C "marketplace refresh"
-
モジュールの削除:
recon-cli -C "marketplace remove recon/unwanted-module/example"
インストール済みモジュールの利用
インストール済みのモジュールは-m
オプションで指定して利用します。
-
インストール済みモジュール一覧表示:
またはrecon-cli -M
recon-cli -C "modules search"
-
モジュール情報の表示 (
-m
と-c "info"
):recon-cli -m recon/domains-hosts/hackertarget -c "info"
これにより、モジュールの説明、必要なオプション、著者などの詳細が表示されます。
-
モジュールオプションの表示 (
-m
と-O
):recon-cli -m recon/domains-hosts/hackertarget -O
設定可能なオプションとその現在の値、必須かどうかが表示されます。
Name Current Value Required Description SOURCE default yes source of input (see ‘info’ for details) -
モジュールオプションの設定 (
-m
と-o
):# SOURCEオプションを設定する例 recon-cli -m recon/domains-hosts/hackertarget -o SOURCE=example.com -O
-o
オプションは複数回使用して、複数のオプションを設定できます。 -
モジュールの実行 (
-m
,-o
,-x
):# オプションを設定して実行する recon-cli -w my_project -m recon/domains-hosts/hackertarget -o SOURCE=example.com -x
データベース操作 💾
Recon-ngは収集した情報をワークスペース内のSQLiteデータベースに保存します。db
コマンド(recon-cli
では-C
オプション経由)やshow
コマンドを使って、データベースの内容を操作・確認できます。
主なテーブル
Recon-ngが使用する主要なテーブルには以下のようなものがあります。
domains
: 調査対象のドメインcompanies
: 関連する企業名hosts
: 発見されたホスト名やIPアドレスcontacts
: 発見された連絡先情報(名前、メールアドレスなど)credentials
: 発見された認証情報leaks
: 漏洩情報サイトで見つかった情報locations
: 住所や座標情報netblocks
: ネットワークブロック情報ports
: 開いているポート情報profiles
: ソーシャルメディア等のプロファイル情報vulnerabilities
: 発見された脆弱性情報
データベース操作コマンド
-
テーブル内容の表示 (
show
):# 'my_project' ワークスペースの 'hosts' テーブルを表示 recon-cli -w my_project -C "show hosts"
-
レコードの追加 (
db insert
):対話的にデータを入力します。まずテーブル名を指定します。
# 'my_project' ワークスペースの 'domains' テーブルにドメインを追加(対話モードに入る) # recon-cli -w my_project -C "db insert domains" # 注意: recon-cli は非対話的なので、この形式での直接的なレコード追加は難しい。 # 代わりに、初期データをファイルからインポートするモジュールを使うか、 # recon-ng の対話シェルを使うのが一般的。
recon-cli
の性質上、直接db insert
で対話的にデータを入力するのは不向きです。初期データはimport
モジュール(例:import/list
,import/csv_file
)を使うか、対話型のrecon-ng
シェルで入力するのが良いでしょう。例として、リストファイルからドメインをインポートする場合:
# domains.txt にドメインリストがあると仮定 echo "example.com" > domains.txt echo "anotherexample.org" >> domains.txt recon-cli -w my_project -m import/list -o FILENAME=domains.txt -o COLUMN=domain -o TABLE=domains -x
-
レコードの削除 (
db delete
):# 'hosts' テーブルから rowid が 3 のレコードを削除 recon-cli -w my_project -C "db delete hosts 3"
-
SQLクエリの実行 (
db query
):SQLiteのSQL構文で直接クエリを実行できます。
# 'hosts' テーブルから IP アドレスのみを選択 recon-cli -w my_project -C "db query SELECT ip_address FROM hosts"
-
テーブルスキーマの表示 (
db schema
):テーブルの構造(カラム名やデータ型)を確認できます。
recon-cli -w my_project -C "db schema hosts"
-
ダッシュボード表示 (
show dashboard
):ワークスペース内のデータの概要を表示します。
recon-cli -w my_project -C "show dashboard"
APIキーの管理 🔑
多くのRecon-ngモジュールは、外部サービス(Shodan, Google, Twitter, VirusTotalなど)のAPIを利用して情報を収集します。これらのサービスを利用するには、APIキーを取得し、Recon-ngに登録する必要があります。
APIキーはkeys
コマンド(recon-cli
では-C
オプション経由)で管理します。キーは~/.recon-ng/keys.db
というSQLiteデータベースに安全に保存されます。
-
登録済みAPIキーの一覧表示:
recon-cli -C "keys list"
-
APIキーの追加:
各モジュールが必要とするキーの名前は、
info
コマンドやMarketplaceの情報で確認できます。# ShodanのAPIキーを追加する例 recon-cli -C "keys add shodan_api YOUR_SHODAN_API_KEY"
(例: 2022年の情報ではShodanのPROアカウントが推奨されています)
-
APIキーの削除:
recon-cli -C "keys remove shodan_api"
APIキーの取得場所については、Recon-ngのWikiや、有志がまとめたガイドなどが参考になります(リンク先は外部サイトです)。一部のAPIキーは有料プランが必要な場合があります。
レポート作成 📄
収集した情報は、レポートモジュールを使って様々な形式で出力できます。これにより、結果の共有やさらなる分析が容易になります。
利用可能なレポートモジュールはreporting/
カテゴリにあります。
-
レポートモジュールの検索:
またはrecon-cli -C "modules search reporting"
recon-cli -M | grep reporting
一般的なレポート形式には以下のようなものがあります。
reporting/html
: HTML形式reporting/csv
: CSV形式reporting/json
: JSON形式reporting/xlsx
: Excel (XLSX)形式reporting/xml
: XML形式reporting/list
: シンプルなリスト形式
レポートモジュールを実行するには、他のモジュールと同様に-m
, -o
, -x
を使用します。
# 'my_project' ワークスペースのデータをHTMLレポートとして出力
# オプションで顧客名とファイル名を設定
recon-cli -w my_project -m reporting/html -o CUSTOMER="My Client" -o FILENAME=report.html -x
レポートファイルは、通常、対応するワークスペースのディレクトリ(例: ~/.recon-ng/workspaces/my_project/
)内に生成されます。
スクリプト化と自動化 ⚙️
recon-cli
の最大の利点の一つは、偵察プロセスをスクリプト化できることです。一連のrecon-cli
コマンドをシェルスクリプトにまとめることで、繰り返し行うタスクを自動化できます。
例えば、新しいドメインに対して基本的なホスト情報収集とレポート作成を行うスクリプトは以下のようになります。
#!/bin/bash
TARGET_DOMAIN=$1
WORKSPACE_NAME=$(echo $TARGET_DOMAIN | tr '.' '_') # ドメイン名からワークスペース名を生成
REPORT_FILE="${WORKSPACE_NAME}_report.html"
if [ -z "$TARGET_DOMAIN" ]; then
echo "Usage: $0 "
exit 1
fi
echo "[*] Creating/Loading workspace: $WORKSPACE_NAME"
recon-cli -w "$WORKSPACE_NAME" -C "db insert domains $TARGET_DOMAIN"
echo "[*] Running Hackertarget module..."
recon-cli -w "$WORKSPACE_NAME" -m recon/domains-hosts/hackertarget -o SOURCE="$TARGET_DOMAIN" -x
echo "[*] Running Google Site Web module..."
recon-cli -w "$WORKSPACE_NAME" -m recon/domains-hosts/google_site_web -o SOURCE="$TARGET_DOMAIN" -x
# 必要に応じて他のモジュールを追加...
# echo "[*] Running Shodan Hostname module (requires API key)..."
# recon-cli -w "$WORKSPACE_NAME" -m recon/domains-hosts/shodan_hostname -o SOURCE="$TARGET_DOMAIN" -x
echo "[*] Generating HTML report: $REPORT_FILE"
recon-cli -w "$WORKSPACE_NAME" -m reporting/html -o CUSTOMER="$TARGET_DOMAIN Scan" -o FILENAME="$REPORT_FILE" -x
echo "[+] Reconnaissance complete for $TARGET_DOMAIN. Report saved to ~/.recon-ng/workspaces/$WORKSPACE_NAME/$REPORT_FILE"
このスクリプトをrecon_script.sh
として保存し、実行権限を与えれば、./recon_script.sh example.com
のように実行できます。
リソースファイルの使用
recon-ng
(対話シェル)には、コマンドリストを記述した「リソースファイル」(-r
オプション) を読み込んで実行する機能もあります。recon-cli
は各コマンドを直接引数で指定する方式が主ですが、複雑な手順はシェルスクリプトでrecon-cli
を複数回呼び出す方が管理しやすい場合が多いです。
recon-cli
自体にも-C
や-c
オプションで複数のコマンドを渡せるため、これらを組み合わせることで柔軟な自動化が可能です。
まとめ 🎉
recon-cli
は、Recon-ngフレームワークの強力な機能をコマンドラインから効率的に利用するためのツールです。ワークスペース管理、Marketplaceからのモジュール導入、オプション設定、データベース操作、レポート作成といった一連のOSINTプロセスを、スクリプト化・自動化する上で不可欠な存在と言えるでしょう。
この記事で紹介した基本的な使い方をマスターし、様々なモジュールやオプションを試すことで、あなたの情報収集活動はより迅速かつ効果的になるはずです。APIキーを適切に管理し、常に倫理的な範囲でツールを使用することを忘れないでください。Happy Recon! 😊
コメント