じゃあ、おうちで学べる

本能を呼び覚ますこのコードに、君は抗えるか

オタクのクリスマスとnmap

概要

オタクは激怒した。必ず、かのクリスマスというイベントを除かなければならぬと決意した。オタクには恋愛がわからぬ。オタクは、コンピューターの住人である。ツイッターでつぶやき、プログラミングをして遊んで暮して来た。けれどもリア充に対しては、人一倍に敏感であった()きょう未明オタクはプログラムを書き始め、朝も昼もなく、プログラムを書いて気がついたら一日が終わっていたのである。オタクには恋人も友達もない…しかし、一言こう言ったのだ「クリスマスにオタクが学ぶべきはNmapである。」

余興

Nmapとは ??

Nmap (“Network Mapper”)は、ネットワーク調査およびセキュリティ監査を行うためのオープンソースのツールである。大規模ネットワークを高速でスキャンするように設計されているが、単一のホストに対してもまったく問題なく機能する。Nmapは生の(raw)IPパケットを用いて、ネットワーク上でどのようなホストか利用可能になっているか、これらのホストが提供しているサービス(アプリケーション名とバージョン)は何か、ホストが実行しているOS(OS名とバージョン)は何か、どのような種類のパケットフィルタ/ファイアウォールが使用されているかなど、その他数多くの特徴を斬新な方法で判別する。Nmapは、セキュリティ監査用に広く利用されているばかりでなく、ネットワーク・インベントリ(資産情報収集)、サービスのアップグレード予定管理、ホストやサービスのアップタイム(利用可能時間)の監視等の日常業務にNmapを役立てているシステム管理者やネットワーク管理者も多い。 Nmapは、スキャン調査対象の一覧を、使用したオプションに応じた補足情報とともに出力する。このなかで最も重要な情報は、“interesting ports table”(興味深いポートの一覧表)である。この一覧表には、ポート番号、プロトコル、サービス名、状態が記載されている。状態は、open、filtered、closed、またはunfilteredのいずれかになる。open(開いた)ポートは、調査対象マシン上のアプリケーションがそのポート上で接続/パケットを待ち受けている状態であることを示す。 Filtered(フィルタあり)は、ファイアウォールやフィルタなどのネットワーク上の障壁でポートが遮られている状態にあり、ポートが開いているか閉じているかをNmapが判断できないことを意味する。Closed(閉じた)ポートには、待ち受け状態のアプリケーションは何もないが、これらはいつでも開放することが可能である。ポートがNmapのプローブには応答するが、開いているか閉じているかをNmapが判別できない場合には unfilteredに分類される。ポートの状態がopen|filteredやclosed|filteredのように、2つの状態の組み合わせで報告されるのは、そのどちらがポートの状態を表しているかをNmapが判断できない場合である。またこのポート一覧表には、バージョンの検出が求められた場合には、ソフトウェアのバージョン情報も記載される。IPプロトコルスキャン(-sO)が要求された場合には、ポートを一覧表示するのではなく、対応可能なIPプロトコルに関する情報が提供される。 Nmapは、このポート一覧表以外にも、逆引きDNS名、OSの推測、デバイスの種類、MACアドレスなどの、調査対象に関するさらに詳細な情報を提供できる。

Nmap リファレンスガイド (Man Page) より

コマンド

  • nmap [オプション] {ターゲット}

有用なオプション

