RFID 安全初探

Catalpa 网络安全爱好者

RFID 相关内容。

RFID 简介

RFID(Radio Frequency Identification) 全称射频识别技术,这个名字大家可能比较陌生,但是提起我们生活中经常使用的饭卡,水卡,银行卡等等这些东西,大家应该很熟悉了。我们几乎每天都会使用这些小小的卡片,吃饭需要,取钱需要,甚至回家使用电梯也需要,可以说我们的生活已经离不开 RFID 这一技术了。

那么 RFID 到底是怎样的一门技术?针对它的攻防又会如何展开呢?这次我们就来简单探索一下关于 RFID 射频识别的攻与防。

首先要知道什么是 RFID,实际上它是一种自动识别技术,同一类的还包括条形码识别,OCR 等等,与 RFID 最为相关的就是智能卡(又称作电子标签)了,我们日常生活中用到的各种卡片大多数都属于智能卡,它们的构造很简单,从外观来看就是普通的塑料卡片,如果我们将卡片放在强光下照射,从另一面就能够清晰的看到卡片内部构造,首先是很多圈铜线绕成的线圈,这个线圈各种形状都有,但是以正方形,圆形和椭圆为主,在线圈中央存在一个非常小的芯片,一个 RFID 内部可能是下面这种形态

线圈发挥着天线的作用,芯片中存储了这张卡的主要信息,例如一张饭卡,芯片中就可能存储了持卡人的姓名和 ID,还有余额,消费日期等等必要的信息。

铜圈天线

一张 RFID 卡最显眼的就是那一圈一圈的天线,这里所说的天线可不是电视上那种天线,卡片中的天线是用来接收 RFID 读卡器传过来的信号的。RFID 的物理层实现有两种方式,一是电磁藕合,二是电磁反射。

首先说一说电磁藕合,这是智能卡非常常见的一种物理层实现方法,根据物理中电磁学的相关知识,我们可以很容易的理解它的原理,如下图

读卡器通过它的天线向外发射磁场,这时候如果我们将卡片靠近读卡器,根据电磁感应定律,卡片中的线圈就会出现电流,从而驱动智能卡中的芯片,这一过程叫做“激活”。

当 RFID 芯片被激活后,会主动发送应答信号到读卡器,读卡器接受信号将其解码送回电脑中的 APP 完成进一步操作。

电磁反射方式的智能卡完全依托读卡器的电磁信号,当信号接触到智能卡后,会激活内部的各种元件,生成相应的信息,附加在反射的磁场中返回读卡器。

RFID 芯片

智能卡中的芯片包含很多类型,但是目前主要的有两种,一是非接触式存储卡,二是非接触式 CPU 卡。

存储卡顾名思义,芯片中保存着定义好的信息,例如上面提到的饭卡,水卡,它们会将持卡人的各种信息保存在芯片中,当发生消费、充值等行为时更新卡中的数据。我们可以简单的将存储卡理解为卡中保存着一个微型数据库,并在使用卡的时候对数据库中的值进行更新。

而 CPU 卡的功能就更加强劲了,卡中除了存储芯片,还包含一个微型 CPU 芯片,也就是说这种卡有一定的运算能力。

RFID 毕竟是依靠电磁波工作的一种设备,为了顾及其他行业的无线电服务(例如医疗、科学等),RFID 有一套国际标准,规定了它的信号范围,由此产生了不同类型的卡片。通常 RFID 使用的频段是 ISM 频段,这是由国际通信联盟无线电通信局制定的一种标准,应用这些频段无需获得许可证或者缴纳任何费用,只是发射功率不能过大,不能影响到其他频段正常的无线电业务。

通常 RFID 使用的频段有 0 ~ 135kHZ,13.56mHZ,以及 24.125GHZ 等等,其中以 125kHZ 和 13.56 mHZ 最为广泛。

由于频段有高有低, RFID 又被分为三类,一是低频卡,二是高频卡,三是超高频卡。我们常用的卡片都属于低频和高频卡。

低频卡

低频卡通常工作在 125kHZ 这一频段,它具有以下特点

  1. 不受无线电频率的管控。
  2. 识别距离一般小于 1m。
  3. 通常应用在动物识别,门禁,电子锁。
  4. 可存储的数据较少,数据传输速度较低。

我们生活中有一种很常见的低频卡,那就是电梯和门禁卡,卡中的芯片不能存储大量的数据,所以这些卡中通常只存储了一个串号(或者称为 ID 号),从外观上看,卡片呈圆形,蓝色,可以挂在钥匙扣上面。

高频卡

高频卡比低频卡更加常见,其有如下特点

  1. 是使用量最大的电子标签之一。
  2. 数据传输速度很快。
  3. 时钟频率高,可以实现较高强度的加密。
  4. 通常应用在电子车票、电子身份证等。

