己を知り、敵を知る――Nmapで見つめ直す自分の姿:セキュリティ対策の「ある視点」(6)(2/3 ページ)
ポートスキャンは正義の管理者には関係ない? いいえ、己の姿を客観的に見るためには、的確なポートスキャン術が必要なのです。
1.スキャンタイプ:どのような方法でスキャンを行うか?
これはどのような方式でポートスキャンを行うかといったオプションである。いわば、Nmapでポートスキャンを行う際の要となる部分だろう。中には特定のOSの挙動を利用したスキャンのタイプも存在する。
スキャンタイプは10を超える種類があるため、今回は最も使用されるであろうものについて紹介する。
●TCP SYNスキャン(-sS)
Nmapのデフォルトのスキャンタイプである。通常のTCPにおける通信確立が、
- 接続要求(SYNパケット)
- 接続許可(SYN/ACK) or 接続拒否(RST)
- SYN/ACKを受け取った接続を開始(ACK)
といった3ウェイハンドシェイクを行うのに対して、このスキャンタイプは、2のパケットの内容を確認することでポートのオープン/クローズは判断できるため3を行わないものである。
このスキャンタイプは、完全な接続確立を行わないことから、ハーフオープンスキャンとも呼ばれる。
●TCP Connectスキャン(-sT)
ネットワークの接続で通常使用されるTCPの接続方法を用いるスキャンタイプである。そのため、前述したSYNスキャンよりも時間が多くかかってしまう。
Nmapを使用する際に管理者権限で実行できない場合【注2】かIPv6環境をスキャンする場合には、このスキャンタイプのお世話になるだろう。また、着実にオープンポートを確認する場合にも用いられることがある。
【注2】
UNIX系システムにおいてSYNスキャンなどのように生パケットを扱う場合には管理者権限が必要となる。
●UDPスキャン(-sU)
前述した2つのスキャン方法がTCPポートを検出するのに対して、こちらはUDPポートを検出するスキャンタイプである。プロトコルやOS側の実装などの理由からTCPに関するスキャンよりも時間がかかる傾向にある。TCPのスキャンタイプを組み合わせて実行することも可能である。
2.ホストの発見方法:どの範囲を対象とするか?
後述するがNmapは、IPアドレス範囲を指定してスキャンを行うことが可能である。この場合、中には稼働しているホストもあれば、稼働していないホストもあるだろう。稼働していないホストに対して稼働しているホストと同じスキャンを行っても時間の無駄である。そのため、Nmapでは発見されたホストのみスキャンを行うためのホストの発見方法が用意されている。
ホストの発見に用いるオプションは「-P*」(*の個所は発見方法により別途指定)を指定する。何も指定しない場合、つまり、デフォルトでは「TCP80番あてのACK」「ICMPエコーリクエスト(俗にいうping)」による確認が行われている。
ほかにホストの発見のためのオプションには以下のようなものが存在する。
●-PS
SYNフラグ付きのパケットを送信することでホストの発見を行う。デフォルトではTCP80番での確認を行う。TCP80番以外での確認を行いたい場合は、「,」(コンマ)区切りで任意のポートを指定することも可能である。
●-PA
ACKフラグ付きのパケットを送信することでホストの発見を行う。デフォルトでは「-PS」と同じくTCP80番での確認を行う。TCP80番以外での確認を行いたい場合も「-PS」と同様である。この技術は、ファイアウォールを回避してホストを発見するために利用されていたが、いまではステートフルにパケットを監査しているファイアウォールが多いため、あまり効果を発揮しない。
●-PU
UDPパケットを特定のポートに送信することでホストの発見を行う。デフォルトで送信するポートはUDP31338番、任意に指定するポートに関しては「-PS」「-PA」と同様である。
●-PE、-PP、-PM
「-PE」はICMP Echo、「-PP」はICMP Timestamp、「-PM」はICMP Address Maskによりホストの発見を行う。インターネットに公開されているサービスでは多くの場合、ICMPパケットに対して制限を行っているが中にはICMP Echoのみ、つまり、「ping」にのみ制限を行っているという場合も検査で発見されることがある。
●-PR
ARPを用いた発見方法である。イーサネットのネットワーク上でNmapを使用する場合には大きな威力を発揮する。
●-P0
ホストの発見を省略するものである。ホストの発見を行うまでもなく、検査する対象が明確な場合はこのオプションを用いるとよいだろう。ペネトレーションテストの現場では、事前にある程度の情報をお客さまにいただき、検査対象がはっきりしている場合が多いため、ホストの発見フェイズを省略することは多く見られる。
3.スキャンタイミング:効率化を図るための設定
Nmapでは、スキャンの効率化を図るため、スキャンのタイミングに対して、きめ細かな設定を行うことができる。
パケットの送信間隔やタイムアウトなどをミリ秒単位で設定することも可能なのだが、今回は事前に用意されているタイミングテンプレートを紹介しよう。タイミングテンプレートは「-T」の後にテンプレート名、または、それに割り当てられた数字を指定することで使用可能である。
テンプレート名はparanoid (0)、sneaky (1)、polite (2)、normal (3)、aggressive (4)、insane (5)の6つである()内の数字はそれぞれのテンプレートに割り当てられた数字であり、normal (3)はデフォルトの値となっているため、特に指定をしない場合はnormal (3)が用いられることとなる。
paranoid(0)からinsane(5)と順番にスキャン速度が速くなっていくのだが、insane(5)のような速度の速いテンプレートは、高速なネットワーク上であることが要求される。低速なネットワークで実行した場合は、Nmapのオープンポート検出の精度が犠牲となることがある。
実際のペネトレーションでは「-T 3(デフォルト)」か「-T 4」の実行速度を確認しながら調整しつつスキャンを行う場合が多い。
4.スキャンポートの指定:調べるポートの範囲は?
Nmapではスキャンするポートをさまざまな方法で指定することが可能である。デフォルトでは、1024番までの全ポートと付属のnmap-servicesに記述されたポートがスキャンされる。
特定のポート、範囲を指定する場合は「-p」を使用する。
指定したいポート | オプション例 | |
---|---|---|
22番ポート | -p 22 | |
22番、25番、53番 | -p 22, 25, 80 | |
20番から200番まで | -p 20-200 | |
TCP 22番、25番、53番および UDP 53番、123番【注3】 |
-p T:22, 25, 53,U:53, 123 |
【注3】
プロトコルに関しては「-s*」(スキャンタイプ)の部分での制御も必要である。
「-p」オプション以外に「-F」を指定することでnmap-servicesに記述されたポートのみをスキャンすることが可能である。また、「--datadir」オプションを使用することで独自のリストを基にしたスキャンを行うことも可能である。
5.結果の出力:保存方法を選択しよう
Nmapの結果の保存では、いくつかの保存形式が用意されている。今回は、その中でも利用頻度の高いもの3つについて紹介させていただく。
●ノーマル出力(-oN)
通常の出力結果で保存することができる。
●XML出力(-oX)
XML形式で結果を保存することが可能。サードパーティ製のツールによる解析を行う際にはこの形式で結果を保存する必要がある。
●grep形式(-oG or -oM)
grep、awk、cutなどのUNIX標準ツールを用いて簡単に検索、解析できるフォーマットで保存することが可能である。別ツールAmapを使用する際には、この形式で保存されたファイルが必要となる。
そのほかにも「-oS」という出力形式があるが、こちらは読者自身の目で確かめてみるとよいだろう。
6.そのほかのオプション
前述したもの以外にも便利なオプションがたくさんあるのでペネトレーションテストの現場でも使用しているオプションの一部を紹介しよう。
●冗長オプション(-v)
標準出力に進行中のスキャンに関しての情報を多く出力するようになる。例えば、このオプションを用いない場合はスキャン完了後オープンポートを出力するが、これを用いた場合は、見つかり次第、出力してくれるようになる。
●サービス検出(-sV)、OS検出(-O)
Nmapで発見されたポートでどのようなサービスが稼働しているかの検出を行ってくれる。オープンポートからどのようなサービスが提供されているか、おおよその予測はつくが、確実ではない場合やデフォルトのポート以外でサービスを提供しているサーバプログラムなどは、このオプションを併用することでプロトコルやバージョンが判明する場合がある。
また、「-O」オプションを用いることでスキャン対象のOSの挙動から、利用されているOSの推測を行うことも可能である。
これらの2つの機能を同時に使用したい場合は「-A」オプションを用いることで実現可能である。両方のオプションを有効にする「-A」オプションを用いた結果を以下に示す。なお対象は筆者の自宅にあった非常に古いルータである。
Interesting ports on 192.168.1.1: Not shown: 1270 closed ports PORT STATE SERVICE VERSION 21/tcp open ftp MegaBit Gear ftpd TE4121C 80/tcp open http Apache httpd 1.1.3 | HTTP Auth: HTTP Service requires authentication |_ Auth type: Basic, realm = Config |_ HTML title: Site doesn't have a title. MAC Address: xx:xx:xx:xx:xx:xx (yyy) Device type: VoIP gateway Running: ShoreTel embedded OS details: ShoreTel ShoreGear-T1 VoIP switch Network Distance: 1 hop OS and Service detection performed. Please report any incorrect results at http://insecure.org/nmap/submit/ . Nmap done: 1 IP address (1 host up) scanned in 19.219 seconds
●ポートのランダムを禁止(-r)
Nmapはデフォルトではランダムにポートを選択してスキャンを行っている。検査を行う場合、時間が限られているため、どの程度の進ちょくかということを把握しながら進める必要がある。
そのため、実際の検査では、このオプションを有効にし、順次ポートへアクセスさせ、そのパケットをキャプチャしながらどのポートに対してスキャンを行っているかをチェックしながら検査を行っている。
7.ターゲットアドレス:対象のマシンを指定する
スキャンする対象については、IPアドレスをそのまま指定することも可能であるが、範囲を指定することも可能である。例えば 192.168.0.1から192.168.0.100までをスキャンしたい場合は「192.168.0.1-100」と指定することが可能である。ほかにもCIDR表記で指定する方法などが存在する。
また、そのような表記で記述されたテキストファイルを「-iL」オプションで読み込みスキャンを実行することも可能である。
前述してきたオプションを指定した例は以下のとおりである。
Copyright © ITmedia, Inc. All Rights Reserved.