和毅Tweetはじめに前回に引き続き、今回もシステムの脆弱性スキャン・検査ツールを紹介していきます。今回はOSSのOpenVAS、Vuls、OpenSCAPについて簡単に概略を解説し、機能比較を行います。OpenVASの概略OpenVASは、前回で解説したNessusがクローズドソースになった後、これまでに公開されていたOSSのソースコードをベースに開発が続けられています。基本的な構成はNessusと同じエージェントレスの脆弱性検査ツールで、2017年11月時点での最新のバージョンはOpenVAS-9です。図1:OpenVASのWebサイト。ここからダウンロードできるLinux版のOpenVASでは各ディストリビューション用のパッケージが用意されているので、そちらを用いた方が簡単にインストールできます。9をインストールしました。インストールはhttps://launchpad.net/~mrazavi/+archive/ubuntu/openvasに記載されている手順に従って簡単に行えるため、ここでは解説を割愛します。Scanner」の略で、Linux/FreeBSD向けの脆弱性スキャンツールです。Linux、RHELに対応しています。通常のセットアップ方法以外にもDockerコンテナを用意したり、Chefでのレシピを配布したりしているため、導入は非常に簡単です。Vulsの簡単な説明はhttps://thinkit.co.jp/article/10092の記事を参考にすると良いでしょう。Vulsのダウンロードとインストールに関しては、VulsのGitHub上にあるREADMEで分かりやすく解説されています。install)を使用し、ホスト名は“vulstest”としました。VulsはREADMEの手順でインストールしています。こちらも簡単にインストールできるため解説は割愛します。Act:連邦情報セキュリティ管理法)が成立しました。Officer):情報セキュリティ責任者の設置等)と、年に1回のレビュー及び報告書の提出が義務付けられました。Protocol:セキュリティ設定共通化手順)を開発しました。SCAPはセキュリティ対策を自動化するため、共通の脆弱性識別子(CVE)や共通のセキュリティ設定一覧(CCE)など、システム状態の検査に利用するOVAL、XCCDFというファイル(XML)により構成されています。現在、SCAPは政府及びその関係機関だけにとどまらず、民間企業でのセキュリティ検査にも利用されています。OpenSCAPは、このSCAPを用いてOSのシステム設定や脆弱性への対応状況などを検査するために必要なツール及び関連ライブラリを作成するオープンソースのプロジェクトです。CentOS7ではOpenSCAPプロジェクトで開発されたopenscapコマンド及びOVAL/XCCDFファイルを用いて、そのシステムがどのようなセキュリティ設定になっているか、どこまで脆弱性対応を行っているかなどをHTMLファイルとして出力できます。Linux/CentOS系のディストリビューションでは標準でOpenSCAP関連のパッケージが用意されています。Debian/Ubuntuなどでも同様にパッケージが標準で用意されています。図4:OpenSCAPのサイトOpenVAS、Vuls、OpenSCAPの機能比較OpenVAS、Vuls、OpenSCAPの概略を確認できたところで、各ツールの機能比較を行ってみましょう。以降では同じスキャン対象を準備し、各ツールでのスキャン結果を比較します。今回の機能比較では、スキャン対象として下記のものを用意します。UIが開いてスキャンを行えるようになります。ログインIDとパスワードは、インストール直後のデフォルトでいずれもadminです。UIログインするとダッシュボードが開き、過去にスキャンしたネットワークのトポロジ情報や、その時点でのCVE情報が表示されます。図6:OpenVASのダッシュボードスキャンを行うには、画面上部のメニューから「Scans」→「Tasks」を選択します。過去のスキャンタスクの情報が表示されます。Wizard」を選びます。Wizard」を選択します。scanによるスキャンの実施1一番簡便なスキャン方法です。Scan」をクリックします。XXX”で登録され、すぐにスキャンが実行されます。Statusが「Requested」→「xx%」→「Done」と変わっていきます。scanによるスキャンの実施1最初に画面上部のメニューから「Configuration」→「Credential」を選択して、ssh/sambaで接続する際に使用するログイン情報を登録しておきます。time等を選択できます。1で作成したログイン情報を元にSSHでログインし、内部からのスキャンを実行します。Wizard画面3スキャンタスクが登録されます。1の時と同様に登録したTask名でスキャンが実行され、Statusが「Requested」→「XX%」→「Done」と変化していきます。Scanタスクの情報Vulsによるスキャンの実施VulsではSSH接続で鍵認証を使用してログインし、リモートスキャンするための内部情報を取得します。パスワードによるログインはサポートされていません。この手順もVulsのGitHubのREADMEの記載を参考にしてください。簡単に行えるため、ここでは解説を割愛します。今回はスキャン対象のサーバを“vulscan”とし、vulscan上のスキャンユーザ(scan)に外部から公開鍵を使ってログインできるようにしています。vulstest上のユーザは“vuls”としています。Vulsでスキャンするにはconfig.tomlが必要になります。今回は、以下のようなconfig.tomlを使用します。[config.tomlの[servers.xxx]で指定したxxx部分]”を実行することでスキャンできます。今回はvulsユーザで作成したid_rsaキーでパスフレーズを指定したため、必要な箇所で逐次パスフレーズを聞かれています。本格的な運用時には煩雑になるため、運用上はパスフレーズを空にしておいた方が(セキュリティは下がりますが)良さそうです。今回はCentOSを使用しているため、リモートのvulntest上に“yum-utils”パッケージが入っている必要があります。事前にインストールしておきましょう。リモートのvulntest上では(OSによって)root権限でコマンドが発行されるため、気をつけてください。[config.tomlの[servers.xxx]で指定したxxx部分]”を実行します。tui”としてTUI(テキストベース)で確認できます。UIで確認することも可能です。このVulsRepoもGitHubで公開されており簡単にインストールできるため、手順の解説は割愛します。OpenSCAPによるスキャンの実施OpenSCAPではスキャン対象にインストールしたCUIツール(oscap)を使用してスキャンを実行します。リモートからスキャンする“oscap-ssh”というツールもありますが、このツールを使用する場合でも最終的にはスキャン対象にoscapをインストールしておくことが必須となります。1oscapはCentOS等では標準のyumレポジトリで“openscap-utils”として提供されています。yumコマンドでインストールします。2OpenSCAPではXCCDF/OVALファイルでスキャン設定が記述されています。一般的なセキュリティやPCI-DSS準拠の設定になっているかなど、多彩な設定が用意されています。Hat社からダウンロードできるOVALファイルを元にパッケージの更新状況やCVE情報などを確認します。現在ではCentOSのOVALファイルが提供されていないため、OpenSCAPに関してはRHELでの結果を参考にして比較することにします。スキャン結果はscap-workbenchというGUIツールで確認するか、oscapコマンドでHTML形式にして出力することもできます。UI画面と、それぞれの比較表を示します。OpenSCAPではCentOS用のOVALファイル(脆弱性定義ファイル)が用意されていないため、便宜的にRHELのスキャン結果を添付しています。ツールの特徴まず、各ツールのコンセプトの違いが結果に大きく表れています。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が定義されていれば検知が可能になります。Dependency-Checkと組み合わせることでライブリのCPEを自動で推測すればCPE指定の手間も省けます。Vulsでは脆弱性情報の情報源としてJVNの情報を出せるため、容易に日本語化も可能となっています。スキャン結果1でも説明した通り全ソフトウェアの脆弱性を検出する場合にはOpenVASを使用する必要があります。Vuls/OpenSCAPはパッケージでインストールしたもののみが検出対象になります。UIが網羅されており管理しやすいツールとなっています。UI/GUIを別途インストールする必要がありますが、出力結果を他のツールと簡単に連動させることができます。Satellite(OSS版はtheForeman)と連携が可能です。4.脆弱性スキャンOpenVAS/Vulsが「インストールされているソフトウェアが脆弱性のあるバージョンか」を検査するのに対し、OpenSCAPは「XMLで記載されている脆弱性のバージョンがシステムにインストールされているか」を検査します。そのため、OpenVAS/Vulsの出力結果は見やすいのに対し、OpenSCAPでは不要なものも出力されてしまうため少し見づらくなります。規格標準の対応は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)を連載中。ITでは、より付加価値の高いコンテンツを会員サービスとして提供しています。ITのWebサイトにログインすることでさまざまな限定特典を入手できるようになります。VeloCloudが選ばれる理由SD-WANとはなにか。Linuxエンジニア育成への思いF5とNGINXの組み合わせで、サービス公開をよりセキュアに。ITがお届けするポッドキャストです。