mcpField
N
nmap

nmap

github.com/brownfinesecurityセキュリティ875150 回インストール21 週間前に更新
リポジトリ

nmap について

nmapは、ネットワーク偵察とポートスキャンを支援するスキルです。スキャン方法の選択、結果分析、出力管理を案内し、許可された対象に対してポート発見後にサービスを調べる手順を標準とします。

主な機能

  1. 01ポート発見とサービス検出の二段階手順
  2. 02各種スキャン方式とパラメーターの案内
  3. 03ポート、サービス、スクリプト結果の分析支援
  4. 04三種類の形式での結果保存
  5. 05範囲、タイミング、許可事項の説明

活用シーン

  1. 01許可されたホストやネットワーク範囲の偵察
  2. 02オープンポートの発見とサービス版の特定
  3. 03IoT機器のネットワークサービスの調査
  4. 04後続分析に向けたスキャン結果の整理

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/brownfinesecurity/iothackbot --skill nmap

インストール後、Claude Code で/nmapを入力して読み込まれたか確認します。

詳細

Nmap スキャン - プロフェッショナルなネットワーク偵察

nmap を使用したプロフェッショナルなネットワーク偵察とポートスキャンをユーザーが実施できるよう支援します。このスキルでは、さまざまなスキャンの種類、出力形式、結果の分析方法を説明します。

出力ディレクトリ

ディレクトリ構成
nmap-output/
├── nmap-portscan.nmap      # Initial fast port discovery
├── nmap-portscan.xml
├── nmap-portscan.gnmap
├── nmap-services.nmap      # Detailed service detection on open ports
├── nmap-services.xml
└── nmap-services.gnmap

重要:nmap の出力は、常に整理されたディレクトリ構成に保存してください。デフォルトでは ./nmap-output/ を使用するか、カスタムディレクトリを指定します。

デフォルトのスキャン戦略

重要:ユーザーが別のスキャンの種類を明示的に要求しない限り、必ず次の2段階の手法を使用してください。

フェーズ 1:高速ポート検出(root による SYN スキャン)
sudo nmap -p- <target> -oA <output-dir>/nmap-portscan
  • sudo を使う理由:root で実行すると高速な SYN スキャンが可能になります(-sS は暗黙的に使用されます)
  • -p- を使う理由:全 65535 ポートをすばやくスキャンします
  • 所要時間:通常、SYN スキャンで 1~3 分です
  • 出力:開いているポートの一覧

ホストがダウンしている場合の検出: スキャン出力に "Note: Host seems down" が含まれている場合は、次のオプションを使用して自動的に再試行します。

sudo nmap -p- -Pn <target> -oA <output-dir>/nmap-portscan
  • -Pn:ホスト検出をスキップし、ホストをオンラインとして扱います
  • ファイアウォールが ping プローブをブロックしている場合に使用します
フェーズ 2:対象を絞ったサービス検出

フェーズ 1 の完了後、開いているポートを解析し、次を実行します。

nmap -p <OPEN_PORT_LIST> -sV -sC <target> -oA <output-dir>/nmap-services
  • -p <OPEN_PORT_LIST>:開いていることが確認されたポートのみをスキャンします(例:-p 23,80,443,554,8000)
  • -sV:サービスのバージョンを検出します
  • -sC:追加の列挙のため、デフォルトの NSE スクリプトを実行します
  • 所要時間:既知の開いているポートのみをスキャンするため、通常は 1~3 分です
この戦略を使う理由
  1. 速度:高速な SYN スキャンで、開いているポートをすべて 1~3 分で検出します
  2. 網羅性:上位 1000 ポートだけでなく、全 65535 ポートを対象にします
  3. 効率性:サービス検出は、開いていることが確認されたポートのみで実行します
  4. 正確性:2段階の手法により、偽陰性を減らします
開いているポートの解析

フェーズ 1 の後、次を使って開いているポートを抽出します。

# Extract open ports from .gnmap file
grep "Ports:" <output-dir>/nmap-portscan.gnmap | sed 's/.*Ports: //' | tr ',' '\n' | grep '/open/' | cut -d'/' -f1 | tr -d ' ' | tr '\n' ',' | sed 's/,$//'

