連載
» 2019年01月29日 05時00分 公開

OpenSCAPで脆弱性対策はどう変わる?(4):脆弱性検査を行うOSSツール「OpenSCAP」で何が分かるのか

本連載では、グローバルスタンダードになっている「SCAP」(セキュリティ設定共通化手順)、およびそれを基にシステム構成や脆弱性の検査を行うためのOSSツール「OpenSCAP」や、その周辺の技術、用語などを紹介する。今回は、OpenSCAPの環境を構築し、実際に試してみた。

[面和毅,OSSセキュリティ技術の会]

まずはOpenSCAPを試してみよう

 OSSセキュリティ技術の会の面和毅です。本連載「OpenSCAPで脆弱性対策はどう変わる?」では、実質的にグローバルスタンダードの「SCAP(Security Content Automation Protocol:セキュリティ設定共通化手順)」、およびそれを基にシステム構成や脆弱(ぜいじゃく)性検査を行うためのOSS(オープンソースソフトウェア)ツール「OpenSCAP」や、その周辺の技術、用語などを紹介しています。

 今回は、前回まで紹介してきたSCAPの構成要素を踏まえて、OpenSCAPの代表的なツールを使って全体的な動きを見ます。

 今回の検証環境としては、GUIツールを簡単に使用したいということもあるので、Fedora 29にGUIを入れたものを使用します(一部、CentOS 7.6での説明もあります)。

GUI(SCAP Workbench)を使って設定を検査する

 OpenSCAPおよびその周辺ツールは、Red Hat、Fedora、CentOSではデフォルトのパッケージに含まれています。

 まずは、「SCAP Workbench」というGUIツールを使ってローカル環境の設定値を検査してみます。

SCAP Workbenchをインストールする

 SCAP Workbenchは、dnf(Red HatやCentOSではyum)、aptなどを用いてインストールすることができます。

[root@fedora29 ~]# dnf install scap-workbench

 「scap-workbench」をインストールすると、依存関係が解決されて必要なファイル類がインストールされます。

SCAP Workbenchでローカルの状態をスキャンする

 一般ユーザーで下記コマンドを実行すると、GUIが起動します。

[jsosug@fedora29 ~]$ scap-workbench 

 スキャン対象(OSやミドルウェア)が選択できるので、「Fedora」を選択します(図1)。

図1

 「Profile」でプロファイル(システムが従うセキュリティ要件)を選択します。「Standard System Security Profile」を選択して「Scan」を実行します(図2)。

図2

 スキャンが実行されます(図3)。

図3

 スキャン実行後にスキャン結果が表示されます。スキャン中にエラーがあった場合には、エラーが表示されます(図4)。

図4

 スキャン結果をダイアログから見ることができます(図5)。

図5

 また、スキャン結果からは「Fail」した(セキュリティ要件にそぐわなかった)箇所を修正するスクリプトを生成することができます。bashやAnsible、Puppet用のファイルも出力できます。デフォルトでは「remediation.XX」というファイル名で出力されます(図6)。

図6

 bashのスクリプト(remediation.sh)を確認してみます。remediation.shはセキュリティ要件にそぐわなかったところを修正するためのスクリプトなので、sudoコマンドなどを用いてroot権限で実行する必要があります。例えば、図7に挙げられている箇所では、Fedora 29のデフォルトでの「PASS_MIN_LEN」(パスワード最低長)は「5」でしたが、これが「7」に変更されます。

###############################################################################
# BEGIN fix (8 / 38) for 'xccdf_org.ssgproject.content_rule_accounts_password_minlen_login_defs'
###############################################################################
(>&2 echo "Remediating rule 8/38: 'xccdf_org.ssgproject.content_rule_accounts_password_minlen_login_defs'")
declare var_accounts_password_minlen_login_defs
var_accounts_password_minlen_login_defs="12"
grep -q ^PASS_MIN_LEN /etc/login.defs && \
sed -i "s/PASS_MIN_LEN.*/PASS_MIN_LEN\t$var_accounts_password_minlen_login_defs/g" /etc/login.defs
if ! [ $? -eq 0 ]
then
  echo -e "PASS_MIN_LEN\t$var_accounts_password_minlen_login_defs" >> /etc/login.defs
