【CISベンチマーク・STIG】インフラセキュリティ–テスト自動化 #PCI-DSS #serverspec

## TL;DR

CISベンチマークやSTIGに完全に、または一部準拠したインフラテスト自動化ツールをご紹介します。
今回は、Progres社の Chef InSpec です。
InSpecでできることの箇条書き

- CIS or STIG準拠のテスト自動化
- テストのカスタマイズと更新
- セキュリティ基準のチューニング
- 設定の自動修正

より詳しい内容については、以下の技術ブログをご覧ください。

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

## InSpecとは？ CISとは？
CIS（Center for Internet Security）は、情報セキュリティのガイドラインを提供する非営利団体です。主要なオペレーティングシステムやアプリケーションに対して、セキュリティ設定の基準を定めたものであり、セキュリティコンプライアンスを確保する際の重要な参考資料となっています。1999年に設立され、アメリカ合衆国を拠点として世界中の組織に対してセキュリティのベストプラクティスとガイドラインを提供しています。


InSpecは、[Progress社](https://www.chef.io/products/chef-inspec)が開発を手掛けるCISベンチマークに準拠したセキュリティスキャンを実行する際の非常に強力なツールです。この記事では、InSpecを使用してCISベンチマークに基づいたセキュリティスキャンを実行する方法の概要を解説します。

※本記事内ではCISを主に扱いますが、**STIGに関しても同様** のことをInSpecで行うことができます。
>STIG（Security Technical Implementation Guide）は、アメリカ国防総省（DoD：Department of Defense）が開発したセキュリティポリシーとガイドラインのことです。


---


## ステップ1: InSpecのインストール
1.　InSpec をダウンロードする。 

パッケージを[こちら](https://www.chef.io/downloads/tools/inspec)からダウンロードし、InSpec をインストールします。
ターミナルからインストールする方法は、[こちら](https://docs.chef.io/inspec/install/)です。


## ステップ2: テストの実行

##### ・ テスト シナリオ

InSpecはプロファイルと呼ばれるテストコードに基づいてスキャンを行います。今回はGithub上で公開されているInSpecプロファイル(テストコード)を使用してテストを実行してみます。
テスト対象のシステムに対してInSpecプロファイルを適用し、CISベンチマークに準拠しているかどうかを確認します。

##### ・ 実行コマンド

InSpecにはさまざまな実行方法がありますが、以下は一般的な実行コマンドです。
コマンド（InSpec CLI）については、[こちら](https://docs.chef.io/inspec/cli/#exec)のドキュメントを参照ください。

基本構文: `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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/352042/60937de8-1a36-d04e-fe4f-28457468b5e0.png)

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

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

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/352042/3f862ca8-f4e1-7439-82db-de4a3ceb694d.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とアプリケーションの一覧は[こちら](https://www.chef.io/products/chef-premium-content)CISに限らず、STIGにも対応しています。

上記のテーブルは、CISベンチマークのスキャンと”自動修正”が可能なOSとサービスの一部です。
完成したそれぞれのInSpecテストコードがProgress社から提供されます。

また、”自動修正”機能により、CISに沿わない設定が検知された場合にCISに沿うように自動で修正を行うこと可能です。技術サポートに関して詳しくは[こちら](https://www.creationline.com/contact?utm_content=chef_hlink)からお問い合わせください。


--

下記は一例として、自宅サーバーとして稼働中のラズパイ(Debian)にProgress社から提供されたDebian9のCISベンチマークレベル1スキャンの実行結果になります。CISベンチマークの基準を全く満たせていないことが確認できます。
`Test Summary: 1400 successful, 217 failures`

![capture 2023-07-31 16.28.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/352042/bcbf6007-8170-59b8-97ba-3040bc2d5377.png)

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

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

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

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


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


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

連絡先： support@chef-sec.com

https://www.chef-sec.com