RFID 分析与实战
基础概念
射频识别,即RFID(Radio Frequency Identification),又称无线射频识别,是一种通信技术,可通过无线电讯号识别特定目标并读写相关数据,而无需识别系统与特定目标之间建立机械或光学接触。
一套完整RFID硬件统由Reader与Transponder两部分组成,其原理为由Reader发射一特定频率的无线电波能量给Transponder,用以驱动Transponder电路将內部的ID Code送出,由Reader接收此ID Code;Transponder的特殊在于免用电池、免接触、免刷卡故不怕脏污,且晶片密码为世界唯一无法复制,安全性高、长寿命
物联网分为应用层、网络层和感知层,RFID处于感知层。其在物联网中的应用十分广泛 。
射频识别(RFID)
首先,先说明RFID的概念。在Wiki-pedia RFID词条下的定义:
Radio Frequency IDentification一种无线通信技术,可以通过无线电信号识别特定目标并读写相关数据,而无需识别系统与特定目标之间建立机械或者光学接触。
所以RFID实际上并不只限于我们日常用的刷卡的“卡”,还有其他比如商品上的射频标签。
IC卡和ID卡
这两者的关系,也是目前这一领域中争论最多的一个点。
ID卡,即IDentification Card,指的是身份识别卡,一般情况下是不可写入的感应卡,能读出固定的编号。
IC卡,是Integrated Circuit Card的简称,即集成电路卡,又称智能卡(详见Wiki-pedia“智能卡”条目)。特点是可读写,容量大,有加密功能,数据记录可靠,使用方便。
低频卡和高频卡
这里低频、高频的概念总是容易和IC卡、ID卡有所混淆。很多地方都把ID卡归类为低频卡,IC卡归类为高频卡,实际上这是错误的。
根据百度百科关于ID卡的描述,其工作频率有125KHz和13.56MHz两种不同的频段,因此高频和低频并不是区分ID和IC卡的方式。
目前定义的RFID产品的工作频率有低频、高频和超高频(甚高频)、微波等频率范围。不同频段的RFID产品有不同的特性。
- 125KHz~134KHz属于低频;
- 13.56MHz为高频;
- 860MHz~915MHz为超高频(甚高频);
- 2.4GHz~5.0GHz为微波;
“白卡”和卡复制
这个实际上是一种攻击手段,在这一节提出是因为一个“神奇的卡片”,被国外人称为”Chinese magic Card”的白卡。
理论上来说,卡片的序列号是不可更改的,各种百科和官方文档中也有提到:卡号在封卡前写入后不可再更改,绝对确保卡号的唯一性和安全性,但是有人制作了允许对卡片的序列号进行修改的卡片,导致了卡片的序列号非唯一,这也是有“复制卡”出现的原因。
攻击手段
RFID伪造(卡号复制)
这里说卡号复制,实际上是从传统的ID卡复制而来。但是在实际生活中,对于ID卡和IC卡的使用没有区分的那么明显。以门禁为例,有些门禁就是使用ID卡,去识读卡片的序列号(或者说UID)进行判别;有些门禁会使用IC卡,但是并不在其中的存储扇区写入数据,故读卡器仍旧读取的是序列号。
因此这里统一使用“卡号复制”而不是ID卡复制来避免这一部分的歧义。
由于ID卡在设计之初就是将UID公开、不防护的,因此这部分没有任何的安全机制可言,尤其是出现了可以修改UID的“白卡”。
因为读取到UID即可完成卡片的复制,攻击者可以制作一个功率很大的天线,来延长射频卡的识读距离,可达到30cm甚至更远的距离,且该读取设备可以做的很小而增强便携性,放在手腕、手提包中靠近目标对象从而读取到其卡片信息(详见DefCon 21,RFID hacking live free or RFID hard)。
扇区、块和卡密
对于IC卡来说,卡片中提供了存储的能力。有些卡片中会存储与卡相关的信息,比如卡片余额,或者持有人的信息等。如果可以读出卡片中的数据,并且解析成有意义的字段并修改,然后重新写入卡中,就可以对卡片进行数据的伪造和篡改。
下面所提到的方法,都是关于Mifare Classic这种类型的卡的,其工作频率是13.56 MHz,符合ISO/IEC 14443A标准。常见的Mifare Classic有两种,MF1 S50和MF1 S70,S50有1K的存储空间,而S70有4K的存储。
Mifare Classic卡片分为很多个扇区。S50有16个扇区,而S70有40个扇区。S50卡每个扇区分为4个块(Block),而S70卡的扇区略有区别。两种卡片的存储结构如下图所示,可以看出两种卡的特点和关系:
每个扇区的最后一个block是卡密(Key A和Key B)及访问控制字段。相关访问控制比较复杂,具体可以参见官方文档。
0扇区的0块是厂商信息,包含了卡的UID。一般0扇区0块是不可写的,但是所谓的“白卡”就是0扇区0块可写的卡,是复制卡的基础。
其中,卡密是卡片校验读卡器权限的,其简单的交互流程如下:卡片产生一个随机数发送给读卡器,读卡器需按照算法计算出结果再发送给卡片,由卡片进行验证。验证通过之后,后续的交互都是用卡密进行加密的。
Nested攻击
因为复制卡只是复制了卡的UID,还需要将卡片扇区的数据都拿出来,因此需要知道每个扇区的卡密,才能读取到内容。
简单地说,就是默认密码攻击。
由于M1卡片有16个扇区,在绝大多数情况下16个扇区不一定会同时使用到。于是根据厂商在出厂时预设的密码可能碰撞出其中某一个扇区的密码。
由于无源的M1卡每一次刷卡上电的时候,密钥交换采用的随机数都是“有规律”的,用已经碰撞出的某一扇区的密钥去试探其它扇区,在此时根据随机数的规律即可“套”出密码
根据上述的交互原理可知,想要读取卡片内容,需要知道各个扇区的Key A和Key B。扇区密钥是48bit,使用FPGA直接暴力破解,可在约10小时的时间内完成。
M1卡片使用的加密方式是Crypto-1,卡片上的硬件实现中,加密用的随机数产生器(RNG)使用了LFSR(Liner Feedback Shift Register),其产生的随机数是可预测的。随机数的生成与两个变量相关:一是读卡器启动的时间,二是请求随机数的时间。由于攻击者可以通过操纵这两个时间来预测随机数,导致其通信有被破解的可能性。
Courtios等于2009年提出了一种新的破解方法[11],简单描述为:卡片在识别读卡器发送的认证数据时,会先检查读卡器返回数据校验位是否正确,如果不正确则不返回;当检查通过时,若认证数据错误,则卡片会返回0x5 (NACK),且该数据是加密的。利用加密数据与0x5进行异或 (XOR) 操作后的数据,可恢复出密钥流中的4bit数据。
在该文献中,作者称该攻击恢复出卡片其中一个扇区的密钥时间在1小时左右。
Darkside攻击
简单地说就是暴力破解,即爆破出某一个扇区的密钥,之后再使用Nested攻击就能Dump出整张卡。
而与通常意义上的暴力破解不同的是,由于M1卡片的认证机制,其会泄露部分认证信息,从而大大加快爆破的进度。
由于Crypto-1算法中,对扇区密钥的检查依赖于LFSR产生的随机数,因此通过检测和预测随机数可以猜测其他扇区的密钥,并通过认证[12]。其过程如下:
- 对某一扇区用默认密钥进行认证,并且读取卡片的Nt;
- 对同一扇区用默认密钥进行认证,并且读取卡片的Nt’;
- 计算“时间距离”,即LFSR的位移;
- 猜测下一个Nt的值,计算ks1, ks2和ks3并且认证下一个扇区。
因此,Nested攻击结合Darkside,可以在很短的时间内破解出M1卡片的密码。
算法分析
这其实不能算是RFID的攻击方式,但是很多相关的文章都有提及。实际上,在智能卡的攻击过程中,分析卡中数据的算法、校验等都是必须的过程,只有掌握了数据的构成方式,才能成功的进行数据的篡改。
Fuzz攻击
这类的攻击主要针对读卡器(Reader)。向读卡器模拟卡片进行数据的交互,给其发送非预期的数据,有可能造成缓冲区溢出等问题,进而可能产生代码执行等后果。
Bluetooth 分析与实战
所谓协议,即将指定的字节按照一定的顺序排列起来,以便他人使用自己的设备时,能通过该协议同其他设备进行通信。协议一特点,就是有固定的帧格式,通过该格式发送,接收者通过解读帧格式,进而得到新息内容;
一般通信协议,一类通信是直接发生数据,当设备接送到数据时,直接对数据进行解析,当接受到的数据合法时,即为有效数据,该类型的通信协议,主要用在有线通信协议中,比如Modbus,Can通常采用的即为该类型的通信方式。
另一类通信协议,则需要新建立连接,当双方连接建立成功了方可通信,例如TCP、BLE;BLE协议在需要进行通信时,即需要向外发送广播信号,告诉接收者,即将和它进行通信,接受者接收到广播内容后,确认是与自己通信,于是向广播者发送一响应信息,这样当广播者和接受者都有了对方的身份信息时,即表示双方连接成功。
基础概念
蓝牙(Bluetooth)是一个短距离无线传输的技术,工作在免证的ISM频段。最初名字为Wibree,在90年代由Nokia设计开发,随后转交给蓝牙特别兴趣小组(SIG)专门维护。在国际上,蓝牙安全有两套指导性标准,NIST 800-121-R1和IEEE 802.15.1。NIST 800-121-R1详细的介绍了一套完整的蓝牙安全工作流程,包括对发送者身份的鉴权与认证,信息在传输过程中的保密性以及访问该信息的授权分级等等。而ieee802.15.1则更加侧重于针对蓝牙安全性标准的研究。
- 第一代蓝牙主要是指90年代的V1.0~V1.2版本,是关于段距离通信的早期探索,此时还存在许多问题,应用不是特别广泛
- 第二代蓝牙主要是00年中V2.0~V2.1版本,新增了EDR(Enhanced Data Rate)技术提高传输速率,以及体验及安全
- 第三代蓝牙主要是00年末V3.0版本,新增了802.11 WiFi协议,引入了AMP(Generic Alternate MAC/PHY)交替射频技术,极大的提高了传输速率并降低功耗
- 第四代蓝牙是10年以来的V4.0~V4.2版本,主推LE(Low Energy)低功耗,大约仅消耗十分之一,将三种规格,包括经典蓝牙、高速蓝牙、和蓝牙低功耗,集中在一起形成一套综合协议规范
- 第五代蓝牙是16年开始提出的V5.0版本,主要是为了支持物联网,在功耗、传输速率、有效传输距离、数据包容量方面都做了极大的提升
4.0之前的蓝牙通常被称为经典蓝牙(Classic Bluetooth),包括1.0提出的BR(Basic Rate,基础速率)以及2.0提出的EDR(Enhanced Data Rate,增强数据速率),BR/EDR用于表示与低功耗蓝牙BLE相对的传统蓝牙。
从使用场景来看,BR/EDR主要侧重于点对点的通信,连接性和传输速率是考虑的重点,而BLE侧重于低功耗的设计,在射频层和基带层上优化了多播和广播的支持。传统上Controller芯片只支持一种射频模式,但越来越多设备中也同时支持两种系统,以覆盖尽量多的使用场景。
蓝牙的核心系统架构包含一个Host和一个或多个Controller,Host可以理解为主核或者主板,运行主流的富操作系统;而Controller可以看做是蓝牙芯片,运行的是裸机程序或者RTOS,主要功能是对射频信号进行编解码。Host和Controller之间通过HCI接口(Host Controller Interface)进行通信,可通过UART、USB等物理接口进行传输。
其中Host部分主要是基于L2CAP抽象出的逻辑信道实现应用层的协议和功能,涉及的关键组件和协议有:
- Channel Manager:负责创建、管理和释放L2CAP channel。
- L2CAP Resource Manager:负责管理PDU数据的顺序、调度、分片、重组等功能,是L2CAP核心功能的一部分。
- SMP:Security Manager Protocol,实现BLE系统中的点对点安全认证功能,包括秘钥生成和认证等;BR/EDR系统的对应功能则在Controller的Link Manager中实现。
- ATT:Atrribute Protocol,应用层attribute client和server之间的协议。
- GATT:Generic Attribute Profile,表示ATT server或者client的功能,profile描述了服务和属性的层级结构,主要用于LE profile服务发现中。
- GAP:Generic Access Profile,表示所有蓝牙设备通用的基础功能,比如传输层、协议、应用所使用的模式或流程等。GAP服务包括设备和服务发现、连接模式、安全认证和关联模型等。
Controller部分中更多是逻辑链路和物理链路的管理,包括:
- Device Manager:基带(baseband)中控制设备行为的模块,主要负责不与传输直接相关的部分,比如查询周围蓝牙设备,连接蓝牙设备,切换蓝牙设备的状态(discoverable/connectable),以及修改蓝牙名称、属性等。
- Link Manager:负责创建、修改和释放逻辑链路(logical links)以及对应的逻辑传输(logical transports),并更新设备之间对应物理链路(physical links)的相关参数。在BR/EDR系统中,与对端的Link Manager通过LMP协议(Link Manager Protocol)进行通信;在BLE系统中则使用的是LL协议(Link Layer Protocol)。
- Baseband Resource Manager:负责管理所有到射频媒介的访问。在链路层中,有两种类型的“连接”:
- SCO:Synchronous Connection Orientated,实时窄带数据传输,如电话音频等,无重传
- ACL:Asynchronous Connection-Less,异步无连接,用以其他所有数据的传输
- Link Controller:负责对指定物理信道(逻辑链路和逻辑传输)的蓝牙数据进行编解码。
BR/EDR
在传统蓝牙(即BR/EDR)中,2.4GHz的ISM频段分成79个频段,每个大小为1MHz,并使用特定的跳频模式(Hopping Pattern)来决定一条物理信道,从而减少不同临近终端之间的射频干扰。BR/EDR使用点对点的主从模式,其中Master为确定跳频模式的一方,Slave为与Master时钟和跳频模式同步的其他端点。传统蓝牙比较复杂,这里不展开说明。
传统蓝牙建立链路层连接主要经历两个阶段:Inquiry和Paging。
Inquiry 阶段,Master发送查询请求,周围(10米内)可被发现的设备(discoverable)收到请求后会发送查询响应(Inquiry Response)。在查询过程中,因为与周围设备还未连接,因此它们很可能处于不同的信道(跳频序列),实际上发送查询的设备会在不同的频率进行发送,而接收方(处于standby模式)则以更高地频率进行足够长时间的查询扫描(Inquiry Scan)以确保能被正确唤起。查询响应中包含设备ID和时钟等信息。
Paging 阶段,主要解决的是链路层的连接问题。与Inquiry类似,此时各方同样没有进行时钟和频率的同步。
连接状态的两个设备所处于的抽象网络称为piconet,这是一个星状网络,一个Master可以有最多七个Slave,但是Master本身也可以是其他piconet的Slave,这种网络拓扑称为scatternet。传统蓝牙处理链路层连接的管理器称为LM,即Link Manager,两个LM之间通过LMP协议进行通信。
这只是链路层的连接,和我们平常所说的蓝牙配对(pairing)并不是一回事。Paging只是保证了在物理层链路的连通性,进行应用层的通信往往还需要经历两步:
- 服务发现(Service Discovery):用以确认对端所支持的服务
- 服务连接(Service Connection):使用某个对端设备特定的服务或者配置(Profile)
但是实际上在服务发现之前,蓝牙引入了一层安全性保障,确保双方是自愿连接的,沟通连接意愿的过程就称为配对。经过配对后的设备会分别记住对方,在下一次连接时就不需要进行重新配对,而是使用之前保存的连接秘钥(Link Key)直接进行认证和连接:
BLE
蓝牙是一个巨大的协议栈,它们的规范大约有2000 多页。在像健身手环这样的终端设备中实现它需要耗费很多的能量和资源。因此,在蓝牙 4.0 标准中,他们引入了一种称为 Low energy 的技术,专门针对在内存和功率受限的设备上运行的物联网和智能设备。在BLE中,2.4GHz的ISM频段分成40个频段,每个大小为2MHz,其中3个信道为广播信道(advertising channel),其余37个为通用信道(general purpose channel)。BLE也支持对建立连接后的端点在通用信道中进行跳频通信。
各个信道的频率为: f = 2402 + k * 2 MHz, k = 0, 1, ... , 39
BLE低功耗蓝牙核心协议层(Bluetooth Core)
1. 物理层(Physical Layer,简写 PHY):
PHY层用来指定BLE所用的无线频段,调制解调方式和方法等。是1Mbps自适应跳频的GFSK射频,工作于免许可证的2.4GHz ISM(工业、科学与医疗)频段。PHY层做得好不好,直接决定整个BLE芯片的功耗,灵敏度以及selectivity等射频指标。
2. 链路层(Link Layer,简写 LL):
LL层是整个BLE协议栈的核心,也是BLE协议栈的难点和重点。LL层要做的事情非常多,比如具体选择哪程度 个射频通道进行通信,怎么识别空中数据包,具体在哪个时间点把数据包发送出去,怎么保证数据的完整性,ACK如何接收,如何进行重传,以及如何对链路进行管理和控制等等。LL层只负责把数据发出去或者收回来,对数据进行怎样的解析则交给上面的GAP或者ATT。
3. 主机控制接口层(Host Controller Interface,简写 HCI):
HCI是可选的,HCI主要用于2颗芯片实现BLE协议栈的场合,用来规范两者之间的通信协议和通信命令等。
4. 通用访问配置文件层(Generic access profile,简写GAP):
GAP是对LL层payload(有效数据包)如何进行解析的两种方式中的一种,而且是最简单的那一种。GAP简单的对LL payload进行一些规范和定义,因此GAP能实现的功能极其有限。GAP目前主要用来进行广播,扫描和发起连接等。
GAP 用来控制设备连接和广播,GAP 使你的设备被其他设备可见,并决定了你的设备是否可以或者怎样与合同设备进行交互。例如 Beacon 设备就只是向外广播,不支持连接,小米手环就等设备就可以与中心设备连接。
- 设备角色
GAP 给设备定义了若干角色,其中主要的两个是&#x