SaaS

Microsoft Defender for Endpoint on macOSでUSBデバイス制御試してみた

はじめに

どーもみなさんこんにちは。ねもてぃです。

今回はMicrosoft Defender for Endpoint on macOS(MDfE)でどこまでUSBの制御ができるの?っていうことについてお話しようと思います。これにはいろいろと背景がありまして、

  • 資産管理系ソフトのように細かいUSB制御がしたい(特定のUSBのみ許可など)
  • MDMからだと全て禁止か読み込みのみ許可、といった大まかな制限しかできない
  • そもそもmacOS 11 Big Surあたりから構成プロファイルのUSB制御系のペイロードが非推奨になっている

といったことが挙げられます。ここ最近はUSBストレージの利用は減ってきているものの、いざ必要となったときにどうしようかなぁ・・・と悩みのタネだったのですが採用する企業が増えてきているMDfEである程度カバーできそうだったので実際にどこまでできそうかを検証してみました。

Microsoft Defender for EndpointのmacOSデバイスコントロールについて

Microsoftのブログを見てみましょう。

主なできることとして、

  • この機能は、監査およびブロックの実施レベルをサポートします。
  • USBデバイスアクセスは、読み取り、書き込み、実行、アクセスなしに設定できます。
  • 高度な粒度を実現するために、製品ID、ベンダーID、およびシリアル番号にUSBアクセスレベルを指定できます。
  • カスタムポリシーでは、「デバイス制限」通知に直面しているエンドユーザーと対話するときにユーザーがリダイレクトされるURLをカスタマイズできます。

が挙げられています。あとはMicrosoft Defender Security Centerでのadvanced hunting機能による調査方法についても少し言及されています。

デバイスコントロール機能を利用するための要件としては、

次の要件が満たされていることを確認してください。

・この新機能は、macOS Catalina 10.15.4+を実行しているデバイスでサポートされています

・参加するデバイスは、システム拡張機能を使用して実行されている必要があります(これはmacOS 11 Big Surのデフォルトです)

・参加デバイスは、InsiderFast MicrosoftAutoUpdateチャネルに登録する必要があります

・この機能のMicrosoftDefender forEndpointの最小クライアントバージョンは101.24.59です。

https://techcommunity.microsoft.com/t5/microsoft-defender-for-endpoint/mac-updates-control-your-usb-devices-with-microsoft-defender-for/ba-p/2224439

となっています。ただ、正式リリース後のMicrosoft Defender for Endpointの公式ドキュメントを確認すると、

macOS のデバイスコントロールには、次の前提条件があります。

・Microsoft Defender for Endpoint の資格 (試用版の場合があります)

・最小 OS バージョン: macOS 11 以上

・最小製品バージョン: 101.34.20

https://docs.microsoft.com/ja-jp/microsoft-365/security/defender-endpoint/mac-device-control-overview?view=o365-worldwide

と、なっておりサポートされているOSバージョンとクライアントバージョンの下限が変更されているようです。

実際に設定してみる

MicrosoftのドキュメントにJamf Proから配布する場合の設定例が公開されているので実際に設定してみます。

すべてのリムーバブルメディアへのアクセスを禁止したり読み取りのみにしたり

これはわかりやすいですね。まずはすべてのリムーバブルメディアへのアクセスを禁止した場合の例を見てみましょう。

Jamf Pro管理コンソール > コンピュータ > 構成プロファイル > “+新規” > アプリケーションとカスタム設定 > アップロード より下記を設定します。

環境設定ドメイン:com.microsoft.wdav

プロパティリスト:下記をコピペ

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "<http://www.apple.com/DTDs/PropertyList-1.0.dtd>">
<plist version="1.0">
<dict>
    <key>deviceControl</key>
    <dict>
        <key>removableMediaPolicy</key>
        <dict>
            <key>enforcementLevel</key>
            <string>block</string>
            <key>permission</key>
            <array>
                <string>none</string>
            </array>
        </dict>
    </dict>
</dict>
</plist>

キー値について簡単に解説すると、

  • enforcementLevelのキーでは設定の強制力を設定できます。
    • audit
      • ユーザー通知を行うだけで実際の制限は実行されません。
    • block
      • ユーザー通知と共に実際に制限が実行されます。
  • permissionのキーで制限項目の設定を行います。
    • none
      • 全ての操作を禁止します。
    • read
      • 読み取りを許可します。
    • write
      • 書き込みを許可します。
    • execute
      • 実行を許可します。

といった感じです。例えば全てのリムーバブルメディアを読み取りのみ許可したい場合のプロパティリストはこんな感じになります。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "<http://www.apple.com/DTDs/PropertyList-1.0.dtd>">
<plist version="1.0">
<dict>
    <key>deviceControl</key>
    <dict>
        <key>removableMediaPolicy</key>
        <dict>
            <key>enforcementLevel</key>
            <string>block</string>
            <key>permission</key>
            <array>
                <string>read</string>
            </array>
        </dict>
    </dict>
</dict>
</plist>

Jamf Pro側はこんな感じです。Scopeの設定を忘れずに!

すべてのリムーバブルメディアへのアクセスを禁止に設定する場合の例
読み込みのみ許可の構成プロファイル

動作確認

配布ができたことを確認し、実機にUSBメモリを接続してみます。

アラートとしてはこんな感じのアラートがユーザーに通知されます。

ユーザー通知

読み込みのみ許可した場合に書き込もうとするとこんな感じのアラートが出ます。

USBメディアへファイルの書き込み
USBメディア内のファイルへの書き込み

特定のリムーバブルメディアのみ許可してみる