または .nmap ファイルから解析します(STATE 列と完全に一致するため、open|filtered ポートは除外されます)。

awk '$2=="open"{split($1,p,"/"); ports=ports sep p[1]; sep=","} END{print ports}' <output-dir>/nmap-portscan.nmap

実装ワークフロー

nmap-scan スキルが呼び出された場合:

  1. 出力ディレクトリを作成

    OUTPUT_DIR="./nmap-output"
    mkdir -p "$OUTPUT_DIR"
    
  2. フェーズ 1 を実行:高速ポート検出

    sudo nmap -p- <target> -oA "$OUTPUT_DIR/nmap-portscan"
    
  3. 「Host seems down」エラーを確認

    if grep -q "Host seems down" "$OUTPUT_DIR/nmap-portscan.nmap"; then
        echo "Host appears down, retrying with -Pn flag..."
        sudo nmap -p- -Pn <target> -oA "$OUTPUT_DIR/nmap-portscan"
    fi
    
  4. 結果から開いているポートを解析

    OPEN_PORTS=$(awk '$2=="open"{split($1,p,"/"); ports=ports sep p[1]; sep=","} END{print ports}' "$OUTPUT_DIR/nmap-portscan.nmap")
    
  5. フェーズ 2 を実行:開いているポートのサービス検出

    if [ -n "$OPEN_PORTS" ]; then
        nmap -p "$OPEN_PORTS" -sV -sC <target> -oA "$OUTPUT_DIR/nmap-services"
    else
        echo "No open ports found, skipping service detection."
    fi
    
  6. 結果の保存先を報告

    echo "Scan complete. Results saved to: $OUTPUT_DIR"
    

スキャンの種類

クイックスキャン(上位 1000 ポート)

初期偵察や時間が限られている場合、またはユーザーがデフォルトの2段階の戦略ではなくクイック/高速スキャンを明示的に要求した場合に使用します。

nmap -sV -sC <target> -oA <output-prefix>
  • -sV:サービスのバージョンを検出します
  • -sC:デフォルトの NSE スクリプトを実行します
  • -oA:すべての形式(通常、XML、grepable)で出力します
  • よく使われる上位 1000 ポートをスキャンします
  • 標準的な所要時間:1~3 分
  • 制限:標準以外のポートで稼働するサービスを見逃す可能性があります
包括的なスキャン(全ポート)

すべてのポートを確認する必要がある場合に、徹底的な評価を行うために使用します。

nmap -sV -sC -p- <target> -oA <output-prefix>
  • -p-:全 65535 ポートをスキャンします
  • 所要時間が大幅に長くなります(対象に応じて 5~30 分以上)
  • 網羅的な確認が必要な場合にのみ使用します
ステルス SYN スキャン

検出を避けたい場合に使用します(root/sudo が必要です)。

sudo nmap -sS -sV -sC <target> -oA <output-prefix>
  • -sS:SYN ステルススキャン(TCP ハンドシェイクを完了しません)
  • 対象によってログに記録される可能性が低くなります
  • root 権限が必要です
UDP スキャン

UDP サービスを列挙する必要がある場合に使用します。

sudo nmap -sU --top-ports 100 <target> -oA <output-prefix>
  • -sU:UDP スキャン
  • --top-ports 100:上位 100 の UDP ポートをスキャンします(UDP スキャンは低速です)
  • 一般的な UDP サービス:DNS(53)、SNMP(161)、DHCP(67/68)
  • 非常に低速なため、対象範囲を絞るために top-ports を使用します
アグレッシブスキャン

最大限の情報を収集する場合に使用します(検出されやすくなります)。

nmap -A -T4 <target> -oA <output-prefix>
  • -A:OS 検出、バージョン検出、スクリプトスキャン、traceroute を有効にします
  • -T4:アグレッシブなタイミングテンプレート(高速になりますが、検出されやすくなります)
  • 非常に検出されやすく、IDS/IPS に検知されます
  • 許可を得ている場合にのみ使用します
