macOS MDM
Reading time: 15 minutes
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
macOS MDMについて学ぶには、次を確認してください:
基本
MDM (モバイルデバイス管理) 概要
モバイルデバイス管理 (MDM) は、スマートフォン、ラップトップ、タブレットなどのさまざまなエンドユーザーデバイスを監視するために利用されます。特にAppleのプラットフォーム(iOS、macOS、tvOS)においては、一連の専門的な機能、API、および実践が含まれます。MDMの運用は、商業的に入手可能またはオープンソースの互換性のあるMDMサーバーに依存し、MDMプロトコルをサポートする必要があります。主なポイントは以下の通りです:
- デバイスの集中管理。
- MDMプロトコルに準拠したMDMサーバーへの依存。
- MDMサーバーがデバイスにさまざまなコマンドを送信できる能力、例えば、リモートデータ消去や設定のインストールなど。
DEP (デバイス登録プログラム) の基本
Appleが提供するデバイス登録プログラム (DEP) は、iOS、macOS、tvOSデバイスのモバイルデバイス管理(MDM)を簡素化し、ゼロタッチ構成を可能にします。DEPは登録プロセスを自動化し、デバイスが箱から出してすぐに動作可能で、最小限のユーザーまたは管理者の介入で済むようにします。重要な側面は以下の通りです:
- デバイスが初回起動時に事前定義されたMDMサーバーに自動的に登録されることを可能にします。
- 主に新しいデバイスに有益ですが、再構成中のデバイスにも適用可能です。
- 簡単なセットアップを促進し、デバイスを迅速に組織で使用できるようにします。
セキュリティの考慮事項
DEPによって提供される登録の容易さは有益ですが、セキュリティリスクも伴うことに注意が必要です。MDM登録に対する保護措置が適切に施されていない場合、攻撃者はこの簡素化されたプロセスを利用して、自分のデバイスを組織のMDMサーバーに登録し、企業デバイスを装う可能性があります。
caution
セキュリティ警告: 簡素化されたDEP登録は、適切な保護策が講じられていない場合、組織のMDMサーバーに対する不正なデバイス登録を許可する可能性があります。
SCEP (シンプル証明書登録プロトコル) とは?
- TLSやHTTPSが広まる前に作成された比較的古いプロトコルです。
- クライアントが証明書を取得するために証明書署名要求 (CSR) を送信する標準化された方法を提供します。クライアントはサーバーに署名された証明書を要求します。
構成プロファイル (モバイル構成ファイル) とは?
- Appleによるシステム構成の設定/強制の公式な方法です。
- 複数のペイロードを含むことができるファイル形式です。
- プロパティリスト(XML形式)に基づいています。
- 「その起源を検証し、整合性を確保し、内容を保護するために署名および暗号化できます。」 基本 — ページ70, iOSセキュリティガイド, 2018年1月。
プロトコル
MDM
- APNs (Appleサーバー) + RESTful API (MDM ベンダーサーバー) の組み合わせ
- 通信はデバイスとデバイス管理製品に関連するサーバーの間で行われます
- コマンドはMDMからデバイスにplistエンコードされた辞書で配信されます
- すべてHTTPS経由です。MDMサーバーは(通常)ピン留めされます。
- AppleはMDMベンダーにAPNs証明書を認証用に付与します
DEP
- 3つのAPI: 1つはリセラー用、1つはMDMベンダー用、1つはデバイスID用(未文書):
- いわゆるDEP "クラウドサービス" API。これはMDMサーバーが特定のデバイスにDEPプロファイルを関連付けるために使用します。
- Apple認定リセラーが使用するDEP APIは、デバイスを登録し、登録状況を確認し、取引状況を確認します。
- 未文書のプライベートDEP API。これはAppleデバイスが自分のDEPプロファイルを要求するために使用します。macOSでは、
cloudconfigurationd
バイナリがこのAPIを介して通信する責任があります。 - より現代的でJSONベース(vs. plist)
- AppleはMDMベンダーにOAuthトークンを付与します
DEP "クラウドサービス" API
- RESTful
- AppleからMDMサーバーへのデバイスレコードの同期
- MDMサーバーからAppleへの「DEPプロファイル」の同期(後でデバイスに配信される)
- DEP「プロファイル」には以下が含まれます:
- MDMベンダーサーバーのURL
- サーバーURL用の追加の信頼された証明書(オプションのピン留め)
- 追加の設定(例:セットアップアシスタントでスキップする画面)
シリアル番号
2010年以降に製造されたAppleデバイスは一般的に12文字の英数字のシリアル番号を持ち、最初の3桁は製造場所を表し、次の2桁は製造年と週を示し、次の3桁はユニークな識別子を提供し、最後の4桁はモデル番号を表します。
登録と管理の手順
- デバイスレコードの作成(リセラー、Apple):新しいデバイスのレコードが作成されます
- デバイスレコードの割り当て(顧客):デバイスがMDMサーバーに割り当てられます
- デバイスレコードの同期(MDMベンダー):MDMがデバイスレコードを同期し、DEPプロファイルをAppleにプッシュします
- DEPチェックイン(デバイス):デバイスがDEPプロファイルを取得します
- プロファイルの取得(デバイス)
- プロファイルのインストール(デバイス) a. MDM、SCEP、およびルートCAペイロードを含む
- MDMコマンドの発行(デバイス)
ファイル/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/System/Library/PrivateFrameworks/ConfigurationProfiles.framework/ConfigurationProfiles.tbd
は、登録プロセスの**高レベルの「ステップ」**と見なされる関数をエクスポートします。
ステップ4: DEPチェックイン - アクティベーションレコードの取得
このプロセスの一部は、ユーザーが初めてMacを起動したとき(または完全にワイプした後)に発生します。
またはsudo profiles show -type enrollment
を実行したときに。
- デバイスがDEP対応かどうかを判断
- アクティベーションレコードは**DEP「プロファイル」**の内部名です
- デバイスがインターネットに接続されるとすぐに始まります
- **
CPFetchActivationRecord
**によって駆動されます - **
cloudconfigurationd
によってXPCを介して実装されます。デバイスが初めて起動されたときの「セットアップアシスタント」またはprofiles
**コマンドがこのデーモンに連絡してアクティベーションレコードを取得します。 - LaunchDaemon(常にrootとして実行)
アクティベーションレコードを取得するために**MCTeslaConfigurationFetcher
によって実行されるいくつかのステップに従います。このプロセスはAbsinthe**という暗号化を使用します。
- 証明書を取得
- GET https://iprofiles.apple.com/resource/certificate.cer
- 証明書から状態を初期化(
NACInit
) - 様々なデバイス固有のデータを使用します(例:シリアル番号を
IOKit
経由で) - セッションキーを取得
- POST https://iprofiles.apple.com/session
- セッションを確立(
NACKeyEstablishment
) - リクエストを行う
- POST https://iprofiles.apple.com/macProfileにデータ
{ "action": "RequestProfileConfiguration", "sn": "" }
を送信 - JSONペイロードはAbsintheで暗号化されます(
NACSign
) - すべてのリクエストはHTTPs経由で行われ、組み込みのルート証明書が使用されます
レスポンスは、以下のような重要なデータを含むJSON辞書です:
- url: アクティベーションプロファイルのためのMDMベンダーホストのURL
- anchor-certs: 信頼されたアンカーとして使用されるDER証明書の配列
ステップ5: プロファイルの取得
- DEPプロファイルで提供されたurlにリクエストが送信されます。
- 提供された場合、アンカー証明書が信頼性を評価するために使用されます。
- リマインダー: DEPプロファイルのanchor_certsプロパティ
- リクエストはデバイス識別を含むシンプルな.plistです
- 例: UDID、OSバージョン。
- CMS署名、DERエンコード
- **デバイスID証明書(APNSからの)**を使用して署名されます。
- 証明書チェーンには期限切れのApple iPhone Device CAが含まれます。
ステップ6: プロファイルのインストール
- 取得後、プロファイルはシステムに保存されます
- このステップは自動的に開始されます(セットアップアシスタントにいる場合)
- **
CPInstallActivationProfile
**によって駆動されます - XPCを介してmdmclientによって実装されます
- LaunchDaemon(rootとして)またはLaunchAgent(ユーザーとして)、コンテキストに応じて
- 構成プロファイルにはインストールする複数のペイロードがあります
- フレームワークはプロファイルをインストールするためのプラグインベースのアーキテクチャを持っています
- 各ペイロードタイプはプラグインに関連付けられています
- XPC(フレームワーク内)または従来のCocoa(ManagedClient.app内)である可能性があります
- 例:
- 証明書ペイロードはCertificateService.xpcを使用します
通常、MDMベンダーが提供するアクティベーションプロファイルには以下のペイロードが含まれます:
com.apple.mdm
: デバイスをMDMに登録するためcom.apple.security.scep
: デバイスにクライアント証明書を安全に提供するため。com.apple.security.pem
: デバイスのシステムキーチェーンに信頼されたCA証明書をインストールするため。- MDMペイロードのインストールは、文書内のMDMチェックインに相当します。
- ペイロードには主要なプロパティが含まれます:
-
- MDMチェックインURL(
CheckInURL
)
- MDMチェックインURL(
- MDMコマンドポーリングURL(
ServerURL
) + それをトリガーするAPNsトピック - MDMペイロードをインストールするために、リクエストが**
CheckInURL
**に送信されます - **
mdmclient
**で実装されています - MDMペイロードは他のペイロードに依存することがあります
- 特定の証明書にリクエストをピン留めすることを許可します:
- プロパティ:
CheckInURLPinningCertificateUUIDs
- プロパティ:
ServerURLPinningCertificateUUIDs
- PEMペイロードを介して配信されます
- デバイスにアイデンティティ証明書を付与することを許可します:
- プロパティ:IdentityCertificateUUID
- SCEPペイロードを介して配信されます
ステップ7: MDMコマンドのリスニング
- MDMチェックインが完了した後、ベンダーはAPNsを使用してプッシュ通知を発行できます
- 受信時、**
mdmclient
**によって処理されます - MDMコマンドをポーリングするために、リクエストがServerURLに送信されます
- 以前にインストールされたMDMペイロードを利用します:
- **
ServerURLPinningCertificateUUIDs
**によるリクエストのピン留め - **
IdentityCertificateUUID
**によるTLSクライアント証明書
攻撃
他の組織へのデバイスの登録
前述のように、デバイスを組織に登録しようとするには、その組織に属するシリアル番号のみが必要です。デバイスが登録されると、いくつかの組織は新しいデバイスに機密データをインストールします:証明書、アプリケーション、WiFiパスワード、VPN設定などこちらを参照してください。
したがって、登録プロセスが適切に保護されていない場合、これは攻撃者にとって危険な入り口となる可能性があります:
Enrolling Devices in Other Organisations
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。