查看原文
其他

三星蓝牙位置追踪系统的安全性分析

CDra90n FreeBuf安全咨询 2024-03-26

作者 | CDra90n
编 | 疯狂冰淇淋

本研究对三星的离线查找(OF,Offline Finding)协议进行了详细分析,该协议是三星Find My Mobile系统的一部分,用于定位三星移动设备和Galaxy SmartTags。OF协议利用蓝牙低功耗(BLE)广播丢失设备的独特信标,然后附近的三星手机或平板电脑(helper,帮助者设备)会捕获该信标并将其以及捕获位置信息转发到供应商服务器。失主随后可以查询服务器以查找其设备的位置。

通过对OF协议及其实现进行多方面的安全性和隐私性分析,包括通过BLE数据跟踪OF设备的可行性、通过滥用OF网络实现不希望的个人跟踪的可行性、供应商是否能够去匿名化位置报告以确定所有者或helper设备的位置,以及攻击者是否能够破坏位置报告的完整性。研究结果表明,在OF协议的设计和实现方面存在各种隐私风险。

 | 简介 |


智能手机和平板电脑等便携设备通常配备了一项功能,允许所有者在设备丢失时找回它们,这通过供应商提供的Web门户进行,例如谷歌的Find My Device、三星的Find My Mobile(FMM)]和苹果的Find My。这类功能正常工作的要求是丢失设备必须连接到互联网,以便在设备所有者标记设备为丢失时,能够将其位置报告发送到供应商服务器。近年来,像三星和苹果这样的移动设备制造商已经通过OF功能扩展了其丢失设备跟踪系统,即使设备没有互联网连接,也可以找回丢失的移动设备。

苹果和三星的OF功能都共享两个关键元素:使用BLE在供应商设备之间进行短距离数据传输,以及至关重要的(联网)移动设备网络(称之为helper设备),这些设备会将位置信息中继到供应商控制的服务器,将后者称为OF网络。基本想法非常简单:当丢失的设备失去互联网连接时,它会开始通过BLE广播一个唯一的信标,然后由参与OF网络的附近helper设备捕获,然后将信标及其所在位置转发给供应商服务器。这项工作关注三星于2020年引入的FMM离线查找功能,所有者可以通过在三星移动设备(例如手机或平板电脑)上运行的Samsung FMM应用程序来跟踪其设备的位置。

在2021年,三星推出了Galaxy SmartTag,这是一款小型的BLE跟踪器,可以附在各种物品上,用于追踪它们的位置。由于SmartTags无法连接到互联网,因此它们依赖于OF网络进行长距离位置跟踪(超出BLE的范围)。SmartTags的注册和控制是通过SmartThings完成的,SmartThings是一个用于控制和管理各种智能设备和家用电器的综合平台。OF功能也适用于SmartTags,使用与FMM协同工作的“SmartThings Find”附加组件。

在三星的OF网络中,设备可以分为三种角色:所有者设备、帮助者设备和丢失设备。移动设备可以通过FMM应用程序注册到三星的OF网络,而SmartTag可以通过三星SmartThings应用程序注册。每个已注册的设备都与其注册时所属的所有者帐户相关联。当已注册的设备失去互联网连接,或者对于SmartTags,当它超出了与其所有者设备的BLE范围时,它会定期通过BLE广播某些数据。这些数据包括一个循环标识符,称为隐私ID,它是唯一的,理论上只能由三星和所有者设备关联。

helper设备包括三星设备(手机和平板电脑)以及一些支持三星OF协议的第三方设备。主动的helper设备会定期扫描附近OF设备的BLE广播并将其位置报告给位置服务器。当所有者查询其位置时,丢失设备的位置报告将被下载到所有者设备上。OF功能的有效性取决于其OF网络的规模,在三星OF的情况下,据估计在2022年有大约2亿活跃的helper设备。在接下来的内容中把参与三星OF网络的终端用户设备,如手机和SmartTags称为OF设备。

 | 背景和方法 |


ECDH密钥交换和AES分组密码:在OF协议中使用了两种主要的密码构造,即椭圆曲线Diffie-Hellman(ECDH)密钥交换协议和AES分组密码及其相关的加密模式。ECDH建立在Diffie-Hellman密钥交换协议的基础上,其中底层组操作是在椭圆曲线(EC)上定义的。三星的OF实现使用了椭圆曲线Curve25519,该曲线旨在在不损害安全性的前提下实现高速计算。高级加密标准(AES)算法是一种广泛用于数据加密的对称分组密码,也是其他密码学函数的构建基础。三星的FMM和SmartTags使用AES CBC模式密码与PKCS#7填充方案来进行各种与OF相关的数据加密/解密操作。

