OSSのシステム脆弱性スキャン・検査ツール「OpenVAS」「Vuls」「OpenSCAP」を使ってみよう
はじめに
前回に引き続き、今回もシステムの脆弱性スキャン・検査ツールを紹介していきます。今回はOSSのOpenVAS、Vuls、OpenSCAPについて簡単に概略を解説し、機能比較を行います。
OpenVASの概略
OpenVASは、前回で解説したNessusがクローズドソースになった後、これまでに公開されていたOSSのソースコードをベースに開発が続けられています。基本的な構成はNessusと同じエージェントレスの脆弱性検査ツールで、2017年11月時点での最新のバージョンはOpenVAS-9です。
Linux版のOpenVASでは各ディストリビューション用のパッケージが用意されているので、そちらを用いた方が簡単にインストールできます。今回、筆者はUbuntu 17.10-desktopにUbuntu用のOpenVAS 9をインストールしました。インストールはhttps://launchpad.net/~mrazavi/+archive/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で分かりやすく解説されています。
今回、筆者は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などでも同様にパッケージが標準で用意されています。
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です。
ログインするとダッシュボードが開き、過去にスキャンしたネットワークのトポロジ情報や、その時点でのCVE情報が表示されます。
スキャンを行うには、画面上部のメニューから「Scans」→「Tasks」を選択します。
過去のスキャンタスクの情報が表示されます。ここで外部からのImmediate Scanを行うには、左上の紫色のアイコンにマウスポインタを合わせて「Task Wizard」を選びます。ssh/sambaなどのユーザでログインし、内部を細かくスキャンするには「Advanced Task Wizard」を選択します。
1. Immediate scanによるスキャンの実施
①一番簡便なスキャン方法です。スキャン対象をホスト名またはIPアドレスで指定し「Start Scan」をクリックします。
②Task名が“Immediate Scan of XXX”で登録され、すぐにスキャンが実行されます。Statusが「Requested」→「xx%」→「Done」と変わっていきます。
2. Advanced scanによるスキャンの実施
①最初に画面上部のメニューから「Configuration」→「Credential」を選択して、ssh/sambaで接続する際に使用するログイン情報を登録しておきます。
②Task NameとScan Config、Start time等を選択できます。①で作成したログイン情報を元にSSHでログインし、内部からのスキャンを実行します。
③スキャンタスクが登録されます。1の時と同様に登録したTask名でスキャンが実行され、Statusが「Requested」→「XX%」→「Done」と変化していきます。
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のスキャン結果を添付しています。
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適合かのスキャン結果を示します。
おわりに
今回は、OSSの脆弱性スキャン・検査ツールとしてOpenVAS、Vuls、OpenSCAPの3つを紹介し、機能比較を行いました。これらは同じ「脆弱性検査ツール」と言ってもそれぞれ特徴があり異なる部分も多くあります。実際の運用では、これらのツールを組み合わせて使用されることをお勧めします。
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- システムの脆弱性スキャン・検査ツール「Nmap/Zenmap」「Nessus」を使ってみよう
- オフラインマルチ(ウイルス)スキャナ「Malice」「IRMA」を使ってみよう
- 脆弱性検知ツール「Vuls」の開発者に聞いたOSSをバズらせる極意
- SUSE、サーバ管理ソリューションの最新版、「SUSE Manager2.1」を発表
- 開発チームの環境をAnsibleで一括構築しよう
- Serverspecの概要からインストールまで
- ownCloud導入はじめの一歩(仮想マシンイメージとCentOS 7のインストール手順)
- Ansibleのインストールとサンプルコードの実行
- サイバートラスト、ソフトウェアの脆弱性管理を自動化・効率化する脆弱性管理ソリューション「MIRACLE Vul Hammer」の新版を発表
- サイバートラスト、ソフトウェアの脆弱性管理を自動化・効率化する脆弱性管理ソリューション「MIRACLE Vul Hammer」の新版を発表