やること
Dockerデーモン
、ホスト(OS)
、そしてDockerコンテナ(NGINX)
にセキュリティテストを実行していきます。セキュリテイ基準は、CISベンチマークとDISA STIGsを使用します。
推定所用時間は、1~2 分
環境情報
テスト対象:
- DockerホストOS(Redhat8)
- Dokcerデーモン
- Dockerコンテナ(NGINX)
テストツール:
テストコード:
テストシナリオ:
InSpecはローカルからリモートターゲットホストにSSH経由でテストを仕掛けるのが一般的ですが、今回は、対象のホスト上でInSpecコマンドを実行していきます。
Docker nginx コンテナが起動しているRedhat8にSSH接続し、以下のテストを行っていく。
-
ホスト(OS)
に対して、STIGテストを実行。 -
Dockerデーモン
に対して、CISテストを実行。 -
Dockerコンテナ(NGINX)
に対して、STIGテストを実行。 - 実行結果の確認
- テストのチューニングとカスタマイズ
(※STIGとCIS、どちらを選択しても手順は同じです。今回は両方使ってます。)
TL;DR(1~2分)
1:InSpecのインストール
curl https://omnitruck.chef.io/install.sh | sudo bash -s -- -P inspec -v 4
2:テストコードの取得(3つ)
git clone https://github.com/mitre/redhat-enterprise-linux-8-stig-baseline.git &&
git clone https://github.com/mitre/nginx-stigready-baseline.git &&
git clone https://github.com/dev-sec/cis-docker-benchmark.git
3:テスト実行(3回)
inspec exec --chef-license=yes redhat-enterprise-linux-8-stig-baseline
inspec exec --chef-license=yes nginx-stigready-baseline -t docker://`docker ps -aqf "ancestor=nginx"`
inspec exec --chef-license=yes cis-docker-benchmark
4:テスト結果の確認
実践チュートリアル
Step1: InSpecインストール
curl https://omnitruck.chef.io/install.sh | sudo bash -s -- -P inspec -v 4
InSpecバージョン4を使っています。バージョンを指定せずに最新の6を使うとライセンスキーの取得が必要になるためです。(v6のTrialキーを取得するにはメールアドレスの登録が必要です)
curlではなく、パッケージからインストールする場合は、こちらからダウンロードできます。
Step2: テストコード取得
※InSpecはローカルからリモートターゲットホストにSSH経由でテストを仕掛けるのが一般的ですが、今回は、対象のホスト上でInSpecコマンドを実行していきます。それで、テストコードは対象のホスト上で取得する必要があります。
git clone https://github.com/mitre/redhat-enterprise-linux-8-stig-baseline.git &&
git clone https://github.com/mitre/nginx-stigready-baseline.git &&
git clone https://github.com/dev-sec/cis-docker-benchmark.git
上記の通り、Github上に無料のテストコードが公開されています。
いずれもCISベンチマークやSTIGsに対応しています。
dev-sec
リポジトリ は、Progress 社が公式にメンテナンスしています。無料利用できるテストコードは数が限られていますが、サポート対象の有償版のリストはこちらで確認することができます。
mitre
リポジトリ は、脆弱性で有名なCVEの管理をしている組織MITRE Corporationがメンテナンスしています。
今回使用するもの以外にも、CISやSTIGに準拠した無料のテストコードを多数公開しています。フルリストはこちらで確認できます。
Step3: テスト実行
1.ローカル実行するために、テスト対象にSSH接続します。
2.Step2で取得したテストコードを実行する。
inspec exec --chef-license=yes redhat-enterprise-linux-8-stig-baseline
inspec exec --chef-license=yes \nginx-stigready-baseline -t docker://`docker ps -aqf "ancestor=nginx"`
inspec exec --chef-license=yes cis-docker-benchmark
--chef-license=yes
の補足:InSpecは、Chefと同様に商用利用する場合ライセンスを取得する必要があります。商用で利用する場合、事前にライセンス販売代理店にお問い合わせください。
Step4: テスト結果確認
ターミナルで結果確認(抜粋)
-
STIG_Redhat8(Githubリンク)のテスト結果
244の大項目で問題検知
-
CIS_Dockerデーモン(Githubリンク)のテスト結果
40の大項目で問題検知
-
STIG_NGINXコンテナ(Githubリンク)
26の大項目で問題検知
Web UI で結果確認
-
STIG_Redhat8(Githubリンク)のテスト結果
244の大項目で問題検知
-
CIS_Dockerデーモン(Githubリンク)のテスト結果
40の大項目で問題検知
-
STIG_NGINXコンテナ(Githubリンク)
26の大項目で問題検知
テスト結果は、ターミナルへの出力やウェブUI以外にも、JSON、HTML、またはCSVへの出力も可能です。
Step5: テスト項目のチューニング
CISベンチマークやDISA STIGsは、非常に強力なセキュリティ基準ですが、すべての環境でこれらの基準を完全に満たす必要はありません。
InSpecのテストコードは、不必要なテスト項目を追加、削除、修正することができます。
まとめ・【お問い合わせ】
1つのツールで、Dockerデーモン
、ホスト(OS)
、そしてDockerコンテナ(NGINX)
の3つのレイヤーのセキュリティテストを実現できます。
DevOps CI/CDパイプラインに組み込むことで、DevSecOps運用を。
また、継続的かつ定期的にInSpecテストを実行することで、常にセキュアな状態を保証することができます。
InSpecに関する技術サポートや商用ライセンスの取得は、国内販売代理店に問い合わせることができます。
テストサポート対象OS(一部抜粋)
ご参考までにProgress社が提供するInSpecテストコードの対象OSを一部ご紹介します。
以下は、CISベンチマークレベル1とレベル2に対応しているOSとサービスの一部です。
OS | スキャン | 自動修正 |
---|---|---|
Amazon Linux 2 | ◯ | ◯ |
Alma Linux 8 | ◯ | ◯ |
CentOS Linux 7/8 | ◯ | ◯ |
Debian Linux 9 | ◯ | ◯ |
Oracle Linux 8 | ◯ | ◯ |
Red Hat Enterprise Linux 6/7/8/9 | ◯ | ◯ |
Rocky Linux 8 | ◯ | ◯ |
Ubuntu Linux 18.04 / 20.04 | ◯ | ◯ |
Windows Server 2012 / R2 | ◯ | ◯ |
Windows Server 2012– Domain Controller | ◯ | ◯ |
Windows Server 2016 – Domain Controller | ◯ | ◯ |
Windows Server 2016 – Member Server | ◯ | ◯ |
Windows Server 2019 – Domain Controller | ◯ | ◯ |
Windows Server 2019 – Member Server | ◯ | ◯ |
Windows Server 2022 – Domain Controller | ◯ | ◯ |
Windows Server 2022 – Member Server | ◯ | ◯ |
対象サービス | スキャン | 自動修正 |
---|---|---|
Apache Tomcat | ◯ | ◯ |
Docker | ◯ | ◯ |
MongoDB | ◯ | ◯ |
NGINX | ◯ | ◯ |
Oracle Database | ◯ | ◯ |
PostgresSQL | ◯ | ◯ |
VMWare ESXI | ◯ | ◯ |
※全ての対応OSとアプリケーションの一覧はこちらCISに限らず、STIGにも対応しています。