1.什么是移动设备管理 (MDM)?

1.1.背景

随着全球商业和教育环境中 Apple 设备数量的增加,便捷且有效的管理组织下的所有Apple设备成为当务之急。新设备的增加为 IT 人员带来沉重的负担,尽管一部分人员已熟悉 Apple设备,但许多人对管理 Apple设备缺乏必要的经验和有效的方案。

移动设备管理(MDM)是一种软件,它允许组织管理和保护工作设备,保护公司资产,并提供安全便捷的资源访问。MDM可无线配置设备,无论设备归属,包括更新软件和设备设置,监督策略执行,以及远程擦除或锁定设备。

注:iOS、iPadOS、macOS 和 Apple tvOS 具有支持移动设备管理 (MDM) 的内建框架。

1.2.MDM功能概览

通过MDM能实现以下功能:

管理描述文件:获取已安装的描述文件列表、安装和删除一个描述文件等。

查询设备状态和设备信息详情:安装软件列表、序列号、设备锁屏、重启、关机、数据擦除、锁住、定位已丢失的设备等。

管理应用与书籍:安装和卸载软件、安装和卸载企业软件、查询软件信息,安装和移除书籍、查询已安装的所有书籍等。

管理系统更新、丢失模式:可升级系统版本查询、查询系统版本信息、下发升级系统版本任务,开启和关闭丢失模式、获取设备位置信息、播放丢失模式声音等。

详细且完整的功能说明可参考Apple官方文档 :移动设备管理

