某所のブログ用に記事を書きましたが、無言でrejectされていたので、一部改変版をこちらで公開します。
; 採用しないならその旨を言って欲しい。
そもそもOVALとは
OVALとは「セキュリティ検査言語」と呼ばれる、コンピュータのセキュリティ設定状況を検査するための言語です。ベンダごとに異なりますが、自動で脆弱性を検査するための情報が記載されています。
- Open Vulnerability Assessment Language
- セキュリティ設定共通化手順(SCAP: Security Content Automation Protocol)で定義された、XMLベースで機械的に処理が可能な、脆弱性検査用の言語
- OVALを用いてコンピュータをスキャンすることで、脆弱性の 対応済み/未対応 を検査することが可能
- 以前はMITRE社が管理していたが、今はCenter for Internet Security(CIS)社に移管されている
OVALのデータは、CIS社で公開されています。
- OVALのダウンロード
- OVALのスキーマは、3種類
- v5.11.2, v5.11.1 の v5.11系
- v5.10 系
- すべて 条件付きながら、商用でも利用可能
- Platformごとに、OVALデータが存在します
- Linuxのディストリビューション、Windows OSのバージョン、Cisco asa/ios/ios-xe/pix, Vmware esx各バージョン、など
- 自分が必要なPlatformのOVALのみをダウンロードして利用可能
OVALは、SCAPと呼ばれる「セキュリティ設定共通化手順(Security Content Automation Protocol)」の中の標準仕様の一つです。SCAPは、情報セキュリティ対策の自動化/標準化を目指したもので、機械的に処理ができることを目指したものです。同様に定義されている仕様で有名なものは、以下のものがあります。
- CVE:共通脆弱性識別子
- CPE:共通プラットフォーム一覧
- CVSS:共通脆弱性評価システム
- OVALついては、今後のテックブログで情報を共有できたらと思います。
このOVAL情報、Windowsも(一応)検査することができるので、そちらをご紹介したいと思います。
Windowsで使えるOVALインタープリタ
OVALで脆弱性を検査するためには、インタープリタと呼ばれる、OVALを解釈して検査するプログラムが必要になります。
現状で利用できるものは以下の3種類のようです。
-
OVALdi
- オープンな、OVALインタプリターのリファレンス実装です。
- zipを回答するだけで実行ファイルが出てくるため、一番簡単に利用できます。
- 最終更新が2014年と古く、少し問題がある
- 英語版以外のWindowsだと、スキャン結果に問題がある可能性があるようだ。
- 古めのOVALスキーマしか使えない(後述)
-
jOVAL
- GPL v2.1で配布されています
- javaが必要になるようです。スキャンのためにjavaを入れるのは、ちょっとハードルが高いかもしれません。
-
OpenSCAP
- SCAPのオープンな実装です
- Linux関連では、パッケージとして配布されているので、簡単に利用可能です
-
yum install openscap-scanner
やapt-get install libopenscap8
などで導入可能
-
- mingw32を使ったクロスコンパイルをすることでOVALスキャンができる、らしいです。
- 私は1週間ほど試していますが…クロスコンパイルができません。
- Windowsで使うには、難易度が高いようです。
今回は OVALdi を使ってみます。
試してみる
OVALでスキャンするまでの流れは、以下のとおりです。
- OVALdiをインストールする
- (OVALdiに必要な)Microsoft Visulal C++ 2010 再配布版をインストールする
- Windows用OVALをダウンロードする
- OVALdiでスキャンする
- OVALでのスキャン結果を確認する
OVALdiをインストールする
OVALdiのサイトから、一番新しそうなインストーラをダウンロードしインストールします。
- ovaldi-5.10.1.7-x64-setup.exe か ovaldi-5.10.1.7-setup.exe
- このファイルを実行するとWiZipの解凍画面となるので、デフォルトのまま Unzip をする
-
C:/Program Files/OVAL/ovaldi-5.10.1.7-x64
に解凍される - このまま実行すると、MSVCR100.dllがない、としてエラーになる
-
OVALdiが必要とする「Microsoft C++ 2010 再配布版」をインストールします。
これで実行環境の準備は完了しました。
Windows用OVALをダウンロードする
CISのサイトから、利用するWindows OSに対応したOVALファイルをダウンロードします。
- ダウンロードサイトを開く
- "Click an OVAL version and class.."部分のVersions下で、 v5.10 を選択する
- OVALdiはv5.10までしか解釈できません。デフォルトではv5.11.2のOVALが選択されているので、注意が必要です。
- WindowsServer2012R2の場合、"microsoft_windows_server_2012_r2.xml"というファイル名になります。
- OVALdiはv5.10までしか解釈できません。デフォルトではv5.11.2のOVALが選択されているので、注意が必要です。
- ダウンロードしたファイルを、OVALdiと同じディレクトリに配置する
-
C:/Program Files/OVAL/ovaldi-5.10.1.7-x64
等に移動させます。
-
OVALdiでスキャンする
コマンドプロンプトを起動し、スキャンを行います。
- コマンドプロンプトを開く
- 管理者権限は不要です
- OVALdiのディレクトリに移動する
- OVALdiでスキャンを行う
-
ovaldi -m -o <OVALのXMLフィアル名>
を実行します - MSVCR100.dllがない旨のエラーが出ている場合、MS VC++ 再配布版のインストールが行われてないので、インストールをしてください
- スキャンは5-10分ほどかかります
-
無事にスキャンが終わると、カレントディレクトリに以下のファイルが生成されます。
- results.html
- results.xml
自動処理するなら、xmlを使ってください。
OVALでのスキャン結果を確認する
今回は、結果のHTMLファイルを見てみましょう。
WindwosServer2012R2で、全くアップデートをしていないものをスキャンしました。
おおよそ以下のような内容になっています。
- ID
- OVALで定義している、脆弱性エントリ(見る必要はない)
- Result
- 脆弱性があったかのフラグ
- trueは脆弱性が 残っている 状態
- Class
- 対象の分類、のようだ
- 脆弱性検査はvulnerability、アプリケーションやOSの同定はinventory、となっている
- Reference ID
- 該当するIDを表示
- vulnerabilityの場合は CVE、inventoryの場合は CPEの表示、となっている
- Title
- 概要の表示
- WindowsのOVALの場合は、脆弱性の内容が記載されている
-
Internet Explorer Memory Corruption Vulnerability - CVE-2014-1765 (MS14-037)
など
-
OVAL内容にはOracle JavaやMicrosoft Officeも含まれているため、対象のアプリケーションがインストールされていると、それを検知することができます。
この記事書いている時点でのOVAL情報だと、OVAL上には6615件のテストが書いてあるようです。
色々使ってみましたが、HTML表示を見る限り、サマリは正しいが 詳細行が正しくない、という状況が発生するようです。
- OVAL Results Generator Information の総数は正しい
- OVAL Sytem Characteristics Generator Information のテーブルが、数が足りない/Result:trueが消える?事があるようだ
結論
OVAL情報でのスキャンは、WSUSやWindowsUpdateと異なり、CVEベースでの残存脆弱性を確認することができます。
しかしながらOVALインタープリタの選択肢が少なく、少なくともOVALdiは日本語環境のWindowsでは正常でない「場合」もあるようです。
OVALを使うことで、既存のWSUSでの「適用管理」以外のセカンドオピニオンとして、Windowsでの「残存脆弱性管理」ができそうです。但し、OVALインタープリタを選ぶ必要がありそうなのすが、一応は OVALdiも利用できそうかと思います。
また、WindwosもCVEベースの脆弱性管理ができると、他のLinux等の脆弱性管理ツールとまとめて管理ができるようになる可能性があるので、今後もう少し調べていこうかと思います。