見出し画像

macOSのセキュリティ設定を可視化する 1

これはmacOSのセキュリティ設定を可視化する記事である。

現在、macOSデバイスの管理にはJamfを入れています。そのため、ユーザ(社員)にmacbookを渡した時点ではきちんとセキュリティ設定が適用されている状態です。

しかし、では今、どうなのでしょうか?基本的にはセキュリティ設定は変更できないような仕組みになってますが、場合によっては変更可能なものもありますし、私が予想もしていない方法で変更されている可能性もあります。

こんな背景から、いままさに、Now、セキュリティ設定がどうなっているのか?を知りたいという課題が生まれました。

ゴール

さて、今回のセキュリティ状況の可視化における理想はなんでしょう?
私が求めているのは大きく4つです。

1. いま、どうなっているかが知れる(リアルタイム性)
2. グラフで可視化できる(可視性)
3. 複数台への導入が容易にできる(導入容易性)
4. テストなのでコストを大きくかけずにできること(コスト)

仕組みを大雑把に考えてみる

ゴールから仕組みを考えていきます。

リアルタイム性が必要なことから、macOS上では定期的に設定を確認するコードを実行する必要があります。イメージとしては1日1回もしくは複数回。

そして、そこで取得したデータをグラフで可視化可能なシステムへ送る必要があります。イメージとしてはDBなどに情報を送って、なおかつそれらのデータをグラフとして可視化します。

そして、複数台への導入にはJamfを使います。Jamfを使って展開できる形が必要です。

コストはできるだけ弊社の現環境で行うことを考えていきます。

全体構成

はい、ということで、弊社の現環境を使うことを前提にした全体構成がこちらです。(2020/10/09 絵を更新)

スクリーンショット 2020-10-09 16.56.33


仕組みとしては単純でmacOSのplistで定期実行を実現しています。そこで、設定情報を確認するスクリプトを回しています。

そのスクリプトの最後にGoogle スプレッドシートへデータ送信(POST)する処理を入れてます。

そしてGoogle データポータルからスプレッドシートを読み込んで、グラフ化するという流れです。

それとは別に、Jamf Proから定期実行に必要なplistファイルと設定情報を確認、送信するためのスクリプトを配信する仕組みです。

セキュリティ観点でまずい部分はあるのですが、テストなのでいったんこの構成です。コストゼロでできますしw

設定確認スクリプト

これはセキュリティ設定を確認し、スプレッドシートへ送信する機能を持っています。

セキュリティ設定の確認はこんな形でやっています。これはFileVaultの有効、無効を確認しています。

## Check2 - FV2 Check
if [ "$check2" = 1 ]; then
	fv2="$(sudo fdesetup status | awk '{print $3}')"
	if [ "$fv2" = "On." ]; then
	 	echo "$(date)" "check2 passed" | tee -a "$logFile"
       checkArry[2]='OK'
	 	else
		echo "$(date)" "check2 fix" | tee -a "$logFile"
       checkArry[2]='NG'
	fi
   echo "* Check2 Enable FileVault2: "${checkArry[2]} >> "$auditfilelocation"
fi

そして送信部分は配列からJSONを生成して、GASに対してPOSTしています。このJSON生成のところが一番難しかったです。この部分、もっと良い方法があれば誰か教えて下さい。この送信部分は要改善です。

json=$(for i in "${!checkArry[@]}"; do
 echo check"$i"
 echo "${checkArry[$i]}"
done | jq -c -n -R 'reduce inputs as $i ({}; . + { ($i): (input|(tonumber? // .)) })')

curl -H "Content-Type: application/json" -d $json -L $gaspost

GAS、スプレッドシート

ここはPOSTされたデータを受け取って、セル内に設定する機能です。
doPostで受け取って、値を抽出して、シリアル番号が合致する行へ設定しています。

function doPost(e) {
 // パラメータから対象の値を抽出
 
 var PostData = JSON.parse(e.postData.contents);
 var serial = PostData.check0;

スクリーンショット 2020-10-09 12.24.38

Googleデータポータル

現時点で満足行くグラフを作れていないです。Googleデータポータルに慣れていないということもありますが、微妙なグラフしか作れなかったです。

ホントはOKとNGで色が変わってほしいし、NG部分にポイントしたらシリアル番号が表示されてほしかったです。それができなかったので、苦肉の策で円グラフの下に、設定がNGのシリアル番号を表示させていたりしますw

スクリーンショット 2020-10-09 12.37.56

感想

さて、ここまでさっと作ってきて、これは使えるなと思ってます。
記事の冒頭でも書いていますが、今、まさにセキュリティ設定がどうなっているのかが、リアルタイムでわかるシステムに価値を感じてます。

管理者が全macOSのセキュリティ設定をさっと確認する、監査などで求められたときにもさっと出せるなどの用途があります。

もしこれを本番運用するなら、CISベンチマークの項目をベースに確認したいですね。

課題

課題は大きく2つです。
1つはセキュリティです。特にGASにPOSTする部分をもう少しセキュアにしたい。2つ目は可視化の部分です。今回は無料で使えるGoogleデータポータルを使いましたが、満足の行くグラフを作れなかったです。

なので、Googleデータポータルを使いこなすか(使いこなせば解決するかは不明)、別の可視化サービスを使うか、のどちらかでしょうか。

ということで、いったん、本記事はおしまい。

また何かしら改善したら、パート2の記事を出します。


この記事が気に入ったらサポートをしてみませんか?