すべてのリムーバブルメディアを対象にした設定は上記の設定で確認できました。この辺は構成プロファイルでできる制御と結果はあまり変わらないですね。どちらかというと特定のUSBメモリを許可する、といった設定の需要の方が高いのではないのでしょうか。

というわけで特定のUSBメモリのみ許可する設定をしてみます。Microsoftのドキュメントにあるサンプルは特定のリムーバブルディスクのみ禁止する設定なので気をつけましょう。(あのサンプルは需要があるのだろうか・・・)

以下の設定は特定のUSBメモリの読み書きのみを許可した場合のプロパティリストになります。環境設定ドメインは同じくcom.microsoft.wdavです。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "<http://www.apple.com/DTDs/PropertyList-1.0.dtd>">
<plist version="1.0">
<dict>
    <key>deviceControl</key>
    <dict>
        <key>removableMediaPolicy</key>
        <dict>
            <key>enforcementLevel</key>
            <string>block</string>
            <key>permission</key>
            <array>
                <string>none</string>
            </array>
            <key>vendors</key>
            <dict>
                <key>0a6b</key>
                <dict>
                    <key>permission</key>
                    <array>
                        <string>none</string>
                    </array>
                    <key>products</key>
                    <dict>
                        <key>0004</key>
                        <dict>
                            <key>permission</key>
                            <array>
                                <string>none</string>
                            </array>
                            <key>serialNumbers</key>
                            <dict>
                                <key>07731A2103B7</key>
                                <array>
                                  <string>read</string>
                                  <string>write</string>
                                </array>
                            </dict>
                        </dict>
                    </dict>
                </dict>
            </dict>
        </dict>
    </dict>
</dict>
</plist>

はい。何が増えたかというと、vendorsproductsserialNumbers、といったキー値が増えています。これらは入れ子になっているので順番に指定してあげないといけません。じゃあ実際の値はどこから確認するかというと、許可したいUSBメモリをMacに挿した状態で、メニューバーりんごマーク > このMacについて > システムレポート > USB から確認できます。順番が前後しているのですが、

vendors:製造元ID(頭の0xを除くこと!/”0x0a6b”なら”0a6b”を設定する

products:製品ID(頭の0xを除くこと!/”0x0004″なら”0004″を設定する

serialNumbers:シリアル番号

となります。

メニューバーりんごマーク > このMacについて > システムレポート > USB

この情報はUSB接続を制限している状態でも取得できますので、許可申請をしてもらう場合などに確認してもらう場所になるかと思います。

動作確認

Scopeを設定ののち、配布ができたことを確認し、実機にUSBメモリを接続してみます。

ユーザー通知

許可しているのに通知が出ます。これはRead/Write/Excuteのどれか一つでも制限していると表示されます。(今回はExcuteを許可していないので通知が表示されています)

余談:実際に運用するなら・・・(ジャストアイディアレベル)

以上の設定で期待した制御ができることが確認できました。でもいちいち構成プロファイルの作るのめんどくさいよなこれ・・・というのが率直な感想です。なんかいい方法ないかなーレベルで思いついたことを書いておきます。

<シナリオ>

  • 1台のMacにつき1個のUSBメモリを許可したい

<思いつき>

  • 拡張属性を利用する

構成プロファイルには設定値の変数として拡張属性に追加した情報が使えます。Macのインベントリに拡張属性としてベンダーID、プロダクトID、シリアル番号を追加することで各Macごとに異なる値を代入して設定を配布することができます。情報の追加は申請を受けて手動で追加してもいいですし、APIを利用して入力するようにするともっと楽にできそうです。変数が入る前に配られた構成プロファイルは役に立たないのでSmart Computer Groupで各値が入力されているグループを作成し、Scopeに設定する、みたいな形をとると良いかもしれません。

拡張属性としてベンダーID/プロダクトID/シリアル番号を追加
構成プロファイルの変数として拡張属性を利用する
Mac側の設定に変数が正しく反映されていることが確認できます。

おまけ:Advanced Huntingを利用してUSB利用ログを確認する

Microsoft Defender Security CenterのAdvanced Huntingを利用するとUSBデバイスの利用ログ等が確認できます。Microsoftのドキュメントに記載があるのはマウントやアンマウントを抽出する例ですがクエリを変更することでその他の情報も取得できます。実行したクエリはこちら。

DeviceEvents
    | where ActionType == "UsbDriveMounted" or ActionType == "UsbDriveUnmounted" or ActionType == "UsbDriveDriveLetterChanged"
クエリを実行するとこのようにUSBデバイスをマウントした時間などの情報が取得できます。

おわりに

以上、Microsoft Defender for Endpoint on macOSにてUSBデバイスを制御する方法でした。利用したいUSBデバイスの量やケースによっては運用がしんどい内容にはなっておりますが、そこがクリアできれば特定のUSBデバイスのみ許可することが可能かと思います。基本的にはUSBデバイスを禁止して、例外的に許可する場合であれば十分利用できる機能なのではないかなという感じです。これ以上の管理を求める場合は現状資産管理系のツールを検討する必要がありそうです・・・そもそもUSBデバイスを経由したデータのやり取りが本当に必要でその他の方法、手段はないのか?といったところから見直してみるといいかもしれません。それでは!

参考リンク

「macOSのデバイスコントロール」

「Mac updates: Control your USB devices with Microsoft Defender for Endpoint on Mac!」

「JAMF のデバイス制御ポリシーの例」

ねもてぃ(nemotea)

2020年10月入社。デバイスチーム所属。
前職ではAppleデバイスとMDM周りのエンジニアをしていました。
漫画・アニメとお酒が好きなギタリストです。