🐳

InSpecコマンドをコンテナに格納して簡単インフラテスト自動化

2023/12/18に公開

まとめ

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のよりセキュリティに特化した活用方法については、こちら↓↓↓↓を参照ください。

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

Discussion