Nmapのスイッチとスキャンタイプ

Nmapは、おそらくPentesterやHackerの間で最も有名な偵察ツールです。ネットワークをスキャンし、ネットワーク内に存在するさまざまなポートやサービスを特定するためのポートスキャナーです。また、逆DNS名、オペレーティングシステムの推測、デバイスの種類、MACアドレスなど、ターゲットに関するさらなる情報も提供します。ネットワーク監査中にも便利です!

Nmapの基本的な構文は次のようになります。

$ nmap [FLAGS] [IP]

時折、特定のスキャンを実行するためには、sudo特権を持って実行する必要があることに注意してください。

Nmapのスイッチ

Nmapは、コマンドラインで渡されるフラグの助けを借りて、スキャンをカスタマイズできる強力でパワフルなネットワーキングスキャンツールです。重要なフラグのいくつかは次のとおりです:

  • -h: Print a help summary page
  • -sS: Perform a TCP SYN scan
  • -sU: Perform a UDP scan
  • -sV: Probe open ports to determine service/version info
  • -O: Enable OS detection
  • -v: Enable verbosity. You can even set the verbosity level as such :-vv: Level 2 verbosity. The minimum level of verbosity advised for use.
    -v3: Level 3 verbosity. You can always specify the verbosity level by specifying a number like this.
  • -oA: Same Nmap output in “normal”, XML and grepable formats. However you can specify the format of your choice with :-oN: Redirect normal output to a given filename
    -oX: Produce output in a clean, XML format and store it in a given file
    -oG: Produce “grepable” output and store it to a file. Deprecated format as users are now moving towards XML outputs.
  • -A: Enables “aggressive” scanning. Presently this enables OS detection (-O), version scanning (-sV), script scanning (-sC) and traceroute (–traceroute)
  • -p: Specify the ports to scan. It can be a single port as well as a range of ports. For Example :nmap -p 80 127.0.0.0.1: This scans port 80 on localhost
    nmap -p 1-100 127.0.0.1: This scans ports from 1 to 100 on localhost
    nmap -p- 127.0.0.1: This scans all the ports on the localhost

Nmapのスキャンタイプをスキャンします。

Nmapは多くの異なるスキャンタイプをサポートしていますが、最も人気のあるものは次の通りです。

1. TCP接続スキャン(-sT)

この種類のスキャンでは、NmapはSYNフラグが設定されたTCPパケットをポートに送信します。このシナリオでは、2つのことが起こり得ます:

  • The target responds with an RST packet that signifies that the port is closed.
  • Target doesn’t respond at all, probably due to a firewall dropping all incoming packets in which case the port will be considered filtered
  • The target responds back with a TCP packet with the SYN/ACK flags set which would signify that the port is open and then Nmap would respond with a TCP packet with the ACK flag set and hence would complete the TCP 3-way handshake.

以下はネイティブな日本語での一つのオプションです:
ファイアウォールルールを設定してRSTパケットを返信したり、すべての着信パケットを破棄することが容易なため、これはあまり信頼性の高いスキャン技術ではありません。また、この方法はTCPの3ウェイハンドシェイクが完了するのを待つため、非常に遅いです。

2. SYN「半開放」スキャン(-sS)

SYNスキャンは、「ハーフオープン」または「ステルススキャン」としても知られ、以前の手法よりも改善された方法です。以前の手法では、SYN/ACKパケットを受信した後にACKフラグをセットしたTCPパケットを送り返していましたが、新しい方法ではRSTパケットを送信します。これにより、サーバーが繰り返しリクエストを試みるのを防ぎ、スキャン時間を大幅に短縮します。

これは以前の方法に比べて改善された方法です。

  • They are faster
  • They might be able to bypass some primitive firewalls
  • Often, SYN Scans are not logged by applications running on the ports as most applications start logging a connection only after it has been fully established which is not the case with SYN Scans

ただし、安定していないアプリケーションが壊れる可能性があるため、本番環境での SYN スキャンは推奨されません。また、SYNスキャンにはsudo権限が必要です。なぜなら、生パケットを作成する必要があるからです。

実際には、sudo特権で実行されると、nmapはデフォルトでSYNスキャンを使用します。それ以外の場合は、TCPスキャンがデフォルトになります。

3. UDPスキャン(-sU)

UDPスキャンは、前述の2つに比べて信頼性が低いです。なぜなら、UDP接続は状態を持たないため、TCPのような「フィードバックメカニズム」が存在しないからです。UDPは「ファイアアンドフォーゲット」という原則で動作し、特定のポートに向けてパケットを送信し、それが届くことを期待します。これにより、速度が重視される一方で、ポートの開放状況を特定するのが難しくなります。

