システムの脆弱性スキャン・検査ツール「Nmap/Zenmap」「Nessus」を使ってみよう
はじめに
今回からは「スキャン・検査ツール」というカテゴリで、大きく分けて下記の2つについて、それぞれ解説していきます。
- システムの(脆弱性等を)スキャンするツール
- ソフトウェア・アプリケーションの脆弱性をスキャンするツール
今回は、1の「システムの脆弱性等をスキャンするツール」について、簡単に紹介します。
システムの情報/脆弱性検査ツール
システムの情報や脆弱性を検査するツールにもいろいろあります。昔からあるものとしては、
- Nmap/Zenmap
- Nessus
でしょう。また、最近OSSで提供されている代表的なシステムの脆弱性検査ツールで注目が集まっているものとしては、
- OpenVAS
- openSCAP
- Vuls
があります。今回はまずNmap/ZenmapやNessusの概略を解説し、次回でOpenVAS/openSCAP/vulsの基本的な機能の解説とツールの比較を行います。
Nmap/Zenmapの概略
Nmapはこの分野(リモートからの情報収集ツールの分野)ではかなり古く、1997年9月に最初のバージョンがリリースされており(2017年9月でちょうど20年目を迎えました)、皆様もよくご存じのツールだと思います。もともと空いているポートをスキャンして起動しているサービスを検索するようなツールでしたが、現在はさらに機能拡張されており、色々な検出を行なえるようになっています。
Nmapの開発元はhttp://www.nmap.orgで、2017年時点の最新バージョンは7.60です。また、大抵のLinuxディストリビューションではパッケージでNmapを提供しているため、一般的にはそちらが利用されていると思われます。
Nmap/Zenmapを実際に動かしてみよう
まずは、Linuxディストリビューションに付属しているnmap 7.40を使って、テスト用のサーバをスキャンしてみましょう。
検索対象のPCには、以下のものを使用します。
OS:CentOS 7.3(更新なし)
App:Samba、PostgreSQL、SSH、Apache、Tomcat
HW:VMWare Guest
IP:172.16.148.130
ホスト名:cent7enc.localdomain
また、Nmapを動かすPCには以下のものを使用します。
OS:Debian 9.0
App:nmap 7.40
IP:172.16.148.1
User:jsosug
Nmapで検索対象PCをスキャンする
Nmapには非常にたくさんのオプションがあり、用途によって使い分けることができます。使用可能なオプションは”--help”を付けて実行することで表示されます。ここで、いくつかのオプションを紹介します。
- Nmapでオプションを用いずに検索対象PCを指定すると、検索対象のPC上で起動して接続を待っているポートの情報を確認できます。
- “-A”オプションを用いると、様々な接続を試しながらスキャン対象のOSを検出できます。この結果を見ると、それぞれのサービスについて
①SSHでは使用しているhostキー
②Apacheではヘッダー情報
③SambaではバージョンとSMBドメイン情報
など、非常に細かい情報を取得していることがわかります。
- TCPフルコネクトスキャンとTCPハーフコネクトスキャン(いわゆるステルススキャン)の違いを確認します。TCPフルコネクトスキャンでは、3Wayハンドシェイクを用いてポートが空いているかどうかを判定します。この場合はコネクションが確立してしまうため、検索対象PC側のログに何らかの証跡が残ってしまう可能性があります。
一方、TCPハーフコネクトスキャンでは、3Wayハンドシェイクの最後の送信を行わずに接続可能かどうかのみを調べていくため、検索対象PC側のログに証跡が残りにくくなります(もっとも、検索対象PCのiptablesをうまく設定したり、snortなどのIDSを使用したりすれば、スキャンの証跡を残すことは可能です)。
ちなみに、あえてオプションを付けない場合、nmapはデフォルトでTCPハーフコネクトスキャンを使用します。
確認として、検索対象PC側のSambaのログレベルをDebugレベル(log level 3)に設定してみましょう。/etc/samba/smb.confにlog levelを加えてsmb/nmbを再起動します。
- この状態で”-sT”オプションを用いて検索対象PCをTCPフルコネクトスキャンすると、/var/log/samba/log.smbdに(エラーメッセージではありますが)何らかの接続が試みられたという形跡が残ります。
- 一方、”-sS”オプションを用いて検索対象PCをTCPハーフコネクトスキャンすると、/var/log/samba/log.smbdには何も表示されません。
- この状態で”-sT”オプションを用いて検索対象PCをTCPフルコネクトスキャンすると、/var/log/samba/log.smbdに(エラーメッセージではありますが)何らかの接続が試みられたという形跡が残ります。
- Nmapは単に「どのポート番号が空いているのか」からサービスを推定するだけでなく、実際にサービスのバージョンを確認する事で、ポート番号をずらして動かしているサービスも検知できます。例として、検査対象PCのApacheを”Port 23(telnet)”で動くように変更した場合のスキャン結果を見てみます。
(ア) /etc/httpd/conf/httpd.confを修正して、httpがPort 23(通常はtelnet)でListenするようにする
(イ) Nmapで通常のポートスキャンを行うと、telnet(Port 23)が空いていることがわかる
(ウ) Nmapで”-sV”オプションを用いてサービスを確認すると、Port23で動作しているのは”Apache”だとわかる
(エ) もちろん、前述の”-A”オプションでもApacheを検出できる
Zenmapで検索対象PCをスキャンする
続いて、今度はZenmapで検索対象のPCをスキャンしてみましょう。
Zenmapはnmapのフロントエンドで動くGUIです。できることはnmapと同じですが、GUIで操作できるのがメリットです。
- 一般ユーザでzenmapを起動すると、特権がないためいくつかのオプションが使えない旨が表示されます。
- GUIでコマンドを指定してスキャンを実行します。実行結果は色分けされて見やすくなっています。
- スキャンプロファイルを選ぶことで、実行するコマンドのオプションを変更できます。プロファイルには代表的なものが登録されているため、わかりやすく選ぶことができます。
Nessusの概略
NessusはOSSではなく商用ソフトですが、脆弱性検査ツールとしては最も有名なものであるため、簡単に解説します。
NessusはTenable Network Security社が開発する脆弱性検査ツールです。2005年にNessus3となった際にクローズドソースのライセンスに切り替わり、以降は商用ツールとして開発が続けられています。これに伴い、OSSだったNessusのバージョンを元にした「OpenVAS」がOSSとして開発が続けられています。OpenVASに関しては、次回で解説します。
Nessusの入手方法
Nessusは商用製品ですが、個人用途の場合には無料で使用できます。その際は「Nessus Home」のWebサイトから製品を取得することになります。ただし、16-IPアドレスまでしかスキャンできない等の制限があります。また、インストールにはActivation Codeが必要になるため、Nessus HomeのWebサイトで登録する必要があります。
登録すると、下図のようなメールでActivation Codeが送られてくるので、これを用いてインストールと設定を行います。
Activation CodeはNesussの設定中に使用します。Linuxの場合はRPMやdebでインストールした後にnessusdを起動し、Webブラウザからlocalhostの8834番に接続するとNessusを設定できます。
なお、Nessusはよく知られているツールであるため、ここではインストール方法や使い方の詳細な説明は省きます。
Nessusにはスキャンのテンプレートもたくさん用意されており、PCI-DSSなどの基準に準拠しているかをスキャンするものもあります。標準のネットワークスキャンテンプレートで検索対象PCをスキャンすると、スキャン結果がGUIでわかりやすく表示されます。
おわりに
今回は、システムの情報収集ツールNmap/Zenmapと、脆弱性の検査ツールNessusの2つを紹介しました。
脆弱性検査ツールについては、実際にいくつかOSSのものも出てきています。次回は、OSSの脆弱性検査ツールの機能解説と比較を行います。