蓝牙低功耗:SmartTags使用了BLE,这是一种短距离无线通信技术,用于数据传输。BLE的协议栈由各种层和配置文件组成,其中对本文最相关的是通用接入配置文件(GAP)和通用属性配置文件(GATT)。GAP定义了设备发现和连接建立的过程。BLE设备可以在以下一种或多种角色中运行:

  • 广播者:发送BLE数据,可供附近的任何支持蓝牙的设备使用。
  • 观察者:监听BLE广播数据,并可能处理广播者的数据。
  • 中央:在接收到广播者的广播数据后启动连接的设备。
  • 外部:接受中央设备的传入连接。

GATT定义了在BLE设备之间连接上的数据组织和交换。GATT使用分层结构来组织数据。一个GATT配置文件可能包含多个服务,每个服务包含一个或多个特征。每个特征是用户数据的容器。一个特征后面可以跟着描述符,这些描述符提供了特征及其值的附加元数据。

BLE有两种传输数据的方式:通过BLE广播和通过连接的数据交换。广播是BLE设备以单向方式发送数据包的过程,而连接上的通信允许外部和中央之间的双向数据传输。数据包通过外部设备的GATT服务器中的特征进行交换。通过其MAC地址,BLE设备被寻址,MAC地址是一个48位的标识符。有四种类型的MAC地址:公共地址、随机静态地址、随机私有不可解析地址和随机私有可解析地址。公共地址已在IEEE注册,不会更改。随机静态地址未注册,在设备运行时保持不变。每个支持蓝牙的设备都有一个标识地址,它可以是公共地址或随机静态地址。两种随机私有地址(不可解析、可解析)用于隐私保护目的。随机私有不可解析地址完全随机生成,而随机私有可解析地址(RPAs)是使用从随机种子值和称为身份解析密钥(IRK)的16字节密钥进行的键散列函数生成的。拥有设备的IRK也将允许用户对其RPAs进行去匿名化。

配对是两个BLE设备交换必要信息的过程,以建立加密连接。BLE有多种配对模式,由配对设备的认证要求和输入/输出(IO)能力决定。作为配对的一部分,IRKs被交换,以便设备可以使用IRKs识别各自的RPAs。BLE支持不同的配对方法来验证配对过程中的参与者。最简单的配对方法称为“Just Works”,不检查参与者的真实性,已被利用来秘密窃取目标设备的IRK。

研究方法:采用了多种调查方法来了解SmartTags和FMM应用程序的OF协议。参与分析的设备包括一台配备BLE 4.2适配器运行Ubuntu 20.04 LTS的研究笔记本电脑,运行Android版本8.0 - 12的多部三星手机,以及具有固件版本1.01.26和1.02.06的SmartTags。研究者使用了应用程序和固件的逆向工程相结合的方法来研究OF网络中涉及的各种协议的内部工作原理,分析由Android系统和应用程序产生的各种日志,以及分析设备与供应商服务器之间的BLE和网络流量。

 | 离线查找协议 |


SmartTags的OF协议涉及与各种供应商服务器的在线交互(通过互联网)和与附近标签和移动设备的离线交互(通过BLE)。在这里讨论了四个重要的子协议,这些子协议在下图中进行了总结。设备与服务器之间的通信通过HTTPS进行,假设它是安全的。涉及到四个主体:所有者设备、标签、供应商服务器和helper设备。子协议如下:

1.注册协议:该协议涉及所有者设备、标签和服务器。所有者通过获取相关的标签数据,如序列号、固件版本等,然后与服务器启动密钥建立协议,以生成用于随后与标签交互的各种对称密钥。

2.连接模式下的标签协议:该协议在注册后立即执行,以及在标签在脱离BLE范围后在所有者设备附近时执行。它包含了对所有者设备和标签进行认证的子协议,一旦认证通过,可以在BLE上交换各种命令和数据。

3.丢失模式下的标签协议:该协议在标签失去与所有者的BLE连接不到24小时后触发。在此状态下,它会广播匿名的循环隐私ID,触发附近的helper设备(定期扫描隐私ID)记录并报告所记录的隐私ID的位置到服务器。

4.超时丢失模式下的标签协议:标签在失去24小时以上后转入超时丢失模式。检测到标签处于超时丢失模式的helper设备将启动反跟踪检测过程。该过程旨在使helper设备能够通过在标签上播放声音来定位(潜在的)跟踪标签。为了播放声音,帮助者需要从服务器获取临时密钥,以便向标签进行身份验证。



A.SmartTag注册


SmartTag注册协议需要与未注册的标签和供应商服务器进行交互。对于供应商服务器,实际上涉及多个服务器,提供诸如用户认证、应用程序相关服务(如远程认证)以及与存储和检索位置报告相关的服务。为简单起见,将在以下讨论中统称这些服务器为供应商服务器(或简称“服务器”)。

