攻撃者の心理:Nmapを使ったネットワーク解析の実践

セキュリティを向上させるためのペネトレーションテストは、ハッキングを防ぐためにとても重要なことです。ネットワークやポートの解析をして、どこに弱点、脆弱性があるかを知るのに、Nmapのライブスキャンは欠かせません。また、Nmapはハッカーが実際に使うツールであることも多く、「敵を知れば百戦危うからず」ということで、実際に攻撃者が使うツールについて知っておくことは、セキュリティ向上のためにもとても重要なことです。

Nmapとは

Nmapとは古くからあるポートスキャンツールとして知られています。その歴史は古く、来年で発表されて20年になる(1997年に発表)それだけ多くの人から支持された信頼と実績を兼ね備えたツールです。ポートスキャンとはいわばネットワークの地図を作成するためのツールです。どこのサーバからどのようにネットワークが構成されているか、を外部から知ることができます。それだけでなく、そこから派生して様々な機能を兼ね揃えています。

機能の一部を紹介します。

  • ポートスキャン
  • ホストの特定
  • 特定ポートで動作するサービスアプリケーションの特定
  • サービスアプリケーションの特定
  • OSの種類、バージョンの特定
  • パケットフィルタの特定
  • ファイアウォールの特定

など、得られる情報は様々です。

本記事ではこれらの機能の一部を紹介します!

 

セキュリティ向上に役立てよう

ここまで読んで疑問に思う方もいるかもしれません。そもそも、なぜ調査することがセキュリティ向上に役立つのか?!自分の環境なんだから、そんなのわかってるに決まっている!と思うかもしれません。しかし、多くの場合、使っているつもりのないソフトウェアが動いていたり、ポートが空いていたりすることはよくあることです。そんな意図しない設定を事前に察知し、防ぐことがセキュリティ向上に役立つことにつながるのです。

 

Nmapのインストール

それでは早速インストールして使ってみましょう。以前紹介したKali Linuxには標準でNmapが入っています。

またWindows/MacOS/LinuxとどのOSにもそれぞれに対応したソフトウェアが公開されていますので、公式サイトからダウンロードしてください。
(Windowsの場合はZenmapというNmapのGUI版)

CentOSやUbuntuなどのディストリビューションではyumやapt-getで簡単にインストールすることができます。

# CentOSの場合
yum install nmap

# Ubuntuの場合
apt-get install nmap

Nmapの基本的な使い方

まずは基本的な使い方です。インストールが完了したらコマンドを使って早速解析をしてみましょう。
ここではCentOSのCLI環境を例に紹介します。

※以下の操作は必ずローカル環境で行ってください。公開されている外部のサーバーや、許可のない環境に行った場合不正アクセス禁止法に触れることがあります。

pingスキャン

次のコマンドを使用して、pingスキャンを開始します。

nmap -sP 192.168.0.0-100 

nmap-live-host-scanning-1

この例では、-sPのオプションをつけてPINGスキャンという方法で、192.168.0.0から192.168.0.100までの複数のIPアドレスにPingを送って、返ってきたホスト名を表示しています。IPアドレスの範囲を-(ハイフン)で繋げば複数のIPアドレスも解析することができます。

例では

  • 192.168.0.1
  • 192.168.0.13
  • 192.168.0.14
  • 192.168.0.17
  • 192.168.0.20

の5つのホストが存在していることがわかります。そして、そのホストのネットワークインターフェースのMACアドレスもすでに知ることができます。
これはのPINGスキャンは単純にPINGを送っているだけですので、そんなに難しくはありませんね。

TCPフルコネクトスキャン

-sTのオプションをつければTCPフルコネクトスキャンを行うことができます。このオプションは、相手コンピュータにSYNパケット(通信開始要求)を送ります。そして、相手サーバから許可(SYN/ACK)パケット送られてきたら、実際にコネクションを張って(ACKパケットを送信)ポートが開いているかを判断します。拒否(RST/ACKパケット)が返ってきたら、ポートが閉じていると判断します。

