ネットワーク調査やセキュリティ調査の際に利用するツールの一つであるnmapについてまとめてみました。実際のコマンド例も踏まえながらまとめていきます。使えそうなオプションや利用方法があれば、随時更新していきます。
なお今回は自宅の検証環境で実施した結果になります。実際にコマンドを実行する場合はご自身の検証環境で実施することを強く推奨します。会社などの環境で実行すると不正な通信として検知されたり、不正アクセスになる可能性があるため、ご注意ください。
nmapで検知されたポートの状態
nmapでは特定のIPアドレスやネットワークアドレスに対してホストの特定にだけでなく、どのようなサービス(ポート)が動いているかを検索することができます。検知したポートは必ずしも空いているか閉じているの二通りに分類されるわけではない。nmapのリファレンスガイドを参考にしています。
- open
当該ポートが開いておりホストがパケットを受け入れることができる状態。 - closed
当該ポートにアクセス可能だが、そのポートを利用した(待機した)アプリケーションがない状態。経路上のファイヤーウォールやホストベースのファイヤーウォールでフィルター処理はされていないが、ホスト上で当該ポートのサービスが立ち上がっていない状態と推察できる。 - filtered
当該ポートが開いているか閉じているかどうかを判断ができない状態。原因は経路上のファイヤーウォール、ルータのフィルタリング、ホストベースのファイヤーウォールなどによってフィルタされている可能性がある。 - unfiltered
当該ポートにアクセスができるが、当該ポートが開いているか閉じているかどうかを判断できない状態。 - open | filtered
当該ポートが開いているのか、経路上でフィルター処理されているのかを判断することができない状態。 - closed | filtered
当該ポートが閉じているのか、経路上でフィルター処理されているのかを判断することができない状態
TCP SYN (ステルス)スキャンをやってみた(-sS)
フォーマット:
1 |
nmap -sS <対象ホスト> |
検証環境のルーター(Yamaha)を対象に実行した結果が以下になります。
サーバからの応答に対するステータス判定
※ICMPのTypeとCodeの意味についてはこちらのサイトが参考になります。
サーバの応答 | ステータス判定 |
TCP SYN+ACK | open |
TCP RST | closed |
応答なし | filtered |
ICMP到達不能エラー(Type 3、Code 1, 2, 3, 9, 10 ,13) | filtered |
TCP SYNスキャンはスリーウェイハンドシェイクを確立するのではなく、ハーフオープンスキャンと呼ばれるSYNパケットを送信する技法です。素早く実行できることが特徴です。クライアントがSYNパケットを送ったらサーバはSYN+ACKを返信します。クライアント(nmap実行ユーザ)はサーバからSYN+ACKを受け取ったら当該ポートがopenであるという判定を行います。何度もSYNパケットを送っても返答がないポートについては、filteredと判定されます。SYNスキャンは実際にコネクションを確立するわけではないので、比較的に秘匿性が高いスキャンです。一方で、当該ポートが開いていない時はRST(リセット)パケットをクライアントが受け取ります。この場合は、当該ポートが待ち受け状態になっていないことを示します。
ポート番号を指定しない場合、Well-Knownポート(1024番まで)とnmapがデフォルトで指定しているポートを対象にスキャンを行うようです。スキャンするポートはnmap-servicesファイルに記載されています。私の環境の場合だと、/usr/share/nmap/nmap-servicesにファイルがありました。
TCP Connectスキャンをやってみた(-sT)
フォーマット:
1 |
nmap -sT <対象ホスト> |
検証環境のルーター(Yamaha)を対象に実行した結果が以下になります。
TCP SYN(ステルス)スキャンのようにSYNパケットを送信できない場合に利用するスキャンタイプです。TCP SYN(ステルス)スキャンは生パケットを作成して送信しますが、TCP Connectスキャンはシステムコールを行いConnectを要求します。ブラウザやP2P通信で利用する際に使われるConnectと同じ仕組みのようです。
またTCP SYN(ステルス)スキャンとは異なり実際に接続を行うのでサーバ側にアクセスログとして残る可能性があるようです。サーバ側のセキュリティ対策にIDS/IPSが導入されていると検知される可能性があります。また接続を試行するのでTCP SYN(ステルス)スキャンよりもスキャンに時間がかかります。
UDP スキャンをやってみた(-sU)
フォーマット:
1 |
nmap -sU <対象ホスト> |
検証環境のルーター(Yamaha)を対象に実行した結果が以下になります。
サーバからの応答に対するステータス判定
※ICMPのTypeとCodeの意味についてはこちらのサイトが参考になります。
サーバの応答 | ステータス判定 |
UDP応答 | open |
応答なし | open | filtered |
ICMP到達不能エラー(Type 3、Code 1, 3) | closed |
ICMP到達不能エラー(Type 3、Code 1, 2, 9, 10 ,13) | filtered |
UDPスキャンは一般的にTCPスキャンよりも遅く困難とされています。困難な理由の一つにUDPスキャンのペイロードを空にして送信するとサーバのほとんどは応答をすることがない(パケットを破棄)からです。よって上記表にあるように「open | filtered」の判定になります。なおDNSなど既知のポートでは空にせず送信している?ためサーバからの応答を受けてopenかどうかを判断することができるようです。
対象のホスト名や利用しているアプリケーションのバージョンを検索してみた(-A)
フォーマット:
1 |
nmap -A <対象ホスト> |
検証環境のルーター(Yamaha)を対象に実行した結果が以下になります。
-Aのオプションはアグレッシブスキャンを示します。アグレッシブスキャンは次のオプションを含んだスキャンになります。
- -O:ホストのOS検知
- -sV:ホスト利用しているアプリケーションのバージョン確認(opneしているポートのみチェック)
よって、とりあえず-Aをすればホスト名やらwebサーバのApacheのバージョンなどが取得できるので、非常に便利なコマンドです。攻撃はこのようなコマンドを使ってApacheのバージョンを把握し攻撃の糸口を見つけ出しているのだとわかりました。
任意のアドレスレンジに存在するホストを検索してみる(-sn)
フォーマット:
1 |
nmap -sn <対象アドレスレンジ> |
検証環境を対象にサブネット(/28)実行した結果が以下になります。(一部抜粋)
今回はCIDR表記で記載しましたが、第4オクテットを「.0-100」のように表記すると第四オクテットが0から100までのアドレスに対してスキャンを掛けることができます。結果にもあるように「Host is up」なので、起動している端末のIPアドレス、MACアドレスを表示します。起動していない/利用されていないIPアドレスについては表記されていません。文字列が並んでいるだけなので、ちょっと見づらいですよね。。。ちょっと見やすく整理するためのコマンドを共有します。
当該IPアドレスレンジ内で起動している端末台数だけを調べたい場合にワンライナーで実行するコマンドを作ってみました。
1 |
nmap -sn <対象アドレスレンジ> | grep "Host is up" | wc -l |
次に台数ではなく起動している端末のIPアドレスのリストを表示するためのワンライナーで実行するコマンドを作ってみました。
1 |
nmap -sn <対象アドレスレンジ> | grep "Nmap scan" | awk '{print $5}' |
実際に実行した結果は次の通りです。CIDR(/28)表記で検索した結果になります。
まとめ
今回はネットワーク調査やセキュリティ調査を行うためのツールの一つであるnmapについて、まとめみました。今回まとめたオプションは一般的に調査をする上で使われそうなオプションに絞ってます。他にもオプションがありますので、今後利用してみて使えそうなオプションがあれば追加してナレッジを書き溜めていきたいと思います。
nmapには非常に豊富なオプションが用意されており、社内のネットワーク管理者はネットワーク調査やセキュリティ調査をしやすくなるなと感じました。一方でサイバー攻撃も同様にnmapを利用することで情報取集を簡単に行うことができるとわかりました。例えば、社外からの不正アクセスの糸口を見つけるために、攻撃対象の公開サーバを見つけたらnmapでスキャンをかけ脆弱性を持つアプリケーションのバージョンを取得してみて・・・・といったように攻撃する前の偵察をすることができます。仮に攻撃が成功し不正アクセスした後も同様に社内LANに対してnmapをしかけることで脆弱性のあるサーバ、端末を簡単に探すことができそうです。
ただしnmapのようなツールはIPS/IDSで検知されたり、クライアント側でEPP/EDRが入っていれば検知してくれる(はず)なので、そこに期待することを願います。。。。
コメント