Shell Bin

想要成为最强萌新

@Shell3周前

05/28
02:15
好玩的 计算机

玩PN532,M1水卡攻击实战

一天卧谈会,和舍友又议论起了楼下纯净水饮水机的事情;在吹了一波自己可以破解IC卡之后觉得这个东西确实好玩,就买了模块准备破解玩一玩的。

其实经过我的简单研究,发现破解这样一张水卡已经变得相当简单了,各种破解工具和软件都可以很容易下载到。就算你不想打命令,对黑色的命令行感到恐惧也可以很容易找到 GUI 的版本而且功能丝毫不打折扣。而在硬件操作方面…除了有玩家通过单片机控制射频卡模块的,还有类似PN532直接连接电脑用上位机操作的,甚至还有类似 Proxmark3 这样基于 FPGA 的专业射频卡安全评估套件。如果想要复制一张一模一样的卡用在电梯或者门禁上,还有一种特殊的 UID 卡可以轻松买到,价格也很低廉。

这样看来整个 M1 卡破解与克隆似乎已经形成了完整的产业,不得不令人担忧其在门禁领域的安全性。实体入侵的风险主要在于被发现,而复制一张卡要比翻栏杆轻松多也隐蔽多了。

好,步入正题。先提醒大家千万不能把卡片破解用在不法领域,技术的使用还是以正义为前提的。

本文要介绍的内容有

一:本人在操作时使用的设备

二:卡片技术历史

三:破解过程和工具

操作时使用的设备:

考虑到自己的需求只是玩一玩这张卡,对别的功能没有什么特别的需求,而且日后还要结合单片机玩别的东西….经过简单的挑选从某宝购入了 PN532 模块,就是那种红色 PCB 的那种,花了22块钱

这里盗用一张没有水印的卖家图

市面上这样针对嵌入式领域的的卡片读卡器主要有两种,一种是这种样子的,还有一种 RC522 的,那种的读卡器价格更便宜但是不支持 NFC,而且在现有软件上玩法更少一些。

除了读卡器,想要玩 PN532 还需要一个 TTL 转 USB 小板,作为玩了那么多年电子的人这种东西当然也是有的,某宝也可以很方便买到,价格在10块钱左右的那种就行了。

卡片技术和历史:

如果买齐了上面的两种东西就可以开工了。当然就算这个流程在简单还是要讲一讲一些技术细节和相关知识的,不然这篇文章就毫无价值了。不过下面的信息基本是一些

首先我们要破解的卡片虽然被称为IC卡(这个名字只是为了和ID卡相区别)而IC卡既有接触式的也有非接触式的,非接触式有基于 COS(嵌入式软件)的,也有 Mifare classic1 这类逻辑加密卡,本文讨论的就是 Mifare(简称M1) 卡。 M1卡使用硬件技术固化了一种不公开的密码算法,叫做Crypto 1 。然而信息安全这种事情从来都和公开或者不公开没有半毛钱关系的,破解还是照样破解的。

逻辑结构上,Mifare 卡本质上是一个有着几个额外功能的存储器卡。存储器被分成许多的数据块,每个数据块由16个字节组成。这些数据块组成扇区。1K的 Mifare 卡有16个扇区,每个扇区有四个数据块,这里的数据块就是用来存储自定义内容的,比如说剩余金额一类。4K的 Mifare 卡的前32个扇区由4个数据块组成,剩下的8个扇区每个由16个数据块组成。每一个扇区中最后一个数据块被称为扇尾。0扇区有特殊的数据。前4个数据字节包括唯一的卡验证号(UID),后面跟着一个字节的位计数检查(BCC)。这个位计数检查通过连续的异或所有的UID字节被计算出来。剩下的字节用来存储制造商的数据。这个数据块是只读的。读卡器需要在进行任何存储操作前认证扇区。扇尾包含密钥A和密钥B,这两个密钥都是用来认证的。访问条件定义了对该扇区的哪种操作是可行的,也是大家通常讲的”锁控制位”所锁定的地方。

扇尾有特殊的访问条件。密钥A是永远不可读的,而密钥B可被设置成可读或不可读。当B为可读时,存储器只用来存储数据而密钥B不能用作认证密钥。除了访问条件(AC)和密钥,剩下一个未被定义的数据字节(U)可以被用来存储任意的数据或设置成值模块(value block)。当用作值模块时,一个有符号的4字节的值被存储了三次,两次未取反和一次取反。取反在这里意味着值的每一位都和1进行异或。这四个字节按照从左到右低位字节到高位字节的顺序存储。剩下的四个字节用来存储1字节的模块地址,这个地址可被用作指针pointer。

就像一切硬件Hack一样,这个卡片的破解是也是从硬件开始的。

