ラズパイのセキュリティ(各種設定)に問題がないかを確認するために、セキュリティテストを行い、結果をブラウザで可視化します。

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

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



手順

Dockerコンテナからラズパイに向けてスキャンを仕掛けていきます。
*コンテナではなくPCから直接実行する場合の手順はこちら。

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 .
コンテナ起動:
docker run -d -p 80:80 --name raspi-monitoring raspi-security-scan
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'
▼LinuxOS Baselineを使ったテストコマンドはこちら(展開)▼
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テストコード

結果確認(ブラウザ):

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

http://localhost/

標準出力結果-高い視認性-

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



各種ツールのご紹介
Chef InSpec

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

InSpecテストコード

InSpecは、RSpecやServerspecライクなコードを元にセキュリティテスト・スキャンを行います。
ゼロベースから必要なテストコードを自分で書くこともできますが、InSpecを開発/メンテナンスしているProgress社1が無料公開しているテストコードを活用できます。(リンク
今回使用したLinuxOS BaselineとSSH Baselineは、その一例です。

他にも、脆弱性管理データベースとして有名なCVEを管理するMITRE Corporationが無料公開しているテストコードも活用できます。(リンク

MITREは、CISベンチマークSTIGsに対応したテストコードを無料公開しています。
高いセキュリティ要件を必要とする環境に合わせたセキュリティスキャンを行うことができます。

上記以外のすべてのOSやアプリケーションに対応するCISベンチマークSTIGsに対応するセキュリティテスト・スキャンが必要な場合、有償ではありますが、Progress社から購入することが可能です。

Web UIによる結果確認

Chef Automate のセットアップが必要になりますが、より高精度なテスト結果の分析を行うことができます。Slack、メール、ServiceNow等と連携させることで高度な通知機能を扱うことができます。
スキャン結果を、JSON、YAML、Excel(CSV)形式で出力*することも可能です。

お問い合わせ

InSpec の技術サポートや商用ライセンスの取得に関しては、こちらからお問い合わせください。

トラブルシューティング

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