(https://developer.apple.com/documentation/devicemanagement)

2.MDM的原理介绍

1、管理员通过管理端给群组下发对应的功能(功能为1.2章节中的功能概览)

2、功能转换为对应的MDM指令给MDM Server

3、MDM Server将管理员下发的功能生效在群组的所有终端中(终端支持Mac、iPhone、Apple Watch、Apple TV)

4、终端返回对应的执行结果给到MDM Server,最终回馈给管理员

这样管理员就能通过MDM Server高效且实时的同时监控和管理组织下所有Apple终端。

2.1.MDM中一些重要的概念

配置描述文件是一个 XML 文件(以 .mobileconfig 结尾),其中包含将设置和授权信息载入到 Apple 设备的有效负载。它会自动配置设置、帐户、访问限制和凭证。这些文件可通过 MDM 解决方案或Apple Configurator创建,也可手动创建。

注册描述文件是带有 MDM 有效负载的配置描述文件,可在为设备指定的 MDM 解决方案中注册该设备。这可让 MDM 解决方案将命令和配置描述文件发送到设备,以及查询设备某些方面的信息(激活锁状态、电池电量、序列号和名称等)。用户移除注册描述文件后,基于该注册描述文件的所有配置描述文件及其设置和被管理的 App 都会随之移除。一台设备上一次只能有一个注册描述文件。生成注册描述文件的方法可参考Apple官方文档设备管理-MDM(https://developer.apple.com/documentation/devicemanagement/mdm)。

2.2.MDM的底层技术原理

MDM的技术原理包括两个基本流程 接入流程(安装注册描述文件)和管理流程(分发配置文件和下发指令)。以下是对两个流程的详细介绍。

2.2.1MDM启用 接入流程(ACCESS)

接入流程是用户安装注册描述文件,安装该描述文件即表示该机器被MDM Server所管理。所以接入流程是MDM流程中不可获取的关键步骤。

1、员工手工 或者 企业App,向 MDM Svr,下载一个注册描述文件

2、图中步骤3,checkin,需要用户输入设备的密码进行安装注册描述文件,安装完成即授权mobileconfig里管控功能

3、checkin时,设备会返回管控必须的机器信息,包括UDID、Token、PushMagic,后面统一称为设备系统信息,供MDM Svr标记并推送新策略给该设备

2.2.2. MDM管理流程(MANAGEMENT)

1、管理员配置新策略,通过MDM Svr,将新策略推送给 Apple的APNs服务;图中步骤2,activate (MDM svr 给 APNs推送activate时,需用到Apple颁发的MDM推送证书,后面会详细介绍如何申请MDM推送证书)

2、Apple APNs会将新策略消息,通知给AppleDevice,图中步骤3 notify

3、AppleDevice连接MDM Svr,下载最新的策略描述文件 内容,图中步骤5 profile

从上图可以看出要实现MDM服务须涉及到,苹果推送服务器APNs、自己的或者第三方提供的MDM服务器、受管理的设备。实际中三者之间通过HTTPS相互通信,所以推送和普通APP推送一样必须要有推送证书。没有操作的情况下,除了设备本身和APNs之间保持连接,其他都不在连接状态。各自在系统中的作用如下:

MDM服务器:对于设备,通过它发送指令对设备进行管理,获取相关信息及操作,回应响应设备操作。对于APNs,向APNs发送一个命令,目的来唤醒设备去主动连接MDM服务器,报告其当前状态是否处于空闲(若设备空闲,MDM服务器会继续下一步操作比如开始发送指令)。

APNs:可看作其他两者之间的信使,主要就是转发MDM服务器指令给设备,意思告诉设备开始去连接服务器。

设备:首先从MDM服务器获取并安装一个注册描述文件并登记注册使其成为受管理的设备,当收到APNs指令后,根据已安装的注册描述文件的url 连接MDM服务器并报告其状态,然后接受下一步命令比如命令DeviceInformation(查询设备信息如ModelName、BatteryLevel、WiFiMAC等,安装一个描述文件等),设备收到XML格式的指令后再向服务器传送其相关查询的信息,如果不需要继续发送指令,服务器关闭连接。

另外设备和MDM服务器之间数据传输都是以XML格式形式,以PUT请求的方式进行的,所以发送指令时,服务器要把指令封装成一个XML的文件同时要实现PUT请求相关操作处理。APNs所发送的仅仅是一个与设备本身相关的标示符,没有其他命令,目的就是唤醒设备去连接MDM服务器。

3.自研MDM服务前的准备工作

3.1.申请苹果企业开发者账号

苹果开发者企业计划仅适用于特定用例中的内部使用和iOS、macOS程序的分发,这些用例在应用程序商店中的公共iOS、macOS程序、通过苹果 Business Manager或Ad Hoc分发的自定义iOS、macOS程序或通过TestFlight的beta测试中没有得到充分解决。你的专有iOS、macOS程序必须由你自己开发,以便在苹果平台上使用。

此外,适用以下资格要求。你的组织必须:

第一点:拥有100名或更多的员工。

第二点:成为一个法法律实体。我们不接受DBAs、虚构的企业、商号或分支机构。

第三点:使用该程序只创建专有的内部应用程序供内部使用,并将这些应用程序私下安全地分发给组织内的员工。

第四点:建立系统,确保只有员工可以下载内部使用的应用程序,并保护会员资格和资产。

第五点:参与并通过Apple的验证面试和持续评估过程。

详细的申请步骤可参考官方文档

(https://developer.apple.com/cn/programs/enterprise)

3.2.申请MDM推送证书

生成mdm证书

1.使用“钥匙串”工具,生成签名请求:mdm.certSigningRequest

2.使用3.1 申请的企业开发者账号,登录后访问苹果开发者帐号,上传: mdm.certSigningRequest,生成 mdm.cer

(https://developer.apple.com/account/resources/certificates/list)

使用Apple根证书,获取 mdm推送 的证书请求文件

1.首先下载根证书

(https://www.apple.com/certificateauthority/)

2.使用脚本工具签名mdm.cer 输出 applepush.csr

(https://github.com/grinich/mdmvendorsign)

申请mdm推送证书

1.登录苹果推送证书门户网站

(https://identity.apple.com/pushcert/)

2.上传 applepush.csr

3.最终拿到了用于MDM服务器使用的mdm.p12证书

4.自研MDM服务

我们一起来看一下一个比较典型的MDM使用场景。

由于安全部门的要求需要对公司的Mac电脑进行密码安全管理,采用高强度且具备安全策略的登录密码可以避免用户电脑受到病毒爆破等一系列安全威胁。保护用户和公司的财产安全。

Apple的配置描述文件中包含了一项密码策略的有效负载正好可以满足安全部门的对Mac电脑的登录密码安全管理。密码有效负载的管理的选项包括要求字母数字值、最短的密码长度、必须包含的复杂字符的最少数目、最长的密码有效期、可允许的失败次数上限等。

(https://developer.apple.com/documentation/devicemanagement/passcode)

4.1.创建MDM功能的载体 - 描述文件

主要有两类描述文件:注册描述文件、管控配置描述文件(具体可参考2.1章节),此处详细介绍如何创建这两类描述文件:

4.1.1.创建注册描述文件

注册描述文件的制作可以参考官方文档,以下是一份示例:

(https://developer.apple.com/documentation/devicemanagement/mdm)

    PayloadContentIdentityCertificateUUID47492623-e4e7-4a64-ba63-2f31d2ca1a5fServerURLhttps://mdm.example.com:2001/mdmTopiccom.apple.mgmt.External.c809ab17-1cbd-48f2-8dc7-e952131df20cAccessRights8191ServerCapabilitiescom.apple.mdm.per-user-connectionscom.apple.mdm.bootstraptokenCheckInURLhttps://mdm.example.com:2001/checkinCheckOutWhenRemovedPromptUserToAllowBootstrapTokenForAuthenticationPayloadIdentifiercom.example.mymdmpayloadPayloadTypecom.apple.mdmPayloadUUID0ae4af50-590a-4478-b540-aa0a21da23f1PayloadVersion1PayloadDisplayNameMDMPayloadIdentifiercom.example.myprofilePayloadTypeConfigurationPayloadUUID1f4ef23b-ab01-45b9-879c-7a036e47b083PayloadVersion1

    注册描述文件中的ServerURL和CheckInURL字段即为自研MDM服务的地址,Topic字段即为MDM推送证书的主题信息,主题是以com.apple.mgmt开头。

    移动设备管理从设置服务器并将MDM注册描述文件分发到设备以启动连接它们开始。然后,您可以向受管理设备发送命令以获取有关设备的详细信息、安装配置文件、应用程序和图书等等。一旦设备安装了MDM注册配置文件并连接到服务器,它就可以从服务器接收命令。当您从设备中删除MDM注册配置文件时,将终止设备与服务器的管理关系。

    以下是安装注册描述文件的详细界面,后面会详细介绍如何通过MDM服务远程下发配置文件到被注册的设备上。

    在后面的4.2章节会详细介绍几种常见的分发注册描述文件的方案。

    4.1.2.创建配置描述文件

    Apple官方提供了一个用于生成描述文件的GUI工具Apple Configurator,该工具可以在Apple Store上下载。

    生成的描述文件内容是一个xml格式的文件,具体的字段说明可参考设备管理描述文件(https://developer.apple.com/documentation/devicemanagement/passcode)。以下是一个完整的具有密码有效负载的配置描述文件原件示例。

      PayloadContentmaxFailedAttempts5maxGracePeriod1maxInactivity2maxPINAgeInDays30minLength8pinHistory2PayloadIdentifiercom.example.mypasscodepayloadPayloadTypecom.apple.mobiledevice.passwordpolicyPayloadUUID2a8a75e5-d17d-44d5-b062-3cb92161af9fPayloadVersion1PayloadDisplayNamePasscodePayloadIdentifiercom.example.myprofilePayloadTypeConfigurationPayloadUUIDe044f50d-ff67-4bcd-9f3f-d7b678091061PayloadVersion1

      该文件可以通过用户手动安装在Mac电脑上,安装完成的电脑具有密码强度要求的功能。以下会说明如何通过MDM服务推送安装该密码描述文件。

      4.2.使用注册描述文件,启用MDM功能服务

      使用注册描述文件的方式多种多样,其中比较普遍的方式包括邮件分发、网页下载、自研App引导下载安装等。

      邮件分发和网页下载流程

      邮件分发和网页分发都是通过一个url(例如https://www.xxx.com/mdm/enroll.mobileconfig),用户点击后下载一个注册描述文件。

      双击下载下来的enroll.mobileconfig文件后系统会自动跳转到系统设置-> 隐私与安全性-> 描述文件。

      系统会提示用户安装该描述文件,安装完成后即表示注册成功。

      该分发方案成本低,无需额外的开发工作,但用户学习成本高,注册成功转化率低。

      在iOA中采用的是自研app引导安装的方案进行注册描述文件分发

      1、iOA会实时检查本机是否安装了注册描述文件,检查到没有安装iOA会提示用户去修复安装。

      2、用户点击修复按钮后,会自动帮用户下载注册描述文件,并在iOA的界面中引导用户在系统设置界面中手动安装。

      3、用户手动在系统设置-> 隐私与安全性-> 描述文件中双击安装完成后会在iOA中提示安装成功。

      整个注册过程简洁快速,用户学习成本低,注册率高。

      可以看到自研App指引安装对用户的约束力较强,可以让用户很快的完成注册流程。这也是提高用户注册MDM的成功率的一种方式。同时也降低了IT部门的报障率,减轻IT部门的工作压力。

      4.3.开发MDM服务,供客户端拉取配置描述文件

      4.3.1MDM服务开发的接口规范和协议

      MDM服务是一个Web服务器,采用标准的https服务,它处理来自Apple设备的连接。另外设备和MDM服务器之间数据传输都是以XML格式形式,以PUT请求的方式进行的,所以发送指令时,服务器要把指令封装成一个XML的文件同时要实现PUT请求相关操作处理。XML文件的具体内容根据需求有所不同,具体需要根据Apple官方文档(https://developer.apple.com/documentation/devicemanagement/implementing_device_management)来确定XML中的具体内容

      MDM服务开发比较关键的两个流程checin和connect,下面详细介绍这两个概念。

      checkin流程,具体详情可参考移动设备管理-checkin:

      (https://developer.apple.com/documentation/devicemanagement/check-in)

      MDM checin协议验证设备的MDM注册资格,并通知服务器设备的推送令牌已更新。

      安装MDM 注册描述文件后,设备将启动与MDM服务器的通信。设备验证服务器的TLS证书,然后使用MDM有效负载中指定的身份作为连接的客户端身份验证证书。

      如果在MDM有效负载中提供了签入服务器URL,则签入协议将与该签入服务器通信。如果没有提供签入服务器URL,则使用主MDM服务器URL。

      connect流程,具体详情可参考移动设备管理-connect:

      (https://developer.apple.com/documentation/devicemanagement/implementing_device_management/sending_mdm_commands_to_a_device)

      Apple设备在注册MDM后,MDM服务器根据需要调用APNs推送接口唤醒设备,Apple设备收到唤醒命令后会向MDM服务发送connect请求事件,并将当前设备的状态告知给MDM服务。

      若收到的状态为Idle或Acknowledged时则可以向设备下发安装和查询命令。

      设备执行该命令,并将其响应以另一个HTTP PUT请求的形式发送给MDM服务器。响应包括一个plist编码的字典,其中包含以下键,以及命令返回的其他键:

      完整的MDM服务开发可以参考开源项目MicroMDM。

      (https://github.com/micromdm/micromdm/tree/main)

      4.3.2.开发描述文件分发逻辑流程

      详细流程解释:

      注册描述文件流程(后文会详细介绍几种分发注册描述文件的最佳实践):

      1、创建MDM注册描述文件(可参考4.1.1章节)。iOA Server调用MDM Server创建MDM注册描述文件接口生成注册描述文件。

      2、拉取MDM注册描述文件。iOA在标准化阶段,拉取MDM注册描述文件。

      3、注册设备。iOA安装MDM注册描述文件,将设备注册到MDM服务器中。

      分发描述文件流程

      4、创建密码策略配置描述文件。

      5、下发配置描述文件到设备。

      6、推送MDM命令,MDM服务器调用APNs推送接口唤醒设备。

      7、APNs将推送内容发送到设备。

      8、设备收到APNs关于MDM的通知后,主动上报自己的状态给MDM Server。以下是一个设备给MDM Server的一份示例内容

        StatusIdleUDID1C8BAD8F8B554FE5955C189B0907720B

        以上可以看出每次请求或应答都会有UDID来标记设备,Status的值表示设备当前状态。状态值有以下几种状态:

        Status value

        Description
        Acknowledged一切正常,设备正确响应指令
        Error出现错误
        CommandFormatError指令格式错误
        Idle设备空闲

        NotNow设备收到指令,但不能马上执行以后会再次请求服务器

        9、若当前设备的状态为空闲则给设备下发具体的操作或指令(如安装描述文件或查询设备信息指令)。以下是一份安装配置文件的示例,其中的data字段为密码描述文件的base64编码。

          CommandPayload PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NUWVBFIHBs UGF5bG9hZFZlcnNpb248L2tleT4KCTxpbnRlZ2VyPjE8L2ludGVnZXI+CjwvZGljdD4K PC9wbGlzdD4KRequestTypeInstallProfileCommandUUID0001_InstallProfile

          10、当设备执行完MDM Server下发的具体操作后,将执行结果返回给MDM Server,连接关闭。以下是一份安装配置文件的返回成功示例

            CommandUUID0001_InstallProfileStatusAcknowledgedUDID00008020-000915083C80012E

            5.结语

            本文主要介绍了iOA中的MDM方案基本原理,并通过列举了一个简单的例子用来阐述了MDM是如何工作的。

            总的来说采用MDM 允许管理员执行安全策略、控制对数据和应用程序的访问以及远程擦除设备以保护敏感信息。它可以帮助增强丢失或被盗时的安全性。

            并且MDM可以支持大规模设备配置。管理员可以使用密码、锁屏、Wi-Fi 网络、电子邮件配置等远程设置设备。这简化了设备配置流程并节省了管理员的时间和精力。

            借助 Apple MDM,管理员可以轻松地将应用程序分发到组织内的设备。它确保员工能够访问必要的应用程序。此外,管理员可以通过MDM远程管理设备、解决问题、推送更新以及执行必要的维护任务。

            声明:本文来自腾讯IT技术,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。