脆弱性スキャン

既知の脆弱性を確認する場合に使用します。

nmap -sV --script vuln <target> -oA <output-prefix>
  • --script vuln:NSE の脆弱性検出スクリプトを実行します
  • 一般的な CVE や設定ミスを確認します
  • 検出されやすく、アラートが発生する場合があります
OS 検出

オペレーティングシステムの識別に使用します。

sudo nmap -O <target> -oA <output-prefix>
  • -O:OS 検出を有効にします
  • root 権限が必要です
  • TCP/IP スタックのフィンガープリンティングを使用します

スキャンのワークフロー

デフォルトのワークフロー(二段階の戦略)

上記の「デフォルトのスキャン戦略」と「実装ワークフロー」の各セクションに従って、フェーズ 1(ポート検出)とフェーズ 2(サービス検出)を実行します。その後、分析します。

フェーズ 3:分析

  • サービス検出の結果を確認して、以下を特定します。
    • 実行中のサービスは何ですか?
    • 検出されたバージョンは何ですか?
    • 注目すべきサービス(Web、SSH、データベース、IoT プロトコル)はありますか?
    • NSE スクリプトによって問題が明らかになっていますか?
追加の対象を絞ったスキャン(任意)

サービス検出の結果に基づいて、専用のスキャンを実行します。

Web サービスが見つかった場合(80、443、8080 など):

nmap -p 80,443,8080,8443 --script http-* <target> -oA <output-dir>/nmap-web

SSH が見つかった場合:

nmap -p 22 --script ssh-* <target> -oA <output-dir>/nmap-ssh

RTSP が見つかった場合(554):

nmap -p 554 --script rtsp-* <target> -oA <output-dir>/nmap-rtsp

ONVIF/カメラが疑われる場合:

nmap -p 80,554,8000,8080 --script http-methods,http-headers <target> -oA <output-dir>/nmap-onvif

出力の管理

出力形式

3 種類の形式すべてを生成するため、常に -oA <prefix> を使用します。

  • .nmap - 人が読みやすい通常形式
  • .xml - ツールでの解析/インポート用の XML 形式
  • .gnmap - コマンドライン処理用の grep 可能な形式

タイミングとパフォーマンス

タイミングテンプレート

スキャン速度を制御するには -T<0-5> を使用します。

  • -T0(Paranoid):非常に低速で、IDS の回避向けです
  • -T1(Sneaky):かなり低速で、IDS の回避向けです
  • -T2(Polite):低速で、帯域幅への負荷を抑えます
  • -T3(Normal):デフォルトで、速度のバランスが取れています
  • -T4(Aggressive):高速で、最新のネットワークに推奨されます
  • -T5(Insane):非常に高速ですが、結果を見逃す可能性があります

デフォルト:-T3 を使用するか、省略します(デフォルトは T3 です) 高速スキャン:速度が重要で、ネットワークが処理できる場合は -T4 を使用します ステルス性:回避には -T1 または -T2 を使用します

タイムアウトに関する考慮事項
  • フェーズ 1 のポート検出(sudo nmap -p-):タイムアウトは 180~300 秒(3~5 分)
  • フェーズ 2 のサービス検出(nmap -p -sV -sC):タイムアウトは 120~180 秒(2~3 分)
  • UDP スキャン:タイムアウトは 600 秒以上(非常に低速)

ネットワーク範囲

単一ホスト
nmap <ip-address>
CIDR 表記
nmap 192.168.1.0/24
IP 範囲
nmap 192.168.1.1-254
複数のホスト
nmap 192.168.1.1 192.168.1.10 192.168.1.100
除外するホスト
nmap 192.168.1.0/24 --exclude 192.168.1.1,192.168.1.254

NSE スクリプト

一般的なスクリプトカテゴリ
# Authentication scripts
nmap --script auth <target>

# Brute force scripts
nmap --script brute <target>

# Default safe scripts
nmap -sC <target>  # equivalent to --script default

# Discovery scripts
nmap --script discovery <target>

# Vulnerability scripts
nmap --script vuln <target>