所有者设备与标签之间的交互通过BLE使用BLE广播和GATT配置文件完成。SmartTag使用两个UUID来在BLE上广播其存在:FD59用于未注册的标签,FD5A用于已注册的标签。SmartTag不支持互联网连接,因此依赖于所有者设备(通常是移动电话)通过BLE连接执行各种设置。这是通过其GATT配置文件完成的,该配置文件定义了标签及其所有者设备用于交换数据和命令的各种服务和特征。在下文中将省略GATT配置文件中每个特征使用的具体UUID,并改用符号名称来引用它。SmartTag的GATT配置文件具有四个主要服务,可以总结如下:

  • 认证服务:认证服务使用三个特征,NONCE、ENONCE和SUPPORTED_-CIPHER,用于在BLE上对连接设备进行认证。
  • DFU服务:服务UUID FE59是nRF52833无按钮安全DFU服务的一部分,用于通过空中固件更新。它具有可写特征(BUTTONLESS_-DFU),可用于重新启动标签。
  • Onboarding服务:服务UUID FD59用于设备入网/注册活动。在注册过程中,所有者设备和标签通过此服务下的各种特征交换配置和加密数据。
  • 命令服务:服务UUID FD5A主要用于在所有者设备和标签之间执行更复杂的交互,例如在标签上执行支持的命令(例如,报警,更改铃声)等。

SmartTag注册由运行SmartThings应用程序的所有者设备发起。它涉及与服务器的在线交互,以及与标签的离线交互。与服务器的交互需要有效的用户帐户。在以下讨论中将假设已创建了有效的用户帐户,并建立了所有者设备和服务器之间的已验证会话。注册协议包括五个阶段:密钥建立、所有者-标签认证、确认标签的物理拥有权、标签所有权检查和注册完成。

阶段1:密钥建立

注册协议的第一个阶段实际上是标签和服务器之间的密钥建立协议,由所有者设备中介。由于无法获得服务器代码,对这个阶段的分析基于对SmartTag固件和所有者设备与服务器之间拦截的流量的分析。研究结果表明,标签保留一对私钥-公钥ECDH密钥(a,Apub),该密钥在标签的整个生命周期内保持不变,而服务器至少保留了每个标签的公钥。标签通过其串行号唯一标识,该串行号是其BLE控制器的身份地址的SHA256摘要。标签的公私钥对从标签或服务器中都不会发送出去。共享密钥建立协议总结如下图所示。


步骤1. 所有者设备通过标签的广播负载和Onboarding服务获取必要的注册数据。其中包括对标签唯一的散列串行号(hashed_sn),它对应于标签的BLE身份地址的SHA256摘要。

步骤2. 所有者设备生成一个32字节的随机值x,并将x与步骤1获取的注册数据一起发送给服务器。

步骤3和4. 在收到请求后,服务器查找与hashed、_sn关联的标签Apub的公钥。然后,服务器生成临时的私钥-公钥对(b,Bpub),并计算ECDH共享密钥Bkey = bA。最后,将共享密钥与随机数x连接起来形成SHA-256哈希函数的输入,以生成共享秘密:Bsecret = SHA256(Bkey|x)。然后,服务器将Bpub和Bsecret发送给所有者设备。

步骤5. 所有者从服务器接收Bpub和Bsecret,并将Bpub和x转发给标签。

步骤6. 标签从所有者设备接收Bpub和x,并计算Akey = aB和Asecret = SHA256(Akey|x)。

根据ECDH的属性,假设没有被攻击者篡改,到达步骤6的末尾,应该有Asecret = Bsecret。也就是说,所有参与者现在共享相同的Bsecret秘密。这个共享密钥将在接下来用于计算多个在后续协议中使用的AES密钥。

共享密钥Bsecret的前16字节被视为masterSecret。它用于派生用于保护所有者设备和标签之间通信的六个16字节子密钥。请注意,三星OF协议不使用任何默认的BLE配对和认证机制,因此这个共享密钥与通常作为BLE配对协议的一部分交换的BLE长期密钥(LTK)无关。子密钥使用下面给出的密钥派生函数派生,该函数结合了masterSecret和用于区分子密钥的参数:


以下四个子密钥由所有者设备、标签和服务器计算。

1.所有者身份验证密钥:所有者使用该密钥与 SmartTag 建立经过身份验证的 BLE 会话。它的计算方法是:

AKo = kdf(masterSecret, "bleAuthentication")

2.所有者GATT密钥:该密钥用于加密所有者和标签之间的GATT交互中交换的数据。它依赖于随机数,并且对于与标签交互的单个会话有效。

GKo(nonce) = kdf(masterSecret,nonce)

这里的 nonce 是在每个 BLE 身份验证过程中从智能标签接收到的 16 字节值。

3.隐私密钥:该密钥用于为智能标签生成唯一的隐私 ID。

PIDK = kdf(masterSecret, "privacy")。

4.广播签名密钥:该密钥用于签名和验证 SmartTag 广播的 BLE 数据的完整性:

ASK = kdf(masterSecret, "signing")

两个附加子密钥由智能标签和服务器派生,但不是由所有者设备派生。

• 非所有者身份验证密钥:非所有者设备使用此密钥对标签进行身份验证。

AKno = kdf(masterSecret, "nonOwner")