在2007年年底柏林举行的第24届黑客大会Chaos Communications Congress上,两位研究者宣读了他们合作的论文。“这两位一个是德国的学者Henryk Plotz,另一个是弗吉尼亚大学的在读博士Karsten Nohl,他们利用显微镜,把Mifare Classic的芯片进行了抽丝剥茧般的逐层分析,然后附以RFID读卡器,得到了Mifare Classic芯片每层的布线图。从而分析出芯片中近万个逻辑单元,分别是逻辑电路的与门、或门以及触发器。…..他们从这些逻辑门中发现了规律,从而大大简化了分析的进程。接下来就是要找到其中关键的加密处理部分,……他们按照自己获得的数据信息进行了重构,在此过程中他们详细分析了各个单元模块的功能,经过一番辛苦劳作之后,他们发现了MifareClassic芯片的若干安全隐患。其中之一就是他们掌握了一个16位随机数发生器的原理,每次都能够正确预测下一个随机数的值。 “。这个伪随机数发生器的函数是X16 + X14 + X13 + X11 + 1。

2008年的2月,荷兰政府公布的一项针对此事的报告对此回应:报告肯定了Nohl and Plotz的发现,但却断言由于攻击的成本,Mifare 卡系统在两年内还是安全的。他们估计攻击所使用的硬件成本约为9000美元,并费时数小时。

Nohl看来对荷兰政府想把大事化小的态度不甚满意,于是马上又发表了一篇名为“Cryptanalysis of Crypto-1”的文章,公开了Mifare Classic加密算法Crypto-1的核心就是一个48位的线性反馈移位寄存器加上几个输出函数过滤器。而这几个函数过滤器应用了三种不同的函数关系,它们都有统计学上偏移的弱点,利用这些弱点和之前掌握的随机数发生器的知识,使用普通计算机通过向读卡器发送几十个挑战数,就能够猜出卡片的密钥中的32位是什么。其中有12个比特仅通过乱码流的第一位比特值便可判定,其余36位密钥值的破解时间,若使用一个FPGA装置是30秒内,即使使用普通PC机也就用几分钟。

不过 Nohl 所公布的信息还是有相当保留的,他虽介绍了攻击方法,却没有技术细节;对 Crypto-1 的内容和缺陷也披露的颇为朦胧。所以 Nohl 的这篇文章更像是在警告世人,而不是倾囊而出地展现自己到底知道多少。所以到这个时候 Mifare 的最后一层面纱还没有在公共面前揭开。然而,Nohl 的文章的标题“Crypto-1 的密码学分析”却为有志者指明了奋斗方向。

后来,荷兰自己的一所大学(Radboud大学)终于站出来打了政府的脸,通过一篇文章向公众揭开了 Crypto-1 的庐山真面目。文章声称:在逆向研究了 Mifare 卡的安全机制:包括认证协议、对称加密算法和初始化机制后,他们发现了存在于上述机制中的几个安全漏洞,利用这些漏洞,可实施两种攻击,这两种攻击都可以从一个真实的读卡器中获取密钥。其中一个攻击仅需要与读卡器进行一或两次的认证尝试,不到一秒钟。“采取相同方法,一个攻击者可以侦听到卡与读卡器之间的通信内容并将其解密,尽管可能涉及多重认证。这使得攻击者可以克隆一张卡,或者将卡的内容恢复到之前的状态。”并且和 Nohl 的做法不同,他们公布了所有细节,包括 Mifare 芯片的算法逻辑和他们自己设计的攻击手段。到此时,荷兰的 Radboud 大学的研究者向世人公布了三种攻击方法。然而他们并没有停下脚步,这之后他们又发表了《Wirelessly Pickpocketing a Mifare Classic Card》文中阐明了M1卡在报文产生奇偶位和所谓嵌套认证两个方面的漏洞;利用此漏洞,攻击者可以通过工具仅仅研究该工具与一片M1卡之间通讯数据便可以成功破解该卡的所有密钥,从而克隆这张卡。

此时 Mifare 卡片的破解才变成了我这种业余玩家也可以复现的轻松工作了。

文中设计了四种攻击手段,也是现在我们常用的四种方法,在实际操作中通常使用第一种或者第四种(本文使用第二种方式完成破解)

1.暴力破解

即使是暴力破解,也需要先得到确切的明文和对应的码流。这大约要进行1536次认证过程,用时在一秒钟之内。不过还要进行离线暴力破解,估计在36分钟可完成。但是需要专用的硬件设备。

2. 以读卡器的挑战值做变量

这里说的读卡器实际上指的是用来模拟读卡器的攻击工具,下个攻击亦如此。这种攻击又可称选择密文攻击,想法用工具控制被攻击的卡每次在认证时产生同一挑战值,而读卡端则回应不同值。这种攻击需要大约28500次的认证过程,用时约15分钟,然后计算密钥,用时约一分钟。