高频卡一般工作在 13.56mHZ,这种卡片不同于低频卡,它有更大的存储空间,甚至可以包含一定的运算能力,并且卡片出厂自带密码,这些密码用户可以自行修改,所以相对于低频卡来说,高频卡要更加安全。

NFC 与 RFID

NFC(Near Field Communication) 近距离无线通讯技术,最初是由飞利浦公司和索尼公司共同开发的NFC是一种非接触式识别和互联技术。

NFC 是由 RFID 技术演变而来的,NFC 频段仅限于 13.56 mHZ,而 RFID 的频段要更加广泛一些,而且 NFC 卡的识别距离很短,大多在 10 cm 之内,而 RFID 卡的识别距离很广,例如高速收费站的 ETC 系统,识别距离达到了几米。

NFC 更加适用于我们的日常生活适用,而 RFID 卡则更加偏向于工业上的应用,不过它们殊途同归,基本原理都是一样的。

M1 卡

M1 卡指的是 Mifare 生产的 Mifare Classic 卡,这种卡目前还应用在很多的场景,这种卡的基本结构如图

在一次刷卡的过程中卡片和读卡器之间会产生很多信息交换,针对 M1 卡来说,我们可以将刷卡流程总结如下

  1. 卡片处于休眠状态
  2. 读卡器发送电磁信号,激活卡片芯片。注意在同一时间内可能有多张卡等待唤醒。
  3. 进入防冲突循环,防止同一时间内唤醒多张卡片,产生数据读取冲突。当对应的卡片被选中的时候,卡片会向读卡器发送自身的卡号,这时此卡会被读卡器锁定,其他没有被选中的卡片会重新进入休眠状态
  4. 读卡器发送选卡(select card)指令,选定上一步锁定的卡片,进行卡片认证和存储器的操作。被选中的卡片会返回应答码(ATS= 0x8),向读卡器声明自己的类型。
  5. 三轮认证:读卡器选定卡片扇区,用扇区中的两组密钥进行数据校验,如果通过了三轮认证,之后的所有存储器操作(读卡、写卡)都是加密的。

M1 卡的存储器分为很多扇区,这些扇区内保存着不同的数据,每个扇区设定了两个密钥(key),分为 KEYA 和 KEYB,参考下图

其中最为特殊的是零号扇区,它是卡片制造商在卡片出厂的时候设定的,一般包含写保护,也就是说我们不能随意更改 0 号扇区的数据。

除 0 号扇区之外,剩下的扇区用来存储用户数据,每个扇区有 48 个字节可以用来存储用户数据,而剩下的 16 个字节用来保存当前扇区的 KEYA 和 KEYB,以及一些控制位信息。

控制信息用来指明当前扇区的读写模式,例如可以将当前扇区指定为读写区块,或者数值区块等。

UID、CUID、FUID 卡

*UID卡实际上都是 IC 卡(高频卡)的一种,它们完全兼容 M1 卡,所以可以将它们理解为一种特殊的 M1 卡,UID 卡有一个有趣的名字,叫做中国后门卡,它和普通的 M1 卡最大的区别是能够随意改写 0 号扇区的数据,所以经常被用来克隆卡片。UID 卡存在特殊的后门指令(还是中国人发明的,所以就叫做中国后门卡),如果读卡机有反 UID 卡策略,就会向卡片发送后门指令,如果卡片对指令进行了响应,读卡机就会拒绝进一步的操作。

CUID 卡是 UID 的进化版,它的功能和 UID 卡相同但是不响应后门指令,所以被检测出来的概率要更小一些,和 UID 的区别在于虽然都能对 0 号扇区进行随意的读写,但是 CUID 读写是基于密码的,而 UID 直接通过指令读写。

FUID 则是 CUID 的进化版,虽然 CUID 卡不响应后门指令,但是还是有被检测的可能, 例如读卡机可以通过尝试修零号扇区(使用密码)来判断卡片是否为 CUID 卡。FUID 也可以对零号扇区进行改写,但是它只能修改一次,也就是说这种卡片出厂之后只有一次修改 0 号扇区的机会,修改之后 0 号扇区会被锁定,这时 FUID 卡和普通的 IC 卡就没什么区别了。显然 FUID 卡更难被检测和屏蔽。

RFID 卡片克隆

本实验是完全的技术研究,实验中没有修改任何敏感数据!

前面讲了那么多基础知识,现在就来上手实践一下。

工具准备

  1. 卡片(M1 卡、UID 卡)
  2. 读卡器(如果有)
  3. ProXmark3 RFID 修改开发版
  4. 一台电脑

ProXmark3

