nmapの使い方まとめてみた

ネットワーク調査やセキュリティ調査の際に利用するツールの一つであるnmapについてまとめてみました。実際のコマンド例も踏まえながらまとめていきます。使えそうなオプションや利用方法があれば、随時更新していきます。

なお今回は自宅の検証環境で実施した結果になります。実際にコマンドを実行する場合はご自身の検証環境で実施することを強く推奨します。会社などの環境で実行すると不正な通信として検知されたり、不正アクセスになる可能性があるため、ご注意ください。

nmapで検知されたポートの状態

nmapでは特定のIPアドレスやネットワークアドレスに対してホストの特定にだけでなく、どのようなサービス(ポート)が動いているかを検索することができます。検知したポートは必ずしも空いているか閉じているの二通りに分類されるわけではない。nmapのリファレンスガイドを参考にしています。

  • open
    当該ポートが開いておりホストがパケットを受け入れることができる状態。
  • closed
    当該ポートにアクセス可能だが、そのポートを利用した(待機した)アプリケーションがない状態。経路上のファイヤーウォールやホストベースのファイヤーウォールでフィルター処理はされていないが、ホスト上で当該ポートのサービスが立ち上がっていない状態と推察できる。
  • filtered
    当該ポートが開いているか閉じているかどうかを判断ができない状態。原因は経路上のファイヤーウォール、ルータのフィルタリング、ホストベースのファイヤーウォールなどによってフィルタされている可能性がある。
  • unfiltered
    当該ポートにアクセスができるが、当該ポートが開いているか閉じているかどうかを判断できない状態。
  • open | filtered
    当該ポートが開いているのか、経路上でフィルター処理されているのかを判断することができない状態。
  • closed | filtered
    当該ポートが閉じているのか、経路上でフィルター処理されているのかを判断することができない状態

TCP SYN (ステルス)スキャンをやってみた(-sS)

フォーマット:

検証環境のルーター(Yamaha)を対象に実行した結果が以下になります。

サーバからの応答に対するステータス判定

※ICMPのTypeとCodeの意味についてはこちらのサイトが参考になります。

サーバの応答ステータス判定
TCP SYN+ACKopen
TCP RSTclosed
応答なし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)

フォーマット:

検証環境のルーター(Yamaha)を対象に実行した結果が以下になります。

 TCP SYN(ステルス)スキャンのようにSYNパケットを送信できない場合に利用するスキャンタイプです。TCP SYN(ステルス)スキャンは生パケットを作成して送信しますが、TCP Connectスキャンはシステムコールを行いConnectを要求します。ブラウザやP2P通信で利用する際に使われるConnectと同じ仕組みのようです。

 またTCP SYN(ステルス)スキャンとは異なり実際に接続を行うのでサーバ側にアクセスログとして残る可能性があるようです。サーバ側のセキュリティ対策にIDS/IPSが導入されていると検知される可能性があります。また接続を試行するのでTCP SYN(ステルス)スキャンよりもスキャンに時間がかかります。

UDP スキャンをやってみた(-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)

フォーマット:

検証環境のルーター(Yamaha)を対象に実行した結果が以下になります。

-Aのオプションはアグレッシブスキャンを示します。アグレッシブスキャンは次のオプションを含んだスキャンになります。

  • -O:ホストのOS検知
  • -sV:ホスト利用しているアプリケーションのバージョン確認(opneしているポートのみチェック)

よって、とりあえず-Aをすればホスト名やらwebサーバのApacheのバージョンなどが取得できるので、非常に便利なコマンドです。攻撃はこのようなコマンドを使ってApacheのバージョンを把握し攻撃の糸口を見つけ出しているのだとわかりました。

任意のアドレスレンジに存在するホストを検索してみる(-sn)

フォーマット:

検証環境を対象にサブネット(/28)実行した結果が以下になります。(一部抜粋)

 今回はCIDR表記で記載しましたが、第4オクテットを「.0-100」のように表記すると第四オクテットが0から100までのアドレスに対してスキャンを掛けることができます。結果にもあるように「Host is up」なので、起動している端末のIPアドレス、MACアドレスを表示します。起動していない/利用されていないIPアドレスについては表記されていません。文字列が並んでいるだけなので、ちょっと見づらいですよね。。。ちょっと見やすく整理するためのコマンドを共有します。

 当該IPアドレスレンジ内で起動している端末台数だけを調べたい場合にワンライナーで実行するコマンドを作ってみました。

 次に台数ではなく起動している端末のIPアドレスのリストを表示するためのワンライナーで実行するコマンドを作ってみました。

 実際に実行した結果は次の通りです。CIDR(/28)表記で検索した結果になります。

まとめ

 今回はネットワーク調査やセキュリティ調査を行うためのツールの一つであるnmapについて、まとめみました。今回まとめたオプションは一般的に調査をする上で使われそうなオプションに絞ってます。他にもオプションがありますので、今後利用してみて使えそうなオプションがあれば追加してナレッジを書き溜めていきたいと思います。

 nmapには非常に豊富なオプションが用意されており、社内のネットワーク管理者はネットワーク調査やセキュリティ調査をしやすくなるなと感じました。一方でサイバー攻撃も同様にnmapを利用することで情報取集を簡単に行うことができるとわかりました。例えば、社外からの不正アクセスの糸口を見つけるために、攻撃対象の公開サーバを見つけたらnmapでスキャンをかけ脆弱性を持つアプリケーションのバージョンを取得してみて・・・・といったように攻撃する前の偵察をすることができます。仮に攻撃が成功し不正アクセスした後も同様に社内LANに対してnmapをしかけることで脆弱性のあるサーバ、端末を簡単に探すことができそうです。

 ただしnmapのようなツールはIPS/IDSで検知されたり、クライアント側でEPP/EDRが入っていれば検知してくれる(はず)なので、そこに期待することを願います。。。。

参考

Nmap: the Network Mapper - Free Security Scanner
Nmap Free Security Scanner, Port Scanner, & Network Exploration Tool. Download open source software for Linux, Windows, UNIX, FreeBSD, etc.
ICMP Type / Code 一覧
ICMP Type / Code 一覧

コメント

タイトルとURLをコピーしました