# All HTTP scripts
nmap --script "http-*" <target>
IoT 専用スクリプト
# RTSP enumeration
nmap -p 554 --script rtsp-methods,rtsp-url-brute <target>

# UPnP discovery
nmap -p 1900 --script upnp-info <target>

# MQTT discovery
nmap -p 1883,8883 --script mqtt-subscribe <target>

# Modbus enumeration
nmap -p 502 --script modbus-discover <target>

結果の分析

抽出する重要な情報
  1. 開いているポートとサービス

    • どのポートが開いていますか?
    • 実行中のサービスは何ですか?
    • 検出されたバージョンは何ですか?
  2. サービスのフィンガープリント

    • バージョン検出によって、古いソフトウェアが明らかになっていますか?
    • 検出されたバージョンに既知の脆弱性はありますか?
  3. NSE スクリプトの結果

    • 認証の問題はありますか?
    • 情報漏えいはありますか?
    • 設定ミスはありますか?
  4. オペレーティングシステム

    • 実行中の OS は何ですか?
    • OS のバージョンは何ですか?
Nmap 出力の解析

開いているポートを抽出する:

grep "^[0-9]" nmap-output.nmap | grep "open"

サービスのバージョンを抽出する:

grep -E "^[0-9]+/tcp.*open" nmap-output.nmap

NSE の出力で脆弱性を確認する:

grep -i "vuln\|cve\|exploit" nmap-output.nmap

IoT でよく使われるサービスのポート

IoT デバイスをスキャンする際は、特に次のポートに注意してください。

ポートサービス説明
21FTPファイル転送(設定ミスが多い)
22SSHリモート管理
23Telnet安全でないリモートアクセス
80HTTPWeb インターフェース
443HTTPSセキュアな Web インターフェース
554RTSP動画ストリーミング
1883MQTTIoT メッセージングプロトコル
3702WS-DiscoveryONVIF デバイス検出
5000UPnPユニバーサルプラグアンドプレイ
8000HTTP Alt代替 HTTP ポート
8080HTTP Proxy代替 HTTP ポート
8883MQTT/TLSセキュアな MQTT

ベストプラクティス

1. 出力を必ず保存する

出力を保存せずに nmap を実行しないでください。

# GOOD
nmap -p <ports> -sV -sC <target> -oA output/nmap-services

# BAD
nmap -sV -sC <target>
2. 常に二段階の戦略を使用する

ユーザーから別のスキャン種別を明示的に指定されない限り、デフォルトの二段階の戦略(「デフォルトのスキャン戦略」セクションを参照)を使用します。

3. 適切なタイミングを使用する

必要に応じてタイミングを調整します。

# Pentest with authorization: Fast
nmap -sV -sC -T4 <target>

# Red team/stealth: Slow
nmap -sV -sC -T2 <target>
4. スキャンパラメーターを記録する

次の項目を必ず記録します。

  • 使用したスキャン種別は何ですか?
  • スキャンを実行した日時はいつですか?
  • スキャン結果はどうでしたか?
  • 異常やエラーはありましたか?
5. 認可を尊重する
  • スキャンする権限のあるシステムのみをスキャンしてください
  • スコープの制限を遵守してください
  • 本番システムへのスキャンの影響に注意してください
  • DoSを避けるため、適切なタイミングで実行してください

IoTテストワークフローとの統合

IoTペネトレーションテストの場合
  1. デフォルトの2フェーズスキャン(ポート検出+サービス検出)を実行します
  2. 開いているポートからONVIFが疑われる場合は、wsdiscoveryを実行します
  3. カメラでポート80/554が開いている場合は、onvifscanを実行します
  4. Webインターフェイスが見つかった場合は、対象を絞ったHTTPスクリプトを実行します
出力ディレクトリの使用方法

常に整理された出力ディレクトリ(デフォルトは ./nmap-output/)に保存してください。コマンドの全手順については、「実装ワークフロー」セクションを参照してください。

トラブルシューティング

スキャンに時間がかかりすぎる
  • スキャンを高速化するには -T4 を使用します
  • -p- の代わりに -p 1-1000 を指定してポート範囲を制限します
  • すべてのポートの代わりに --top-ports 100 を使用します
