ScheduleOSUpdate:击中移动目标

Fleetsmith产品团队的Frank Yang

从表面上看,触发操作系统更新的动作非常简单。

  1. 有可用的新版本操作系统。
  2. 您有需要更新的设备。
  3. 您触发更新。
  4. 您为您的机队重复步骤1-3,或者看看是否有一种方法可以批量执行1-3。

但是,如果您的经历像我们一样,您将意识到触发操作系统更新并不总是像应该的那样可靠。

上个月,Fleetsmith发布了对iOS和tvOS设备的Beta支持,作为此Beta支持的一部分,我们将OS更新执行功能(以及其他核心管理功能)扩展到了iOS设备。 我们发现操作系统更新背后的真相的努力充满了陷阱,虚假的先知和红鲱鱼,但我们做到了另一面,理智(某种程度上)完整无缺。

如果您曾经想知道为什么推送iOS的OS更新有时起作用而有时却不起作用的原因,请继续阅读; 和我们一起踏上这疯狂的旅程。

它是什么? 这有什么用途? ScheduleOSUpdate是MDM提供程序发送到iOS设备以触发OS更新(如果可用)的MDM命令。 这意味着,如果您可以通过MDM提供程序的Web界面将操作系统更新推送到iOS机队,则很可能是通过将此命令发送到设备来完成的。

移动设备管理(MDM)协议为系统管理员提供了一种将设备管理命令发送到运行iOS 4及更高版本的托管iOS设备,运行macOS v10.7及更高版本的macOS设备以及运行iOS 7的Apple TV设备的方法(Apple TV软件6.0)及更高版本。 通过MDM服务,IT管理员可以检查,安装或删除配置文件。 删除密码; 并在受管设备上开始安全擦除。

— MDM协议参考

Fleetsmith如何使用它? Fleetsmith允许客户为新的iOS版本设置实施日期。 在Fleetsmith中配置了执行日期后,我们将使用ScheduleOSUpdate命令在过时的iOS设备上自动触发操作系统更新。 对于macOS设备,我们目前正在使用startosinstall工具,因为它使我们能够提供更好的用户体验,并且Apple在今年夏天WWDC的“管理​​Apple设备的新增功能”演讲中建议使用该工具。

为了保持与macOS相同的体验,我们需要以最少的介入(来自管理员和最终用户)来管理升级,并且仍要保证更新成功。 为此,我们需要了解该命令的工作原理,根据状态在设备上发生的情况以及支持哪些iOS版本的细微差别。

ScheduleOSUpdate 是一种单程票。

不可能找到允许您还原到以前版本的操作系统更新,这是很有意义的。 操作系统的新安全功能不是应还原的“简单升级”,并且为了防止这种情况的发生,Apple将所有操作系统的安装限制为仅签名版本。 苹果公司出于安全原因故意对此进行了设计。 如果降级是可能的,拥有设备的攻击者可以安装旧版本的iOS,并利用新版本中已修复的漏洞。

对于使用MDM提供程序的最终用户来说,这很棒。 时间到了,设备将更新,MDM将触发OS更新。

但是,作为MDM开发人员,我们希望能够彻底测试MDM命令,因此我们可以为客户提供最愉快的体验。 不幸的是,此MDM命令在Simulator(雷达:45414745)中不可用,并且没有模拟升级的能力,测试ScheduleOSUpdate 行为的唯一方法是在真实设备上触发更新。

对于只能在每个设备上执行一次的命令,我们突然可以进行有限次数的离散测试,以测试行为。

由于每个测试都是不可逆的,我们如何设定期望并设计解决方案? 唯一的选择是信任苹果公司如何运作的文档,并相信我们会做到这一点。

带扣,朋友们! 以文档为指导,我们还有很长的路要走。

发生错误; 这是任何软件产品的自然状态。 几乎不需要再发布不需要更新的东西,尤其是在操作系统级别。 因此可以肯定地说,MDM命令中存在错误。 但是,MDM命令中的错误会在测试设备中造成不可逆转的更改,这使事情变得更加……轻而易举。