fi
# END fix for 'xccdf_org.ssgproject.content_rule_accounts_password_minlen_login_defs'
図7 remediation.shの一部(/etc/login.defsで定義されるパスワード最低長値の変更)

 同様に、「PASS_MIN_DAYS」(パスワードを変更してから次に変更できるようになるまでの最短日数)は「0」から「7」に、PASS_MAX_DAYS(1つのパスワードを使える最長日数)は「9999」から「90」に変更されます(図8)。

# Password aging controls:
#
#	PASS_MAX_DAYS	90
#	PASS_MIN_DAYS	7
#	PASS_MIN_LEN	12
#	PASS_WARN_AGE	Number of days 
#        warning given before a password expires.
#
PASS_MAX_DAYS	9999
PASS_MIN_DAYS	          0
PASS_MIN_LEN	          5
PASS_WARN_AGE	7
図8 変更前
# Password aging controls:
#
#	PASS_MAX_DAYS	90
#	PASS_MIN_DAYS	7
#	PASS_MIN_LEN	12
#	PASS_WARN_AGE	Number of days 
#        warning given before a password expires.
#
PASS_MAX_DAYS	90
PASS_MIN_DAYS	          7
PASS_MIN_LEN	          12
PASS_WARN_AGE	7
図8 変更後

 スキャン結果をHTMLファイルやXCCDF、ARFファイルとして出力できます(図9)。

図9

 HTMLファイルでは、選択していたプロファイル(セキュリティ要件)にパスした設定、パスしなかった設定の総数と、項目を確認できます(図10、図11)。

図10
図11

インストール時にセキュリティ要件を適用する

 これまでの操作を実行したほとんどの方が、Red Hat Enterprise Linux(RHEL)やCentOSのインストール時に「Security Policy」という選択画面を見たことがあると思います。これをインストール時に選択し、適用したいセキュリティ要件を選択することで、インストールされたOSの設定値を、選択したセキュリティ要件に従った値(例えば図6で見たようなログイン時間などの規程)に最初から設定することが可能です(図12、図13)。

図12
図13

CUIツールを使って、脆弱性対応を行って更新されているかどうかを確認する。

 Red HatやSuSEなどでは、脆弱性情報とセキュリティアドバイザリーが出るごとに、「導入されているパッケージに対応したセキュリティフィックスがなされているか」がOVALで定義されたファイル(連載第3回を参照)を提供しています。

 OpenSCAPのCUIツールである「oscap」コマンドと、この定義ファイルを用いることで、ローカルホストにインストールされているパッケージ類が、きちんと脆弱性対応を行って更新されているかどうかを確認できます。

 ここではサンプルとして、Red Hatのセキュリティデータ提供サイトからダウンロードしたRHEL 7用のファイル(2018年12月17日分)をCentOS 7用に加工したものを使用し、ローカルPCのセキュリティフィックス状況をスキャンして、HTMLとしてレポートします。

サンプルファイル「CentOS_7_Sample.xml.xz」を添付しておきますが、これはあくまでも「実験用」として使用し、本番環境では絶対に使用しないでください。本ファイルを本番環境で使用することによる責任は持てません。

 コマンドは下記の書式で実行します。

# oscap oval eval --report "レポートを出力するHTMLファイル" "定義ファイル"

 先ほどのサンプルのCentOS 7用にカスタマイズした定義ファイルを用いて下記コマンドを実行すると、oscapコマンドを実行したディレクトリにレポートファイルとして「centos-test.html」ファイルが出力されます。

[root@CentOS76 ~]# oscap oval eval --report centos-test.html CentOS_7_Sample.xml

 このcentos-test.htmlファイルをWebブラウザで見てみると、ローカルにインストールされているパッケージ情報のうち、セキュリティフィックスが出ているにもかかわらずバージョンを上げていないパッケージに関しては赤(true)、バージョンが上がっているものに関しては緑(false)で表示されます(図14、図15)。

図14
図15

次回予告

 今回は、ほとんどのLinuxディストリビューションに付属している、OSSツールのOpenSCAPを簡単に見ました。次回からは、OVALファイルやxccdfファイルについて、サンプルとともにより深く説明していきます。

筆者紹介

面和毅

略歴:OSSのセキュリティ専門家として20年近くの経験があり、主にOS系のセキュリティに関しての執筆や講演を行う。大手ベンダーや外資系、ユーザー企業などでさまざまな立場を経験。2015年からサイオステクノロジーのOSS/セキュリティエバンジェリストとして活躍し、同社でSIOSセキュリティブログを連載中。

CISSP:#366942

近著:『Linuxセキュリティ標準教科書』(LPI-Japan)」


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。