8.2.2. OVAL ファイル形式

Open Vulnerability Assessment Language (OVAL) は、SCAP の必須かつ最も古いコンポーネントです。OVAL 標準の主なゴールは、セキュリティ製品の間で相互運用性を確保することです。これは、以下の 3 つのドメインの標準化でなされます。
  1. ターゲットシステム設定の表示。
  2. ターゲットシステムが特定のマシン状態にあるかを分析。
  3. 指定されたマシン状態と観察されたマシン状態の比較結果のレポーティング。
他のツールやカスタム化されたスクリプトとは異なり、OVAL 言語は宣言型でリソースの望ましい状態を記述します。OVAL 言語コードはスキャナーと呼ばれる OVAL インタープリターツールを用いて実行されますが、直接実行されることは決してありません。OVAL が宣言型であるために、評価されるシステムの状態が偶然に修正されることはありません。セキュリティスキャナーは可能な限り高い権限で実行されることが多いので、これは重要な点になります。
OVAL 仕様はコメントと貢献を公開で受け付けています。また、多くの IT 企業が米連邦政府の援助を受けた NPO である MITRE Corporation と協力しています。OVAL 仕様は継続的に発展しており、バージョン番号で改訂版を区別しています。最新バージョンは 2012 年にリリースされた 5.10.1 になります。
他のすべての SCAP コンポーネントと同様に、OVAL は XML に基づいています。OVAL 標準は、いくつかのドキュメント形式を定義します。これらはそれぞれ異なる種類の情報を含み、異なる目的に使われます。

OVAL ドキュメント形式

  • OVAL Definitions 形式は、最も一般的な OVAL ファイル形式で、システムスキャンに直接使用されます。OVAL Definitions のドキュメントは、ターゲットシステムの望ましい状態を記述します。
  • OVAL Variables 形式は、OVAL Definitions ドキュメントの修正に使用される変数を定義します。OVAL Variables ドキュメントは通常、OVAL Definitions ドキュメントと一緒に使われ、ランタイム時にターゲットシステムのセキュリティコンテンツを調整します。
  • OVAL System Characteristics 形式は、評価対象のシステムについての情報を保持します。OVAL System Characteristics ドキュメントは通常、実際のシステムの状態と、OVAL Definitions ドキュメントが定義する期待された状態を比較するために使用されます。
  • OVAL Results は、最も包括的な OVAL 形式で、システム評価の結果を報告するために使われます。OVAL Results ドキュメントには通常、評価された OVAL 定義のコピー、バインドされた OVAL 変数、OVAL システムの特徴、システムの特徴と定義の比較に基づいて計算されたテスト結果が含まれます。
  • OVAL Directives 形式は、特定の詳細を除外または含めることで、OVAL Result ドキュメントの長さを調整するために使われます。
  • OVAL Common Model 形式には、いくつかの他の OVAL スキームに使用される構造体と列挙の定義が含まれます。これは、OVAL 定義を再利用して、複数のドキュメントでの重複を防ぐために使われます。
OVAL Definitions ドキュメントは、設定要件一式で構成されます。各要件は、definitionstestsobjectsstates、および variables の 5 つの基本的なセクションで構成されます。definitions セクション内における要素は、特定の定義を満たすためにどのテストが実行されるかを記述します。test 要素は、objects と states をリンクさせます。システム評価中に、ある object 要素が示す評価システムのリリースが特定の state 要素に対応すると、テストが成功したとみなされます。variables セクションでは、states セクションからの要素の調整に使用される可能性のある外部の変数を定義します。これらのセクションに加えて、OVAL Definitions ドキュメントには通常、generator および signature の各セクションも含まれています。generator セクションには、ドキュメントの出所についての情報とそのコンテンツに関連する様々な追加情報が含まれます。
OVAL ドキュメントの基本的セクションからの各要素は、以下の形式の識別子で明確に特定されます。
oval:namespace:type:ID
ここでの namespace は、識別子を定義するネームスペースです。type は、definitions 要素の場合は def、tests 要素の場合は tst、objects 要素の場合は obj、states 要素の場合は ste、variables 要素の場合は var になります。ID は、識別子の整数値になります。

例8.2 OVAL Definitions ドキュメントの例

          
<?xml version="1.0" encoding="utf-8"?>
<oval_definitions
    xmlns:lin-def="http://oval.mitre.org/XMLSchema/oval-definitions-5#linux"
    xmlns:oval="http://oval.mitre.org/XMLSchema/oval-common-5"
    xmlns="http://oval.mitre.org/XMLSchema/oval-definitions-5"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <generator>
    <oval:product_name>vim</oval:product_name>
    <oval:schema_version>5.10.1</oval:schema_version>
    <oval:timestamp>2012-11-22T15:00:00+01:00</oval:timestamp>
  </generator>
  <definitions>
    <definition class="inventory" 
        id="oval:org.open-scap.cpe.rhel:def:6" 
        version="1">
      <metadata>
        <title>Red Hat Enterprise Linux 6</title>
        <affected family="unix">
          <platform>Red Hat Enterprise Linux 6</platform>
        </affected>
        <reference ref_id="cpe:/o:redhat:enterprise_linux:6" 
            source="CPE"/>
        <description>
          The operating system installed on the system is Red Hat Enterprise Linux 6
        </description>
      </metadata>
      <criteria>
        <criterion comment="Red Hat Enterprise Linux 6 is installed" 
            test_ref="oval:org.open-scap.cpe.rhel:tst:6"/>
      </criteria>
    </definition>
  </definitions>
  <tests>
    <lin-def:rpminfo_test check_existence="at_least_one_exists" 
        id="oval:org.open-scap.cpe.rhel:tst:6" 
        version="1" 
        check="at least one" 
        comment="redhat-release is version 6">
      <lin-def:object object_ref="oval:org.open-scap.cpe.redhat-release:obj:1"/>
      <lin-def:state state_ref="oval:org.open-scap.cpe.rhel:ste:6"/>
    </lin-def:rpminfo_test>
  </tests>
  <objects>
    <lin-def:rpmverifyfile_object id="oval:org.open-scap.cpe.redhat-release:obj:1" 
        version="1">
      <!-- This object represents rpm package which owns /etc/redhat-release file -->
      <lin-def:behaviors nolinkto='true' 
          nomd5='true' 
          nosize='true' 
          nouser='true' 
          nogroup='true' 
          nomtime='true' 
          nomode='true' 
          nordev='true' 
          noconfigfiles='true' 
          noghostfiles='true' />
      <lin-def:name operation="pattern match"/>
      <lin-def:epoch operation="pattern match"/>
      <lin-def:version operation="pattern match"/>
      <lin-def:release operation="pattern match"/>
      <lin-def:arch operation="pattern match"/>
      <lin-def:filepath>/etc/redhat-release</lin-def:filepath>
    </lin-def:rpmverifyfile_object>
  </objects>
  <states>
    <lin-def:rpminfo_state id="oval:org.open-scap.cpe.rhel:ste:6" 
        version="1">
      <lin-def:name operation="pattern match">^redhat-release</lin-def:name>
      <lin-def:version operation="pattern match">^6[^\d]</lin-def:version>
    </lin-def:rpminfo_state>
  </states>
</oval_definitions>