• 非所有者GATT 密钥:该密钥在非所有者和标签之间的 GATT 会话中用于交换命令。它取决于 GATT 交互期间交换的随机数。

GKno(nonce) = kdf(AKno,nonce)

与所有者 GATT 密钥不同,非所有者 GATT 密钥不是直接从 masterSecret 生成的;相反,它是从非所有者身份验证密钥派生的。

阶段2:所有者-标签认证

在计算masterSecret和AES密钥之后,所有者设备发起与标签的双向认证,以建立经过身份验证的连接会话。此协议仅通过BLE交互来实现,使用标签的GATT配置文件中的Authentication Service。在以下协议描述中,O代表所有者设备,T代表标签。使用符号Ek(x, y)表示使用密钥k和初始化向量x对明文y进行AES/CBC/PKCS7加密。


这里的nO和nT分别指的是由O和T生成的随机数。在第3步中,标签检查接收到的密文是否确实是文本"smartthings"的加密;同样在第4步中,所有者检查接收到的密文是否具有预期的形式。如果这些检查中的任何一个失败,认证将失败;否则认证将建立,并且标签和所有者都使用nT派生Owner GATT密钥,即gko = GKo(nT)。这个密钥作为一个会话密钥,用于在此经过身份验证的会话中保护数据传输,直到BLE连接终止。

阶段3:确认标签物理拥有权

在所有者和标签成功建立了经过身份验证的BLE连接并派生了会话密钥gko之后,下一步是确认标签的物理存在。在正常的注册流程中,SmartThings应用程序将要求用户按下标签按钮以确保拥有标签的物理存在。按下标签按钮会将标签上的CONFIRM_STATUS特征的值设置为0x01(使用IV设置为nT的gko加密),而默认值为0x00。所有者的设备只有在验证此特性的值后才会继续注册流程。


阶段4:标签所有权状态检查

该阶段检查标签的所有权状态,以确保它当前没有注册到另一个用户。这是通过向服务器发送一个简单的请求来完成的,其中包含标签的序列号sn。如果服务器指示该标签已经被注册到另一个帐户,注册过程将中止。

阶段5:完成标签注册


此阶段创建与所有者帐户关联的标签的在线配置文件。协议可以抽象描述如下,其中S表示服务器。


在第1步中,所有者设备发送一个记录,其中包含标签序列号sn,标识符id以及共享秘密Bsecret等内容。回顾一下,在前一阶段的所有权状态检查中,sn用于避免标签被注册两次。观察显示,sn和id是相同的,等于标签的BLE身份地址。

在第2步中,服务器返回一个与标签关联的唯一deviceId,以及包含以下字段的元数据记录:隐私ID池大小(pidsize),隐私ID种子(pidseed)和隐私ID IV(pidIV)。所有者设备保留这些参数的记录,并在第3步中将它们(加密)发送给标签。标签稍后将使用这些参数生成BLE广播。deviceId可以稍后用于查找标签的位置。

在第4步中,所有者设备向标签发送当前时间信息(以UTC为单位),以便标签可以与所有者同步其时间。最后,在第5步中,所有者发送一个加密消息("Finish")以指示注册过程的结束,并断开与标签的连接。

在第6步中,标签广播包含一个隐私ID的BLE数据,由所有者设备用于标识它。在发现自己的标签后,在第7步中,所有者设备将当前位置loc和标签pid报告给位置服务器。标签由其所有者设备进行的第一个位置报告将在服务器上创建一个设备配置文件,将标签的所有权状态与所有者的三星帐户绑定在一起,防止其他人注册标签。关键是,服务器使用值id作为标签的标识来进行所有权绑定。


B.所有者-标签交互


标签可能会在其所有者设备的BLE范围内移动。所有者设备(也充当不拥有的标签的帮助者设备)会定期扫描其附近的标签。当标签在其所有者附近被检测到后,如果之前曾离开,所有者(通过SmartThings应用程序)将自动启动经过身份验证的BLE认证协议。认证成功后,应用程序将显示标签已连接,所有者可以在标签上执行各种支持的命令,如使标签响铃。SmartThings还允许配置标签在标签上按下物理按钮时在所有者设备上执行有限的操作,例如使所有者设备响铃。每个命令都是通过交换加密数据Egko(nT,Data)来触发的,其中gko是所有者GATT密钥,nT是在所有者-标签认证阶段中发送的标签nonce,Data是命令的编码:



计数器值对应于O在当前经过身份验证的会话中成功发送的命令总数。操作码指定命令类型,因为一个特征可能支持多个命令,例如操作码0表示关闭响铃,1表示打开响铃。


C.位置查询报告


现在将讨论用于查询其丢失标签的位置服务器的所有者设备以及用于向服务器报告丢失标签的位置信息的帮助者设备的子协议。位置查询协议仅包含对api.samsung.com域下的URL的简单POST请求,重点关注用于位置报告的子协议。


