s_tajima:TechBlog

渋谷で働くインフラエンジニアのTechブログです。

OpenSCAPの検証/実用編

前回の記事でOpenSCAPの概要と、簡単な使い方については理解できたので、
今回は実用的な使い方について調査してみました。

SCAPを利用する上で最も重要なのが、どんなSCAP content(スキャンのポリシ)を利用するかだと思います。
SCAP contentは自分で構築することもできますが、
効果的/網羅的なポリシを自分で作り、メンテナンスし続けるのはなかなか骨の折れる作業だと思います。

ということで、今回はThe SCAP Security Guide project(以下SSG, https://fedorahosted.org/scap-security-guide/)で提供されている
SCAP contentを使ってスキャンするときの手順をまとめます。

SCAP contentの取得

SSGが提供するSCAP contentは、RPMでインストールもしくはGitHubから取得することができます。
今回はより新しいポリシが取得できるように、GitHubから取得することにします。

# wget -O scap-security-guide.zip "https://github.com/OpenSCAP/scap-security-guide/releases/download/v0.1.24/scap-security-guide-0.1.24.zip"
# unzip scap-security-guide.zip

SCAP contentの確認

解答したファイルの中身を確認します。

# cd scap-security-guide-0.1.24/
# ls
Contributors.md  kickstarts          ssg-centos7-ds.xml   ssg-firefox-ds.xml  ssg-rhel7-ds.xml  ssg-sl7-ds.xml
LICENSE          ssg-centos5-ds.xml  ssg-chromium-ds.xml  ssg-rhel5-ds.xml    ssg-sl5-ds.xml    ssg-webmin-ds.xml
README.md        ssg-centos6-ds.xml  ssg-fedora-ds.xml    ssg-rhel6-ds.xml    ssg-sl6-ds.xml

解答したファイルの中身を見ると、XXX-ds.xmlというファイルが複数入っているのがわかります。
どんなファイルなのか、oscap infoコマンドで確認してみます。
今回作業する環境はScientific Linux 6なので、ssg-sl6-ds.xmlを利用します。

# oscap info ssg-sl6-ds.xml
Document type: Source Data Stream
Imported: 2015-07-08T18:36:48

Stream: scap_org.open-scap_datastream_from_xccdf_ssg-rhel6-xccdf-1.2.xml
Generated: (null)
Version: 1.2
Checklists:
    Ref-Id: scap_org.open-scap_cref_ssg-rhel6-xccdf-1.2.xml
        Profile: xccdf_org.ssgproject.content_profile_CS2
        Profile: xccdf_org.ssgproject.content_profile_common
        Profile: xccdf_org.ssgproject.content_profile_server
        Profile: xccdf_org.ssgproject.content_profile_stig-rhel6-server-upstream
        Profile: xccdf_org.ssgproject.content_profile_usgcb-rhel6-server
        Profile: xccdf_org.ssgproject.content_profile_rht-ccp
        Profile: xccdf_org.ssgproject.content_profile_CSCF-RHEL6-MLS
        Profile: xccdf_org.ssgproject.content_profile_C2S
        Profile: xccdf_org.ssgproject.content_profile_pci-dss
Checks:
    Ref-Id: scap_org.open-scap_cref_ssg-rhel6-oval.xml
    Ref-Id: scap_org.open-scap_cref_output--ssg-rhel6-cpe-oval.xml
    Ref-Id: scap_org.open-scap_cref_output--ssg-rhel6-oval.xml
Dictionaries:
    Ref-Id: scap_org.open-scap_cref_output--ssg-rhel6-cpe-dictionary.xml

重要なのは Document type: Source Data Stream の部分です。
前回の記事では、OVALファイルやXCCDFファイルを使ったスキャンの実行を行いましたが、
今回はこのSource Data Streamファイルを使ってスキャンを行います。

DataStreamについての解説は、以下のページに詳しく載っています。
http://martin.preisler.me/2012/12/introduction-to-scap-datastreams-with-openscap/

スキャンの実行

今回利用するSource Data Streamファイルは、OVALとXCCDFのコンテンツをどちらも含むので、
それぞれスキャンを実行します。

OVAL

(今回は--reportだけでよいのだが、ovalの場合--resultを付けないと何故か--reportのファイルが生成されなかった。要調査。)

# oscap oval eval --results reports/ssg-oval.xml --result reports/ssg-oval.xml --report reports/ssg-oval.html ssg-sl6-ds.xml
Definition oval:ssg:def:998: false
Definition oval:ssg:def:996: false
.. snip ..
Definition oval:ssg:def:1001: true
Definition oval:ssg:def:100: false
Evaluation done.

XCCDF

# oscap xccdf eval --profile xccdf_org.ssgproject.content_profile_common --report reports/ssg-xccdf.html ssg-sl6-ds.xml
Title   Ensure /tmp Located On Separate Partition
Rule    xccdf_org.ssgproject.content_rule_partition_for_tmp
Ident   CCE-26435-8
Ident   DISA FSO RHEL-06-000001
Result  fail
.. snip ..
Title   Require Client SMB Packet Signing, if using mount.cifs
Rule    xccdf_org.ssgproject.content_rule_require_smb_client_signing_mount.cifs
Ident   CCE-26792-2
Ident   DISA FSO RHEL-06-000273
Result  pass

ポリシの調整

前述の手順で出力された結果を確認して、
必要なポリシのresultがpass/trueになるように設定変更を行います。
また、運用の都合上不要なチェックは外してしまいましょう。
おそらくこの精査が一番大変なところだと思います。

Source Data Stream(ssg-sl6-ds.xml)の以下の部分を編集することでチェックをスキップすることができます。
(どちらか片方だけではスキップできなかった。なぜそうなるのか要確認。)

- <nsX:select idref="XXX" selected="true" />
+ <nsX:select idref="XXX" selected="false" />
- <nsX:Rule id="XXX" selected="true" severity="low">
+ <nsX:Rule id="XXX" selected="false" severity="low">

このポリシの有効化/無効化作業をoscapコマンドでよしなにやれるとよいのですが、
そのような手段は提供されていないようです。

今回の検証を行ってみて

  • SSGのSCAP Contentを使うことで、手軽にCCEベースのポリシのチェックができるようになります。
    • 本来やりたかったのはCVEベースのチェックなので他のポリシを探す必要がありそうです。
  • Source Data Streamの編集は、手でやろうとすると大変なのでよしなにXMLを編集できるプログラムを用意するとよさそうです。
  • (少なくともSSGのポリシでは)いくつかの注意が必要そうです。
    • ポリシのpass/failの判定は、設定ファイルの記述ベースで行われるため、設定ファイルがpassする状態であれば実際に稼働している設定がどうなっていてもpassになってしまいます。
    • RPMでインストールされるデフォルトのPathの設定ファイルしかチェックされないため、自前でビルドしたミドルウェア等の設定はチェックしてもらえません。