セキュリティ対策系の記事は多く見かけますが、対策した後のセキュリティ”テスト”関連の記事がほとんどなかったので書きます。
やること
家のラズパイのセキュリティレベルがどの程度なのかを把握しておきたいので、セキュリティテストを仕掛けます。
誰でも簡単にできますので、是非お試しあれ。 (推定所用時間、1~2 分)
以下のような、一般的なセキュリティ対策に問題がないことの確認に加えて、、、
今回は、CISベンチマークに沿ったセキュリティスキャンをします。(CISベンチマークとは?)
企業が商用環境でサーバーセキュリティに使う、ガチなヤツです。
通常CISベンチマークは、OSの種類によって中身が異なります。(Redhat用、とか、Ubuntu用など。。)しかし、使い分けが面倒な場合があります。
それで、すべてのLinuxOSに共通化されたベンチマーク↓↓↓が用意されています。今回はこちらを使っていきます。
Distribution Independent Benchmark
= ディストリビューション(Linuxの種類)に依存しないベンチマーク
では、やってきましょう!
TL;DR(1~2分)
1: InSpecインストール(InSpecとは)
・Windows Powershell:
. { iwr -useb https://omnitruck.chef.io/install.ps1 } | iex; install -project inspec -version 4
・Macターミナル:
curl https://omnitruck.chef.io/install.sh | sudo bash -s -- -P inspec -v 4
2: テストコード取得(Githubリンク)
git clone https://github.com/dev-sec/cis-dil-benchmark.git
3: InSpec実行
inspec exec --chef-license=yes cis-dil-benchmark -t ssh://[ラズパイホスト名orIPアドレス]
4: テスト結果の確認
実践チュートリアル
Step1: InSpecのインストール(InSpecとは)
・Windows Powershell:
. { iwr -useb https://omnitruck.chef.io/install.ps1 } | iex; install -project inspec -version 4
※Windowsの場合、インストール後に、Powershellを閉じて、開き直す必要があります。
・Macターミナル:
curl https://omnitruck.chef.io/install.sh | sudo bash -s -- -P inspec -v 4
パッケージダウンロードしたい方は、こちら
Step2: テストコード取得(Githubリンク)
git clone https://github.com/dev-sec/cis-dil-benchmark.git
cis-dil-benchmark
のdil
= Distribution Independent Linux
の意。
上記の通り、Github上に無料のテストコードが公開されています。
--
dev-sec
リポジトリ は、Progress社1が公式にメンテナンスしています。無償で利用できるテストコードは少ないです。
有償版であれば、ほぼすべてのOSに対応するテストコードが用意されています。すべての対応OSリストはこちらで確認することができます。
テストコードがどのようなものか簡単にご紹介します。
例えば、「SSHログイン失敗回数が設定されているか」を確認するコードは、
describe sshd_config do
its('MaxAuthTries') { should cmp <= 4 }
end
可読性がとても高いですね。4回以上のログイン失敗を許可しないことを示しています。
他にも、「RootユーザーのSSHログインを許可していないか」を確認するコードは、
describe sshd_config do
its('PermitRootLogin') { should eq 'no' }
end
本記事では、 "CISベンチマーク準拠"のテストコードを使いますが、より緩いテストコードも存在します。
自宅サーバーのテストとしては、こちらの方が現実的かもしれません。Githubリンク
git clone https://github.com/dev-sec/linux-baseline.git
Step3: テスト実行
InSpecは、OSに変更を加えることは絶対にありません。スキャン・監査を行うのみです。
↓のコマンドで、Step2で取得したテストコードを実行していきます。
ラズパイへのSSH接続ができることが実行条件です。
inspec exec --chef-license=yes cis-dil-benchmark -t ssh://[ラズパイホスト名orIPアドレス]
コマンドオプション説明(展開)
`--chef-license=yes`:InSpecは、Chefと同様に商用利用する場合ライセンスを取得する必要があります。商用で利用する場合、事前にライセンス販売代理店に[お問い合わせください。](https://www.chef-sec.com/)
`-t`:リモートターゲットモードです。リモートマシン(ラズパイ)に対してテストコードを実行する際に使用します。
Step4: テスト結果確認
・標準出力
さすがCISベンチマーク!テスト項目と結果が半端ない長さなので割愛します😅
代わりにスクショを貼ります。
問題なくPassしているテスト項目もありますが、105個の大項目でセキュリティに問題が検知されていることがわかります。
テスト結果の一部を詳しく見てみましょう。
・SSH設定関連
expected:
は、あるべき設定の状態です。
got:
は、実際の設定値です。
HostbasedAuthentication
設定については、”no"(無効化)ではなく、”nil”となっていて明示的に無効化されていないために問題検知を示す X となっています。
但し、「Rootログイン」や「空パスワード」については、正常に無効化できていることがわかります。
・ユーザー設定関連
こちらは、各ユーザーのホームディレクトリの有無や権限を確認しています。
全てのユーザーのホームディレクトリの権限は、750
以上である必要がありますが、満たせていないようです。
/home/r-goto
ディレクトリの権限には第三者によるRead権限が付されていまっていることがわかります。
・Web UI画面
Chef Automate のセットアップが必要になりますが、より高精度なテスト結果の分析を行うことができます。Slack、メール、ServiceNowと連携させることで高度な通知機能も扱うことができるようになります。
・HTMLファイル出力
inspec exec cis-dil-benchmark -t ssh://myCloud --reporter=html2 > inspect_test_results.html
上記コマンドオプションで実行し、inspect_test_results.html のように結果をHTML形式で出力することができます。
HTML以外にも、JSONやYAML出力も可能です。
Step5: まとめ&【お問い合わせ】
InSpecでラズパイのセキュリティレベルを把握することができました。
継続的かつ定期的にInSpecテストを実行することで、常にセキュアな状態を保つことができます。
検知された設定項目を手動で直すことも可能ですが、IaC(Infrastructure as Code)で自動修正することで設定ミスを減らし、よりセキュアにすることができます。次の記事でやり方をご紹介します。
InSpecに関する技術サポートや商用ライセンスの取得は、国内販売代理店に問い合わせることができます。
おまけ(テストコードのカスタマイズ)
今回のCISベンチマークは、企業のセキュリティ部門が使用する程のガチ堅牢基準です。自宅サーバーをここまで堅牢にする必要はないように思います。
そこで、テスト項目をカスタマイズする方法を最後にご紹介します。
上記で説明されているWaiver機能を使うことで不要なテストをスキップさせることができます。
YAMLもしくはJASONのファイル(waivers.yaml
)を作成します。
waivers.yaml
にスキップさせたいテスト項目名を以下のように追記。
cis-dil-benchmark-1.1.1.1:
expiration_date: 2050-10-15
justification: Not needed
cis-dil-benchmark-1.1.1.2:
expiration_date: 2050-10-15
justification: Not needed
Waiverファイルを指定してInSpec実行
inspec exec --chef-license=yes cis-dil-benchmark --waiver-file waivers.yaml -t ssh://[ラズパイホスト名orIPアドレス]
-
Progress社は、ITインフラストラクチャの自動化およびセキュリティの向上を支援する企業です。ChefとInSpecといった強力なオートメーションツールを提供し、クラウドおよびオンプレミスの環境での効率的な運用とセキュリティの確保をサポートしています。 ↩