OSSのシステム脆弱性スキャン・検査ツール「OpenVAS」「Vuls」「OpenSCAP」を使ってみよう

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

はじめに

前回に引き続き、今回もシステムの脆弱性スキャン・検査ツールを紹介していきます。今回はOSSのOpenVAS、Vuls、OpenSCAPについて簡単に概略を解説し、機能比較を行います。

OpenVASの概略

OpenVASは、前回で解説したNessusがクローズドソースになった後、これまでに公開されていたOSSのソースコードをベースに開発が続けられています。基本的な構成はNessusと同じエージェントレスの脆弱性検査ツールで、2017年11月時点での最新のバージョンはOpenVAS-9です。

図1:OpenVASのWebサイト。ここからダウンロードできる

Linux版のOpenVASでは各ディストリビューション用のパッケージが用意されているので、そちらを用いた方が簡単にインストールできます。今回、筆者はUbuntu 17.10-desktopにUbuntu用のOpenVAS 9をインストールしました。インストールはhttps://launchpad.net/~mrazavi/+archive/ubuntu/openvasに記載されている手順に従って簡単に行えるため、ここでは解説を割愛します。

図2:Ubuntu用のOpenVASインストール解説(英語)

Vulsの概略

Vulsは「VULnerability Scanner」の略で、Linux/FreeBSD向けの脆弱性スキャンツールです。OpenVASと同じエージェントレスの脆弱性検査ツールで、Ubuntu、Debian、CentOS、Amazon Linux、RHELに対応しています。また、通常のセットアップ方法以外にもDockerコンテナを用意したり、Chefでのレシピを配布したりしているため、導入は非常に簡単です。

Vulsの簡単な説明はhttps://thinkit.co.jp/article/10092の記事を参考にすると良いでしょう。また、Vulsのダウンロードとインストールに関しては、VulsのGitHub上にあるREADMEで分かりやすく解説されています。

図3:VulsのGitHub

今回、筆者はCentOS Linux release 7.4.1708(Minimal install)を使用し、ホスト名は“vulstest”としました。VulsはREADMEの手順でインストールしています。こちらも簡単にインストールできるため解説は割愛します。

OpenSCAPの概略

2001年9月の同時多発テロ事件以来、米国政府はセキュリティ対策を見直し、2002年12月にFISMA(Federal Information Security Management Act:連邦情報セキュリティ管理法)が成立しました。これにより、政府及び関係機関のセキュリティ強化(CSO(Chief Security Officer):情報セキュリティ責任者の設置等)と、年に1回のレビュー及び報告書の提出が義務付けられました。

しかし、この作業には膨大な時間がかかるため、NIST(National Institute of Standards and Technology:米国国立標準技術研究所)がセキュリティ対策の自動化と標準化を目指すSCAP(Security Content Automation Protocol:セキュリティ設定共通化手順)を開発しました。

SCAPはセキュリティ対策を自動化するため、共通の脆弱性識別子(CVE)や共通のセキュリティ設定一覧(CCE)など、システム状態の検査に利用するOVAL、XCCDFというファイル(XML)により構成されています。

現在、SCAPは政府及びその関係機関だけにとどまらず、民間企業でのセキュリティ検査にも利用されています。

OpenSCAPは、このSCAPを用いてOSのシステム設定や脆弱性への対応状況などを検査するために必要なツール及び関連ライブラリを作成するオープンソースのプロジェクトです。CentOS7ではOpenSCAPプロジェクトで開発されたopenscapコマンド及びOVAL/XCCDFファイルを用いて、そのシステムがどのようなセキュリティ設定になっているか、どこまで脆弱性対応を行っているかなどをHTMLファイルとして出力できます。

Red Hat Linux/CentOS系のディストリビューションでは標準でOpenSCAP関連のパッケージが用意されています。Debian/Ubuntuなどでも同様にパッケージが標準で用意されています。

図4:OpenSCAPのサイト

OpenVAS、Vuls、OpenSCAPの機能比較

