本連載では、グローバルスタンダードになっている「SCAP」(セキュリティ設定共通化手順)、およびそれを基にシステム構成や脆弱性の検査を行うためのOSSツール「OpenSCAP」や、その周辺の技術、用語などを紹介する。今回は、OSがCentOS 7かどうかを判定するサンプルで、SCAPの構成要素XCCDFとOVALの構造を理解する。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
OSSセキュリティ技術の会の面和毅です。本連載「OpenSCAPで脆弱性対策はどう変わる?」では、実質的にグローバルスタンダードの「SCAP(Security Content Automation Protocol:セキュリティ設定共通化手順)」、およびそれを基にシステム構成や脆弱(ぜいじゃく)性の検査を行うためのOSS(オープンソースソフトウェア)ツール「OpenSCAP」や、その周辺の技術、用語などを紹介しています。
前回から時間が空いてしまいましたが、今回は前回の続きで、XCCDF(eXtensible Configuration Checklist Description Format:セキュリティ設定チェックリスト記述形式)ファイルやOVAL(Open Vulnerability and Assessment Language:セキュリティ検査言語)ファイルについて、OSがCentOS 7かどうかを判定するサンプル(図1)を見ながら、より深く説明していきます。
今回の説明から数回は、MITREの「About the OVAL Language」をベースにしています。今後の連載でも時々引用することになるので、SCAPに興味のある方は時間のあるときに目を通すと面白いと思います。
XCCDFとOVALの関係に関しては、MITREが分かりやすい図にして表しています(図2)。
XCCDFでPCI DSSなどのコンプライアンスに準拠しているかどうかの監査用のファイルを記述します。XCCDFが、システムの設定や、パッチが当たっているかどうかなどを調べるときに、内部でOVALを使用(呼び出し)しています。
その意味で、まずはOVALについて説明しておきます。
連載第3回でも説明しましたが、OVALはセキュリティの検査を行う言語です。OVAL言語の構成は、連載第3回に概略で説明しましたが下記の要素から成り立っています。
それぞれの関係性は図3のようになっています。
まず、Schema/Generatorがヘッダのように付いており、その後にシステム情報を取り出す定義(Definitions)を記載するようになっています。Definitionsはおのおのの情報ごとに作られており、Definitionsの中では幾つかのTestsを呼び出してそのTestsの結果を「AND」「OR」で評価して判定するようになっています。TestsはObjects/Statesから構成されています。
以降、図1のサンプルコードを見ながら、それぞれの要素を説明します。
なお、OVALにはバージョンがあり、「5.11.2」が最新(といっても3年前ですが)になっています。「oscap(openscap)」コマンドなど、SCAPを扱うツールが対応しているOVALバージョンが異なると、定義されているスキーマが正しく認識されません。
また、oscapコマンドでサポートされているOVALバージョンは、「oscap -V」コマンドの出力で分かります。CentOS 7.6では、「OVAL Version:5.11.1」と出力されるため、5.11.1以下のバージョンはサポートされます(図4)。
XMLのスキーマ部分です。「xmlns="{URL}"」で、そのURLで指定されているネームスペースを使用することになります。例えば「xmlns="http://oval.mitre.org/XMLSchema/oval-definitions-5"」は、該当のURLのネームスペースを参照します。それぞれ下記のようになっています。
XMLスキーマ定義ファイルは、それぞれ下記のようなものになっています。
これらのXSDファイルは、「https://github.com/CISecurity/OVALRepo/tree/master/oval_schemas/{OVALバージョン}」からダウンロードできるので、OVALに関わる開発を行う場合には一度目を通しておいた方がいいでしょう。
このOVALドキュメント(xmlファイル:例えば図1のサンプル)が、どのように作られたかが記載されている箇所になります。下記などがあります。
図1のサンプルでは、product nameは「Test OVAL」に、product versionは「0.1beta」に、schema versionは「5.11.1」に、timestampは「2019-09-20T00:11:22」になっています。
こちらが個々のOVALファイルの定義が書かれたセクションになっています。それぞれのDefinitionsでclassを指定します。classには下記があります。
また、それぞれのdefinitionsには「metadata」「criteria」が含まれています。それぞれ説明します。
metadataはDefinitionsを分類するために使用されます。ツールによって参照はされますが、スキャン部分には影響を与えないデータ(タイトルや、Definitionsの説明など)で構成されています。
図1のサンプルでは下記のように、タイトルや詳細をメタデータとして与えています。
<metadata> <title>For atmarkIT test: Test Scan (Important)</title> <description>RHSA test.</description> </metadata>
criteriaは、実行するテストをAND/ORなどの条件で結んだものです。下記でANDやORなどの条件を選び、
<criteria operator="AND"または"OR" />
下記で実行するテストのIDを参照して実行しています。
<criterion comment="{コメント}" test_ref="{テストのID}" />
図1のサンプルでは下記のように、test_refの箇所「:oval:com.redhat.rhsa:tst:20140675001」をテストとして実行しています。
<criteria operator="AND"> <criterion comment="CentOS 7 is installed" test_ref="oval:com.redhat.rhsa:tst:20140675001"/> </criteria>
Copyright © ITmedia, Inc. All Rights Reserved.