OpenSCAP を使ってみる

LPIC 303 の勉強記録。

# SCAP 

ecurity Content Automation Protocol：セキュリティ設定共通化手順
各システム管理者ごとにセキュリティ設定を考えていては非効率。そこで、NIST（アメリカ国立標準技術研究所）が制定したセキュリティ関連の標準仕様。
よく聞く CVE も SCAP の一環で定義されたものである。

# OpenSCAP 
脆弱性の診断や、その修正を行えるツール。

## OpenSCAP を使ってみる
以下、対象 OS は RHEL8。

使い方は以下の RedHat のドキュメントに書いてあることで全てだが、本ページはもう少し初心者にもわかりやすい説明を目的とする。
https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/security_guide/vulnerability-scanning_scanning-the-system-for-configuration-compliance-and-vulnerabilities

### インストール
以下でインストール

```console
# dnf install openscap-scanner openscap-utils scap-security-guide bzip2
```
### 脆弱性のチェック
RedHat では、新しいRHSA（セキュリティアドバイザリ。要はセキュリティパッチ）がリリースされるたび、その情報をまとめた OVAL 情報が公開される。
その情報をもとに、自身のサーバに未適用のセキュリティアドバイザリがないか確認できる。
以下で OVAL 定義をダウンロード、展開。

```console
wget -O - https://www.redhat.com/security/data/oval/v2/RHEL8/rhel-8.oval.xml.bz2 | bzip2 --decompress > rhel-8.oval.xml
```

以下でレポートを生成。/var/www/html 配下において httpd で公開しておくと簡単に見れて良いだろう。

```console
oscap oval eval --report /var/www/html/vulnerability.html rhel-8.oval.xml
```

以下のような html ファイルが作成される。
未適用のものはオレンジ、適用済みのものは緑色で表示されている。
また、RHSA のページや CVE のページへのリンクもあり便利。

![Screenshot from 2021-02-17 20-43-12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364706/aa78c4f5-7110-3915-1984-ee5b7c3de1b0.png)

cron か anacron で定期的に自動生成するようにすると楽かも。

```bash:/etc/cron.daily/openscap
#!/bin/bash
tmpfile=$(mktemp)
wget -O - https://www.redhat.com/security/data/oval/v2/RHEL8/rhel-8.oval.xml.bz2 | bzip2 --decompress > $tmpfile
oscap oval eval --report /var/www/html/vulnerability.html $tmpfile
rm $tmpfile
```

cron や anacron では標準出力に出力された内容をメールで送信する。
未適用のアドバイザリがあった場合のみメールを送るようにしたりすると更に便利かも。

### セキュリティ基準のチェック

世の中には様々な団体が様々なセキュリティ基準をOSごとに制定している。
米国政府の基準である OSPP であったり、支払い事業者のための基準である PCI-DSS であったり。
OpenSCAP でこれらの要件を満たしているかを確認でき、満たしていない場合は自動で是正することもできる。

例えば、OSPP の要件を満たしているかどうかを確認するには以下のコマンドを実行する。

```console
# oscap xccdf eval --report /var/www/html/report.html --profile ospp /usr/share/xml/scap/ssg/content/ssg-rhel8-ds.xml
```

以下のようなレポートが生成される。
138 のルールを満たしていない。全然だめだめな感じ。

![Screenshot from 2021-02-17 21-20-22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364706/e36b9f82-3c10-29d5-44c7-65c6b07ea3dd.png)

満たしていないルール一覧は以下の様に表示される。

![Screenshot from 2021-02-17 21-22-11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364706/2f075e45-5caa-7c14-5c3a-7e169b3c79b3.png)

ルールをクリックすると、どのような要件なのか、なぜそうすべきなのかの説明がみれる。
[Remediation XXX] をクリックすると設定を是正するためのシェルスクリプトや Ansible のタスクが表示される。便利。

![Screenshot from 2021-02-17 21-23-10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364706/9c6a279f-f67e-6d6e-8d3c-2ae421b0a26d.png)

これを一括で是正したい場合は、オプションに --remediate をつける。
これで可能な範囲で設定を是正してくれる。
なお、これは OS インストール直後の状態でしか動くことを保証されていないので、実行するならインスコ直後のみにするべき。
また、切り戻しのための方法は用意されていない。念の為スナップショットを取っておくといいかも。

```console
# oscap xccdf eval --profile ospp --remediate /usr/share/xml/scap/ssg/content/ssg-rhel8-ds.xml
```

上記を実行したあとのレポートは以下。
NG は 35 件まで減った。残っている NG は、パーティションなど（/var/log は別パーティションにするとか）、あとからではどうしようもないやつ。

![Screenshot from 2021-02-17 21-28-29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364706/ae9f76da-d2bc-0939-4ae4-fa7b638b119f.png)

# 参考
https://www.ipa.go.jp/security/vuln/SCAP.html
https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/security_guide/vulnerability-scanning_scanning-the-system-for-configuration-compliance-and-vulnerabilities