【1分完】Dockerデーモン、コンテナ、ホストOSにSTIG/CIS ベンチマーク セキュリティテスト実行 #inspec
やること
Dockerデーモン
、ホスト(OS)
、そしてDockerコンテナ(NGINX)
にセキュリティテストを実行していきます。セキュリテイ基準は、CISベンチマークとDISA STIGsを使用します。
推定所用時間は、1~2 分
環境情報
テスト対象:
- DockerホストOS(Redhat8)
- Dokcerデーモン
- Dockerコンテナ(NGINX)
ホストOS:
テストツール:
テストシナリオ:
InSpecはローカルからリモートターゲットホストにSSH経由でテストを仕掛けるのが一般的ですが、今回は、対象のホスト上でInSpecコマンドを実行していきます。
ホスト(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リンク)のテスト結果
647 項目で問題検知
CIS_Dockerデーモン(Githubリンク)のテスト結果
40項目で問題検知
STIG_NGINXコンテナ(Githubリンク)
91 項目で問題検知
Web UI で結果確認
STIG_Redhat8(Githubリンク)のテスト結果
244項目で問題検知
CIS_Dockerデーモン(Githubリンク)のテスト結果
40項目で問題検知
STIG_NGINXコンテナ(Githubリンク)
26項目で問題検知
テスト結果は、ターミナルへの出力やウェブUI以外にも、JSON、HTML、またはCSVへの出力も可能です。
Step4: テスト項目のチューニング
CISベンチマークやDISA STIGsは、非常に強力なセキュリティ基準ですが、すべての環境でこれらの基準を完全に満たす必要はありません。
InSpecのテストコードは、不必要なテスト項目を追加、削除、修正することができます。
まとめ
1つのツールで、Dockerデーモン
、ホスト(OS)
、そしてDockerコンテナ(NGINX)
の3つのレイヤーのセキュリティテストを実現できます。
DevOps CI/CDパイプラインに組み込むことで、DevSecOps運用を。 また、継続的かつ定期的にInSpecテストを実行することで、常にセキュアな状態を保証することができます。
InSpecに関する技術サポートや商用ライセンスの取得は、国内販売代理店に問い合わせることができます。