SmartTag BLE广播数据:帮助者设备仅通过它们的BLE广播数据识别附近(丢失的)SmartTag,因此首先介绍广播结构以及它是如何生成的。上图显示了SmartTag的OF广播结构,对OF协议高度相关的字段如下:标签状态(字节0),超时计数器(字节1-3),隐私ID(字节4-11)和签名(字节16-19)。

标签状态编码在字节0的5-7位中,表示标签的操作状态。共有六种不同的标签状态,如下表所示。注册标签的状态一旦与其所有者设备断开连接或重新启动,就会变为过早丢失。在超时丢失模式下运行15分钟后,状态将变为丢失,通知附近的帮助者设备标签被视为丢失。在丢失模式下运行24小时后,状态变为超时丢失,其中某些BLE操作会减慢以节省电源。发现超时丢失模式中的标签的帮助者设备将启动反跟踪过程。


字节1-3:存储超时计数器(aging counter),这是使用标签的时间(UTC)和硬编码常数计算的时间戳:agingCounter = (tagTime − 1593648000)/900。超时计数器对所有与服务器时间同步的SmartTag都是通用的,并定期更新。

字节4-11:存储8字节的隐私ID,这是SmartTag的唯一标识符。每个已注册的SmartTag都有一组称为隐私ID池的唯一隐私ID。该集合是使用在注册过程的最终化阶段服务器发送给所有者的隐私密钥(PIDK)和隐私ID配置(pidsize、pidseed、pidIV)确定性生成的。隐私ID是OF协议的重要组成部分,因为它们将标签与其所有者的三星帐户关联起来。对于每个i∈{1,..., pidsize},隐私ID pidi如下生成:

pidi = EPIDK(pidIV,inputi),其中inputi是字节数组xi =(i ≫ 8)∧256和yi = i∧256。≫表示右位移,∧表示按位与。在进行分析时,SmartTag的隐私池大小为1000,但该值由服务器控制,因此不是固件特定的。

广播数据的最后一个字段是用作前16个字节的密码校验和的签名字段。让blePayload表示BLE广播数据的前16个字节。然后,签名的四个字节是从下面定义的fullSignature的前4个字节中获取的:

fullSignature = EASK(pidIV, blePayload),其中,ASK是广播签名密钥。对广播的前16个字节进行任何更改可能会导致签名字节相应地发生更改,从而允许具有标签的隐私ID配置和标签的共享密钥(例如所有者和服务器)验证BLE数据的完整性。在任何非超时丢失模式下的标签每隔15分钟更新一次其隐私ID、超时计数器(递增1)和签名。在超时丢失模式下,标签每隔15分钟更新一次超时计数器和签名。但是,修改隐私ID的频率从每15分钟一次减少到每24小时一次。

位置报告:帮助者设备定期扫描附近SmartTags的BLE广播数据。它根据SmartTags的广播UUID(FD5A)对BLE广播进行过滤。帮助者设备将丢失设备的隐私ID存储在本地数据库中,最多可存储1000个条目。需要注意的是,这些隐私ID不一定代表不同的设备,因为标签可以生成多个隐私ID,而(诚实的)帮助者设备没有隐私密钥(PIDK)来链接这些ID。如果标签的隐私ID在15分钟的BLE扫描中没有出现,它将被标记为过期并从数据库中删除。此外,帮助者设备仅报告丢失或超时丢失模式下的SmartTags的位置。

帮助者设备将基于从WiFi或GPS服务接收的估计位置报告数据库中的丢失SmartTags的地理位置。通过对帮助者设备进行逆向工程和运行时分析,发现每个帮助者设备都有一对RSA 2048位的私有签名密钥(pkH)和其相应的验证密钥(pubH),存储在设备中,使用Android keystore进行安全性保护。分析显示,这些密钥嵌入在FMM apk中包含的本机库中,因此可能不是每个设备都唯一的。公钥pubH由三星拥有的中间CA签名。这些密钥在下面的位置报告协议中用于认证报告的原始性(即报告来自官方三星设备而不是未经授权的第三方)。要提交位置报告,帮助者设备必须首先从服务器获取令牌。此令牌请求过程在另一个协议中(用于与未知标签交互)中再次重复使用,因此在这里单独描述它。


在第1步中,帮助者设备生成一对私有-公共密钥(pkR,pubR),然后将位置报告请求发送给服务器S。具体来说,此步骤通过简单的HTTPS GET请求发送给S完成。服务器以十六进制字符串形式响应一个16字节的随机数。H从其密钥库中提取签名密钥pkH,之前已执行过鉴别协议,并使用它来对随机数nS进行签名。然后,帮助者设备将随机数nS、其签名sig(nS,pkH)、经认证的公钥cert(pubH)和pubR发送给服务器。请注意,密钥对(pkR,pubR)在位置报告中未被使用,但在另一个协议中将变得重要。如果服务器检查证书的有效性并验证签名,如果一切正常,服务器将发送一个唯一的令牌(这是一个与随机数nS相关联的JWE令牌)(第4步)。然后,令牌将用于认证位置报告。


