Nmapでミドルウエアの脆弱性のチェック

募金担当の高橋です。最近お客様から第三者機関を利用してのセキュリティーチェックを受けることがあります。外部から指摘を受ける前に簡単な脆弱性については、開発者でも指摘することができないかと思い調べてみました。今回使用したアプリケーションは以前に、SSL/TLSの調査に使用したNmapです。Nmapの紹介記事はこちらです。

tech.sanwasystem.com

確認する観点は、開いているポートの確認と、そのポートで動作しているアプリケーションの脆弱性の確認です。

脆弱性確認を行う対象のサーバー

今回脆弱性のチェックを行うのは、www.sample.comのサーバーです。sample.comは以下のWikiで紹介されています。

example.com - Wikipedia

開いているポートの確認

開いているポートの確認には以下のコマンドを使用します。

nmap -F -Pn www.sample.com

結果は以下の通りです。

Starting Nmap 6.47 ( http://nmap.org ) at 2015-07-12 06:03 a/T
Nmap scan report for www.sample.com (173.230.129.147)
Host is up (0.26s latency).
rDNS record for 173.230.129.147: li169-147.members.linode.com
Not shown: 81 closed ports
PORT     STATE    SERVICE
9/tcp    filtered discard
13/tcp   filtered daytime
25/tcp   filtered smtp
79/tcp   open     finger
80/tcp   open     http
111/tcp  filtered rpcbind
119/tcp  open     nntp
135/tcp  filtered msrpc
139/tcp  filtered netbios-ssn
143/tcp  open     imap
445/tcp  filtered microsoft-ds
514/tcp  filtered shell
515/tcp  filtered printer
1900/tcp filtered upnp
2000/tcp open     cisco-sccp
2049/tcp filtered nfs
3128/tcp filtered squid-http
5000/tcp filtered upnp
6001/tcp filtered X11:1

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

各項目の説明は以下の通りです。

これで、対象のマシンで開いているポートが調べられます。

対象のポートで動作しているアプリケーションの情報の取得

80番ポートに対してどのようなアプリケーションが動作しているのか、以下のコマンドで確認を行います。

nmap -v -A  -p80 www.sample.com

結果は以下の通りです。

Starting Nmap 6.47 ( http://nmap.org ) at 2015-07-12 13:03 a/T
NSE: Loaded 118 scripts for scanning.
NSE: Script Pre-scanning.
Initiating Parallel DNS resolution of 1 host. at 13:04
Completed Parallel DNS resolution of 1 host. at 13:04, 0.45s elapsed
Initiating SYN Stealth Scan at 13:04
Scanning www.sample.com (173.230.129.147) [1 port]
Discovered open port 80/tcp on 173.230.129.147
Completed SYN Stealth Scan at 13:04, 1.32s elapsed (1 total ports)
Initiating Service scan at 13:04
Scanning 1 service on www.sample.com (173.230.129.147)
Completed Service scan at 13:04, 6.62s elapsed (1 service on 1 host)
Initiating OS detection (try #1) against www.sample.com (173.230.129.147)
Retrying OS detection (try #2) against www.sample.com (173.230.129.147)
Initiating Traceroute at 13:04
Completed Traceroute at 13:04, 3.11s elapsed
Initiating Parallel DNS resolution of 13 hosts. at 13:04
Completed Parallel DNS resolution of 13 hosts. at 13:04, 8.05s elapsed
NSE: Script scanning 173.230.129.147.
Initiating NSE at 13:04
Completed NSE at 13:04, 5.24s elapsed
Nmap scan report for www.sample.com (173.230.129.147)
Host is up (0.24s latency).
rDNS record for 173.230.129.147: li169-147.members.linode.com
PORT   STATE SERVICE VERSION
80/tcp open  http    Apache httpd 2.2.14 ((Ubuntu))
|_http-favicon: Unknown favicon MD5: D41D8CD98F00B204E9800998ECF8427E
|_http-generator: WordPress 3.6
|_http-methods: No Allow or Public header in OPTIONS response (status code 301)
| http-robots.txt: 2 disallowed entries
|_/wp-admin/ /wp-includes/
| http-title: Sample.com   » Free Samples, Free Product Samples, Produ...
|_Requested resource was http://sample.com/
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Aggressive OS guesses: Linux 2.6.32 - 2.6.39 (95%), Linux 3.2 (95%), Linux 2.6.39 (94%), Linux 3.1 (94%), AXIS 210A or 211 Network Camera (Linux 2.6.17) (94%), Linux 2.6.32 - 3.1 (94%), Linux 3.5 (94%), Linux 3.8 (94%), Linux 2.6.32 - 3.10 (93%), Linux 2.6.32 - 3.9 (93%)
No exact OS matches for host (test conditions non-ideal).
Uptime guess: 6.457 days (since Mon Jul 06 02:06:49 2015)
Network Distance: 14 hops
TCP Sequence Prediction: Difficulty=201 (Good luck!)
IP ID Sequence Generation: All zeros

TRACEROUTE (using port 80/tcp)
HOP RTT       ADDRESS
1   3.00 ms   XXXXX.XX (192.168.10.1)
2   5.00 ms   192.168.1.1
3   ...
4   101.00 ms 172.23.132.129
5   86.00 ms  118.159.128.241
6   92.00 ms  aaaaaaaaaa.xx.xxxxx.ne.jp (111.107.101.97)
7   87.00 ms  bbbbbbbbbb.xxxxx.xxxx.ne.jp (111.87.242.145)
8   187.00 ms ccccccccccc.xxxxx.xxxx.ne.jp (203.181.100.66)
9   280.00 ms dddddddddd.xxxxx.xxxx.ne.jp (111.87.3.74)
10  207.00 ms xe-4-2-0.pao10.ip4.gtt.net (77.67.77.25)
11  252.00 ms xe-5-1-2.atl11.ip4.gtt.net (89.149.128.105)
12  252.00 ms as3595.xe-2-0-5-103.ar1.atl1.us.as4436.gtt.net (69.31.135.54)
13  270.00 ms router2-atl.linode.com (64.22.106.14)
14  259.00 ms li169-147.members.linode.com (173.230.129.147)

NSE: Script Post-scanning.
Read data files from: C:\tool\nmap
OS and Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 50.01 seconds
           Raw packets sent: 70 (4.788KB) | Rcvd: 60 (4.284KB)

結果を説明します。

PORT   STATE SERVICE VERSION
80/tcp open  http    Apache httpd 2.2.14 ((Ubuntu))
|_http-favicon: Unknown favicon MD5: D41D8CD98F00B204E9800998ECF8427E
|_http-generator: WordPress 3.6
|_http-methods: No Allow or Public header in OPTIONS response (status code 301)
| http-robots.txt: 2 disallowed entries
|_/wp-admin/ /wp-includes/
| http-title: Sample.com   » Free Samples, Free Product Samples, Produ...
|_Requested resource was http://sample.com/

80番ポートはhttpのポートが空いていて、Apche2.2.14がアプリケーションとして動いています。ここにOpenSSLやPHP、mod_sslなどのバージョンが記載されている場合があります。そして、このサイトはWordPress3.6で作られているようです。また、robots.txtでwp-adminとwp-includesがインデックスに登録されるのを拒否しています。PHPのバージョンが出力される設定になっている場合には、ここで出力されるようになっています。

Aggressive OS guesses: Linux 2.6.32 - 2.6.39 (95%), Linux 3.2 (95%), Linux 2.6.39 (94%), Linux 3.1 (94%), AXIS 210A or 211 Network Camera (Linux 2.6.17) (94%), Linux 2.6.32 - 3.1 (94%), Linux 3.5 (94%), Linux 3.8 (94%), Linux 2.6.32 - 3.10 (93%), Linux 2.6.32 - 3.9 (93%)

どのOSで動作しているか予想をしています。各OSがどのくらいの可能性があるかを表示します。

まとめ

コマンドの実行方法と、読み方さえ分かれば脆弱性のチェックはできます。ただし、どのミドルウエアのどのバージョンに脆弱性があるかということについては、日々のセキュリティに関するニュースをチェックしないと判断することはできません。システムを安全に保つためには、やはり情報収集と対策のスピードが一番のポイントとなるでしょう。