募金担当の高橋です。最近お客様から第三者機関を利用してのセキュリティーチェックを受けることがあります。外部から指摘を受ける前に簡単な脆弱性については、開発者でも指摘することができないかと思い調べてみました。今回使用したアプリケーションは以前に、SSL/TLSの調査に使用したNmapです。Nmapの紹介記事はこちらです。
確認する観点は、開いているポートの確認と、そのポートで動作しているアプリケーションの脆弱性の確認です。
脆弱性確認を行う対象のサーバー
今回脆弱性のチェックを行うのは、www.sample.comのサーバーです。sample.comは以下のWikiで紹介されています。
開いているポートの確認
開いているポートの確認には以下のコマンドを使用します。
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
各項目の説明は以下の通りです。
PORT 開いているポートの番号です。
STATE 対象のポートの状態です。詳細はhttps://nmap.org/man/jp/man-port-scanning-basics.htmlを参照してください。
SERICE 対象のポートで動作しているサービスです。
これで、対象のマシンで開いているポートが調べられます。
対象のポートで動作しているアプリケーションの情報の取得
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がどのくらいの可能性があるかを表示します。
まとめ
コマンドの実行方法と、読み方さえ分かれば脆弱性のチェックはできます。ただし、どのミドルウエアのどのバージョンに脆弱性があるかということについては、日々のセキュリティに関するニュースをチェックしないと判断することはできません。システムを安全に保つためには、やはり情報収集と対策のスピードが一番のポイントとなるでしょう。