在report中,包含了一组广播数据以及它们被检测到的地理位置。每个位置报告允许最多报告5个最近发现的设备(发现时间≥当前时间-1分钟)来自本地数据库。每个令牌都有一个固定的到期时间(实验中约为32小时),在到期后,必须重复上述令牌请求协议以获得新的令牌。


D.未知标签检测


SmartThings应用程序具有检测附近超时丢失模式标签的功能,用于反跟踪。如果检测到此类标签正在跟踪帮助者设备,SmartThings应用程序会为设备所有者提供一个选项,以在标签上播放声音以帮助定位。与AirTags不同,任何用户都可以向标签发出播放声音的命令,SmartTag仅对来自经过身份验证的设备的命令做出响应。由于帮助者设备没有进行身份验证的密钥来对标签进行身份验证,因此它需要供应商服务器的帮助。

假设帮助者设备已执行了请求JWE令牌的协议(请参阅上述位置报告协议)并获得了令牌。要在标签上播放声音,帮助者设备需要启动GATT连接并从某个特定特征中读取一个随机数。在下面,符号AEpub(x)表示使用公钥pub对明文x进行非对称加密。


在第4步中,消息计算如下:


其中,pubR是在令牌请求协议中生成的H的公钥。H解密这些消息以获得 enT = EAKno(nT) 和 gkno = GKno(nT),后者在协议的其余部分中使用。如果省略第3步和第4步,此协议类似于所有者-标签身份验证协议,只是所使用的身份验证密钥是AKno,用于发送命令的GATT密钥是GKno(nT)。请注意,服务器永远不会透露AKno本身。此请求需要附带当前的令牌以及来自标签的标识信息。

 | 安全性和隐私分析 |


根据对SmartTag的BLE接口的交互程度,攻击者模型中将近距离威胁(A1)细分为被动(A1.1)和主动(A1.2)两个类别。与FindMy模型一致,考虑了基于网络的(A2)和服务运营商(A3)的威胁。最后引入了一个新的标签:所有者类别(A4)。


A.近距攻击


攻击场景:通过被动窃听BLE广播(A1.1)或积极与SmartTag的GATT服务器交互(A1.2),攻击者可以识别并跟踪邻居的FMM设备或SmartTag的存在,从而获取他们的日常时间表。

链接性缺陷:OF设备的隐私ID池大小是在注册阶段由服务器发送的参数指定的。对于FMM设备,这个值是51,而对于SmartTag,这个值是1000。由于池大小不是在客户端上硬编码的,所以在服务器的未来更新中可能会更改。目前,即使有1000个池大小,由于生日定理的原因,同一个隐私ID可能会在大约√n个旋转中被重复使用,其中n是池的大小。实验中对BLE数据的几天被动观察将覆盖FMM设备的所有51个隐私ID。最近版本的FMM应用程序已经为隐私ID添加了一层混淆,但保持了相同的隐私ID池大小。然而,初步发现显示这可以很容易地被去混淆,这种混淆未在SmartTag中实现。

GATT服务器泄露敏感数据:已注册的SmartTag以频繁更改的RPAs广播。然而,发现SmartTag的GATT配置文件中的特征泄露的敏感信息提供了两种方法,供攻击者对标签的身份进行去匿名化,IDENTIFIER特征包含其标识MAC地址,而HASHED_SERIAL_NUMBER特征包含标识地址的SHA256哈希值。这两个值都是静态的且对于每个标签都是唯一的,并且是可读的,这可以被任何附近的攻击者用于识别标签。

SUPPORTED_CIPHER特征是可读和可写的。它包含一个默认值"AES128/CBC/PKCS7",用于指定用于BLE身份验证的密码。发现将自定义值写入此特征将覆盖默认值,直到重新启动标签。因此,攻击者可以通过将自定义标识符写入此特征来识别已注册的标签。

DFU设备重启:Galaxy SmartTag具有用于安全的无线固件更新的DFU(设备固件更新)服务。发现通过启用Buttonless DFU特性的指示并向其写入字节0x01,可以将SmartTag重启到DFU模式。实际上,这不是三星的实现的一部分;而是nRF52芯片组用于固件更新的默认服务,因此这个漏洞不是特定于SmartTags。

在DFU模式下,标签会在一个随机的静态MAC地址上进行广播,并等待新的固件包。如果在短时间内(大约两分钟)没有接收到数据,标签将重新启动并恢复其丢失模式的BLE操作。此外,DFU模式会显示标签的身份MAC地址 - 在DFU模式中使用的MAC地址(addrDFU)等于标识MAC地址(addrId)加一,例如,如果观察到addrDFU为11:22:33:44:55:66,则可以推断addrId为11:22:33:44:55:65。但是,在DFU模式结束后,OF数据中的超时计数器被重置为0,这使得标签不再支持OF跟踪,因为超时计数器被视为太旧,服务器将不接受其位置。

