ツール概要
ASNMap は、Go 言語で構築されたコマンドラインインターフェース(CLI)およびライブラリであり、自治システム番号(ASN)を利用して組織が保有する IP アドレス範囲を迅速に特定するためのツールです。セキュリティ評価やネットワークインテリジェンス収集において、多様な入力形式と出力オプションを提供し、効率的な調査を可能にします。
コマンド構造と主要オプション
基本的な実行形式は asnmap [オプション] となります。主な機能は入力源の指定、設定管理、出力制御の 3 つに分類できます。
入力源の指定
- ASN 直接指定:
-aまたは-asnを使用し、AS 番号(例:AS13335)を入力します。 - IP アドレス:
-iまたは-ipで IPv4/IPv6 アドレスを指定し、所属 ASN を逆引きします。 - ドメイン名:
-dまたは-domainでドメインを指定し、関連する ASN を解決します。 - 組織名:
-orgを使用して組織名(例:CLOUDFLARE)から ASN を検索します。 - ファイル入力:
-fまたは-fileで、複数のターゲットが記載されたテキストファイルを読み込めます。
設定と出力制御
- 認証:
-authで ProjectDiscovery 云平台の API キー管理を制御します。 - DNS 解決:
-rまたは-resolversでカスタム DNS サーバー(例:1.1.1.1)を指定可能です。 - フォーマット:
-j(JSON)、-c(CSV) で出力形式を変更できます。 - IPv6 包含:
-v6フラグにより、IPv6 CIDR ブロックを結果に含めます。 - verbosity:
-vで詳細ログ、-silentで結果のみの出力を行います。
基本的なクエリ実行例
以下に、一般的な調査シナリオにおけるコマンド例を示します。
単一および複数 ASN の調査
# 単一 ASN のネットワーク範囲を取得
asnmap -a AS13335
# 複数の ASN をカンマ区切りで指定
asnmap -a AS13335,AS16509
ドメインおよび IP からの逆引き
# ドメインから関連 ASN を特定
asnmap -d cloudflare.com
# IP アドレスから所属 ASN を確認
asnmap -i 1.1.1.1
asnmap -i 1.1.1.1,8.8.8.8
出力形式の定制
# JSON 形式でファイルに保存
asnmap -a AS13335 -j -o cloudflare_data.json
# CSV 形式で出力し、IPv6 も含める
asnmap -a AS13335 -c -v6 -o networks.csv
自動化スクリプトとワークフロー
調査プロセスを効率化するため、シェルスクリプトと組み合わせた活用が推奨されます。
多様な入力タイプに対応した自動収集
以下のスクリプトは、入力リストに含まれるターゲットのタイプ(ASN, IP, Domain, Org)を自動的に判別し、それぞれ適切なフラグで処理を行います。
#!/bin/bash
# 自動ネットワーク情報収集スクリプト
INPUT_LIST="recon_seeds.lst"
DATA_STORE="collected_intel"
mkdir -p "$DATA_STORE"
while IFS= read -r target; do
echo "[*] 処理中:$target"
case $target in
AS[0-9]*)
# ASN として処理
asnmap -a "$target" -j > "$DATA_STORE/asn_${target}_info.json"
;;
[0-9].[0-9].[0-9].[0-9]*)
# IPv4 として処理
safe_name=$(echo "$target" | tr '.' '_')
asnmap -i "$target" -j > "$DATA_STORE/ip_${safe_name}_info.json"
;;
*.* )
# ドメインとして処理
safe_name=$(echo "$target" | tr '.' '_')
asnmap -d "$target" -j > "$DATA_STORE/domain_${safe_name}_info.json"
;;
*)
# 組織名として処理
asnmap -org "$target" -j > "$DATA_STORE/org_${target}_info.json"
;;
esac
echo "[+] 完了:$target"
done < "$INPUT_LIST"
ネットワーク範囲の集計とマッピング
組織名を指定し、保有する全 CIDR ブロックを抽出して IP 総数を算出するスクリプト例です。
#!/bin/bash
# 組織ネットワーク規模算出スクリプト
ENTITY="$1"
echo "[*] 組織 '$ENTITY' のネットワークマップ作成中..."
# 重複を除外して保存
asnmap -org "$ENTITY" -silent | sort -u > "${ENTITY// /_}_cidrs.lst"
IP_COUNT=0
while IFS= read -r range; do
# CIDR から IP 数を計算
NUM=$(mapcidr -cl "$range" -c)
IP_COUNT=$((IP_COUNT + NUM))
done < "${ENTITY// /_}_cidrs.lst"
echo "[+] 発見された CIDR ブロック数:$(wc -l < "${ENTITY// /_}_cidrs.lst")"
echo "[+] 推定 IP アドレス総数:$IP_COUNT"
他ツールとの連携パイプライン
ASNMap の出力を他のセキュリティツールに渡すことで、攻撃面分析やスキャンを自動化できます。
- サブネット分割とポートスキャン:
asnmap -a AS13335 -silent | mapcidr -sbh 256 | naabu -silent - Web サーバーの特定と脆弱性診断:
asnmap -org "AMAZON" -silent | httpx -silent | nuclei -t ~/templates/ - 並列処理による高速化:
asnmap -f targets.txt -silent | parallel -j 8 "nmap -sS {}"
主な利用シナリオ
ペネトレーションテストの範囲定義
顧客組織の正式な ASN を基に、テスト許可範囲となる IP ブロックをリスト化します。
#!/bin/bash
ORG="$1"
asnmap -org "$ORG" -silent > "scope_${ORG// /_}.txt"
echo "[+] 対象範囲を scope_${ORG// /_}.txt に保存しました"
競合他社のインフラ分析
複数の企業名をリスト化し、それぞれのネットワーク規模を比較します。
for company in "Company A" "Company B"; do
count=$(asnmap -org "$company" -silent | wc -l)
echo "$company: $count CIDR blocks"
done
脅威インテリジェンスの蓄積
特定の脅威アクターに関連する組織名を監視し、ネットワーク変化を追跡します。
TODAY=$(date +%Y%m%d)
asnmap -d "suspicious-domain.com" -silent > "intel_${TODAY}.txt"
# 前回との差分を確認
diff "intel_$(date -d yesterday +%Y%m%d).txt" "intel_${TODAY}.txt"
トラブルシューティングと注意点
一般的なエラーと対応
- 認証エラー: API キーが未設定または無効な場合、
-auth falseを試すか、設定ファイルを確認してください。 - 結果なし: 入力形式が間違っているか、対象が存在しない可能性があります。クエリタイプ(-a, -d, -org)を見直してください。
- 接続失敗: ネットワーク制限がある場合、
-pでプロキシを指定するか、-rでパブリック DNS を変更してください。
運用上のベストプラクティス
- 設定ファイルの活用: 頻繁に使用する API キーやリゾルバーは、JSON 設定ファイルに保存し
-configオプションで読み込むことで、コマンド入力を簡略化できます。 - データの検証: 取得した CIDR 範囲が実際に応答するか、簡易的な ping やポートチェックで検証することをお勧めします。
- 大量処理の最適化: 多数のターゲットを処理する際は、コマンドライン引数ではなくファイル入力(
-f)を使用し、静黙モード(-silent)を組み合わせることでパフォーマンスが向上します。 - 法的遵守: 収集した情報は授权范围内使用し、対象組織の利用規約および相关法律法规を遵守してください。