【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コマンドを実行していきます。

  1. ホスト(OS)に対して、STIGテストを実行。
  2. Dockerデーモンに対して、CISテストを実行。
  3. Dockerコンテナ(NGINX)に対して、STIGテストを実行。
  4. 実行結果の確認
  5. テストのチューニングとカスタマイズ

(※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 項目で問題検知 capture 2023-11-30 18.24.12.png

  • CIS_Dockerデーモン(Githubリンク)のテスト結果 40項目で問題検知 capture 2023-11-30 18.28.10.png

  • STIG_NGINXコンテナ(Githubリンク91 項目で問題検知 capture 2023-11-30 18.31.43.png

Web UI で結果確認

  • STIG_Redhat8(Githubリンク)のテスト結果 244項目で問題検知 capture 2023-11-30 21.12.38.png

  • CIS_Dockerデーモン(Githubリンク)のテスト結果 40項目で問題検知 capture 2023-11-30 19.43.30.png

  • STIG_NGINXコンテナ(Githubリンク26項目で問題検知 capture 2023-11-30 19.51.06.png

テスト結果は、ターミナルへの出力やウェブUI以外にも、JSON、HTML、またはCSVへの出力も可能です。

Step4: テスト項目のチューニング

CISベンチマークDISA STIGsは、非常に強力なセキュリティ基準ですが、すべての環境でこれらの基準を完全に満たす必要はありません。

InSpecのテストコードは、不必要なテスト項目を追加、削除、修正することができます。

まとめ

1つのツールで、Dockerデーモンホスト(OS)、そしてDockerコンテナ(NGINX)の3つのレイヤーのセキュリティテストを実現できます。

DevOps CI/CDパイプラインに組み込むことで、DevSecOps運用を。 また、継続的かつ定期的にInSpecテストを実行することで、常にセキュアな状態を保証することができます。

InSpecに関する技術サポートや商用ライセンスの取得は、国内販売代理店に問い合わせることができます。

https://www.chef-sec.com/

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 コードが実行されてしまう危険性があります。

さらに詳しくは、以下の技術ブログで説明されていました。

https://www.chef-sec.com/?p=405

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

Windows Powershell:

. { 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

実行結果の一部抜粋↓↓↓ capture 2023-07-31 14.53.44.png

InSpecを定期的に実行するようにスケジューリングすることで、継続的なセキュリティ監査とスキャンを行うことができます。

※上記の例ではテストコードはCISスキャンではなくSSHの設定をスキャンするコードが使われています。SSHに関連したセキュリティリスクが57個以上検知されています。 テストコードのソースは:https://github.com/dev-sec/ssh-baseline

↓のようにUIによるセキュリティリスクの可視化を行うこともできます。

image.png

ステップ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

capture 2023-07-31 16.28.25.png

使用したCISベンチマークはこちら:

https://www.cisecurity.org/benchmark/debian_linux

ステップ5: 不合格項目の対処

テスト結果から不合格項目を特定したら、それらの問題を修正する必要があります。セキュリティ上の脆弱性や不適切な設定を改善して、システムをCISベンチマークに準拠させましょう。

ステップ2の対応OSとサービスについては、Progress社から自動修正コードが適用されるため手動での修正は不要です。

おわりに

InSpecを使用してCISベンチマークに準拠したセキュリティスキャンを実行することで、システムのセキュリティ強化とコンプライアンス確保が可能となります。適切なテストコードを作成し、不合格項目を修正することで、信頼性の高いセキュアなシステムを構築することができます。 また、定期的にスキャンを行うことで社内のセキュリティ要件に常に準拠させることができます。

InSpecの技術サポートについて詳しくは、こちらよりお問い合わせください。 (Chef InSpecは、Chefと同様に2019年に無償の商用利用が出来なっています) 

https://www.creationline.com/tech-blog/30958