hacktricks/macos-hardening/macos-red-teaming/macos-mdm
2023-08-03 19:12:22 +00:00
..
enrolling-devices-in-other-organisations.md Translated to Chinese 2023-08-03 19:12:22 +00:00
macos-serial-number.md Translated to Chinese 2023-08-03 19:12:22 +00:00
README.md Translated to Chinese 2023-08-03 19:12:22 +00:00

macOS MDM

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

基础知识

什么是移动设备管理MDM

移动设备管理MDM是一种常用的技术用于管理终端用户计算设备如手机、笔记本电脑、台式机和平板电脑。在苹果平台如iOS、macOS和tvOS它指的是一组特定的功能、API和技术管理员可以使用这些功能来管理这些设备。通过MDM管理设备需要一个兼容的商业或开源MDM服务器该服务器实现了对MDM协议的支持。

  • 实现集中式设备管理的一种方法
  • 需要一个实现了MDM协议支持的MDM服务器
  • MDM服务器可以发送MDM命令如远程擦除或“安装此配置”

基础知识 什么是设备注册计划DEP

设备注册计划DEP是由苹果提供的一项服务通过提供对iOS、macOS和tvOS设备的零触摸配置简化了移动设备管理MDM注册过程。与传统的部署方法不同传统的部署方法需要最终用户或管理员采取行动来配置设备或者手动与MDM服务器进行注册DEP旨在引导这个过程使用户能够打开新的苹果设备并立即将其配置为在组织中使用

管理员可以利用DEP自动将设备注册到组织的MDM服务器。一旦设备注册成功在许多情况下,它被视为组织拥有的“可信任”设备可以接收任意数量的证书、应用程序、WiFi密码、VPN配置等等等

  • 允许设备在首次启动时自动注册到预配置的MDM服务器
  • 设备全新时最有用
  • 对于重新配置工作流程(使用全新的操作系统进行擦除)也很有用

{% hint style="danger" %} 不幸的是,如果组织没有采取额外措施来保护其MDM注册通过DEP简化的最终用户注册过程也意味着攻击者可以简化地将自己选择的设备注册到组织的MDM服务器中假冒企业设备的“身份”。 {% endhint %}

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

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

什么是配置文件也称为mobileconfigs

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

协议

MDM

  • APNs苹果服务器+ RESTful APIMDM供应商服务器)的组合
  • 通信发生在与设备管理产品相关的设备和服务器之间
  • 命令以plist编码的字典形式从MDM传递到设备
  • 全部使用HTTPS。MDM服务器可以通常进行固定。
  • 苹果向MDM供应商授予APNs证书进行身份验证

DEP

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

DEP“云服务”API

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

序列号

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

{% content-ref url="macos-serial-number.md" %} macos-serial-number.md {% endcontent-ref %}

注册和管理步骤

  1. 设备记录创建(经销商,苹果):创建新设备的记录
  2. 设备记录分配客户将设备分配给MDM服务器
  3. 设备记录同步MDM供应商MDM同步设备记录并将DEP配置文件推送到苹果
  4. DEP签到设备设备获取其DEP配置文件
  5. 配置文件检索(设备)
  6. 配置文件安装设备a. 包括MDMSCEP和根CA负载
  7. MDM命令发出设备

文件/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/System/Library/PrivateFrameworks/ConfigurationProfiles.framework/ConfigurationProfiles.tbd导出了可以被视为注册过程的**高级“步骤”**的函数。

步骤4DEP签到 - 获取激活记录

这个过程发生在用户首次启动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. 使用Absinthe对JSON有效负载进行加密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**驱动
  • 通过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签到URLCheckInURL
  • MDM命令轮询URLServerURL+ APNs主题以触发它
  • 要安装MDM负载发送请求到**CheckInURL**
  • 在**mdmclient**中实现
  • MDM负载可以依赖其他负载
  • 允许请求固定到特定证书
  • 属性:CheckInURLPinningCertificateUUIDs
  • 属性:ServerURLPinningCertificateUUIDs
  • 通过PEM负载传递
  • 允许设备与身份证书关联:
  • 属性IdentityCertificateUUID
  • 通过SCEP负载传递

步骤 7监听 MDM 命令

  • 在 MDM 检查完成后,供应商可以使用 APNs 发送推送通知
  • 收到推送通知后,由 mdmclient 处理
  • 为了轮询 MDM 命令,会向 ServerURL 发送请求
  • 使用之前安装的 MDM 负载:
  • ServerURLPinningCertificateUUIDs 用于固定请求
  • IdentityCertificateUUID 用于 TLS 客户端证书

攻击

将设备注册到其他组织

如前所述为了尝试将设备注册到组织中只需要一个属于该组织的序列号。一旦设备注册成功多个组织将在新设备上安装敏感数据证书、应用程序、WiFi 密码、VPN 配置等等。因此,如果注册过程没有得到正确保护,这可能成为攻击者的危险入口:

{% content-ref url="enrolling-devices-in-other-organisations.md" %} enrolling-devices-in-other-organisations.md {% endcontent-ref %}

参考资料

☁️ HackTricks 云 ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