システムの脆弱性スキャン・検査ツール「Nmap/Zenmap」「Nessus」を使ってみよう

2017年11月7日(火)
面 和毅

はじめに

今回からは「スキャン・検査ツール」というカテゴリで、大きく分けて下記の2つについて、それぞれ解説していきます。

  1. システムの(脆弱性等を)スキャンするツール
  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”を付けて実行することで表示されます。ここで、いくつかのオプションを紹介します。

  1. Nmapでオプションを用いずに検索対象PCを指定すると、検索対象のPC上で起動して接続を待っているポートの情報を確認できます。

    図1:“nmap [IPアドレス]”の結果

  2. “-A”オプションを用いると、様々な接続を試しながらスキャン対象のOSを検出できます。この結果を見ると、それぞれのサービスについて

    ①SSHでは使用しているhostキー
    ②Apacheではヘッダー情報
    ③SambaではバージョンとSMBドメイン情報

    など、非常に細かい情報を取得していることがわかります。

    図2:“nmap –A [IPアドレス]”の結果(1)

    図3:“nmap –A [IPアドレス]”の結果(2)

  3. TCPフルコネクトスキャンとTCPハーフコネクトスキャン(いわゆるステルススキャン)の違いを確認します。TCPフルコネクトスキャンでは、3Wayハンドシェイクを用いてポートが空いているかどうかを判定します。この場合はコネクションが確立してしまうため、検索対象PC側のログに何らかの証跡が残ってしまう可能性があります。

    一方、TCPハーフコネクトスキャンでは、3Wayハンドシェイクの最後の送信を行わずに接続可能かどうかのみを調べていくため、検索対象PC側のログに証跡が残りにくくなります(もっとも、検索対象PCのiptablesをうまく設定したり、snortなどのIDSを使用したりすれば、スキャンの証跡を残すことは可能です)。

    図4:TCPフルコネクトスキャンとTCPハーフコネクトスキャン

    ちなみに、あえてオプションを付けない場合、nmapはデフォルトでTCPハーフコネクトスキャンを使用します。

    確認として、検索対象PC側のSambaのログレベルをDebugレベル(log level 3)に設定してみましょう。/etc/samba/smb.confにlog levelを加えてsmb/nmbを再起動します。

    図5:/etc/samba/smb.confの[global]に「log level = 3」を加える

    • この状態で”-sT”オプションを用いて検索対象PCをTCPフルコネクトスキャンすると、/var/log/samba/log.smbdに(エラーメッセージではありますが)何らかの接続が試みられたという形跡が残ります。

      図6:“-sT”オプションを指定してスキャン

      図7:/var/log/samba/log.smbdに接続の形跡が残る

    • 一方、”-sS”オプションを用いて検索対象PCをTCPハーフコネクトスキャンすると、/var/log/samba/log.smbdには何も表示されません。

      図8:“-sT”オプションを指定してスキャン

  4. Nmapは単に「どのポート番号が空いているのか」からサービスを推定するだけでなく、実際にサービスのバージョンを確認する事で、ポート番号をずらして動かしているサービスも検知できます。例として、検査対象PCのApacheを”Port 23(telnet)”で動くように変更した場合のスキャン結果を見てみます。

    (ア) /etc/httpd/conf/httpd.confを修正して、httpがPort 23(通常はtelnet)でListenするようにする

    図9:/etc/httpd/conf/httpd.confを修正する


    (イ) Nmapで通常のポートスキャンを行うと、telnet(Port 23)が空いていることがわかる

    図10:ポートスキャンでtelnetが空いていることがわかる


    (ウ) Nmapで”-sV”オプションを用いてサービスを確認すると、Port23で動作しているのは”Apache”だとわかる

    (エ) もちろん、前述の”-A”オプションでもApacheを検出できる

    図11:“-sV”オプションでApacheが検出される

Zenmapで検索対象PCをスキャンする

続いて、今度はZenmapで検索対象のPCをスキャンしてみましょう。

Zenmapはnmapのフロントエンドで動くGUIです。できることはnmapと同じですが、GUIで操作できるのがメリットです。

  1. 一般ユーザでzenmapを起動すると、特権がないためいくつかのオプションが使えない旨が表示されます。

    図12:一般ユーザで起動すると制限事項が表示される

  2. GUIでコマンドを指定してスキャンを実行します。実行結果は色分けされて見やすくなっています。

    図13:Zenmapでスキャンをすると分かりやすく表示される

  3. スキャンプロファイルを選ぶことで、実行するコマンドのオプションを変更できます。プロファイルには代表的なものが登録されているため、わかりやすく選ぶことができます。

    図14:スキャンプロファイルを選ぶと実行するコマンドが変更される

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サイトで登録する必要があります。

図15:Nessus HomeのWebサイト。Activation Codeが申し込める

登録すると、下図のようなメールでActivation Codeが送られてくるので、これを用いてインストールと設定を行います。

図16:NessusのActivation Code

Activation CodeはNesussの設定中に使用します。Linuxの場合はRPMやdebでインストールした後にnessusdを起動し、Webブラウザからlocalhostの8834番に接続するとNessusを設定できます。

図17:RPMによるNesussのインストール

図18:Activation Codeの登録

なお、Nessusはよく知られているツールであるため、ここではインストール方法や使い方の詳細な説明は省きます。

Nessusにはスキャンのテンプレートもたくさん用意されており、PCI-DSSなどの基準に準拠しているかをスキャンするものもあります。標準のネットワークスキャンテンプレートで検索対象PCをスキャンすると、スキャン結果がGUIでわかりやすく表示されます。

図19:スキャンテンプレートが充実している

図20:スキャンの結果がGUIでわかりやすく表示される

おわりに

今回は、システムの情報収集ツールNmap/Zenmapと、脆弱性の検査ツールNessusの2つを紹介しました。

脆弱性検査ツールについては、実際にいくつかOSSのものも出てきています。次回は、OSSの脆弱性検査ツールの機能解説と比較を行います。

サイオステクノロジー株式会社 OSS/セキュリティエバンジェリスト
OSSのセキュリティ専門家として20年近くの経験があり、主にOS系のセキュリティに関しての執筆や講演を行う。大手ベンダや外資系、ユーザ企業などで様々な立場を経験。2015年からサイオステクノロジーのOSS/セキュリティエバンジェリストとして活躍し、同社でSIOSセキュリティブログ(http://security.sios.com)を連載中。
CISSP:#366942 近著:『Linuxセキュリティ標準教科書 』(LPI-Japan)」

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています