macOS MDM

Reading time: 13 minutes

tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)

支持 HackTricks

要了解 macOS MDM,请查看:

基础知识

MDM(移动设备管理)概述

移动设备管理(MDM)用于管理各种终端用户设备,如智能手机、笔记本电脑和平板电脑。特别是对于苹果的平台(iOS、macOS、tvOS),它涉及一套专门的功能、API和实践。MDM 的操作依赖于一个兼容的 MDM 服务器,该服务器可以是商业可用的或开源的,并且必须支持 MDM 协议。关键点包括:

  • 对设备的集中控制。
  • 依赖于遵循 MDM 协议的 MDM 服务器。
  • MDM 服务器能够向设备发送各种命令,例如远程数据擦除或配置安装。

DEP(设备注册计划)基础知识

苹果提供的 设备注册计划(DEP)通过为 iOS、macOS 和 tvOS 设备提供零接触配置,简化了移动设备管理(MDM)的集成。DEP 自动化注册过程,使设备在开箱后即可投入使用,几乎不需要用户或管理员干预。基本方面包括:

  • 使设备在首次激活时能够自动注册到预定义的 MDM 服务器。
  • 主要对全新设备有利,但也适用于正在重新配置的设备。
  • 促进简单的设置,使设备迅速准备好供组织使用。

安全考虑

需要注意的是,DEP 提供的简化注册虽然有利,但也可能带来安全风险。如果没有充分执行保护措施,攻击者可能利用这一简化过程在组织的 MDM 服务器上注册他们的设备,伪装成企业设备。

caution

安全警报:如果没有适当的保护措施,简化的 DEP 注册可能会允许未经授权的设备在组织的 MDM 服务器上注册。

基础知识 什么是 SCEP(简单证书注册协议)?

  • 一种相对较旧的协议,创建于 TLS 和 HTTPS 广泛使用之前。
  • 为客户端提供了一种标准化的方式来发送 证书签名请求(CSR),以获得证书。客户端将请求服务器为其提供签名证书。

什么是配置文件(即 mobileconfigs)?

  • 苹果官方的 设置/强制系统配置 的方式。
  • 可以包含多个有效负载的文件格式。
  • 基于属性列表(XML 类型)。
  • “可以被签名和加密以验证其来源,确保其完整性,并保护其内容。” 基础知识 — 第 70 页,iOS 安全指南,2018 年 1 月。

协议

MDM

  • APNs(苹果服务器)+ RESTful API(MDM 供应商服务器)的组合
  • 通信发生在 设备 和与 设备管理 产品 相关的服务器之间
  • 命令plist 编码字典 的形式从 MDM 发送到设备
  • 所有通信通过 HTTPS。MDM 服务器可以(并且通常会)进行固定。
  • 苹果向 MDM 供应商授予 APNs 证书 以进行身份验证

DEP

  • 3 个 API:1 个用于经销商,1 个用于 MDM 供应商,1 个用于设备身份(未记录):
  • 所谓的 DEP "云服务" API。MDM 服务器使用此 API 将 DEP 配置文件与特定设备关联。
  • 苹果授权经销商使用的 DEP API 用于注册设备、检查注册状态和检查交易状态。
  • 未记录的私有 DEP API。苹果设备使用此 API 请求其 DEP 配置文件。在 macOS 上,cloudconfigurationd 二进制文件负责通过此 API 进行通信。
  • 更现代且基于 JSON(与 plist 相比)
  • 苹果向 MDM 供应商授予 OAuth 令牌

DEP "云服务" API

  • RESTful
  • 从苹果同步设备记录到 MDM 服务器
  • 从 MDM 服务器同步“DEP 配置文件”到苹果(稍后由苹果传递给设备)
  • 一个 DEP “配置文件”包含:
  • MDM 供应商服务器 URL
  • 服务器 URL 的附加受信任证书(可选固定)
  • 额外设置(例如,跳过设置助手中的哪些屏幕)

序列号

2010 年后制造的苹果设备通常具有 12 个字符的字母数字 序列号,前三个数字表示制造地点,接下来的 两个 表示 制造的年份周数,接下来的 三个 数字提供 唯一 标识符,最后 四个 数字表示 型号

macOS Serial Number

注册和管理步骤

  1. 设备记录创建(经销商,苹果):为新设备创建记录
  2. 设备记录分配(客户):将设备分配给 MDM 服务器
  3. 设备记录同步(MDM 供应商):MDM 同步设备记录并将 DEP 配置文件推送到苹果
  4. DEP 签到(设备):设备获取其 DEP 配置文件
  5. 配置文件检索(设备)
  6. 配置文件安装(设备) a. 包括 MDM、SCEP 和根 CA 有效负载
  7. 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 驱动
  • 通过 XPC 由 cloudconfigurationd 实现。“设置助手”(当设备首次启动时)或 profiles 命令将 联系此守护进程 以检索激活记录。
  • LaunchDaemon(始终以 root 身份运行)

它遵循几个步骤来获取激活记录,由 MCTeslaConfigurationFetcher 执行。此过程使用一种称为 Absinthe 的加密

  1. 检索 证书
  2. GET https://iprofiles.apple.com/resource/certificate.cer
  3. 初始化 状态来自证书(NACInit
  4. 使用各种设备特定数据(即 通过 IOKit 的序列号
  5. 检索 会话密钥
  6. POST https://iprofiles.apple.com/session
  7. 建立会话(NACKeyEstablishment
  8. 发出请求
  9. POST 到 https://iprofiles.apple.com/macProfile,发送数据 { "action": "RequestProfileConfiguration", "sn": "" }
  10. JSON 有效负载使用 Absinthe 加密(NACSign
  11. 所有请求通过 HTTPs,使用内置根证书

响应是一个 JSON 字典,包含一些重要数据,如:

  • url:激活配置文件的 MDM 供应商主机的 URL
  • anchor-certs:用作受信任锚的 DER 证书数组

第 5 步:配置文件检索

  • 请求发送到 DEP 配置文件中提供的 URL
  • 锚证书 用于 评估信任(如果提供)。
  • 提醒:DEP 配置文件的 anchor_certs 属性
  • 请求是一个简单的 .plist,包含设备识别信息
  • 示例:UDID、操作系统版本
  • CMS 签名,DER 编码
  • 使用 设备身份证书(来自 APNS) 签名
  • 证书链 包括过期的 Apple iPhone Device CA

第 6 步:配置文件安装

  • 一旦检索到,配置文件将存储在系统上
  • 此步骤自动开始(如果在 设置助手 中)
  • CPInstallActivationProfile 驱动
  • 通过 mdmclient 通过 XPC 实现
  • 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(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)

支持 HackTricks