当記事では、スキャンツールの有名どころであるnmapの使い方やオプションについて紹介します。
今回使用する環境とインストール方法は以下の通りです。
はじめにnmapのインストールを行います。
目次
はじめに
Nmap(Network Mapper)とは、ネットワークの探索及びセキュリティ監査に使用されるオープンソースのツールです。
大規模ネットワークから単一のホストまで幅広く使用することが可能です。
Nmapは生のIPパケットを用いて対象のネットワーク上でどのようなホストが利用可能なのか、そのホストが提供しているサービスやOS、どのようなパケットフィルタリングやFWが使用されているかなど、様々な情報を把握することが可能なツールです。
※本ツールは自身の管理外のネットワークやホスト等に使用すると、攻撃行為と判断される場合があります。不正アクセス禁止法に抵触する恐れもありますので、検証環境や使用が許可されているネットワークの範囲内などで検証してください。
公式リファレンスガイドより抜粋
典型的なNmapスキャンの使用方法の例として、スキャンする対象のOSとそのバージョンの検出を行う-A、と処理を高速に実行する-T4という引数、スキャン対象となるホスト名を指定しスキャンを行います。
スキャンの結果は以下の通りです。
例:
nmap -A -T4 scanme.nmap.org
上記の結果では、scanme.nmap.orgに対しスキャンを行い、その結果が返されています。
Scanme.nmap.orgの名前解決を行い、45.33.32.156というIPアドレスを特定します。
そのIPアドレスに対して1000個のポートに対し、TCPポートスキャンし、確認できた8つのサービスポートのスキャン結果を返しています。
また、ホストのOSを判別し、Tracerouteで宛先ホストまでの経路まで示してくれます。
その他にも色々な使い方ができる有用なツールですので基本的な使用方法についてご紹介させていただければと存じます。
Nmapの基本的な使い方
nmap [スキャンタイプ] [オプション] {ターゲット指定}
例:
nmap scanme.nmap.org(若しくはIPアドレス) nmap 192.168.1.0/24 nmap 192.168.1.1-254
ヘルプの表示方法
nmap -h
ヘルプには使用方法やその他様々なオプションの概要が載っていますので、一読するとどういったことができるのかよりイメージしやすいかと思います。
頻出のオプション
ホストの検出
-sL(リストスキャン):ターゲットの全IPに対してDNS逆引き解決を行う。
-sn(Pingスキャン):Pingスキャンのみを行い、応答のあるホスト一覧を表示する。
-Pn(Pingなしスキャン):DNSの逆引きとポートスキャンを実行する。
-n(DNSの名前解決を行わない):DNSの解決を行わない為スキャン時間を短縮できる。
-traceroute(tracerouteを実行):スキャンしたホストにtracerouteを実行する。
スキャン技術
-sS(TCP SYNスキャン):TCPのSYNパケットでポートスキャンを実行する。ホストからSYN/ACKの応答があった場合、RSTパケットを返してコネクションを終了させる。
-sT(TCP接続スキャン):TCPのSYNパケットでポートスキャンを実行する。RSTパケットを返さないためTCPコネクションが確立される。
-sU(UDPスキャン):空のUDPヘッダーを使用してUDPスキャンを実行する。対象ポートの応答でポートの状態を分類する。
ポート指定とスキャン順序
-p <ポートの指定>(指定ポートのみスキャン実行):指定したポートのみスキャンを実行する。
--exclude-ports<ポート範囲>(指定したポートをスキャンから除外する):-pと同様に指定してポートスキャンの除外範囲を決定します。
-F(高速スキャン):スキャン数を通常1000ポートスキャンするのに対し、100ポートに減らして高速化している。
サービス/バージョン検出
-sV(バージョン検出):ポートをスキャン実行後、オープンポートのバージョン検出を行います。
※デフォルトではポート9100番はバージョン検出を行いません。一部のプリンタではこのポートで受信したものを出力することがあるため
OS検出
NSEスクリプトについて
NmapのスクリプトはLuaプログラム言語で書かれており、/usr/share/nmap/scripts に保存されています。
注意:使用するスクリプトによっては対象ホストに悪影響を及ぼす可能性があるため注意してください。
NSEスクリプトの使い方
nmap --script <filename>|<category>|<directory>/|<expression>
スクリプトはコンマ区切りリストを使用して複数のスクリプトも使用可能です。
スクリプト例:
nmap --script http-headers scanme.nmap.org
HTTPのヘッダー情報が表示されています。
スキャンタイミング設定
-T(0-5):T0からT5まであり、T3がデフォルト速度で数値が上がるほどスキャン速度が上昇します。T0及びT1はIDSの回避用とリファレンスに記載されています。
出力方法
Nmapでは、デフォルトでnmapを実行中のターミナルに結果が出力される他、オプションを使用することで、5つのフォーマットで出力することができます。
-oN<filespec>(通常の出力形式):テキストファイルで結果が出力される。
-oX<filespec>(XML形式):XMLファイル形式で結果が出力される。
-oS<filespec>(ScRipT KIdd|3 oUTpuT形式):指定した名前でleet表記へ変換されて結果が出力される。
下記のように一部文字が数字や記号に置き換わります。
-oG<filespec>(grep可能な形式)指定した名前でGrep可能なテキスト形式で結果が出力される。
-oA<filespec>(全ての形式で出力)-oN,-oX,-oGのフォーマットでファイルを3つ出力する。
その他
-6(IPv6):IPv6によるスキャンを有効にする。
-A(アグレッシブスキャン):-O,-sV,-sC,--tracerouteを使用します。冒頭部分で使用したオプションです。
まとめ
Nmapは、ネットワークやホストの状態を把握するためのツールとして様々な使用方法があります。
自分の管理するネットワークやホストがどのポートがオープンになっているのか把握することやNSEスクリプトを使用して脆弱性を検出することも可能です。
定期的にスキャンを実施し、適切な対策を行うことが重要だと思います。
また、今回紹介した以上に様々な使用方法があります。その中には有用なオプションやスクリプトもたくさんある反面、危険性があるスクリプトなども含まれています。
繰り返しになりますが、外部のネットワークに対してスキャン行為を行うことは不正アクセス禁止法等に抵触する恐れもありますので、検証を行う際は、自身で検証環境などを用意して試してください。
記載されている会社名、システム名、製品名は一般に各社の登録商標または商標です。
当社製品以外のサードパーティ製品の設定内容につきましては、弊社サポート対象外となります。