OpenSCAP

## OpenSCAP
https://www.open-scap.org/
**OpenSCAP** は SCAP を実装しているオープンソースプロジェクトで、XCCDF または OVAL で記述されたチェックリストに従ってシステムを検証してレポートを作成する。

**SCAP** は[アメリカ国立標準技術研究所 (NIST)](https://www.nist.gov/) によって開発された情報セキュリティ対策の自動化と標準化のための規格で、製品についてのID (CPE)、 脆弱性についてのID (CVE)、設定についてのID (CCE), 脆弱性の深刻さのスコアづけ (CVSS)、自動チェックのための言語 (OVAL)、チェックリストのフォーマット (XCCDF) などが標準化されている。

## インストール
### OpenSCAP
```bash
yum -y install openscap-utils
```
依存関係で openscap, openscap-scanner パッケージもインストールされる。

CentOS 6.x で存在した、 scap-oval.xml, scap-rhel6-oval.xml, scap-rhel6-xccdf.xml, scap-xccdf.xml の4ファイルがインストールされる openscap-content パッケージは廃止された。

### SCAP Security Guide
https://github.com/OpenSCAP/scap-security-guide

```bash
yum -y install scap-security-guide
```
updates リポジトリから scap-security-guide パッケージがインストールできる。ただし2016年6月にリリースされた少し古いバージョンの 0.1.30 になる。

#### インストールされる XML ファイル
```
/usr/share/xml/scap/ssg/content/ssg-centos6-ds.xml
/usr/share/xml/scap/ssg/content/ssg-centos7-ds.xml
/usr/share/xml/scap/ssg/content/ssg-centos7-xccdf.xml
/usr/share/xml/scap/ssg/content/ssg-firefox-ds.xml
/usr/share/xml/scap/ssg/content/ssg-jre-ds.xml
/usr/share/xml/scap/ssg/content/ssg-rhel7-cpe-dictionary.xml
/usr/share/xml/scap/ssg/content/ssg-rhel7-cpe-oval.xml
/usr/share/xml/scap/ssg/content/ssg-rhel7-oval.xml
```
インストールされる XML ファイルは上記の通り。

#### 最新版
https://github.com/OpenSCAP/scap-security-guide/releases/latest

```bash
curl -LO https://github.com/OpenSCAP/scap-security-guide/releases/download/v0.1.33/scap-security-guide-0.1.33.zip
unzip scap-security-guide-0.1.33.zip
```

scap-security-guide パッケージでインストールされる 0.1.30 の ssg-centos7-ds.xml は 4,976,999 バイトおよび定義数 504 で、GitHub にある 0.1.33 では 11,840,154 バイトおよび定義数 908 と大きく開きがある。

### Red Hat Product Security
https://www.redhat.com/security/data/metrics/

```bash
curl -LO http://www.redhat.com/security/data/metrics/com.redhat.rhsa-all.xccdf.xml 
curl -LO http://www.redhat.com/security/data/oval/com.redhat.rhsa-all.xml 
```

## スキャン実行
```bash
oscap xccdf eval --profile standard --report ssg-centos7-xccdf-standard.html /usr/share/xml/scap/ssg/content/ssg-centos7-xccdf.xml
oscap xccdf eval --profile common --report ssg-centos7-xccdf-common.html /usr/share/xml/scap/ssg/content/ssg-centos7-xccdf.xml
oscap xccdf eval --profile C2S --report ssg-centos7-xccdf-C2S.html /usr/share/xml/scap/ssg/content/ssg-centos7-xccdf.xml
oscap xccdf eval --profile ospp-rhel7-server --report ssg-centos7-xccdf-ospp-rhel7-server.html /usr/share/xml/scap/ssg/content/ssg-centos7-xccdf.xml
oscap xccdf eval --profile nist-cl-il-al --report ssg-centos7-xccdf-nist-cl-il-al.html /usr/share/xml/scap/ssg/content/ssg-centos7-xccdf.xml
oscap xccdf eval --profile cjis-rhel7-server --report ssg-centos7-xccdf-cjis-rhel7-server.html /usr/share/xml/scap/ssg/content/ssg-centos7-xccdf.xml
oscap xccdf eval --report com.redhat.rhsa-all.xccdf.html com.redhat.rhsa-all.xccdf.xml
oscap oval eval --report ssg-centos7-ds.html /usr/share/xml/scap/ssg/content/ssg-centos7-ds.xml
oscap oval eval --report ssg-centos7-ds-0.1.33.html scap-security-guide-0.1.33/ssg-centos7-ds.xml
oscap oval eval --report com.redhat.rhsa-all.html com.redhat.rhsa-all.xml
```
`--report` オプションでファイルを指定すると HTML ファイルでレポートが生成される。

## 対策
### Standard System Security Profile
#### Verify and Correct File Permissions with RPM
```bash
rpm --setperms binutils
```
#### Prevent Log In to Accounts With Empty Password
```bash
sed -i 's/\<nullok\>//g' /etc/pam.d/system-auth
```
### Common Profile for General-Purpose Systems
### C2S for CentOS Linux 7
#### Restrict Dynamic Mounting and Unmounting of Filesystems
```bash
echo "install cramfs /bin/true" > /etc/modprobe.d/cramfs.conf
echo "install freevxfs /bin/true" > /etc/modprobe.d/freevxfs.conf
echo "install jffs2 /bin/true" > /etc/modprobe.d/jffs2.conf
echo "install hfs /bin/true" > /etc/modprobe.d/hfs.conf
echo "install hfsplus /bin/true" > /etc/modprobe.d/hfsplus.conf
echo "install squashfs /bin/true" > /etc/modprobe.d/squashfs.conf
echo "install udf /bin/true" > /etc/modprobe.d/udf.conf
```
#### Disable Core Dumps for All Users
```bash
echo '*               hard    core            0' >> /etc/security/limits.conf
```

#### Disable Core Dumps for SUID programs
```bash
sysctl -q -n -w fs.suid_dumpable=0
echo -e "\n# Set fs.suid_dumpable to 0 per security requirements" >> /etc/sysctl.conf
echo 'fs.suid_dumpable=0' >> /etc/sysctl.conf
```

#### Enable Randomized Layout of Virtual Address Space
```bash
sysctl -w kernel.randomize_va_space=2
echo 'kernel.randomize_va_space=2' >> /etc/sysctl.conf
```

#### Verify /boot/grub2/grub.cfg Permissions
```bash
chmod 600 /boot/grub2/grub.cfg
```

#### Disable Kernel Parameter for Sending ICMP Redirects by Default
```bash
sysctl -w net.ipv4.conf.default.send_redirects=0
echo -e "\n# Set net.ipv4.conf.default.send_redirects to 0 per security requirements" >> /etc/sysctl.conf
echo 'net.ipv4.conf.default.send_redirects=0' >> /etc/sysctl.conf
```

#### Disable Kernel Parameter for IP Forwarding
```bash
sysctl -w net.ipv4.ip_forward=0
echo -e "\n# Set net.ipv4.ip_forward to 0 per security requirements" >> /etc/sysctl.conf
echo "net.ipv4.ip_forward = 0" >> /etc/sysctl.conf
```

#### Configure Kernel Parameter for Accepting Secure Redirects for All Interfaces
```bash
sysctl -w net.ipv4.conf.all.secure_redirects=0
echo -e "\n# Set net.ipv4.conf.all.secure_redirects to 0 per security requirements" >> /etc/sysctl.conf
echo "net.ipv4.conf.all.secure_redirects=0" >> /etc/sysctl.conf
```

#### Configure Kernel Parameter for Accepting Secure Redirects By Default
```bash
sysctl -w net.ipv4.conf.default.secure_redirects=0
echo -e "\n# Set net.ipv4.conf.default.secure_redirects to 0 per security requirements" >> /etc/sysctl.conf
echo 'net.ipv4.conf.default.secure_redirects=0' >> /etc/sysctl.conf
```

## 関連パッケージ

| パッケージ              | 概要 |
|-----------------------|---|
| openscap              |   |
| openscap-scanner      | oscap |
| openscap-utils        | oscap-chroot, oscap-docker, oscap-ssh, oscap-vm, scap-as-rpm |
| openscap-extra-probes | probe_gconf, probe_ldap57 |
| openscap-daemon       | EPEL リポジトリに存在する |
| scap-security-guide   | 少し古い 0.1.30 がインストールされる |
| openscap-engine-sce   |   |
| openscap-python       |   |

## 参照ドキュメント
* [OpenSCAP User Manual](http://static.open-scap.org/openscap-1.0/oscap_user_manual.html)
* [第6章 コンプライアンスおよび OpenSCAP を使った脆弱性のスキャン (Red Hat Enterprise Linux 7 セキュリティーガイド)](https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/7/html/Security_Guide/chap-Compliance_and_Vulnerability_Scanning.html)
* [OpenSCAPの検証/導入編 - s_tajima:TechBlog](http://s-tajima.hateblo.jp/entry/2015/08/31/195540)
* [OpenSCAPの検証/実用編 - s_tajima:TechBlog](http://s-tajima.hateblo.jp/entry/2015/08/31/200009)
* [CentOS 7でOpenSCAPを使ったセキュリティチェックを行う | 俺的備忘録 〜なんかいろいろ〜](https://orebibou.com/2016/11/centos-7%E3%81%A7openscap%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9F%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF%E3%82%92%E8%A1%8C%E3%81%86/)
* [システム メンテナンス：OpenSCAPレポートの生成 | RSA Link](https://community.rsa.com/docs/DOC-72740)
* [Red Hat Enterprise Linuxのセキュリティ対応に OpenSCAPを活用しよう — | サイオスOSS | サイオステクノロジー](https://oss.sios.com/redhat-ch/blog/openscap_intro)