OpenVAS、Vuls、OpenSCAPの概略を確認できたところで、各ツールの機能比較を行ってみましょう。以降では同じスキャン対象を準備し、各ツールでのスキャン結果を比較します。

スキャン対象の準備

今回の機能比較では、スキャン対象として下記のものを用意します。

  • 環境:VMWareゲストOS
  • ホスト名:vulntest.localtest(172.16.148.159)
  • OS:CentOS 7.2-1511(最小インストール)/最新版にアップデート済み
  • 追加パッケージ:yum-utils(vulsのDeep Scanで必要なため)
  • ユーザ:下記の3つを準備
    root(パスワード:password)
    vulnuser(パスワード:vulnuser)
    scan(パスワード:scan)
  • アプリケーション:下記のものを用意
    CentOSパッケージのものをインストール
    • bind(9.9.4-29):バージョン固定
    ソースからインストール
    • httpd-2.4.23.tar.gz
    • openssl-1.0.2h.tar.gz
  • IDS(侵入検知):snort-2.9.11-1.x86_64
    (http://www.snort.orgからダウンロードしたRPMパッケージをインストール)
    • RuleSet:community-rules

OpenVASによるスキャンの実施

今回のOpenVAS(スキャナー)の環境は、

HW:VMWareゲスト
OS:Ubuntu Linux release 7.4.1708(Core) Minimal install

です。OpenVASのインストール後にFirefox等でhttps://localhost:4000に接続すると、Web UIが開いてスキャンを行えるようになります。ログインIDとパスワードは、インストール直後のデフォルトでいずれもadminです。

図5:OpenVASのWeb UI

ログインするとダッシュボードが開き、過去にスキャンしたネットワークのトポロジ情報や、その時点でのCVE情報が表示されます。

図6:OpenVASのダッシュボード

スキャンを行うには、画面上部のメニューから「Scans」→「Tasks」を選択します。

図7:スキャンタスクの情報

過去のスキャンタスクの情報が表示されます。ここで外部からのImmediate Scanを行うには、左上の紫色のアイコンにマウスポインタを合わせて「Task Wizard」を選びます。ssh/sambaなどのユーザでログインし、内部を細かくスキャンするには「Advanced Task Wizard」を選択します。

図8:Task Wizardの選択

1. Immediate scanによるスキャンの実施
①一番簡便なスキャン方法です。スキャン対象をホスト名またはIPアドレスで指定し「Start Scan」をクリックします。

図9:Immediate scanの登録

②Task名が“Immediate Scan of XXX”で登録され、すぐにスキャンが実行されます。Statusが「Requested」→「xx%」→「Done」と変わっていきます。

図10:Immediate Scanタスクの登録状況

2. Advanced scanによるスキャンの実施
①最初に画面上部のメニューから「Configuration」→「Credential」を選択して、ssh/sambaで接続する際に使用するログイン情報を登録しておきます。

図11:Credentialでsshユーザ情報の登録(1)

図12:Credentialでsshユーザ情報の登録(2)

図13:Credentialでsshユーザ情報の登録(3)

②Task NameとScan Config、Start time等を選択できます。①で作成したログイン情報を元にSSHでログインし、内部からのスキャンを実行します。

図14:Advanced Task Wizard画面

③スキャンタスクが登録されます。1の時と同様に登録したTask名でスキャンが実行され、Statusが「Requested」→「XX%」→「Done」と変化していきます。

図15:Advanced Scanタスクの情報

Vulsによるスキャンの実施

VulsではSSH接続で鍵認証を使用してログインし、リモートスキャンするための内部情報を取得します。パスワードによるログインはサポートされていません。この手順もVulsのGitHubのREADMEの記載を参考にしてください。簡単に行えるため、ここでは解説を割愛します。

今回はスキャン対象のサーバを“vulscan”とし、vulscan上のスキャンユーザ(scan)に外部から公開鍵を使ってログインできるようにしています。vulstest上のユーザは“vuls”としています。

また、Vulsでスキャンするにはconfig.tomlが必要になります。今回は、以下のようなconfig.tomlを使用します。

[vuls@vulstest ~]$ cat config.toml
[servers]

[servers.vulntest]
host = "172.16.148.157"
port = "22"
user = "scan"
keyPath     = "/home/vuls/.ssh/id_rsa"

1. Fast ScanによるScanの実施
VulsをインストールしたPCからリモートのvulntestを「Fast Scan」します。この場合はコマンドで“vuls scan [config.tomlの[servers.xxx]で指定したxxx部分]”を実行することでスキャンできます。

今回はvulsユーザで作成したid_rsaキーでパスフレーズを指定したため、必要な箇所で逐次パスフレーズを聞かれています。本格的な運用時には煩雑になるため、運用上はパスフレーズを空にしておいた方が(セキュリティは下がりますが)良さそうです。

[vuls@vulstest ~]$ vuls scan vulntest
[Oct 30 10:15:22]  INFO [localhost] Start scanning
[Oct 30 10:15:22]  INFO [localhost] config: /home/vuls/config.toml
[Oct 30 10:15:22]  INFO [localhost] Validating config...
[Oct 30 10:15:22]  INFO [localhost] Detecting Server/Container OS... 
[Oct 30 10:15:22]  INFO [localhost] Detecting OS of servers... 
Enter passphrase for key '/home/vuls/.ssh/id_rsa': 
--省略--
 [Oct 30 10:15:48]  INFO [localhost] Scanning vulnerabilities... 
[Oct 30 10:15:48]  INFO [localhost] Scanning vulnerable OS packages...

One Line Summary
================
vulntest	centos7.4.1708	5 updatable packages

To view the detail, vuls tui is useful.
To send a report, run vuls report -h.

2. Deep ScanによるScanの実施
VulsをインストールしたPCからリモートのvulntestを「Deep Scan」します。今回はCentOSを使用しているため、リモートのvulntest上に“yum-utils”パッケージが入っている必要があります。事前にインストールしておきましょう。また、リモートのvulntest上では(OSによって)root権限でコマンドが発行されるため、気をつけてください。

スキャンを行うには、コマンドで“vuls scan -deepscan [config.tomlの[servers.xxx]で指定したxxx部分]”を実行します。

3. スキャンレポートの確認
Vulsのスキャン結果は“vuls tui”としてTUI(テキストベース)で確認できます。また、JSON形式でエクスポートして“VulsRepo”というWeb UIで確認することも可能です。このVulsRepoもGitHubで公開されており簡単にインストールできるため、手順の解説は割愛します。

OpenSCAPによるスキャンの実施

OpenSCAPではスキャン対象にインストールしたCUIツール(oscap)を使用してスキャンを実行します。リモートからスキャンする“oscap-ssh”というツールもありますが、このツールを使用する場合でも最終的にはスキャン対象にoscapをインストールしておくことが必須となります。

①oscapはCentOS等では標準のyumレポジトリで“openscap-utils”として提供されています。yumコマンドでインストールします。

②OpenSCAPではXCCDF/OVALファイルでスキャン設定が記述されています。一般的なセキュリティやPCI-DSS準拠の設定になっているかなど、多彩な設定が用意されています。今回はRed Hat社からダウンロードできるOVALファイルを元にパッケージの更新状況やCVE情報などを確認します。ただし、現在ではCentOSのOVALファイルが提供されていないため、OpenSCAPに関してはRHELでの結果を参考にして比較することにします。

スキャン結果はscap-workbenchというGUIツールで確認するか、oscapコマンドでHTML形式にして出力することもできます。

各ツールの機能とスキャン結果の比較

下記に、各ツールのスキャン結果を出力したWeb UI画面と、それぞれの比較表を示します。なお、OpenSCAPではCentOS用のOVALファイル(脆弱性定義ファイル)が用意されていないため、便宜的にRHELのスキャン結果を添付しています。

図16:OpenVASのスキャン結果(1)(Web UI)

図17:OpenVASのスキャン結果(2)(Web UI)

図18:Vulsのスキャン結果(1)(Web UI)

図19:Vulsのスキャン結果(2)(Web UI)

図20:OpenSCAPのスキャン結果(1)(HTML)

図21:OpenSCAPのスキャン結果(2)(HTML)

1. ツールの特徴
まず、各ツールのコンセプトの違いが結果に大きく表れています。OpenVAS(Nessusを含む)は実際にスキャン対象に攻撃して脆弱性を検出します。パッケージでインストールしたか否かに関わらず外部にサービスを露出しているソフトウェアに関しては一律で脆弱性を確認するため、IDS等があった場合にはスキャンが検出されてしまいます。また、単にサーバ系ではなくネットワーク機器やストレージ機器も検出対象に含まれます。

一方、VulsとOpenSCAPではシステム管理者がスキャン対象にそれぞれのOS内でコマンドを発行(Vulsの場合はssh経由、OpenSCAPの場合はoscap経由で)します。その際にパッケージの有無を確認して脆弱性情報に紐づけるため、パッケージでインストールされているソフトウェアがスキャン対象になります。コマンド実行はroot等で行われ、IDS等では検出されません。また、このような動作からスキャン対象はサーバ等のOSに限られ、ネットワーク機器やストレージ機器等は対象外となります。

【補足】Vulsに関してはCPEが割り当てられているソフトウェア、Network機器のファームウェアなどは検知が可能です(【参考】https://github.com/future-architect/vuls#usage-scan-vulnerabilites-of-non-os-packages)。そのため、コンパイルして入れたものやプログラミング言語のライブラリなどもCPEが定義されていれば検知が可能になります。また、OWASP Dependency-Checkと組み合わせることでライブリのCPEを自動で推測すればCPE指定の手間も省けます。さらに、Vulsでは脆弱性情報の情報源としてJVNの情報を出せるため、容易に日本語化も可能となっています。

2. スキャン結果
1でも説明した通り全ソフトウェアの脆弱性を検出する場合にはOpenVASを使用する必要があります。Vuls/OpenSCAPはパッケージでインストールしたもののみが検出対象になります。

3. Web UI/GUI
Web UI/GUIに関してOpenVASはその中で閉じているため、ほぼ全てのWeb UIが網羅されており管理しやすいツールとなっています。Vulsはコンポーネント毎に独立して作成されているため、Web UI/GUIを別途インストールする必要がありますが、出力結果を他のツールと簡単に連動させることができます。OpenSCAPはCUIツールとGUIを別途インストールする必要がありますが、Red Hat Satellite(OSS版はtheForeman)と連携が可能です。

4.脆弱性スキャン
OpenVAS/Vulsが「インストールされているソフトウェアが脆弱性のあるバージョンか」を検査するのに対し、OpenSCAPは「XMLで記載されている脆弱性のバージョンがシステムにインストールされているか」を検査します。そのため、OpenVAS/Vulsの出力結果は見やすいのに対し、OpenSCAPでは不要なものも出力されてしまうため少し見づらくなります。

5. 規格標準の対応は
OpenVAS/Vulsは元々脆弱性スキャンツールのため、検査対象が規格に対応しているかをスキャンするには多少の手間をかける必要があります。一方、OpenSCAPは元々規格に対応しているかをスキャンするツールのため、検査対象が規格に合っているかのスキャンは容易です。また様々な規格のテンプレートが充実しています。下記にOpenSCAPによるPCIDSS適合かのスキャン結果を示します。

図22:OpenSCAPによるPCIDSSに適合のスキャン結果(1)

図23:OpenSCAPによるPCIDSS適合のスキャンの結果(2)

おわりに

今回は、OSSの脆弱性スキャン・検査ツールとしてOpenVAS、Vuls、OpenSCAPの3つを紹介し、機能比較を行いました。これらは同じ「脆弱性検査ツール」と言ってもそれぞれ特徴があり異なる部分も多くあります。実際の運用では、これらのツールを組み合わせて使用されることをお勧めします。

サイオステクノロジー株式会社 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メルマガ会員のサービス内容を見る

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