例:

  • MDM提供程序可以使用以下几个选项发送ScheduleOSUpdateDefaultDownloadOnlyInstallASAP 。 由于iOS上具有强大的权限系统, 除非用户输入了该设备的密码(如果存在), 否则该设备将不会安装更新,因此我们了解到InstallASAP实际上并不会立即强制进行升级。

现在,有关更多上下文, ScheduleOSUpdate仅返回状态为IdleDownloadingUpdateAvailableUpdateAvailable

不幸的是,设备没有明确的状态,用户已经输入了密码并计划了设备的更新(注意:计划的安装发生在1AM和3AM之间)。 没有文档说明如果在此期间收到更多命令会发生什么情况。

对于那些好奇的人,这显然属于Installation的状态 但是,如果此时发送另一个 ScheduleOSUpdate 命令,则操作系统更新将立即开始。 此行为是未记录的。 雷达:45414727 )。

那么这如何影响我们的测试? 每个测试都将成为完整的临床试验。

每个测试设备必须首先符合测试条件:

先决条件1:设备必须可注册MDM才能接收命令

在iOS 10.3和更高版本上,受支持的软件更新命令需要监督,而无需DEP注册。 如果设备上有密码,则用户必须输入该密码才能开始软件更新。

在iOS 10.3之前,受监管的设备需要DEP登记且没有密码。 在Shared iPad设备上,当任何用户登录时,这些更新命令不可用。MDM服务器必须具有“应用程序安装”权限才能执行这些命令。

— MDM协议参考

先决条件2: 设备必须 至少 运行 iOS 版本 10.3。

  • 早于此版本的设备不符合条件(除非它们已进行DEP登记……这不太可能)。
  • 早于此版本的设备无法升级到除最新版本以外的任何其他版本,因为仅对最新版本进行了签名。

有趣的事实! 如果您使用任何早于10.3的设备并将其插入Configurator进行注册,则系统将提示您先更新设备,然后再执行其他操作。 请记住,您只能更新到最新版本,因为这是唯一签名的版本。

先决条件3:不得为11.3、11.4或11.4.1版本,所有这些版本均具有 ScheduleOSUpdate 已知错误

例子:

对于那些得分较高的用户,由于11.3和11.4都存在已知问题,因此这意味着您只能在运行以下iOS版本之一(当时为最新的11.4.1)的设备上使用该命令:

– 10.3.x

– 10.11

– 11.2

每个测试都必须在仔细记录的开始状态,概述的测试步骤和记录的观察结果下进行。

必须记录设备的以下属性:

  • 设备型号(iPhone型号,iPad型号)
  • 操作系统版本
  • 可用磁盘空间
  • 电池电量
  • 电池状态(是否已接通电源)
  • 网络可用性(Wi-fi,蜂窝网络)
  • 是否启用密码
  • 是否发送MDM命令
  • 记录的MDM响应

我们最初以为我们实验室中有足够的测试设备可以运行重复测试。 通过资格检查清单后,我们发现仅剩下5台设备(在某些方面都不同)。 五个设备意味着我们恰好可以进行五个端到端测试来测试此MDM命令。 我们从Apple订购了更多测试设备,但不能保证出厂时会预安装哪个版本的iOS。

“请给我4部iPhone,但是您能确保它们预装了11.1和11.2吗? 保持11.3秒。 哦,也请不要安装iOS 12.1s。 已过时,但未过时。”

—我订购新的测试设备

这引出了第3章,这是一个醒目的实现:

作为迄今为止的旅程的结果,我们学会了加油打气,更重要的是,只相信我们所看到的。

观察: 根据版本,MDM响应的格式可能与文档中的内容相矛盾。

例:

  • OSUpdateStatus响应包括一个IsDownloaded密钥,该密钥是一个布尔值(根据文档)。 但是,来自11.3上的设备的响应包含一个具有Integer值的IsDownloaded密钥。 (雷达:45414737)

观察: 文档仅描述了明显情况下的行为,但是省略了有关可能影响行为的其他变量的信息。

例子:

  • 收到MDM命令后,设备开始下载更新。 下载完成后,设备将不一致地显示用户更新提示。
  • 根据设备版本,在通过InstallASAP发送ScheduleOSUpdate时,设备可能永远不会提示用户在下载所述更新后进行更新。
  • 尽管下载已成功开始,但设备有时会在收到MDM命令后返回Error响应。 (雷达:45414692)
  • 设备上的电池电量百分比和充电状态可能会影响设备是否立即更新。