-A  OSとバージョンを検知しようとする
-sL 指定したネットワーク内のホスト一覧を表示する(リストスキャン)
-sP pingに応答するホストの一覧を表示する(Pingスキャン)
-sS TCPのSYNパケットを送ってSYN+ACKが返ってくるか調べる(TCP SYNスキャン/TCPハーフスキャン)
-sT TCPでポートに接続できるかを調べる(TCP Connectスキャン)
-sV ソフトウェア名とバージョンの表示を有効にする
-sU UDPポートをスキャンする(UDPスキャン)
-sF FINフラグだけのパケットを送って調べる(TCP FINスキャン)
-sN まったくフラグなしのパケットを送って調べる(TCP Nullスキャン)
-sX FIN/PSH/URGフラグを立てたパケットを送って調べる(Xmasスキャン)
-sA ACKフラグだけのパケットを送って調べる(TCP ACKスキャン)
-b FTP_HOST FTP_HOSTのFTPサーバを利用して調べる(FTPバウンススキャン)
-O  OSを検出しようとする
-P0 Pingスキャンを行わない(アクティブなマシンを割り出すためのホスト発見プロセスが省略される)
-PS [PORTLIST]  PORTLISTで指定したポート(デフォルトは80番)にSYNフラグ付きの空TCPパケットを送信する(TCP SYN Ping)
-PA [PORTLIST]  PORTLISTで指定したポート(デフォルトは80番)にACKフラグ付きの空TCPパケットを送信する(TCP ACK Ping)
-PU [PORTLIST]  PORTLISTで指定したポート(デフォルトは31338番)に空UDPパケットを送信する(UDP Ping)
-PE ICMPタイプ8(エコー要求)パケットをターゲットに送信する(ICMP Ping)
-PR IPベースのスキャンより高速なARPスキャンを行う(ARP Ping)
-n  DNSによる逆引き名前解決を行わない
-R  すべてのターゲットに対して常にDNSによる逆引き名前解決を行う
-p PORT スキャンするポートをPORTで指定する(1-1023、U:53,T:80)UはUDPポート、TはTCPポートを示す
-F  限定したポートのみ調べる(約1200ポート)
-r  調べるポートの順番を無作為(デフォルト)ではなく順に選ぶ

nmap でクリスマスを祝え…。

とりあえず、localhostに対してnmapをしてみる。

$nmap 127.0.0.1

Starting Nmap 7.01 ( https://nmap.org ) at 2016-12-25 **:** JST
Nmap scan report for localhost (127.0.0.1)

ん?何も変わらない通常表示である。 とりあえず、クリスマススキャンを試してみる。

nmap -sX 127.0.0.1

Starting Nmap 7.01 ( https://nmap.org ) at 2016-12-25 16:07 JST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000091s latency).

あれ?? 上手く行かない....。クリスマスにクリスマススキャンをかけたらクリスマスを祝ってくれるんじゃないの?? Port Scanning Techniquesにクリスマスを祝ってくれるような記述はない…。 ねぇ…クリスマスを祝ってよ!!!nmapよ!!!お前ぐらい俺とクリスマスを祝ってくれよ…。都市伝説だったのか…。

Nmapの真実 この資料から -v オプションをつけると以下のような出力に成るのが分かった。

$nmap -v 127.0.0.1

Starting Nmap 7.01 ( https://nmap.org ) at 2016-12-25 **:** JST
Nmap wishes you a merry Christmas! Specify -sX for Xmas Scan (https://nmap.org/book/man-port-scanning-techniques.html).

Nmapはメリークリスマスを願っています! Xmasスキャン用に-sXを指定します。

やった~どうやら勝手に-sXを実行しているっぽい(wiresharkで確認できた)がオタクは涙を流しながら喜び…こう言った…。 「オタクの望みは叶かなったぞ。信実とは、決して空虚な妄想ではなかった。どうか、おまえらリア充の仲間の一人にしてほしい。」  部屋は何処までも静かな静寂であった。

後日談

クリスマスじゃない日に-vを行うとどうやら違う挙動(Ping Scan)を行うようである。

$nmap -v 127.0.0.1

Starting Nmap 7.01 ( https://nmap.org ) at 2016-12-27 00:30 JST
Initiating Ping Scan at 00:30

最後に

ポートスキャンは自分の管理しているサーバ/ネットワークにのみ行いましょう

参照記事

Nmapの真実

Linuxコマンド集 - 【nmap】ポートスキャンを実施する:ITpro