🐳
InSpecコマンドをコンテナに格納して簡単インフラテスト自動化
まとめ
InSpecコマンドとテストコードをコンテナイメージに入れて、いつでもどこでもインフラテストを実行できるようにします。
Dockerfile
FROM ubuntu
# Mixlib-install gem で InSpecをインストール
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*
# 必要なInSPecテストコードの取得
RUN git clone https://github.com/dev-sec/linux-baseline.git
RUN git clone https://github.com/dev-sec/ssh-baseline.git
docker build -t inspec .
InSpec 実行
構文:
docker run inspec /bin/bash -c 'inspec exec [InSpecプロファイル] -t [ターゲットサーバー] '
実行例:
docker run inspec /bin/bash -c 'inspec exec --chef-license=accept ssh-baseline -t ssh://[USER_NAME]@[IP] --password '[PASSWORD]''
InSpec
InSpecは、RSpecやServerspecライクなコードを元にセキュリティテスト・スキャンを行います。
ゼロベースから必要なテストコードを自分で書くこともできますが、InSpecを開発/メンテナンスしているProgress社[^1]が無料公開しているテストコードを活用できます。(リンク)
今回使用したLinuxOS BaselineとSSH Baselineは、その一例です。
他にも、脆弱性管理データベースとして有名なCVEを管理するMITRE Corporationが無料公開しているテストコードも活用できます。(リンク)
MITREは、CISベンチマークやSTIGsに対応したテストコードを無料公開しています。
高いセキュリティ要件を必要とする環境に合わせたセキュリティスキャンを行うことができます。
上記以外のすべてのOSやアプリケーションに対応するCISベンチマークとSTIGsに対応するセキュリティテスト・スキャンが必要な場合、有償ではありますが、Progress社から購入することが可能です。
テストコード
describe sshd_config do
its('PermitRootLogin') { should_not cmp 'yes' }
end
describe package('telnetd') do
it { should_not be_installed }
end
describe inetd_conf do
its("telnet") { should eq nil }
end
上記のテストコードで「ROOTログインが無効化されていること」「telnetが使われていないこと」をテストします。
InSpecとSTIGとCISベンチマーク
InSpecのよりセキュリティに特化した活用方法については、こちら↓↓↓↓を参照ください。
Discussion