この記事では、強力なOSINTツールであるSpiderFootのコマンドラインインターフェース(CLI)、spiderfoot-cli
の使い方を詳しく解説します。
SpiderFootとSpiderFoot CLIについて
SpiderFootは、オープンソースのインテリジェンス(OSINT)自動化ツールです。IPアドレス、ドメイン名、ホスト名、ネットワークサブネット、ASN、メールアドレス、人名など、特定のターゲットに関する情報を自動的に収集することを目的としています。攻撃的なペネトレーションテストの一部としてターゲット情報を収集したり、防御的に自組織が攻撃者に利用される可能性のある情報を公開していないか確認したりするために使用できます。
SpiderFootには直感的なWebベースのインターフェースが組み込まれていますが、すべての機能をコマンドラインから利用できるspiderfoot-cli
も提供されています。CLIは、自動化スクリプトへの組み込み、リモートサーバーでの実行、またはGUIが利用できない環境での使用に特に便利です。
- スクリプトによる自動化が容易
- リソース消費量が少ない傾向がある
- リモートサーバーやヘッドレス環境での操作が可能
- 他のツールとの連携がしやすい
- キーボード中心の操作を好むユーザー向け
インストールとセットアップ
SpiderFoot CLI (spiderfoot-cli
) は、SpiderFoot本体に含まれています。したがって、SpiderFootをインストールすればCLIも利用可能になります。
主なインストール方法:
- Gitリポジトリからクローン: 最新版を利用したい場合や開発に参加したい場合におすすめです。
git clone https://github.com/smicallef/spiderfoot.git cd spiderfoot pip install -r requirements.txt
- パッケージマネージャー (例: Kali Linux):
sudo apt update && sudo apt install spiderfoot
Kali Linuxでは、
spiderfoot
パッケージにWeb UIとCLIの両方が含まれています。 - Docker: Docker Hubからイメージを取得して利用できます。
docker pull smicallef/spiderfoot docker run -it --rm -p 5001:5001 smicallef/spiderfoot
Dockerコンテナ内でCLIを実行することも可能です。
- Snap (Linux): Snap Storeからもインストール可能です。
sudo snap install spiderfoot
インストール後、spiderfoot-cli
コマンドが利用可能になっているか確認します。通常、SpiderFootをクローンまたは展開したディレクトリ内で実行します。
# SpiderFootディレクトリに移動
cd path/to/spiderfoot
# ヘルプを表示して動作確認
./sf.py --help # Web UI & CLI 共通の起動スクリプト
./sfcli.py --help # CLI専用スクリプト (古いバージョンや特定の環境用)
多くの場合、sf.py
スクリプトに-s TARGET
のように引数を渡すことでCLIモードで直接スキャンを実行できます。sfcli.py
は、対話型のCLIセッションやリモートサーバーへの接続に使用されることがあります。この記事では主に sf.py
をCLIモードで使用する方法を説明します。
基本的な使い方
SpiderFoot CLIの最も基本的な使い方は、スキャン対象を指定して実行することです。
./sf.py -s TARGET
ここで、TARGET
は調査したい対象です。以下のタイプが指定可能です。
- ドメイン名:
example.com
- IPv4アドレス:
192.168.1.1
- IPv6アドレス:
2001:db8::1
- ホスト名/サブドメイン:
www.example.com
- ネットワークサブネット (CIDR):
192.168.1.0/24
- ASN:
AS15169
- メールアドレス:
test@example.com
- 電話番号 (E.164形式推奨):
+12345678901
- 人名 (引用符で囲む):
"John Smith"
- ユーザー名 (引用符で囲む):
"jsmith2000"
- Bitcoinアドレス:
1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa
主要なオプション
CLIでのスキャンをカスタマイズするための主要なオプションをいくつか紹介します。
オプション | 説明 |
---|---|
-s TARGET |
スキャン対象を指定します。(必須) |
-m module1,module2,... |
実行するモジュールをカンマ区切りで指定します。指定しない場合は、ターゲットタイプに適したモジュールが自動選択されることがあります。 |
-M, --modules |
利用可能な全てのモジュールをリスト表示します。 |
-t type1,type2,... |
収集したいデータタイプ(イベントタイプ)をカンマ区切りで指定します。指定されたタイプを生成できるモジュールが自動的に選択されます。 |
-T, --types |
利用可能な全てのデータタイプ(イベントタイプ)をリスト表示します。 |
-u {all,footprint,investigate,passive} |
ユースケースに基づいてモジュールを自動選択します。 – all : 全ての適切なモジュール(最も包括的だが時間がかかる)– footprint : フットプリント調査用– investigate : 特定ターゲットの深掘り調査用– passive : パッシブ(受動的)な情報収集のみ
|
-o {tab,csv,json} |
標準出力への出力形式を指定します。デフォルトは tab (タブ区切り) です。 |
-F type1,type2,... |
標準出力に表示する結果を、指定したデータタイプのみにフィルタリングします。 |
-l IP:port |
Web UIサーバーを指定したIPアドレスとポートで起動します。CLIスキャンと同時にWeb UIも起動したい場合に使用します。(例: -l 127.0.0.1:5001 ) |
-q, --quiet |
ログ出力を抑制します。エラーも表示されなくなるため注意が必要です。 |
-d, --debug |
デバッグ情報を有効にします。問題発生時のトラブルシューティングに役立ちます。 |
-x, --strict |
厳格モード。ターゲットを直接消費できるモジュールのみを有効にします。-t や -m オプションを上書きします。 |
--max-threads MAX_THREADS |
同時に実行するモジュールの最大スレッド数を指定します。 |
-V, --version |
SpiderFootのバージョンを表示して終了します。 |
-h, --help |
ヘルプメッセージを表示して終了します。 |
これらのオプションを組み合わせることで、特定のニーズに合わせた詳細なスキャンを実行できます。
モジュールの活用 🧩
SpiderFootの強力な機能の核心は、200以上存在するモジュール群です。各モジュールは特定のデータソース(DNS、WHOIS、検索エンジン、ソーシャルメディア、脅威インテリジェンスリストなど)から情報を収集したり、特定の分析を行ったりするように設計されています。
モジュールのリスト表示
利用可能なモジュールを確認するには、-M
または --modules
オプションを使用します。
./sf.py -M
これにより、モジュール名とその簡単な説明のリストが表示されます。非常に多くのモジュールがあるため、grep
などで絞り込むと便利です。
# DNS関連のモジュールを検索
./sf.py -M | grep -i dns
# メールアドレスを扱うモジュールを検索
./sf.py -M | grep -i email
特定のモジュールを実行
特定のモジュールのみを実行したい場合は、-m
オプションを使用し、モジュール名をカンマ区切りで指定します。
# ドメイン example.com に対して DNS情報 と Whois情報 のみ取得する
./sf.py -s example.com -m sfp_dns,sfp_whois
⚠️ 注意点: モジュール間には依存関係が存在することがあります。あるモジュールが必要とするデータが、無効化された別のモジュールによって生成される場合、期待した結果が得られない可能性があります。依存関係を考慮してモジュールを選択するか、ユースケース(-u
)やデータタイプ(-t
)による自動選択を利用するのが安全です。
データタイプによるモジュール選択
実行したいモジュール名が具体的にわからなくても、収集したいデータの種類がわかっていれば、-t
オプションで指定できます。SpiderFootは、指定されたデータタイプを生成できるモジュールを自動的に選択して実行します。
利用可能なデータタイプを確認するには -T
オプションを使います。
./sf.py -T
特定のデータタイプ(例: メールアドレス、サブドメイン)を収集する例:
# ドメイン example.com からメールアドレスとサブドメインを収集
./sf.py -s example.com -t EMAILADDR,INTERNET_NAME
ユースケースによるモジュール選択
-u
オプションを使うと、一般的な調査シナリオに基づいてモジュール群を簡単に選択できます。
passive
: ターゲットに直接コンタクトしない、受動的な情報収集のみを行います。最も隠密性が高いオプションです。investigate
: 特定のターゲット(既知の侵害指標など)について深く調査します。footprint
: ターゲットの全体像(フットプリント)を把握するための広範な調査を行います。パッシブとアクティブな手法を組み合わせます。all
: 利用可能なほぼ全てのモジュールを実行します。最も包括的ですが、時間とリソースを最も消費します。
# example.com に対してパッシブスキャンを実行
./sf.py -s example.com -u passive
# example.com のフットプリント調査を実行
./sf.py -s example.com -u footprint
出力と結果の管理 📄
SpiderFoot CLIは、収集した情報を標準出力に表示しますが、ファイルへの保存や特定の形式での出力も可能です。
出力形式の指定
-o
オプションで、標準出力への出力形式を変更できます。
tab
: タブ区切り(デフォルト)csv
: カンマ区切りjson
: JSON形式
# 結果をCSV形式で出力
./sf.py -s example.com -t EMAILADDR -o csv
# 結果をJSON形式で出力
./sf.py -s example.com -t INTERNET_NAME -o json
CSV形式の場合、-D DELIMITER
オプションで区切り文字を変更できます(デフォルトはカンマ ,
)。
# パイプ区切りでCSV出力
./sf.py -s example.com -t EMAILADDR -o csv -D "|"
出力内容のフィルタリング
-F type1,type2,...
オプションを使用すると、標準出力に表示される結果を、指定したデータタイプのみに絞り込むことができます。これは、多くの情報が生成される中で、特定の情報だけを素早く確認したい場合に便利です。
# スキャンは包括的に行うが、標準出力にはメールアドレスと電話番号のみ表示
./sf.py -s example.com -u all -F EMAILADDR,PHONE_NUMBER
注意: -F
はあくまで「表示」をフィルタリングするだけで、スキャン自体で収集されるデータタイプを制限するものではありません。収集するデータタイプを制限するには -t
オプションを使用します。
ファイルへのリダイレクト
標準的なUnix/Linuxのパイプやリダイレクトを使用することで、CLIの出力をファイルに保存できます。
# 結果をCSV形式でファイルに保存
./sf.py -s example.com -u footprint -o csv > results.csv
# 結果をJSON形式でファイルに保存し、同時に画面にも表示 (teeコマンド)
./sf.py -s example.com -u passive -o json | tee results.json
💡 ヒント: SpiderFootはスキャン結果を内部的にSQLiteデータベース (spiderfoot.db
) に保存します。CLIの出力はリアルタイムの結果表示や簡単な処理向けであり、完全なデータや複雑な分析にはWeb UIを利用するか、SQLiteデータベースを直接クエリするのが適しています。
設定とAPIキー 🔑
多くのSpiderFootモジュールは、外部サービス(Shodan, VirusTotal, HaveIBeenPwnedなど)のAPIを利用して情報を収集します。これらのサービスを最大限に活用するには、APIキーの設定が必要です。
APIキーやその他の設定は、通常 spiderfoot.conf
という設定ファイルで管理されます。CLI実行時に特定の設定ファイルを読み込ませる機能は直接的には提供されていないようですが、SpiderFootは起動時にカレントディレクトリやユーザーのホームディレクトリにある spiderfoot.conf
を参照します。
APIキーの設定は、以下の方法で行うのが一般的です。
- Web UIからの設定: SpiderFootのWeb UIを起動 (
./sf.py -l 127.0.0.1:5001
) し、Settingsメニューから各モジュールのAPIキーを設定します。設定内容はspiderfoot.db
に保存され、CLI実行時にも参照されます。これが最も簡単で推奨される方法です。 spiderfoot.conf
の直接編集: SpiderFootのディレクトリにあるspiderfoot.conf.default
をspiderfoot.conf
としてコピーし、テキストエディタでAPIキーやその他の設定値を編集します。
例えば、spiderfoot.conf
内でShodanのAPIキーを設定する箇所は以下のようになります(キーの値はご自身のものに置き換えてください)。
[sfp_shodan]
_sf_api_key = "YOUR_SHODAN_API_KEY"
APIキーは機密情報です。設定ファイルやデータベースファイルのパーミッションを適切に設定し、安全に管理してください。
実践的な例 🚀
例1: 特定ドメインのサブドメインを列挙し、CSVで出力
./sf.py -s example.com -t INTERNET_NAME -u footprint -o csv > subdomains.csv
-s example.com
: ターゲットドメインを指定-t INTERNET_NAME
: 収集するデータタイプをインターネット名(ホスト名、サブドメイン)に限定-u footprint
: フットプリント調査用のモジュール群を使用-o csv
: 出力形式をCSVに> subdomains.csv
: 結果をファイルに保存
例2: IPアドレスに関連するマルウェア情報を調査
./sf.py -s 1.2.3.4 -t MALICIOUS_* -u investigate
-s 1.2.3.4
: ターゲットIPアドレスを指定-t MALICIOUS_*
: データタイプが “MALICIOUS_” で始まるもの(マルウェア関連情報)を収集-u investigate
: 調査用のモジュール群を使用
例3: メールアドレスに関連するアカウント情報をパッシブに収集
./sf.py -s "user@example.com" -m sfp_accounts,sfp_haveibeenpwned -u passive
-s "user@example.com"
: ターゲットメールアドレスを指定 (引用符で囲む)-m sfp_accounts,sfp_haveibeenpwned
: アカウント情報収集とHaveIBeenPwnedチェックのモジュールを明示的に指定-u passive
: パッシブスキャンを実行
例4: 利用可能な全モジュールリストから、特定のキーワードを含むものを検索
./sf.py -M | grep -E "leak|breach|paste"
-M
: 全モジュールをリスト表示| grep -E "leak|breach|paste"
: パイプでgrepに渡し、”leak”, “breach”, “paste” のいずれかを含む行をフィルタリング
例5: デバッグモードで実行し、特定モジュールの動作を確認
./sf.py -s example.com -m sfp_dnsraw -d
-s example.com
: ターゲットドメインを指定-m sfp_dnsraw
: 特定のモジュール (DNS Rawレコード取得) を指定-d
: デバッグ出力を有効にする
まとめ ✨
spiderfoot-cli
は、強力なOSINT自動化ツールSpiderFootの機能をコマンドラインから最大限に引き出すためのインターフェースです。基本的なスキャンから、モジュールやデータタイプ、出力形式を細かく指定した高度な利用まで、幅広いニーズに対応します。
特に、以下の点でCLIは価値を発揮します。
- OSINTワークフローの自動化
- 他のセキュリティツールとの連携
- リソースが限られた環境での情報収集
- 定型的な調査の効率化
この記事で紹介した基本的な使い方やオプション、例を参考に、ぜひ spiderfoot-cli
を活用して、より効率的かつ効果的なOSINT活動を実践してみてください。Happy Hacking! 🎉
コメント