【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に関する技術サポートや商用ライセンスの取得は、国内販売代理店に問い合わせることができます。
InSpec に重大な脆弱性 – CVE-2023-42658
InSpec CLI に重大な脆弱性があることがアナウンスされています。(公式アナウンスリンク) 脆弱性の内容、対処方法、Fix バージョンについて説明します。
CVE-2023-42658
公式 CVE リンク:
https://nvd.nist.gov/vuln/detail/CVE-2023-42658
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-42658
重大な脆弱性として報告されており、早急な対処が必要であることがわかります。
影響範囲
InSpec CLI の archive check export コマンド実行時に、InSpec テストコードに悪意のある Ruby コードが実行されてしまう危険性があると説明されています。特に CI/CD パイプラインの中で InSpec がテストとして組み込まれている場合は、特に注意する必要があります。知らぬ間に、意図しない Ruby コードが実行されてしまう危険性があります。
さらに詳しくは、以下の技術ブログで説明されていました。
InSpecでCISベンチマーク準拠スキャンを簡単実行&自動修正
TL;DR
InSpecでできることの箇条書き
- CIS or STIG準拠の定期自動監査(スキャン)
- 定期更新されるセキュリティ基準の定期更新
- セキュリティ基準のチューニング
- 設定の自動修正
InSpecの技術サポートについて詳しくは、こちらよりお問い合わせください。
InSpecとは? CISとは?
CIS(Center for Internet Security)は、情報セキュリティのガイドラインを提供する非営利団体です。主要なオペレーティングシステムやアプリケーションに対して、セキュリティ設定の基準を定めたものであり、セキュリティコンプライアンスを確保する際の重要な参考資料となっています。1999年に設立され、アメリカ合衆国を拠点として世界中の組織に対してセキュリティのベストプラクティスとガイドラインを提供しています。
InSpecは、Progress社が開発を手掛けるCISベンチマークに準拠したセキュリティスキャンを実行する際の非常に強力なツールです。この記事では、InSpecを使用してCISベンチマークに基づいたセキュリティスキャンを実行する方法の概要を解説します。
※本記事内ではCISを主に扱いますが、STIGに関しても同様 のことをInSpecで行うことができます。
STIG(Security Technical Implementation Guide)は、アメリカ国防総省(DoD:Department of Defense)が開発したセキュリティポリシーとガイドラインのことです。
ステップ1: InSpecのインストール
下記サイトからInSpecを簡単にダウンロード/インストールすることができます。
https://www.chef.io/downloads/tools/inspec
コマンドでインストールする場合
mac:
brew install chef/chef/inspec
curl使えるOS:
curl https://omnitruck.chef.io/install.sh | sudo bash -s -- -P inspec
. { iwr -useb https://omnitruck.chef.io/install.ps1 } | iex; install -project inspec
ステップ2: テストの実行
・ テスト シナリオ
InSpecはプロファイルと呼ばれるテストコードに基づいてスキャンを行います。今回はGithub上で公開されているInSpecプロファイル(テストコード)を使用してテストを実行してみます。 テスト対象のシステムに対してInSpecプロファイルを適用し、CISベンチマークに準拠しているかどうかを確認します。
・ 実行コマンド
InSpecにはさまざまな実行方法がありますが、以下は一般的な実行コマンドです。 コマンド(InSpec CLI)については、こちらのドキュメントを参照ください。
基本構文: inspec exec [テストコード] -t ssh://[対象サーバー]
$ inspec -v 5.21.29 $ inspec exec https://github.com/dev-sec/ssh-baseline.git -t ssh://automate
実行結果の一部抜粋↓↓↓
InSpecを定期的に実行するようにスケジューリングすることで、継続的なセキュリティ監査とスキャンを行うことができます。
※上記の例ではテストコードはCISスキャンではなくSSHの設定をスキャンするコードが使われています。SSHに関連したセキュリティリスクが57個以上検知されています。 テストコードのソースは:https://github.com/dev-sec/ssh-baseline
↓のようにUIによるセキュリティリスクの可視化を行うこともできます。
ステップ3: CISベンチマーク準拠のテストコードの取得
ステップ2のテストコードはSSH設定に関するものでしたが、特定のOSのCISベンチマークに沿ったプロファイルは、InSpecを公式にメンテナンスしている Progress社から提供され ます。そのため、テストコードを 自前で用意する必要はありません。 将来的にCIS公式の基準が変更される場合、適宜Progress社から更新されたテストコードが配布されます。 また、テストコードは カスタマイズ可能 であるため自社ポリシーに合わせて 過不足の調整 をすることができます。
ご参考までに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にも対応しています。
上記のテーブルは、CISベンチマークのスキャンと”自動修正”が可能なOSとサービスの一部です。 完成したそれぞれのInSpecテストコードがProgress社から提供されます。
また、”自動修正”機能により、CISに沿わない設定が検知された場合にCISに沿うように自動で修正を行うこと可能です。技術サポートに関して詳しくはこちらからお問い合わせください。
--
下記は一例として、自宅サーバーとして稼働中のラズパイ(Debian)にProgress社から提供されたDebian9のCISベンチマークレベル1スキャンの実行結果になります。CISベンチマークの基準を全く満たせていないことが確認できます。
Test Summary: 1400 successful, 217 failures
使用したCISベンチマークはこちら:
https://www.cisecurity.org/benchmark/debian_linux
ステップ5: 不合格項目の対処
テスト結果から不合格項目を特定したら、それらの問題を修正する必要があります。セキュリティ上の脆弱性や不適切な設定を改善して、システムをCISベンチマークに準拠させましょう。
ステップ2の対応OSとサービスについては、Progress社から自動修正コードが適用されるため手動での修正は不要です。
・ おわりに
InSpecを使用してCISベンチマークに準拠したセキュリティスキャンを実行することで、システムのセキュリティ強化とコンプライアンス確保が可能となります。適切なテストコードを作成し、不合格項目を修正することで、信頼性の高いセキュアなシステムを構築することができます。 また、定期的にスキャンを行うことで社内のセキュリティ要件に常に準拠させることができます。
InSpecの技術サポートについて詳しくは、こちらよりお問い合わせください。 (Chef InSpecは、Chefと同様に2019年に無償の商用利用が出来なっています)