ターゲットポートにUDPパケットが送信されると、以下の3つのシナリオが考えられます。

  • Usually there is no response received in which case nmap marks the port as open|filtered. If no response is received yet, it sends another UDP packet to double check and if yet again no response is received, it marks the port as open|filtered and moves on
  • It might get a UDP response back which is very rare. In such a scenario, the port is marked open
  • If the port is closed and it receives an ICMP echo request back which signifies that the port is unreachable.

Nmapにおける特別なスキャン

これ以外にも、TCP SYNスキャンよりもさらに「ステルス性」の高い、あまり人気のないスキャンタイプがあります。以下に示すものです。

1. TCPヌルスキャン(-sN)

TCP Nullスキャンでは、送信されるTCPパケットにはフラグが一切設定されていません。RFCによると、このような状況では、ポートが閉じている場合にはターゲットからRSTが返ってくるべきです。

2. TCP FINスキャン(-sF)

これはTCP Nullスキャンと非常に似ていますが、完全に空のTCPパケットを送信する代わりに、接続を正常に閉じるために使用されるFINフラグがセットされたパケットを送信します。したがって、ターゲットはRFCに従ってクローズポートに対してRSTを返さなければなりません。

3. TCPクリスマススキャン(-sX)

TCP Xmasスキャンは、最後の2つのスキャン技術と非常に似ていますが、TCPパケットにはPSH、URG、FINフラグが設定されているという違いがあります。最後の2つのスキャンタイプと同様に、これもRFCによるクローズドポートの場合はRSTパケットが期待されています。

制限

これらのスキャンは同様の性質を持っているため、UDPスキャンと非常に似た結果が得られます。この場合、以下の3つの応答しかありません:

  • open|filtered : When no response is received then the port is categorized as this this because no response can mean only two things :The port is open
    The port is protected behind a firewall hence filtered
  • filtered : When the port is protected behind a firewall which sends an ICMP ping back
  • closed : When it receives and RST packet

RFC 793では、ネットワークホストはクローズドポートに対しては異常なパケットにRST TCPパケットで応答し、オープンポートに対しては応答しないように規定されていますが、一部のシステムではこの慣例が否定されています。この動作は主にMicrosoft Windowsサーバーや一部のCISCOデバイスで観察され、すべての異常なパケットはデフォルトで破棄されます。

Nmapを使用してネットワーク内のホストをスキャンする。

ネットワークに接続した際に最も重要なことの一つは、さらなる調査を行う前にネットワーク上のすべてのアクティブホストのリストを取得することです。これは、「Ping Sweep」と呼ばれる方法で行われ、ネットワーク内のすべてのIPにICMPパケットを送信して応答を待ちます。ICMPパケットで応答が返ってくるホストは、この場合においてアクティブと見なされます。

次のように、ハイフンまたはCIDRを使用してターゲットのIP範囲を指定できます。

$ nmap -sn 192.168.0.1-254

または、

$ nmap -sn 192.168.0.0/24

「-sn」フラグは、ポートスキャンを抑制し、nmapがネットワーク内のアクティブなホストを特定する際にICMPエコーパケット(またはスーパーユーザー権限で実行した場合はARPリクエスト)にのみ依存するようにします。また、ターゲットのポート443にはTCP SYNパケット、ターゲットのポート80にはTCP ACKリクエスト(スーパーユーザー権限で実行した場合はTCP SYN)を送信します。

Nmapスクリプトエンジン

Nmapスクリプトエンジン(NSE)は、Nmapの機能をさらに拡張する強力な追加機能です。Luaで書かれており、脆弱性や攻撃のテストなど、多くの作業を自動化するためにスクリプトを作成することができます。

たくさんのカテゴリーがあります。いくつかの役立つカテゴリーには次のようなものがあります。

  • safe:- Won’t affect the target
  • intrusive:- Not safe: likely to affect the target
  • vuln:- Scan for vulnerabilities
  • exploit:- Try to exploit a vulnerability
  • auth:- Attempt to bypass authentication for running services
  • brute:- Try to brute force credentials for running services
  • discovery:- Attempt to query running services for further information about the network (

スクリプトを実行するためには、「–script=<スクリプト名>」と指定する必要があります。

同時に複数のスクリプトを実行する場合は、–script=<スクリプト名1>、<スクリプト名2>のようにスクリプトの名前を区切って指定することもできます。

いくつかのスクリプトには、–script-args で指定できる引数も必要です。

一部のスクリプトには、組み込まれたヘルプメニューがあり、参照することができます。

$ nmap --script-help <script-name>

こちらで詳しいスクリプト一覧を見つけることができます。

結論

Nmapには無料できちんとしたドキュメンテーションがたくさんあります。公式ウェブサイトには、フラグやスクリプトなどの情報をたくさん見つけることができます。さまざまなフラグやスクリプトを試して、異なる環境下での出力の違いを見ることができます。

コメントを残す 0

Your email address will not be published. Required fields are marked *