苹果作为全球科技巨头,曾多次在科技领域突破技术壁垒,其多项技术在全球市场上仍旧是天花板的存在,引领市场的发展,因此苹果在科技上的一举一动总是引人注目。
近期,我爱音频网了解到,一位资深工程师对苹果的AirTag技术做了技术细节分析,具体包含黑客攻击、安全研究、修改、拆解等。这位工程师叫Adam Catley,来自奥地利,主要研究网络安全、汽车、电子设备、FPGA和固件等。
AirTag是蓝牙无线追踪器,外观看起来显示一枚围棋,配对体验与AirPods很像。AirTag结合了蓝牙与UWB精准定位两项技术,可以利用内置的蓝牙低功耗芯片发出信号,被附近“查找”网络中的苹果设备侦测到,进而将其坐标信息发送到iCloud被用户定位到大概位置。其内置的苹果U1超宽频芯片还使AirTag具备了精确查找的能力,在一定范围内手机上会指示AirTag的方向并精确显示到米,解决寻找物品的最后距离问题,不过要使用该功能需要同样配备了U1芯片的iPhone机型。
AirTag内置2032纽扣电池,用户可自行更换,每天播放四次声音并进行一次精确查找的话,可使用超过一年的时间,电池低电量手机会收到提示。但AirTag不支持AR查找,在有效范围内可以通过Siri唤醒查找。
那么这位资深奥地利工程师Adam Catley对苹果AirTag的逆向分析结果如何?我们一起来看看~
AirTag除了用于UWB的苹果U1芯片,还使用了现成的组件;流行的nRF52832 用于BLE 和NFC,仅2.3µA的待机电流消耗可提供超过10年的潜在电池寿命;每天凌晨04:00更新一次BLE地址和公开密钥,每15分钟更新一次广播数据的最后一个字节;在离开其所有者设备3天后进入丢失模式,在丢失模式下每6小时发出一次噪音,且移动能被检测到,等待移动时每10秒对加速度计进行一次采样,一旦检测到移动,每0.5秒对加速度计进行一次采样,持续20秒。
除此之外,离开其所有者的设备时每2秒发送一次BLE广播,靠近其所有者设备时,BLE连接间隔为1秒,nRF需要至少~1.9V的电池电压才能启动,32Mbit闪存未加密,nRF编程接口(SWD)可通过测试点轻松访问,并且可以解锁。
这项研究是为了了解苹果在其最新的29美元低价产品中使用的电子设计和安全性方法。
调查的方面是:
使得AirTag麻雀虽小却能五脏俱全的硬件设计(AirTag内含了BLE、UWB、NFC、加速度计、扬声器、天线);定制硅与“现成”组件的使用对比;硬件和软件的低能耗设计以最大限度地延长电池寿命;使用了事先声明的隐私功能以避免不必要的跟踪;最近的BLE隐私和安全功能使用;苹果产品的硬件和固件安全;可以进行哪些修改等。
支持的设备为:iOS 14.5系统。
目前AirTag可以进入的主要状态有:
未注册:AirTag是全新的、已重置或已从 FindMy网络中删除时,每33毫秒广播一次,等待连接。
初始化:AirTag正在注册到Apple ID,生成公钥/私钥,与连接到AirTag的iOS设备间共享。
已连接:所有者的设备在范围内,没有广播生成。
断开连接:所有者的设备超出范围,每2000毫秒广播一次身份。
不同步:AirTag与其所有者的设备分离后,重新启动时会发生这种情况。类似于断开连接,但绝对时间丢失,所以事件跟开机后的时间相关。身份重置为初始值。
丢失:在进入断开连接或不同步状态3天后开启。每隔6小时进入到“等待移动”状态。
等待移动:每10秒对加速度计进行一次采样,直到检测到运动。
声音警报:从连接的设备或通过检测到移动来接收播放噪音的指令,最长持续20秒。
精确查找:处于“已连接”状态时由所有者的设备触发,被声音警报覆盖
拆解
由于电路板较薄且被焊接在塑料托盘上,所以拆下电路板可能会造成损坏。
修订
经过多次拆解之后,发现顶部铜层当中的电路板标记会发生变化。如果能够确定早期生产运行并未启用所有安全功能来锁定单元的话,这一点将会非常有用。
右下角的数字看起来像一个制造数据代码(例如,“2920 17”可能是2020年的第29周,第17批)。从可用的样本中获得的信息是:
美国的设备在2920、3020、3120范围内;
欧洲是5220,晚几个月;
亚洲是1021,晚几个月,距离发行只有几周时间;
左边的3个大焊盘左侧还有一个字母,可能与下面的U1芯片有关。欧洲的设备上是A和3位数字,而世界其他地区的设备上是C。
丝印层上有个常量值820-01736-A,看起来像是苹果电路板内部零件编号和修订(A)。
电路板概述
电路板含有Nordic nRF52832 SoC,带BLE和NFC,外加32MHz和32.768kHz晶体;苹果U1 UWB收发器;兆易创新GD25LE32D 32Mbit NOR闪存;博世BMA280加速度计;美信MAX98357AEWL音频放大器;TI TPS62746 DC-DC降压转换器;TI TLV9001IDPWR运算放大器;100uF电解电容器(5x)等。
测试点
TP# | 类型 | 描述 |
1 | 扬声器 | 音圈的一端 |
5 | 电源 | VCC2输入(3V) |
6 | 电源 | VCC1输入(3V) |
7 | 电源 | 接地 |
19 | 闪存 | 数据输入 |
20 | 闪存 | 数据输出 |
21 | 闪存 | VCC(1.8V)为闪存供电 |
22 | 闪存 | SCLK |
23 | 闪存 | CS |
29 | 电源 | 接地(带苹果logo) |
30 | nRF | nRST |
31 | 调试 | SWO |
35 | 调试 | SWCLK |
36 | 调试 | SWDIO |
38 | 扬声器 | 音圈的另一端 |
天线
AirTag内部有三个天线,分别为:
1、低功耗蓝牙(左) - 2.4GHz
2、NFC(中) - 13.56MHz
3、超宽带(右) - 6.5-8GHz
三条天线都使用激光直接成型蚀刻到一块塑料上,然后焊接到边缘周围的电路板上。NFC天线在塑料板的另一侧也有一个短迹线(每端与一个过孔连接),用于将线圈的内端接回到电路板上。
扬声器
音圈粘在塑料外壳上,起到隔板的作用。由于磁铁是固定住的,当线圈通电时,它会前后移动产生声音来充当扬声器。
无论是否连接音圈,AirTag的运行方式都相同。
离开所有者的设备3天后,如果检测到移动,扬声器会发出响亮的哔哔声,最多持续20秒。接下来的6小时内都会保持静音,直到再次等待移动。
即使没有连接音圈,播放声音也比待机时耗电多3000倍,大约8mA。这可能是因为nRF必须使用音频样本快速更新DAC。在播放丢失状态的AirTag噪音时,电流(黄色)与相应的声波(蓝色)同步绘制:
电源
有两个正极电池端子,两者都需要施加3V来启动AirTag。
但是,只有左侧电池端子为电子设备供电。右侧端子上的电压能被感测到,但在所有模式中仅消耗约50nA。
电路板顶部边缘周围5个100uF电容器,在取出电池的情况下能使设备保持通电几秒钟,这可能有助于在短时间内连续5次取出电池的重置程序。
AirTag在电源循环后不会保留当前时间,直到它重新连接到其所有者设备。
低功耗蓝牙(BLE)
nRF52832支持BLE 5.2并具有单个2.4GHz天线。Nordic SoftDevice用于实现BLE堆栈,可能是S112型号。
本节将会介绍AirTag注册到FindMy网络时的蓝牙活动。
地址类型:随机静态(每天更改,公钥的前6个字节)
广播PDU类型:可连接的非定向广播(ADV_IND)
广播周期:2000ms
广播传输时间:4ms(包括唤醒)
字节 | 值 | 描述 |
0 | 0x1E | 广播数据长度:31(允许的最大值) |
1 | 0xFF | 广播数据类型:制造商特定数据 |
2-3 | 0x004C | 苹果公司标识 |
4 | 0x12 | 指示FindMy网络广播的苹果有效负载类型 |
5 | 0x19 | 苹果有效负载长度 (31-6=25=0x19) |
6 | 0x10 | 状态字节 |
7-29 | 变化 | FindMy网络使用的EC P-224公钥。每天变化 |
30 | 0-3 | ECC公钥第一个字节的上2位 |
31 | 变化 | 加密计数器值?每15分钟更改一个为随机值 |
根据苹果的记录,BLE广播数据包含NIST EC P-224公钥。该密钥至少有28+1字节长,但广播数据中只有23+1字节会改变。其他6个字节巧妙地用作设备的蓝牙地址。苹果就是这样在单个BLE数据包中安装公钥的。
似乎还有一种方法可以预测未来蓝牙地址的一部分,但这需要更多的后续调查。
苹果可能使用了身份验证来阻止非苹果设备连接AirTag,因为连接后不久就会被AirTag终止。
未注册行为
当AirTag未注册到FindMy网络时,它具有类似的行为,但以33毫秒的间隔使用其默认设备地址进行广播,并使用不同的苹果有效负载。
字节# | 值 | 描述 |
0 | 0x1E | 广播数据长度:31(允许的最大值) |
1 | 0xFF | 广播数据类型:制造商特定数据 |
2-3 | 0x004C | 苹果公司标识 |
4 | 0x07 | 指FindMy设备的苹果有效负载类型? |
5 | 0x19 | 苹果有效负载长度 (31-6=25=0x19) |
6-31 | 变化 | 尚未调查 |
超宽带广播(UWB)
“精确查找”状态使用苹果的U1和单天线进行超宽带通信。目前对苹果设计的这种定制芯片知之甚少。
它可能包含一个处理器,因为闪存芯片包含nRF52832不支持的64位ARM指令。
U1位于标有USI的模块内(此处可以看到AirTag模块标记)。AirTag中的数据包看起来与iPhone 11等其他苹果设备中的数据包不同。
左边是iPhone 11的USI模块内部,右边是AirTag的较小模块内部,它没有前端和天线巴伦(现在位于电路板上)。可以看到U1是两个模块中的黑色方形芯片,带有几行标记。两者的U1芯片照片显示相同的标记TMKA75。
FCC测试报告:
UWB通道5(6.5GHz)和9(8GHz);500MHz带宽;BPSK调制;1根天线(上图)。
测试“精确查找”功能给人的印象是,UWB仅用于测量到AirTag的距离,而不是方向。 AirTag只需从其单个天线每隔约60毫秒发送一次脉冲。接收器或发射器都需要多个天线,以便根据相位距离测量方向。BLE 5可通过AoA和AoD支持。
近场通信(NFC)
AirTag使用nRF52832的NFC-A外设在只读模式下实现NXP MIFARE Plus(类型 4)标签。 NFC天线位于白色盖板的后面,如上图所示。
NFC用于允许任何找到AirTag的人潜在地识别所有者,即使他们用的是安卓设备。
只有当AirTag由电池供电时才能读取标签。它仅包含一个URL来唯一标识AirTag,具体取决于其当前状态。
未注册
当AirTag是全新的、已重置或已从FindMy网络中删除时,存储在标签上的URL是固定的,值不会更改。它遵循以下格式:
参数 | 值 | 描述 |
pid | 5500 | AirTag的产品ID? |
b | 00 | 与电池相关? |
pt | 004c | UWB精确跟踪/查找版本? |
fv | 00100e10 | 固件版本? |
dg | 00 | 诊断代码? |
z | 00 | 未知 |
bt | XXXXXXXXXXXX | 默认蓝牙地址(十六进制) |
sr | XXXXXXXXXXXX | 标签的序列号(字母数字) |
bp | 0015 | 蓝牙协议版本? |
虽然此数据唯一标识AirTag,但如果你在设备注册前,距离其近到能读取NFC(小于10厘米),设备就会使用你可以访问的标识:
设备的蓝牙地址bt也用于此状态下的广播(因此可以在设置期间被附近的人捕获)。
sr序列号并非秘密。它印在设备上电池的下方(以及设备包装上的贴纸上)。通过访问URL也可以获取。
苹果服务器接受值和参数名称的任意组合。唯一使用的是sr,可以是空的。
https://found.apple.com/airtag?sr=
我只有一个AirTag,因此无法比较不同设备的值。对于单个单元,这些值在电源周期、长时间运行、重置和不同模式中是恒定的。
已注册
AirTag通过iOS设备注册到FindMy网络后,URL标签会稍微进行更改,变为以下格式:
参数 | 值 | 描述 |
pid | 5500 | AirTag的产品ID? |
b | 00 | 与电池相关? |
pt | 004c | UWB精确跟踪/查找版本? |
fv | 00100e10 | 固件版本? |
dg | 00 | 诊断代码? |
z | 00 | 未知 |
pi | 变化 | 公共身份(224位长) |
总之,参数bt、sr和bp已被删除,并替换为单个匿名标识pi(不要与pid混淆)。
pi是唯一改变的参数。当蓝牙地址和/或广播数据发生变化时,它至少每15分钟更新一次。它可能是当前的P-224公钥,或密钥的SHA-224散列。它与应包含公钥的BLE广播数据不匹配。
同样,大多参数都是选择性的。唯一的要求是pi有效。
苹果服务器可以通过某种方式将其连接到特定设备,因为页面会显示相应的序列号(甚至可能在AirTag注册前),以及所有者丢失的消息和电话号码(如果有)。苹果声称不存储有关AirTag的任何信息,只有所有者的手机和AirTag才能生成其轮换公钥。
虽然可以使用类似于AirTag的其他产品来跟踪别人,但这些产品的全球覆盖都远不及FindMy网络那么广泛,这使得AirTag对坏人更具吸引力。因此隐私功能很重要。
在考虑到这些已知的安全问题后,让我们来看看苹果声称的AirTag所具备的隐私功能与实际使用情况的比较。
“移动时,任何与注册人分开一段时间的AirTag都会发出声音以提醒附近的人” 。
实际情况:分离后三天才会发出声音警报。即使这样,设备也只会在检测到移动后发生,且最多检测20秒。AirTag每次在等待移动来发出声音警报之间会静音6小时,声音警报的时间最长为20秒。
影响:在别人不知情的情况下,放置于其随身物品中的AirTag可用于跟踪他们至少3天,足以识别他们的日常生活。之后,在正常的通勤(2次移动触发间隔大于等于6小时)期间,它每天可发出最多40秒的噪音。移动发出的警报可能会被路上的嘈杂环境或被覆盖住AirTag的物品所掩盖。
解决方案:更频繁或更随机地检查持续时间更长的声音警报,或等待移动停止(再结束警报)来增加被听到的机会。苹果已经暗示声音警报周期可以调整。
“长时间不在注册人身边的AirTag也会播放声音” 。
实际情况:线圈无需拆卸即可断开。 AirTag在没有连接音圈的情况下依然正常运行。我观察到所有与声音相关的事件仍然会发生,但是不会发出声音。此外,如果更新AirTag来检查开路,磁铁也可移除。
影响:坏人可以轻松修改AirTag,并在其他人不知情的情况下将设备放置在某人的随身物品中来跟踪目标的位置,且AirTag不会发出声音来提醒他们设备的存在。
解决方法:用加速度计来测量本应是声音过大所引起的震动,或者加个麦克风。
“AirTag传输的蓝牙信号标识经常轮换以防止不必要的位置跟踪”。
“标识每天会轮换几次” 。
实际情况:当Airtag与所有者的设备分开时,它会在当地时间凌晨04:00改变每天广播一次的身份。或者,在电源循环后每24小时更改一次。苹果要求蓝牙配件每15分钟更改一次身份,包括其他FindMy设备。然而,AirTag仅更新其BLE广播数据的最后一个字节。BLE 设备地址和公钥在第二天之前保持不变。注意:AirTag仅在离开其所有者的设备时才开始广播,并在断开连接时生成新的身份。
影响:蓝牙范围内的任何人都可以在一天的剩余时间里唯一识别和跟踪AirTag用户。可能包括去他们家。
解决方案:更新公钥的频率高于每24小时一次,但低于每15分钟一次,使得“发现AirTag发现与您一起移动”警报功能依然可用。
“如果AirTag与其所有者分离并且不在蓝牙范围内,FindMy网络可以帮助追踪它。”
实际情况:AirTag仅由通过BLE广播数据包广播的公钥识别。此标识没有身份验证。附近的任何BLE设备都可以捕获这些身份并重放,使自己看起来像真正的AirTag。
影响:坏人可以窃取放有AirTag的个人物品,并在取出电池之前记录当前的公共身份。该身份可以重放给目标位置的任何BLE设备,为所有者提供一个虚假的搜索区域。
解决方案:所有者手机上的FindMy应用程序可以过滤掉快速移动、不切实际的位置报告或使用过期身份的报告。苹果的后端无法做到这一点,因为位置报告是端到端加密的。由于负载大小有限,很难将身份验证标签附加到BLE数据包。
“如果发现一个未知的AirTag与您一起移动,FindMy会通知您。”
实际情况:对于使用iOS设备的用户来说,这是一个很好的功能。但是,如果靠近其他AirTag所有者时没有误报,这个功能就很难做到可靠。为避免这种情况,苹果会在iOS设备到达家等已知位置时检查剩余的未知AirTag。
影响:AirTag可以进行重新编程,以高于触发此警报的时间窗口的频率更改其身份,而非默认的24小时。或者,可以记录几个有效身份,并通过编程自定义BLE设备以足够快的速度循环使用这些身份,从而显示为几个不同的AirTag,避免触发警报。
解决方案:这很难解决,但能让用户选择最适合他们的触发警报的时间窗口。
“FindMy网络是端到端加密的,因此只有设备的所有者才能访问其位置数据。”
实际情况:苹果解释说,用于生成新身份的私钥对是跨设备同步的。这意味着AirTag需要在没有合适的安全存储器的情况下存储秘密。注意:苹果可能已修改FindMy加密机制,使其更适合AirTag的不安全硬件,仅存储公钥。
影响:可以分析丢失的AirTag,从内存中提取私钥。由此可以计算出公钥来下载所有者的位置记录,并使用现在已知的私钥解密。
解决方案:仅存储公钥,或将密钥限制在易失内存中。我看到的行为表明AirTag可能会在有限的范围内这样做,至少直到它与所有者分离3天,然后在电源循环间保持其身份。
令人惊讶的是,AirTag里缺乏基本的安全控制,结果是设备中的所有数据似乎都不受免于篡改或免于信息泄露的保护。苹果知道这一点,所以他们肯定相信这不仅仅只是个威胁。
nRF52832具有访问端口保护(APPROTECT)。这将禁用通过SWD访问调试端口并防止读取内部闪存。AirTags已确认启用了此安全功能。
然而,众所周知,这种保护容易受到边信道攻击,并且可以通过电压毛刺绕过所有nRF52设备。在AirTag上,出现故障的引脚很容易在电路板顶部靠近测试焊盘的一侧找到。
我们可以假设苹果已经意识到这一漏洞,因为这一点在2020年第二季度已经披露。这已经接近AirTag开发周期的尾声,因此尚不清楚苹果是否已经解决此风险,或者如何解决此风险。
FindMy设备使用的隐私机制使用有据可查的加密技术,因此不依赖固件的机密性。然而,苹果宣传的其他隐私功能可以禁用,提取蓝牙配对密钥以连接到所有者的手机,或运行完全自定义的固件。
固件修改后仍能启动。这表明固件的签名未被受信任的苹果证书检查。
目前尚不清楚是否通过DFU对OTA更新映像进行任何签名检查。如果没有的话,这可能会引发许多严重的可能性,例如远程禁用隐私功能、提取私钥,甚至恶意固件将自身作为蠕虫传播到附近的任何AirTag。
32Mbit NOR闪存未加密并包含多个资产。
nRF52832没有任何安全存储功能。
不明确U1是否具有安全存储能力。
FindMy根私钥对是否存储和存储位置尚待确认。
缩小AirTag来跟踪其他设备
是否可以将AirTag做得更小以将其放入其他设备中?
宿主设备的电池可用于供电,设备外壳通过连接音圈充当扬声器的隔膜。在保留所有功能的同时能做到的最小尺寸是:
版本 | 直径 | 高度 |
存储 | 32mm | 8.0mm |
拆卸 | 26mm | 3.3mm |
通过将AirTag添加到一个经常乱放的物品上(遥控器),我证明了这个想法是可能的。所有功能保留。
Andrew Ngai将拆解的AirTag改造成信用卡的外形尺寸,以便能够追踪他的钱包。
AirTag在启动和丢失时发出的声音可以更改吗?
需要调查是否使用了原始音频文件(以及它们的存储位置)或以编程方式实时生成。
启动声音由3kHz左右的几个频率组成。图谱:
可以修改固件来允许安卓设备连接。但仍然需要一个Apple ID才能使用FindMy网络来验证下载加密的位置记录。
AirTag配备松下的CR2032锂纽扣电池。其标称容量和电压分别为225mAh和3V。
我在AirTag空闲时测量了电池上的2.3µA负载。数据表显示,在如此小的负载下,预期容量几乎达到整个225mAh。AirTag由至少2V的电源供电,这与电池的2.0V截止电压配合良好。
如果设备从未脱离待机状态,则最长电池寿命至少为11年。
根据数据表,考虑到nRF52832在待机时运行RTC便要单独使用1.9µA(1.8V),能够实现2.3µA的待机电流很了不起。这意味着电路的其余部分设计得非常高效,能最大限度地减少漏电,并能主动关闭或移除未使用的组件(如U1和闪存)的电源。
0.4mA唤醒和准备。3个广播通道 (37,38,39) 上6-7mA BLE TX。~4ms总事件长度。每2000毫秒发生一次
1毫秒/格(水平)。 1mA/格(垂直)。
在~25mA时出现5ms宽的尖峰,然后在~4mA时出现50ms的基极电流。每30毫秒BLE连接事件。
50毫秒/格(水平)。5mA/格(垂直)。精确查找在0秒时激活,在0.4秒时禁用。