意外与SmartTag进行配对:固件1.02.06的更新引入了一个新的漏洞。具有这个新固件的SmartTag似乎接受配对请求,使用Just Works关联模式,允许攻击者获取标签的IRK和标签的标识地址。然后,IRK可以用于解析标签在BLE广播中使用的RPAs。IRK似乎在重新启动和切换帐户时是持久的。因此,将标签从三星帐户中删除并与另一个帐户配对不会重置IRK。拥有IRK可以更隐蔽地跟踪标签,因为攻击者不需要连接到标签;他们只需观察用于广播负载的RPAs并使用IRK对其进行去匿名化。

意外与所有者设备进行无声配对:可以通过利用BLE规范中的以下配对行为来冒充SmartTag并无声与其所有者设备配对:如果中央设备在与外部设备的某个特性进行交互时遇到“身份验证不足”错误,它将启动与外部设备的配对过程。此行为已经在先前的工作中被利用来启动意外的配对。如[37]中所述,攻击者可以影响配对的关联方法,例如,强制使用较不安全的方法,如Just Works。

在此攻击中,攻击者充当外部设备,而中央设备是所有者设备。攻击者创建了一个SmartTag的GATT配置文件,并重新播放了标签的最新BLE广播,以欺骗所有者设备启动BLE身份验证过程。BLE身份验证始于所有者设备对(伪装的)SmartTag的GATT服务器的NONCE特征的写入。通过将NONCE的写入权限设置为加密写入,将在写入请求时触发“身份验证不足”错误。在2020年11月之前的补丁之前,如果使用Just Works,大多数Android版本上都会悄悄执行配对。不能接收更新的旧款三星设备,如三星Galaxy 7,仍然容易受到攻击。这种攻击允许攻击者获取所有者设备的IRK和标识地址,这可以用于长期跟踪。


B.基于网络的攻击


攻击场景:在基于网络的威胁背景下,窃取了一个附在被盗物品上的标签的攻击者可能会通过伪造标签的丢失模式广播来伪装被盗物品的位置,从而将所有者引导到错误的轨迹。

伪造位置报告:发现有几种方式可以破坏位置报告的完整性,使攻击者能够报告丢失标签的虚假位置。

中继攻击:helper设备只是将丢失的标签或移动设备的BLE广播数据转发到位置服务器。帮助者没有机制来确定数据是否确实由附近的合法OF设备广播。这允许非常简单的中继攻击:两个位于不同位置的攻击者A和B可以通过将在A位置观察到的设备的BLE广播数据转发给B来在B位置重播,反之亦然。如果两个位置都有helper设备,它们将提交冲突的报告。实际上,实验显示位置服务器不会检查位置报告的一致性,例如,一个设备可能在几秒钟内被检测到在两个不同的大陆上。这种攻击对FMM设备尤其有效,因为它们的广播数据没有过期时间,可以无限次重播。相比之下,使用SmartTags,广播中的超时计数器会防止无限重播。根据观察注意到广播数据超过7天的将被服务器拒绝。值得注意的是,这似乎是一个普遍性问题,影响所有众包BLE跟踪系统,包括苹果的FindMy。

接下来的三种攻击利用了位置报告协议本身,它们对应于攻击者可以获取令牌以提交位置报告的三种不同方式。请回想,只有在报告者拥有有效的令牌时,位置服务器才会接受位置报告。这些攻击更强大,因为它们根本不需要在目标位置出现任何helper设备。例如,能够伪造一个OF设备在海洋中间被探测到的报告,如下图所示。


重复使用位置报告令牌:事实证明,一旦helper设备从供应商的服务器接收到用于位置报告的令牌,它会将令牌记录在其系统日志中。因此,拥有helper设备的攻击者可以从日志中提取此令牌并使用它发送伪造的位置报告。这个过程可以很容易地自动化,因为报告是通过向位置服务器发送简单的HTTPS POST请求来完成的。

通过签名重放续订令牌:发现在令牌请求协议中,服务器不会检查它在步骤2中发送的nonce nS 是否与它在步骤3中接收的nS 相同。这允许拥有先前会话中签名的nonce的攻击者重新播放它以获得另一个令牌。更具体地说,假设攻击者拥有n′S 和sig(n′S , pkH)。那么以下是用于令牌续订的有效协议运行:


即使nS != n′S。请注意,helper设备与位置服务器之间的所有通信都通过HTTPS进行安全保护,因此要使此攻击成为可能,攻击者需要能够解密TLS加密的流量。在实验中,这是通过在经过Root的helper设备中安装根CA,并在设备和服务器之间执行MITM攻击来完成的。在运行Android 10或更高版本的最新三星手机上,位置报告过程涉及到在手机提取签名密钥以签署nonce之前进行认证协议。如果检测到手机已经Rooted,则此认证步骤将失败。只能在运行Android 8.0的旧三星手机上执行此攻击。

