.. | ||
enrolling-devices-in-other-organisations.md | ||
macos-serial-number.md | ||
README.md |
macOS MDM
从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS红队专家)!
支持HackTricks的其他方式:
- 如果您想看到您的公司在HackTricks中做广告或下载PDF格式的HackTricks,请查看订阅计划!
- 获取官方PEASS和HackTricks周边产品
- 探索PEASS家族,我们的独家NFTs
- 加入 💬 Discord群 或 电报群 或在Twitter上关注我们 🐦 @carlospolopm。
- 通过向HackTricks和HackTricks Cloud github仓库提交PR来分享您的黑客技巧。
了解macOS MDM的相关内容:
基础知识
MDM(移动设备管理)概述
移动设备管理(MDM)用于管理智能手机、笔记本电脑和平板电脑等各种终端用户设备。特别是对于苹果的平台(iOS、macOS、tvOS),它涉及一组专门的功能、API和实践。MDM的运作依赖于一个兼容的MDM服务器,可以是商业可用的或开源的,并且必须支持MDM协议。关键点包括:
- 对设备的集中控制。
- 依赖于遵循MDM协议的MDM服务器。
- MDM服务器能够向设备发送各种命令,例如远程数据擦除或配置安装。
DEP(设备注册计划)基础知识
由苹果提供的设备注册计划(DEP)通过为iOS、macOS和tvOS设备提供零触摸配置,简化了移动设备管理(MDM)的集成。DEP自动化了注册过程,使设备可以在开箱即用时运行,几乎不需要用户或管理员干预。基本方面包括:
- 允许设备在初始激活时自动注册到预定义的MDM服务器。
- 主要适用于全新设备,但也适用于正在重新配置的设备。
- 简化设置,使设备迅速准备好供组织使用。
安全考虑
需要注意的是,DEP提供的便捷注册方式虽然有益,但也可能带来安全风险。如果对MDM注册未充分实施保护措施,攻击者可能利用这一简化流程,在组织的MDM服务器上注册其设备,伪装成企业设备。
{% hint style="danger" %} 安全警报:简化的DEP注册可能允许未经授权的设备注册到组织的MDM服务器,如果没有适当的保护措施。 {% endhint %}
SCEP(简单证书注册协议)是什么?
- 一种相对较旧的协议,在TLS和HTTPS普及之前创建。
- 为客户端提供了一种标准化的方式发送证书签名请求(CSR)以获得证书。客户端将要求服务器给他签名的证书。
什么是配置文件(也称为mobileconfigs)?
- 苹果官方的设置/强制系统配置的方式。
- 可以包含多个有效负载的文件格式。
- 基于属性列表(XML类型)。
- “可以签名和加密以验证其来源、确保其完整性并保护其内容。” 基础知识 — iOS安全指南,2018年1月。
协议
MDM
- APNs(苹果服务器)+ RESTful API(MDM供应商服务器)的组合
- 通信发生在与设备管理产品相关的设备和服务器之间
- 从MDM传递到设备的命令以plist编码的字典
- 全部通过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服务器
- 将“DEP配置文件”从MDM服务器同步到苹果(稍后由苹果传递给设备)
- DEP“配置文件”包含:
- MDM供应商服务器URL
- 用于服务器URL的额外受信任证书(可选固定)
- 额外设置(例如在设置助手中跳过哪些屏幕)
序列号
2010年后生产的苹果设备通常具有12个字符的字母数字序列号,前三位代表制造地点,接下来的两位表示制造年份和周数,接下来的三位提供唯一标识符,最后四位表示型号号码。
{% content-ref url="macos-serial-number.md" %} macos-serial-number.md {% endcontent-ref %}
注册和管理步骤
- 设备记录创建(经销商、苹果):为新设备创建记录
- 设备记录分配(客户):将设备分配给MDM服务器
- 设备记录同步(MDM供应商):MDM同步设备记录并将DEP配置文件推送到苹果
- 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
**驱动 - 通过XPC由**
cloudconfigurationd
实现。“设置助手”(设备首次启动时)或profiles
命令将联系此守护程序**以检索激活记录。 - LaunchDaemon(始终以root身份运行)
它遵循由**MCTeslaConfigurationFetcher
执行的几个获取激活记录的步骤。此过程使用一种称为Absinthe**的加密
- 检索证书
- GET https://iprofiles.apple.com/resource/certificate.cer
- 从证书初始化状态(
NACInit
) - 使用各种设备特定数据(例如通过
IOKit
获取的序列号) - 检索会话密钥
- POST https://iprofiles.apple.com/session
- 建立会话(
NACKeyEstablishment
) - 发送请求
- 发送到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编码
- 使用**设备身份证书(来自APNS)**进行签名
- 证书链包括已过期的Apple iPhone设备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配置等等。因此,如果注册过程未受到正确保护,这可能是攻击者的危险入口点:
{% content-ref url="enrolling-devices-in-other-organisations.md" %} enrolling-devices-in-other-organisations.md {% endcontent-ref %}
从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS红队专家)!
支持HackTricks的其他方式:
- 如果您想看到您的公司在HackTricks中做广告或下载PDF格式的HackTricks,请查看订阅计划!
- 获取官方PEASS和HackTricks周边产品
- 探索[PEASS家族](https://opensea.io/collection