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のポリシでは)いくつかの注意が必要そうです。