最好的办法是记录行为,并希望您拥有其他设备。

我们从启动之日起两周就去社区检查我们的理智,当得知其他人也有同样的经验后,我们立即感到很高兴,并发现ScheduleOSUpdate充满了矛盾之处。

公平地说,我们发现的每个错误都可能(理论上)可以使用最新版本的iOS 12进行修复。但是即使已修复, 该设备也必须安装在iOS 12上 升级到 iOS 12.0.1 ,为了验证正确的行为。

您是否也在将操作系统更新推送到iOS设备时遇到不一致的情况? 我们了解到,成功进行更新的最佳机会是尽可能减少变量。 这表示:

  • 确保您的设备已插入电源
  • 确保您的设备有足够的空间
  • 确定它当前不在带有已知ScheduleOSUpdate错误的版本上
  • 在下班时间推送更新
  • 等待星星对齐

考虑到这些类型的错误的性质,重要的是要了解ScheduleOSUpdate错误的修复速度非常慢。 新报告的错误只能在其他所有更新中修复。

为什么是这样? 假设,假设您在下一次从1.0升级到1.1升级过程中发现了该命令的错误。 请注意,这仅是在更新过程中发现 ,因此您正在发现并报告已经存在一个版本的发行版的错误。 在这种情况下,如果该错误在下一版本中进行了修复,则该错误将在1.2可用,并且(这里是启动程序) 在下一个发行版之前无法验证生产中的修复,因为无法从1.2调用ScheduleOSUpdate没有什么可升级的。 因此,唯一要做的就是等待下一个版本,并在将修补程序更新为 1.3 过程中验证该修补程序是否适用于1.2

那么,作为MDM开发人员,我们能做什么? 在Fleetsmith,我们相信我们的客户不必担心这些不一致之处,并且这些操作系统升级功能应该可以正常工作。 当我们了解到Apple端的错误时,我们会尽力将变通方法原生添加到我们的代码中,因此,无论iOS版本如何,您都可以放心地知道自己的设备是安全的。

苹果对问题的了解越多,解决这些问题的可能性就越大。 由于未记录的行为,MDM提供程序的行为通常会不一致,因此确保以已知的限制更新MDM文档将是一个坚实的开端。 不幸的是,存在这些不一致的事实,但是我们希望向Apple揭示这些问题,以便我们可以帮助每个人改善MDM产品的使用体验,无论您使用哪种产品。 如果您想提供帮助,请屏蔽以下雷达:

  • (雷达:45414737)OSUpdateStatus返回整数“ 0”,而不是“ IsDownloaded”键的布尔值“ true / false”
  • (雷达:45414727)ScheduleOSUpdate命令如果已“计划以后”,将立即触发iOS设备上的更新。
  • (雷达:45414692)在iOS 11.4上由MDM触发的OS升级失败
  • (雷达:45414745)使ScheduleOSUpdate在Simulator中可用

不仅是iOS,用于操作系统升级的MDM命令也有问题! 如果您有兴趣阅读有关macOS这些命令的怪异之处,请在MicroMDM博客上查看我们朋友Victor Vrantchan(groob)的精彩文章。 然后也将那些错误提交雷达🙂

在Fleetsmith,MacAdmins社区一直是我们的宝贵资源,我们希望回馈所学知识。 (向#mdmdev频道大声疾呼,以进行有益的讨论。)我们将尽可能分享我们所学的知识; 希望无论您使用哪种MDM解决方案,它都会对您有用。 快来#fleetsmith MacAdmins Slack频道找到我们! 我们是友好的人

同时,我们目前正在改造我们的整个帮助中心,以供Fleetsmith用户使用,因此请务必告知我们您需要更多帮助的部分!

  • 苹果错误记者
  • Apple配置配置文件参考
  • Apple iOS安全指南
  • Apple MDM协议参考
  • Apple WWDC 2018-管理Apple设备的新功能
  • MacAdmins松弛
  • 开放式雷达

最初于 2018 年10月24日 发布在 blog.fleetsmith.com 上。

Interesting Posts