3.卡的挑战值做变量

第三种攻击与攻击2类似,但需要使自己的工具的挑战值为常数,而令卡的挑战值数不断变化。需要预制一个384 GB的状态表(我怀疑384GB这个数字有误)。要进行4096次认证。大约用时2分钟。

4.嵌套认证攻击

第四种攻击假设攻击者已知了至少一个扇区的密钥,他可以根据漏洞得到其它密钥的32位,然后对其它16位进行穷举攻击。只需3次认证(时间可以忽略不计)。离线攻击计算时间约为一秒。

破解过程和工具

网上有大量的工具可供使用,同时无需单片机而直接使用串口进行通信也省去了编码的麻烦。这也是我使用 PN532 的一个原因,而 PN532 同时也是知名读卡器 ACR122U 所采用的读卡芯片,虽不及 Proxmark3 但功能也十分强大了。下面详细介绍一下

  • 支持ISO 14443A/MIFARE
  • 64字节的发送和接收FIFO缓冲区
  • 3.3V到5.5V宽电源电压
  • 支持SPI,I2C,UART接口

读卡器到手后,先用烙铁焊好排针,就可以用附赠的杜邦线连接到 TTL 串口小板了。就像所有的串口通讯,比如给 STC 这样串口 ISP 单片机烧写程序这种….连接的时候 RXD 和 TXD 是要交叉连接的,读卡器的 RXD 接 TTL 小板的 TXD,读卡器的 TXD 接 TTL 小板的 RXD。

连接就绪后就可以将 USB 那端插进去电脑了。这里以Windows系统为例,这大概也是大部分读者所使用的操作系统。如果你是 Windows 7 或者 Windows Vista 这种先进一些的系统,Windows Update 应该会自动帮你安装好 TTL 转 USB 的驱动程序,如果没有的话就先装一下卖家提供的驱动程序。一切就绪后就可以开始破解啦。

这里会使用到的软件分别是来自吾爱破解论坛 Dmdmdms 所破解的付费软件,一个来源不明到处都有的被称为XP上位机的小工具(虽然 Windows 10 也能用啦),还有TTHexEdit,一个个人很喜欢的免费16进制编辑器。链接:https://pan.baidu.com/s/1J4Gtz-ulcD99k3T9a1nemQ 密码:94eg

就以 Dmdmdms 破解的那个软件为例(压缩包内PN532工具淘宝版),当一切连接妥当,打开软件的时候应该可以看到发现NFC设备字样。

这时就可以把要读取的卡片放在读卡器上了,但是我要做的是破解卡而不是复制卡。所以在此之前,我先把卡放在饮水机上看了下余额记录下来以便分析内容。记好之后点击界面中的 『读整卡:读取卡片内容』按钮进行对卡密钥的破解和内容读取了。此时软件正在进行的操作就是之前提到的第二种方法。这个过程不会持续很长时间,稍等就好,期间卡也不要拿开读卡器。

 

读取出来之后点击左上角的小三角把卡片内容以dump格式保存到本地。以便分析。然后在饮水机上消费一笔,再重复上面的工作读取一遍新余额状况下的卡数据,重复第二次的时候因为卡的密钥已经被软件保存下来了,所以速度快了很多很多。

这时已经拿到了两次的卡内容。把两个dump文件拖进去 TTHexEdi 就可以观察文件有什么异同了,当然这里用winhex或者其他什么的十六进制编辑器都可以做到。

就像浏览器一样,TTHexEdi 也有选项卡,这点很方便

令我意外的是,卡片余额竟然是以明文的方式通过 BCD 存在卡里的,没有任何加密也没有校验位,通过两次余额不同互相比较很容易就得出了其中哪里保存着余额,直接修改,果然生效了。

对于卡片的分析,因为避免被查水表所以隐去很多,介绍到此为止但流程和原理已经介绍的足够清楚了。令人不解的是这样的卡片居然还在被广泛使用在各个场所,从安保到消费均有涉足,而且全程不需要用特别的仪器接近目标设备即可完成破解。对攻击者越安全,对被攻击物就越危险!所以,这样的攻击更加实用,更具危害。但无论是挑起争端的Nohl还是荷兰的Radboud大学都推进了卡片安全的发展,然而当下的广泛使用可能还是会令他们始料不及。当然产生这样的结果可能还有一个重要的原因是:其实在这类应用系统上获利的诱惑还不够大,因此攻击者并不多。

文中卡片历史来源技术细节csdn博客,作者fei0724,软件工具均来自互联网。

玩PN532,M1水卡攻击实战