リモートワークになり、自宅のネットワークを使って仕事をすることが多くなりました。
そんなリモートワークのセキュリティ要件の中でWiFiの暗号化方式(WEP、WPA、WPA2、WPA3)を入れている企業は多いのではないでしょうか。
しかしこれを全従業員に手動でチェックしてもらうのはなかなか大変です。よってこの暗号化方式のチェックを自動化して、警告してくれる仕組みを作りました。
課題
- WiFi暗号化方式の調査に時間がかかる
- WiFi暗号化方式の調査がきちんと実行されたかがわからない
解決した方法
- 下記を行うスクリプトを作成する
- PCで現在接続しているWiFiをチェックして、WPA2とWPA3であれば安全
- それ以外であれば危険としました
- 危険の場合は、ユーザに警告画面を表示して安全な暗号化方式への変更、もしくはサービスデスクへの連絡を促します
- JamfなどのMDMでネットワーク変更時に自動実行されるようにポリシーを作成する
- できなかったこと
- 本当は警告ではなく、ブロックしたかったが実装の方法がわからなかったため、警告になった
具体的な手順
さて、ここからは具体的な手順を記していきます。
スクリプトを作成
スクリプトの一例です。ログも抽出するようにしています。
#!/bin/sh ## Setting AIRPORT_DIR="/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources" logFile="/Library/Logs/TechSupport/WiFi-Encrypt-Check/check.log" mkdir -p /Library/Logs/TechSupport/WiFi-Encrypt-Check/ touch ${logFile} ## wifi on or off WIFI_CHECK=`${AIRPORT_DIR}/airport -I | grep "running" | awk '{print $2}'` if [[ ${WIFI_CHECK} != "running" ]]; then echo "$(date)" "WiFi is OFF" >> "$logFile" exit 0 fi ## wifi encrypt check WIFI_ENCRYPT=`${AIRPORT_DIR}/airport -I | grep "link" | awk '{print $3}'` #WIFI_ENCRYPT="wep" if [[ ${WIFI_ENCRYPT} = "wpa2"* ]] || [[ ${WIFI_ENCRYPT} = "wpa3"* ]] ; then echo "$(date)" "WiFi is safety! reason:${WIFI_ENCRYPT}" >> "$logFile" else user=$(ls -la /dev/console | cut -d " " -f 4) userPrompt=$(sudo -u ${user} osascript -e ' display dialog "あなたの接続しているWiFiは危険です!" buttons {"OK"} default button 1 with title "WiFi Check" set tmp to result set btn to button returned of tmp ') echo "$(date)" "WiFi is danger! reason:${WIFI_ENCRYPT}" >> "$logFile" fi exit 0
最新のソースコードはこちら
Jamfでのポリシー設定
トリガーをネットワーク状態の変更に設定して動かす

ログ出力
# cat check.log Tue May 25 15:02:10 JST 2021 WiFi is safety! reason:wpa2-psk Tue May 25 15:02:18 JST 2021 WiFi is safety! reason:wpa2-psk Tue May 25 15:02:39 JST 2021 WiFi is safety! reason:wpa3-sae Tue May 25 15:02:47 JST 2021 WiFi is safety! reason:wpa3-sae Tue May 25 15:03:06 JST 2021 WiFi is safety! reason:wpa2-psk Tue May 25 15:03:14 JST 2021 WiFi is safety! reason:wpa2-psk
警告画面
WPA2、WPA3以外を利用している場合、警告が出ます。

自動でブロックすることを考えてみる
冒頭でブロックしたいが実装方法がわからない、と書きました。ここでは自動でブロックする方法、つまりWPA2とWPA3のときだけ、ネットワークにつながる方法を考えてみたいと思います。
方法は大きく2つだと考えています。1つ目がJamfなどのMDMのポリシー設定でそのような設定ができる。2つ目は今回のようなスクリプトを使って、接続しているネットワークの暗号化方式を検知して、その後にブロックするという方法。スマートで運用も楽なのは1つ目の方法です。
そしてJamfではこの設定がポリシーのみの設定でできそうにありません(もしできるなら教えてほしいです)。よって2つ目の方法しかないかな、と考えます。
そしてこの記事で紹介したスクリプトで暗号化方式の検知まではできるため、ブロックの部分の処理を考えればできそうです。
ブロックの処理ですが、接続を切るという意味で
# airport -z # networksetup -setairportpower en0 off
あたりは使えそうです。ただユーザは手動で再接続可能です。
終わりに
これを手動でやると、
- ユーザが自分のmacのネットワーク設定を確認 5分
- 安全であることを管理者に連絡 1分
1ユーザにつき、最低6分はかかります。従業員が100人いれば600分。ネットワークが変わるたびに実施が必要なので、実際はもっとかかるでしょう。さらにはユーザの善意での運用ですのでチェックを忘れていて、脆弱な環境で使っていたとなれば、セキュリティリスクが上がります。
確実にセキュリティチェックが行われる
自動でチェックが行われ、ユーザと管理者の手間が減る
ユーザが警告画面から脆弱な状態に気づきやすい
この仕組みを使うことで上記3点が達成され、[su_highlight background=”#fff299″]セキュリティ向上、生産性の向上[/su_highlight]が見込めます。