OVALの概要:オープンな脆弱性と評価言語

こんにちは、同僚!

皆さんは、ターゲットシステムの脆弱性分析の問題に繰り返し直面しています。 Vendoromiデータフィードの断片化である主な障害。

ある場所では脆弱性自体を、別の場所ではその評価で、3番目では検証に必要な条件を、4番目ではパッチへのリンクを見つけることができます。

特に、この問題を解決するために、 OVAL脆弱性記述言語があります



画像





この言語は、情報の表示方法、システム分析のプロセス、および出力の形式を標準化します。 したがって、脆弱性、その脆弱性を特定する方法、パッチへのリンク、CVEへのリンクなどを既に記述した1つのXMLファイルを取得します。 また、この形式はセキュリティスキャナーの情報を受け入れるための標準です。



言語自体は、テンプレート構造の使用と好みへの変更の両方を可能にするかなり柔軟な形式化された環境です。 したがって、同じモデルを使用してさまざまな情報を提供します。 このドキュメントで言語の完全な説明を見つけることができます 。 脆弱性情報の報告の側面を紹介したいと思います。 より具体的には、最終製品で。



OVALで脆弱性データを受け取る最終形式は、XML形式になります。

理解を容易にするために、 RedHat脆弱性OVALの例を詳しく見ていきます。

中にあるものを見てみましょう。



まず、OVALファイルの処理を自動化する上で非常に役立つのは、スキームと名前空間です。



<oval_definitions xsi:schemaLocation = " oval.mitre.org/XMLSchema/oval-definitions-5 oval-definitions-schema.xsd http://oval.mitre.org/XMLSchema/oval-definitions-5#linux linux-definitions- schema.xsd http://oval.mitre.org/XMLSchema/oval-common-5 oval-common-schema.xsd http://oval.mitre.org/XMLSchema/oval-definitions-5#unix unix-definitions- schema.xsd " >




これは、どのパラメーターと、それらが私たちを待っている場所の説明です。

次に、ジェネレーターによって自動的に読み込まれるブロックが来ます。 従来の「何、どこ、いつ」:



<発電機>

<oval:product_name > OVALリポジトリ</ oval:product_name >

<oval:schema_version > 5.10 </ oval:schema_version >

<oval:timestamp > 2012-01-11T06:12:25.053-05:00 </ oval:timestamp >

</ジェネレーター>




詳細情報は、定義、テスト、オブジェクト、状態など、いくつかの大きなセマンティックブロックに分割されます。

定義には脆弱性自体に関する実際の情報が含まれ、テストブロックにはチェックが記述され、オブジェクトセクションにはチェックのオブジェクトがリストされ、状態セクションにはオブジェクトに適用される正式なテスト条件が記述されます。



明確にするために、「definition」ブロックの1行ごとに行を解析してみましょう。



<definition id = "oval:org.mitre.oval:def:975" version = "2" class = "vulnerability" >

<メタデータ>

<title > Red Hat OpenSSL do_change_cipher_spec関数のサービス拒否</ title >

<影響を受ける 家族 = "unix" >

<platform > Red Hat Linux 9 </ platform >

<product > OpenSSL </ product >

</影響を受ける>

<参照 = "CVE" ref_id = "CVE-2004-0079" ref_url = " cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2004-0079" />

<説明> OpenSSL 0.9.6cから0.9.6k、および0.9.7aから0.9.7cのdo_change_cipher_spec関数は、リモートの攻撃者を許可します

巧妙に細工されたSSL / TLSハンドシェイクを介してサービス拒否(クラッシュ)を引き起こし、null参照解除をトリガーします。 </説明>

<oval_repository >

<日付>

<送信 = "2004-03-20T12:00:00.000-04:00" >

<貢献者の 組織 = "MITRE Corporation" > Matt Busby </貢献者>

</送信済み>

<modified date = "2004-05-05T12:00:00.000-04:00" comment = "SQLバージョンの定義の構文エラーを修正しました。" >

<貢献者の 組織 = "MITRE Corporation" > Matt Busby </貢献者>

</変更>

<status_change date = "2004-05-25T12:00:00.000-04:00" > 中間</ status_change >

<status_change date = "2004-06-16T12:00:00.000-04:00" > 承認済み</ status_change >

<modified comment = "マシンクラスの妥当な値のみに一致するように正規表現を修正しました。

MITER CorporationのJon Bakerにより実装。「 日付 = 」2007-04-10T15:39:00.888-04:00 " >

<貢献者の 組織 = "Maitreya Security" > Thomas R. Jones </貢献者>

</変更>

<status_change date = "2007-04-10T15:41:24.326-04:00" > 中間</ status_change >

<status_change date = "2007-04-25T19:53:11.788-04:00" > 承認済み</ status_change >

</日付>

<status > ACCEPTED </ status >

</ oval_repository >