Proxmark3是由Jonathan Westhues设计并且开发的开源硬件,其主要用RFID的嗅探、读取以及克隆等的操作。是因为原作者为了研究有关Mifare Classic硕士论文而生的。这款工具极大地降低了研究 RFID 的门槛。

不过这款硬件价格不菲,其官方售价一度达到 2000 人民币,不过由于其开源的性质,国内有很多厂家对硬件进行了仿制,目前在淘宝上大概 300 ~ 500 元就可以入手。

在 github 上面有 proxmark 的官方固件和工具,用来操控 proxmark 硬件,不过其命令行模式比较难用,因此,国内的一些开发者给命令行套上了一个外壳,制作出具有中文界面的 GUI 程序,我们需要做的只剩下装驱动了。如果你是在淘宝购买的 ProXmark,店家会赠送一些资料和驱动安装教程,只需要按照教程一步一步操作,应该不成问题。

卡片复制

复制卡片是 RFID 最简单的一种攻击方式,虽然上面讲到 M1 卡的种种安全机制,但实际上早在 2008 年 M1 卡就被爆出有严重的漏洞,扇区加密形同虚设,我们只需要知道任意一个扇区的密钥(A 或 B,可以通过密钥爆破),就能通过漏洞求出整张卡片全部的密钥,这一漏洞最直接的影响就是卡片复制,要知道当没有密钥的时候卡片中的数据不能被读取(就算读出来也是无用数据),但是通过利用漏洞,攻击者就有机会计算出整张卡的密钥,从而获取卡中的完整数据,这时再结合 UID 卡的随意读写机制,攻击者能够对正常的卡片进行伪造,后果可想而知。

我们以 ** 学校校园卡为例,尝试卡片复制。

首先将 proxmark3 连接到电脑,打开软件,如果驱动没有异常,软件应该可以自动识别出串口号,如果没有就手动设置。最终界面应该如下

这时候我们可以点击天线电压按钮测试硬件是否正常工作。点击后板上的蓝灯和红灯同时亮起,然后蓝灯熄灭,红灯常亮,表示正在测试电压,测试结束得出如下结果

1
2
3
4
5
6
7
8
9
[+] LF antenna: 26.34 V - 125.00 kHz          
[+] LF antenna: 31.58 V - 134.00 kHz
[+] LF optimal: 31.44 V - 131.87 kHz
[+] LF antenna is OK

[+] HF antenna: 10.55 V - 13.56 MHz
[+] HF antenna is OK

[+] Displaying LF tuning graph. Divisor 89 is 134khz, 95 is 125khz.

提示低频电压和高频电压稳定,硬件运行正常。

下面我们将待复制的卡片放在板子的高频卡阅读区域,点击软件中的读IC 卡类型返回了以下信息

1
2
3
4
5
6
7
8
9
 UID : E0 F3 12 17           
ATQA : 00 04
SAK : 08 [2]
TYPE : NXP MIFARE CLASSIC 1k | Plus 2k SL1 | 1k Ev1
[=] proprietary non iso14443-4 card found, RATS not supported
[=] Answers to magic commands: NO
[+] Prng detection: WEAK

[+] Valid ISO14443-A Tag Found

卡的类型是 MIFARE CLASSIC 1k,并且提示我们 Prng detection: WEAK ,表示卡片存在漏洞,我们能通过漏洞破解出整张卡片的密码!

点击软件中的默认密码扫描,然后等待一段时间,软件会自动从字典中加载密钥,尝试找到一个正确的 key,当找到任意一个 key 之后就能通过漏洞计算出全部 key,进而解码出整张卡片的数据。

获取到完整数据可以开始复制卡片,首先要找到一张 UID 卡,确保 0 号扇区能正常写入,将卡放在高频卡读卡区,点击 写 UID 卡,即可将数据写入 UID 卡内,至此我们已经完成了卡片的复制操作,将 UID 卡重新读取

1
2
3
4
5
6
7
8
9
 UID : E0 F3 12 17           
ATQA : 00 04
SAK : 08 [2]
TYPE : NXP MIFARE CLASSIC 1k | Plus 2k SL1 | 1k Ev1
[=] proprietary non iso14443-4 card found, RATS not supported
[+] Answers to magic commands (GEN 1a): YES
[+] Prng detection: WEAK

[+] Valid ISO14443-A Tag Found

提示我们发现了 UID 卡,对后门指令存在响应。

取出的数据和原始卡片也是相同的!经测试复制卡能够正常通过门禁闸机,没有对消费进行测试!

RFID 仅为技术研究,请不要执行非法操作!

  • Title: RFID 安全初探
  • Author: Catalpa
  • Created at : 2019-03-26 00:00:00
  • Updated at : 2024-10-17 08:54:42
  • Link: https://wzt.ac.cn/2019/03/26/RFID/
  • License: This work is licensed under CC BY-SA 4.0.