macOS向け CIS Benchmark レポーティングの自動化 をやってみた
端末の管理者にとってセキュリティガイドラインの策定やその定期的なチェックは頭の痛い課題だと思います。
macOS 向け CIS Benchmark は、組織が mac のセキュリティを担保するうえで確認すべき総合的なチェックリストとして広く利用されています。
今回は Jamf Proを使用して、macOS 向け CIS Benchmark の遵守状況を自動的にレポーティングする仕組みをご紹介いたします。
ご紹介する内容で、下記画像のような CIS Benchmark のレポートを作成することができます。さらにMDMと組み合わせることでMDM管理下の各端末においてレポートを自動作成することができます。
前提
JNUC2022のセッション「Automating CIS Benchmark Reporting and Remediation」で紹介されていたCIS Benchmarksのレポーティングを実際にやってみます。
MDMにはJamf Pro を使用します。
Mischa van der Bent さんが公開している こちらのスクリプトを使用します。
https://github.com/mvdbent/CIS-Scriptご紹介するスクリプトには遵守されていない項目対する修復の機能もありますが、今回はレポート機能の紹介にとどめます。
設定概要
今回実施する設定は以下の内容です。
レポートスクリプトの準備
レポート設定用 構成プロファイルの準備
レポート設定の実施
レポーティングポリシーの準備
それでは、始めましょう!
設定詳細
1. レポートスクリプトの準備
1−1. スクリプトをダウンロード
こちらから最新のものをダウンロードして下さい。
※作成時の最新は Version 1.5でした
https://github.com/mvdbent/CIS-Script
1−2.レポートスクリプトを作成
ダウンロードしたスクリプトフォルダは下記画像のような構成になっています。
詳細は取得元のページをご確認下さい。
ターミナルで、ダウンロードしたフォルダへ移動し、下記のコマンドでレポートスクリプトを作成します。
#ダウンロードフォルダへ移動
cd /{PATH_TO ダウンロード先}/CIS-Script-1.5
#スクリプトを構成する
./Assemble.sh
下記、画像のようにBuildフォルダと、レポートスクリプト「CISBenchmarkScript.sh」が出力されます。
1-3. レポートスクリプトをJamf Proへアップロード
出力されたスクリプトを使用して、
[すべての設定]>[コンピュータ管理] > [スクリプト] >「新規」ボタン
からスクリプトを新規作成します。
1−(おまけ) スクリプトの内容
スクリプトの内容にまで触れるときりがないので止めようと思いましたが気になる方もいらっしゃると思うので少しだけ・・・
全項目が同じではありませんが、コントロール項目ごとに下記のような構成のスクリプトが集まって、チェックと修復(今回は触れませんが)、レポーティングまでを実施するという仕組みです。
2. レポート設定用 構成プロファイルの準備
2-1. 構成プロファイルのカスタムスキーマ用 jsonファイル を作成する
下記のコマンドでjsonファイルを作成します。
#レポート対象を指定するプロファイル用の作成
./Assemble.sh -j
画像のようにBuildフォルダの下に「Jamf Pro Custom Schema.json」が出力されます。
2-2. レポート設定用 構成プロファイルの作成
2-1 で作成した構成プロファイルのカスタムスキーマ用 jsonファイル を使用して、レポート設定用 構成プロファイルを作成します。
[コンピュータ] > [構成プロファイル] 「新規」ボタン から構成プロファイルを新規作成し、アプリケーションとカスタム設定」のペイロードを構成します。
設定内容は下記のとおりです。
■一般 ペイロード
・表示名:CIS Benchmark Settings 等、任意の名前
■アプリケーションとカスタム設定 ペイロード
・ソース:カスタムスキーマ
・環境設定ドメイン:com.cis.benchmark
・カスタムスキーマ:Jamf Pro Custom Schema.json をアップロード
SCOPEにはレポート対象の端末を指定して下さい。
3.レポート設定の実施
2で作成した構成プロファイルにて、出力設定を行います。
全項目のチェックを行う場合は、下記2項目のみ設定すればOKです。
必要に応じた設定で実施して下さい。
■アプリケーションとカスタム設定 ペイロード
・Reporting:Full Report
・Remediate:Disabled
今回準備しているスクリプトには、レポートのみではなく修復の機能も備わっており、Remediateの設定を Enabled に設定をすれば修復まで実施することが可能です。(スクリプトで対応可能な設定に限ります)
4.レポーティングポリシーの準備
4-1.レポートアップロードスクリプトの準備
1で作成したスクリプトは各端末上で動作し、それぞれの端末にレポートを出力するため、出力したレポートをJamf Pro のインベントリ情報の添付ファイルとしてアップロードする方法をご案内します。
ダウンロードしたフォルダの下記の場所にある
「Upload_CISBenchmarkReport.sh」を使用します。
[すべての設定]>[コンピュータ管理] > [スクリプト] >「新規」ボタン
からスクリプトを新規作成します。
その際、下記の箇所は変更しておくことをおすすめします。
■パラメータ名の定義
・パラメータ4:basic_auth
4-2.拡張属性のアップロード(オプション)
必須ではありませんが、レポートの取得を行わなくてもおおよその結果を把握するための拡張属性を作成します。
ダウンロードしたフォルダの下記の場所にあるxmlファイルをアップロードします。
アップロードは、Jamf Proの [すべての設定]>[コンピュータ管理] > [拡張属性]にある「アップロード」ボタンから実施します。
4-3.レポーティングポリシーの作成
レポーティングの自動化を行うポリシーを作成します。
ポリシー設定は以下の通りです。
■General
ポリシーの起動設定をします。
今回は1週に1回、レポート出力する想定で設定しました。
表示名:CIS Benchmark Report など日本語でも可
トリガー:Reccuring Check-in
実行頻度:Once every week
※出力のトリガーや頻度は運用に合わせて設定して下さい
■スクリプト
2つのスクリプトを設定します。
実行順が重要なので優先順位を忘れずに設定しましょう。
CISBenchmarkScript.sh:
・優先順位「Before」
Upload_CISBenchmarkReport.sh:
・優先順位「After」
・basic_auth 下記のコマンドで取得してください
# Basic認証の取得 username:password は適宜置き換えてください
$ printf "username:password" | iconv -t ISO-8859-1 | base64 -i -
動作確認
設定完了したら、動作確認をしてみます。
■確認ポイント
以下のようなポイントをご確認ください
① ポリシーは正常終了しているか?
② ポリシーログは正常に出力されているか?
→インベントリ情報のポリシーログで確認
③ 端末側にレポートが出力されているか?
→端末の下記のパスにレポートファイルが出力されていることを確認
/Library/Security/Reports/CISBenchmarkReport.csv
④ インベントリ情報にレポートは添付されているか?
→インベントリ情報にレポートファイルが添付されていることを確認。
(ファイル名のリンクをクリックするとダウンロードされる。)
レポートアップロードのスクリプトを、ファイル名を変更してアップロードするように変更すれば、履歴を保持することも可能です。
⑤ レポート内容は想定通りか?
→インベントリ情報の添付ファイルからダウンロードしたファイルを確認
⑥ 拡張属性の件数表示はレポートとあっているか?
(拡張属性を作成した場合のみ)
→インベントリ情報の拡張属性とレポート内容を比較チェック
おわりに
MDMがあれば(工夫次第でMDMがなくても)、追加のセキュリティ製品などを購入することなく、自動的・継続的にレポート(部分的ですが修復も)を行うことができるのはかなりポイントが高いと思います。
定期レポートとしてでなくても、セキュリテイ製品の導入の前に現状を調査したいというようなシーンでも使えると思います。
スクリプトであるため、導入する会社に合わせてチェック内容をカスタムすることができます。
また、レポートアップロードの仕組みを作り込めばJamf Proへの添付ではなくクラウドストレージ等へレポートを出力させてデータとして活用したり。。。等
使い勝手の良い仕組みだと思います。
※ご紹介した内容は、macOS Catalina・Big Sur・Montereyが対象で、
下記の環境で動作確認しました。
・macOS Big Sur 11.7
・macOS Monterey 12.6
テスト端末等でお試しいただいた上で実施してください。
以上、 エンジニアの中峯が担当いたしました。
最後まで読んでいただき、ありがとうございました。