【ラズパイ】セキュリティレベルをブラウザで”可視化”する #serverspec #STIG #PCI-DSS #CISベンチマーク

## 概要

ラズパイのセキュリティ（各種設定）に問題がないか、
セキュリティテストを行い、結果をブラウザで確認できるようにします。

下記のような、セキュリティ対策関連の記事をよく見かけますが、

https://qiita.com/c60evaporator/items/ebe9c6e8a445fed859dc

本記事では、セキュリティチェックを行い、ラズパイのセキュリティレベルをブラウザで可視化するまでの手順をご紹介します。

だれでも簡単にできますので、是非お試しください。（1~2分程度）

:::note info
OSに変更を加える作業はありませんので、ご安心ください。
セキュリティスキャン・テストを行うのみです。
:::

![タイトルなし.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3565203/734c9254-8a8b-a5b7-b21b-9a3673220f42.gif)

## 手順

Dockerコンテナからラズパイに向けてスキャンを仕掛けていきます。
*コンテナではなくPCから直接実行する場合の[手順はこちら。](https://qiita.com/Chef_DevSecOps/items/db7be827a053a2d98a3c#tldr12%E5%88%86)

1：Dockerfileからイメージをビルドする。

```
FROM ubuntu
RUN apt update -yq && apt install -yq ruby git nginx
RUN gem install -N mixlib-install && mixlib-install download inspec -v 5 
RUN dpkg -i inspec*
RUN git clone https://github.com/dev-sec/linux-baseline.git
RUN git clone https://github.com/dev-sec/ssh-baseline.git
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
```

```
docker build -t raspi-security-scan .
 ```

2：コンテナを起動する。

```
docker run -d -p 80:80 --name raspi-monitoring raspi-security-scan
```

3：SSH Baselineテストを実行する。（[テストコードリンク](https://github.com/dev-sec/ssh-baseline)）
＊ラズパイの `ユーザー名` `IP` `パスワード` は適宜修正してください。

```
 docker exec raspi-monitoring /bin/bash -c 'inspec exec --chef-license=accept ssh-baseline -t ssh://[USER_NAME]@[IP] --password 'PASSWORD' --reporter=html2 > /var/www/html/index.nginx-debian.html'
```

<details><summary>LinuxOS Baselineを使ったテストコマンドはこちら（展開）</summary>

```
 docker exec raspi-monitoring /bin/bash -c 'inspec exec --chef-license=accept linux-baseline -t ssh://[USER_NAME]@[IP] --password 'PASSWORD' --reporter=html2 > /var/www/html/index.nginx-debian.html'
```

[Githubテストコード](https://github.com/dev-sec/linux-baseline)
</details>



4：結果をブラウザで確認する。

テスト項目が英語なので少し見にくいですが、左上で結果のフィルタできます。
赤表示の`Failed`を確認し、セキュリティに問題がある設定項目をすべて見つけることができます。

http://localhost

### おまけ（標準出力結果も結構良い）

ブラウザへの表示ではなく、コマンドの標準出力でも高い視認性があります。

![capture 2023-12-17 13.34.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3565203/4ca02f86-7471-6928-9f98-0a279e1f1422.png)
![capture 2023-12-17 13.34.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3565203/38850de9-6bbe-d7ae-5d95-459f8306e10f.png)

---

## 各種ツールの紹介

### ・Chef InSpec

*Chef InSpecとは、インフラストラクチャ、アプリケーション、クラウドリソースをテストおよび監査するためのフレームワークです。システムの実際の状態を、Rubyで記述されるテストコードでテストします、違反を検出し、スキャン結果を、JSON、YAML、Excel（CSV）形式で結果を出力・表示します。テストはカスタマイズ可能であり、テスト項目はユーザーが修正できるようになっています。*

さらに詳しくは：

https://www.chef-sec.com/inspec%e3%81%a8%e3%81%af/

### ・InSpec テストコード

InSpecは、RSpecやServerspecライクなコードを元にセキュリティテスト・スキャンを行います。

ゼロベースから必要なテストコードを自分で書くこともできますが、InSpecを開発/メンテナンスしている[Progress社](https://www.chef.io/)[^1]が無料公開しているテストコードを活用できます。（[リンク](https://github.com/dev-sec)）　
今回使用したLinuxOS BaselineとSSH Baselineは、その一例です。


他にも、脆弱性管理データベースとして有名な[CVE](https://www.ipa.go.jp/security/vuln/scap/cve.html)を管理するMITRE Corporationが無料公開しているテストコードも活用できます。（[リンク](https://saf.mitre.org/libs/validate)）

MITREは、[CISベンチマーク](https://aws.amazon.com/jp/what-is/cis-benchmarks/#)や[STIGs](https://docs.vmware.com/jp/VMware-vSphere/7.0/com.vmware.vsphere.security.doc/GUID-9478D24D-A29D-4C0D-A069-647667C6F853.html)に対応したテストコードを無料公開しています。
高いセキュリティ要件を必要とする環境に合わせたセキュリティスキャンを行うことができます。

上記以外のすべてのOSやアプリケーションに対応する[CISベンチマーク](https://aws.amazon.com/jp/what-is/cis-benchmarks/#)と[STIGs](https://docs.vmware.com/jp/VMware-vSphere/7.0/com.vmware.vsphere.security.doc/GUID-9478D24D-A29D-4C0D-A069-647667C6F853.html)に対応するセキュリティテスト・スキャンが必要な場合、有償ではありますが、Progress社から購入することが可能です。

### ・Web UIによる結果確認


![capture 2023-12-05 12.47.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3565203/e321760f-e49d-b31c-1ac9-3ee4d0ddb67a.png)

Chef Automate のセットアップが必要になりますが、より高精度なテスト結果の分析を行うことができます。**Slack、メール、ServiceNow**等と連携させることで高度な通知機能を扱うことができます。

スキャン結果を、**JSON、YAML、Excel（CSV）形式で出力***することも可能です。

さらに詳しくは：

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

## 【お問い合わせ】

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

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

## トラブルシューティング

```
No such file or directory – connect(2) for /var/run/docker.sock (Errno::ENOENT)
```

Mac PCで、DockerコンテナへのInSpecテスト実行時に発生するエラーです。シンボリックリンクを張ることで解消されます。
`sudo ln -si "$HOME/.docker/run/docker.sock" /var/run/docker.sock`

[^1]:Progress社は、ITインフラストラクチャの自動化およびセキュリティの向上を支援する企業です。ChefとInSpecといった強力なオートメーションツールを提供し、クラウドおよびオンプレミスの環境での効率的な運用とセキュリティの確保をサポートしています。