提取签名密钥:研究者发现了一个允许攻击者提取签名密钥本身的缺陷。然后,这能够在手机外运行整个位置报告协议,因为现在拥有传递身份验证阶段以获取令牌所需的所有信息。


C.服务运营商


攻击场景:在没有强大的端到端隐私保护的情况下,服务运营商可能通过分析位置历史来推断社交联系,从而侵犯用户的隐私。

端到端隐私:OF协议假定供应商是可信方,因为供应商具有计算任何已注册SmartTag的隐私ID所需的密钥材料。这意味着供应商可以对丢失设备的位置报告进行去匿名化。从隐私的角度来看,这比苹果的FindMy网络更糟糕,因为生成隐私ID所需的加密密钥未向供应商披露。

一个更有趣的问题是三星OF协议的设计是否保护helper设备的隐私。从位置报告协议中,可以看到令牌可以用于链接多个位置报告。由于每个令牌都分配给helper设备,因此其位置报告可以链接以绘制其在令牌有效期内的轨迹。原则上,令牌不与特定的三星账户绑定。但是,在正常操作下,这样的令牌请求将伴随着对三星服务器的其他请求,它们有可能被相关联。


D.标签所有者


攻击场景:在没有足够的反跟踪机制的情况下,恶意的SmartTag所有者可能会滥用OF网络进行跟踪,例如,将标签隐藏在同事的物品中进行秘密跟踪,或者创建一个难以检测的定制跟踪器,利用三星的OF协议。

OF设备仿真:模拟OF设备有助于理解设备和供应商服务器之间交互的各种子协议,并评估创建自定义跟踪器以规避三星反跟踪机制的可行性。模拟FMM移动设备很简单,因为生成隐私ID的(唯一)秘密可以轻松从设备日志中提取。对于SmartTags,这是不可能的。要模仿可以通过正常流程注册的SmartTag,模仿需要成功通过最终化阶段(见第3.1节)与服务器建立共享密钥。由于用于派生密钥的私钥嵌入在合法标签的硬件中,并且在注册期间未明确交换,因此不容易获得,除非对标签进行硬件级攻击。与FMM设备的情况不同,此共享密钥不记录在所有者设备的设备日志中。

反跟踪功能:FMM版本7.2.25.14引入了一个用于检测跟踪标签的后台检测反跟踪模块。丢失模式SmartTag广播的OF数据包含两个临时标识符:它使用的不可解析RPA和BLE数据包中的隐私ID。对于丢失模式标签,这两者每15分钟更改一次。对于一个超时丢失模式标签,MAC地址仍然像往常一样随机化,但隐私ID只会每24小时更新一次。

反跟踪功能只能通过初始观察检测到处于超时丢失模式的SmartTags。对FMM应用程序的反向工程显示,跟踪检测算法使用标签的BLE广播数据中包含的隐私ID作为其标识符,然后使用两个阈值来确定标签是否是跟踪器:

1)自标签首次被发现并保存到本地数据库以来的持续时间;

2)标签附近的距离(根据保存在数据库中的地理位置)。

这解释了为什么该算法不能检测丢失模式的跟踪标签:由于反跟踪算法仅使用隐私ID数据作为标签的唯一标识符,它无法在标签的隐私ID更改之前和之后关联标签。因此,对于丢失模式的标签,检测到的跟踪持续时间最多为15分钟。而对于超时丢失模式的标签,隐私ID值只在一天内更改一次,通常允许两个阈值最终满足。由此带来的另一个后果是离线FMM移动设备生成的隐私ID也被反跟踪机制忽略。

上述情况使得攻击者可以通过自定义BLE标签来规避反跟踪,这些标签要么冒充离线FMM设备,要么冒充具有快速更新隐私ID的SmartTag。


E.漏洞修复更新


1.隐私ID池较小:池的大小保持不变,但引入了一个模糊化过程,使隐私ID看起来更加独特。但是,攻击者可以将这些ID进行反模糊化。

2.关联性缺陷:在最新的固件版本(1.04.01)中,IDENTIFIER特征仅向经过身份验证的设备返回标签的序列号,HASHED_SN不再可写,与标签的静默配对漏洞已修复。然而,DFU服务仍然容易受到攻击。

3.位置报告协议:三星已经实施了一致性检查,以保护用于令牌续订的nonce,从而防止了签名重放攻击。然而,其他两个位置报告漏洞仍然存在。

 | 结论 |


在这项工作中,对Find My Mobile(FMM)设备和SmartTags的离线寻找(OF)和设备管理协议进行了彻底的分析,并进行了安全性和隐私性分析。对协议的设计和实施进行的分析已经识别出了多个缺陷,还发现了其他漏洞,包括与SmartTags的GATT服务器实现相关的多个其他问题,以及在注册协议中的缺陷,允许攻击者注册其他人的SmartTag而不知道其ECDH私钥。


精彩推荐




继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存