</メタデータ>

<基準 コメント = "ソフトウェアセクション" 演算子 = "AND" >

<criterion comment = "Red Hat 9がインストールされています" negate = "false" test_ref = "oval:org.mitre.oval:tst:3153" />

<criterion comment = "ix86 architecture" negate = "false" test_ref = "oval:org.mitre.oval:tst:3152" />

<criterion comment = "openssl version is 0.9.7a-20未満" negate = "false" test_ref = "oval:org.mitre.oval:tst:1484" />

<criterion comment = "openssl-devel version is 0.9.7a-20未満" negate = "false" test_ref = "oval:org.mitre.oval:tst:1483" />

<criterion comment = "openssl-perl version is 0.9.7a-20" negate = "false" test_ref = "oval:org.mitre.oval:tst:1482" />

<criterion comment = "openssl096バージョンは0.9.6-25.9未満です。" negate = "false" test_ref = "oval:org.mitre.oval:tst:1481" />

<criterion comment = "openssl096bバージョンは0.9.6b-15未満です" negate = "false" test_ref = "oval:org.mitre.oval:tst:1480" />

</基準>

</定義>




基本情報は、ルートタグの属性の形式で提供されます。

id = "oval:org.mitre.oval:def:975"-この名前空間に固有の識別番号。 それから、それが定義であることが楕円形:org.mitre.ovalによって作成された:def:番号975であることがわかります。

version = "2"-バージョン情報

class = "vulnerability"-定義クラス(この場合は脆弱性です。パッチの場合は "patch")



以下は、タグで区切られた一般情報です。

「トーキング」タグからわかるように、これは「Red Hat OpenSSL do_change_cipher_spec関数のサービス拒否」の脆弱性です。

これは、UnixファミリのRed Hat Linux 9プラットフォームのOpenSSLに影響します。



次に、CVEソースへのリンクを提供するユニバーサル参照フィールドが提供されます。 このタイプの情報はここから送信できます(たとえば、bugzillaへのリンク)。



また、タグは理解しやすく、脆弱性のテキストによる説明が記載されています。



次に、<oval_repository>リポジトリに関するオプションのサービス情報があります。 その主な目的は、定義のステータスの変更に関する情報を提供することです。 キーフィールドは「ステータス」です。



次のブロックは最も「おいしい」です。 必要な基準に関する情報を保持し、論理条件ごとにこの脆弱性を判断するためのチェックを行います。 条件は、演算子論理条件パラメーターを含む基準ブロックであり、ネストできます。 したがって、否定(negate = "false" / "true")の可能性があるため、演算子ANDおよびORには完全な代数があります。 必要に応じて、ここで任意の複雑な条件を説明できます。 必要なテストは、このOVALファイルに含まれる「テスト」タイプの一意の要素を示す基準ブロックによって参照されます。



このリンクをたどって見てください。



<rpminfo_test id = "oval:org.mitre.oval:tst:3153" version = "1" check = "少なくとも1つ" comment = "Red Hat 9がインストールされている" check_existence = "at_least_one_exists" >

<object object_ref = "oval:org.mitre.oval:obj:1414" />

<state state_ref = "oval:org.mitre.oval:ste:2949" />

</ rpminfo_test >




コンテンツからわかるように、これはRed Hat 9がインストールされているという事実のテストです。

このチェックは、少なくとも1回(「少なくとも1つ」)実行され、少なくとも1つのインスタンス(「at_least_one_exists」)でそのようなオブジェクトの存在を確認する必要があります。

以下は、ポジティブな結果に必要なオブジェクトと条件への参照です。 これらのブロックも同じOVALリポジトリにある必要があります。

指定されたオブジェクトへのリンクをたどります。



<rpminfo_object id = "oval:org.mitre.oval:obj:1414" version = "1" comment = "the redhat-release rpm" >

<name > redhat-release </ name >

</ rpminfo_object >




そして、ここからredhat-release rpmのバージョンを確認する必要があることを学びます。

必要な条件を見つけましょう。テストで指定された状態に進みます。



<rpminfo_state id = "oval:org.mitre.oval:ste:2949" version = "1" >

<version operation = "equals" > 9 </ version >

</ rpminfo_state >




また、説明では、RPMバージョンを9と比較する必要があることがわかります。(9)



したがって、基準で指定された条件に従って論理チェーンを追加すると、脆弱性の存在と定義条件の充足を判断するために必要な条件が得られます。

この小さな例で、OVAL-vulnerに情報を提供する方法が明らかになることを願っています。



この形式の主な関心は、その極めて高い柔軟性です。 データを追加するには、スキームを調整し、そのリンクを指定するだけで十分です。 しかし、これらのファイルを作成する方法については、もう一度お話しします。



読んでくれてありがとう、私はあなたに何か新しいことを言ったことを願っています。



All Articles