Recon-ngとrecon-cli入門:OSINTを加速するフレームワーク 🕵️‍♀️

セキュリティツール

サイバーセキュリティの世界では、情報収集、特にオープンソースインテリジェンス(OSINT)が不可欠な最初のステップです。Recon-ngは、このプロセスを効率化するために設計された強力なPythonベースのフレームワークです。Metasploit Frameworkに似たインターフェースを持ちながら、OSINTと偵察に特化しており、Webベースの情報収集を迅速かつ徹底的に行うことができます。

Recon-ngには、対話型のコンソールであるrecon-ngと、コマンドラインインターフェースであるrecon-cliが含まれています。この記事では、特にrecon-cliに焦点を当て、その基本的な使い方から応用テクニックまでを詳しく解説します。Recon-ng全体のエコシステムを理解することで、recon-cliの真価を発揮させることができます。

💡 Recon-ngとは?

Recon-ngは、モジュール式のアーキテクチャを採用しており、特定の情報収集タスクを実行するための「モジュール」を追加・利用できます。データベースとの連携機能、便利な組み込み関数、コマンド補完、状況に応じたヘルプなどを備え、OSINT活動を強力にサポートします。Metasploitに慣れているユーザーであれば、比較的容易に習得できるでしょう。ただし、Recon-ngは偵察専用であり、エクスプロイトやソーシャルエンジニアリングにはMetasploitやSocial-Engineer Toolkit(SET)を使用することが推奨されます。

インストール 💻

Recon-ngは、多くのセキュリティディストリビューションにプリインストールされています。特にKali Linuxでは、デフォルトで含まれていることが多いです(2022年11月時点のv5.1.2など)。もしインストールされていない場合や、他のLinuxディストリビューション(Ubuntuなど)を使用している場合は、以下の手順でインストールできます。

  1. Kali Linux / Debian系:

    最新の状態に更新し、インストールします。

    sudo apt update && sudo apt install recon-ng
  2. 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

このコマンドは以下の処理を一行で実行します。

  1. my_projectというワークスペースをロード(または作成)。
  2. recon/domains-hosts/hackertargetモジュールをロード。
  3. モジュールのSOURCEオプションにexample.comを設定。
  4. モジュールを実行(-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

    設定可能なオプションとその現在の値、必須かどうかが表示されます。

    NameCurrent ValueRequiredDescription
    SOURCEdefaultyessource 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モジュール名は通常 recon/<入力テーブル>-<出力テーブル>/<モジュール名> という形式になっています。例えば recon/domains-hosts/hackertarget は、`domains` テーブルの情報を入力として受け取り、`hosts` テーブルに結果を出力する `hackertarget` モジュールであることを示します。これにより、次にどのモジュールを使うべきか判断しやすくなります。

データベース操作 💾

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"

レポート作成 📄

収集した情報は、レポートモジュールを使って様々な形式で出力できます。これにより、結果の共有やさらなる分析が容易になります。

利用可能なレポートモジュールは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! 😊

🔗 参考リンク

コメント

タイトルとURLをコピーしました