結果がない/ファイアウォールでブロックされている
  • 別のスキャンタイプを試します:-sS、-sT、-sA
  • -Pn を使用してホスト検出をスキップします
  • フラグメント化パケットには -f を試します
  • --source-port 53 またはその他の信頼されたポートの使用を検討します
root/sudoが必要

以下のスキャンタイプにはroot権限が必要です:

  • -sS(SYNスキャン)
  • -sU(UDPスキャン)
  • -O(OS検出)
  • Rawパケット機能
権限拒否エラー

「Permission denied」または「Operation not permitted」と表示された場合:

# Run with sudo
sudo nmap <options> <target>

ワークフローの例

ワークフロー1:標準的な単一ターゲットのスキャン(デフォルト)
TARGET="192.168.1.100"
OUTPUT_DIR="./nmap-output"
mkdir -p "$OUTPUT_DIR"

# Phase 1: Fast port discovery
sudo nmap -p- $TARGET -oA "$OUTPUT_DIR/nmap-portscan"

# Check for "Host seems down"
if grep -q "Host seems down" "$OUTPUT_DIR/nmap-portscan.nmap"; then
    sudo nmap -p- -Pn $TARGET -oA "$OUTPUT_DIR/nmap-portscan"
fi

# Parse open ports
OPEN_PORTS=$(awk '$2=="open"{split($1,p,"/"); ports=ports sep p[1]; sep=","} END{print ports}' "$OUTPUT_DIR/nmap-portscan.nmap")

# Phase 2: Service detection
if [ -n "$OPEN_PORTS" ]; then
    nmap -p "$OPEN_PORTS" -sV -sC $TARGET -oA "$OUTPUT_DIR/nmap-services"
fi
ワークフロー2:IoTカメラのテスト

ワークフロー1のデフォルトの2フェーズスキャンを実行してから、カメラ固有のチェックを追加します:

TARGET="192.168.1.100"
OUTPUT_DIR="./nmap-output"

# If ONVIF camera detected, check HTTP methods
nmap -p 80 --script http-methods $TARGET -oA "$OUTPUT_DIR/nmap-http"

# Check RTSP service
nmap -p 554 --script rtsp-methods $TARGET -oA "$OUTPUT_DIR/nmap-rtsp"
ワークフロー3:追加のUDP/OS検出
OUTPUT_DIR="./nmap-output"

# After completing default two-phase scan, optionally add:

# UDP scan (top ports)
sudo nmap -sU --top-ports 100 <target> -oA "$OUTPUT_DIR/nmap-udp"

# OS detection
sudo nmap -O <target> -oA "$OUTPUT_DIR/nmap-os"

# Vulnerability scan
nmap -sV --script vuln <target> -oA "$OUTPUT_DIR/nmap-vuln"

ユーザーに確認する項目

スキャンを開始する前に、次の点を確認してください:

  1. ターゲット:IPアドレスまたはネットワーク範囲は何ですか?
  2. スコープ:単一ホストですか、それともネットワーク範囲ですか?
  3. スキャンタイプ:デフォルトの2フェーズ方式を使用しますか、それとも特定の要件がありますか?
  4. 認可:このターゲットをスキャンする権限がありますか?
  5. 特別な関心事項:初回スキャン後に重点的に確認したいサービスやポートはありますか?

注:出力はデフォルトで ./nmap-output/ に保存されます。

成功基準

nmapスキャンが成功したと見なされる条件:

  • フェーズ1のポート検出がエラーなく完了している
  • すべての開いているポートに対するフェーズ2のサービス検出が完了している
  • すべての形式(-oA)の結果が出力ディレクトリに保存されている
  • サービスのバージョンとともに開いているポートが特定されている
  • NSEスクリプトが正常に実行されている
  • 結果が記録され、分析できる状態になっている
  • 以下を示す明確な概要が提供されている:
    • 見つかった開いているポートの数
    • 検出された主なサービス
    • 出力ファイルの保存場所

コメント