つまり、これって通常のTCP/IPで通信するときに使う3wayハンドシェイクを行っているということですね。通常の手順ですので、どのサービスが起動しているか、を正確に解析することができます。

ただ、生のパケットをそのまま送っているわけですので、サーバ側のログに綺麗に反映されてしまいます。ログ監査などの際には注意しなければいけません。

通常は、-sTコマンドをつけない場合もこの方式が採用されてスキャンを開始します。
以下の例を見てみましょう。

# nmap example.com/
Starting Nmap 5.51 ( http://nmap.org ) at 2016-10-04 20:01 JST
Nmap scan report for example.com (***.***.***.***)
Host is up (0.39s latency).
rDNS record for ***.***.***.***: **********.***.**.**
Not shown: 994 filtered ports
PORT STATE SERVICE
22/tcp open ssh
25/tcp open smtp
80/tcp open http
995/tcp closed pop3s
3000/tcp closed ppp
8080/tcp closed http-proxy

Nmap done: 1 IP address (1 host up) scanned in 38.84 seconds

このように、ポートの状態とそのサービス名が表示されます。

ポートの状態は以下に分類することができます。
 

open アプリケーションがTCPコネクションやUDPパケットをアクティブに受け入れている状態
closed アクセス可能(Nmapのプローブパケットを受信したり応答したりする)だが、そこで受信待機しているアプリケーションはない状態
filtered パケットフィルタのせいで、プローブがポートまで到達できずにポートが開いているかどうかを判別できない状態
unfiltered ポートにはアクセス可能だが、そのポートが開いているか閉じているかを判別できない状態
open|filtered 対象のポートが開いているかフィルタ処理されているかを判別できない状態
closed|filtered ポートが閉じているかフィルタ処理されているかを、判別できない状態

また-sVとオプションをつけると、サービスのバージョンまで表示されてしまいます。そのままですと全てのポートを解析するので、時間がかかるので -p でポートを指定しておくと良いでしょう。

$ nmap -sV -p 8080 example.com          
Starting Nmap 7.12 ( https://nmap.org ) at 2016-10-05 23:25 JST
Nmap scan report for XXXXX
Host is up (0.00033s latency).
PORT     STATE SERVICE VERSION
8080/tcp open  http    nginx 1.10.0

これで、脆弱性のあるバージョンを使っていないか、どうかを知ることができますね。

OS検出

これだけではありません。Nmapがすごいのはなんと簡単にOSを検出してしまうことです。-Oオプションを使うことで、相手のOSまで同定してしまうことができます。

nmap www.example.com -O
Starting Nmap 7.12 ( https://nmap.org ) at 2016-10-05 23:28 JST
Nmap scan report for XXXXXXX
Host is up (0.022s latency).
rDNS record for 153.126.200.173: se-cure.info
Not shown: 997 filtered ports
PORT     STATE SERVICE
80/tcp   open  http
443/tcp  open  https
3306/tcp open  mysql
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Aggressive OS guesses: Linux 3.10 - 4.1 (92%), Linux 3.2 - 4.4 (92%), Linux 3.18 (90%), Crestron XPanel control system (90%), Linux 3.1 (87%), Linux 3.2 (87%), HP P2000 G3 NAS device (87%), AXIS 210A or 211 Network Camera (Linux 2.6.17) (87%), Linux 3.11 (86%), Linux 3.12 (86%)
No exact OS matches for host (test conditions non-ideal).

OS detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 12.69 seconds

今回の例ではLinuxのカーネルバージョンが予想確率とともに表示されています。対象がどのようなOSなのかを400種類に及ぶOSやそのバージョンから同定してくれます。

まとめ

ここでは紹介しきれませんが、まだまだnmapの使い方があります。セキュリティというよりはもはや攻撃なのでは、と呼ばれる機能もあるので、すべては紹介できませんが、以下の公式サイトのリファレンスにヒントとなるような情報がたくさんあるので興味がある人は是非目を通しておきましょう。

  • このエントリーをはてなブックマークに追加
  • Pocket