1、RFID 破解方法网上看了很多 RFID 破解的文章,大部分都是工具使用,一步步该怎么操作,基本上没有讲原理的,估计导致了很多初学者非常迷惑,特别是一旦按照操作步骤操作的时候出错时更加迷惑,不知道是什么状况,国内 radiowar 也同样没有看到过特别介绍原理性的文章。建议大家还是多看看外文原版的资料说明,会理解的更透彻些,才能更快的加入到 RFID 安全研究及测试中。参考站点:http:/www.proxmark.org 多看看论坛里面提问跟回答http:/nfc-tools.orghttp:/www.openpcd.org/http:/www.rfdump.orghttp:/www.lib
2、nfc.org这篇文章就当是我自以为是的普及性介绍,我想应该还是会给很多人解惑。首先,先说说目前 RFID 破解涉及到的几种方法,我尽量以最直白的语言描述。1、最简单 ID 卡破解常见破解办法:ID 卡复制,ID 卡除了复制也没有其他研究的了,毕竟太简单了。基本原理介绍:ID 卡属于大家常说的低频卡,一般大部分情况下作为门禁卡或者大部分大学里使用的饭卡,一般为厚一些的卡,是只读的,卡里面只保存有一串唯一的数字序号 ID,可以把这串数字理解为你的身份证号,刷卡的时候,读卡器只能读到 ID 号,然后通过跟后台数据库进行匹配,如果是门禁卡,那么数据库里面就是存在这样的ID 号,如果匹配上门就开了,匹
3、配不上门就开不了。如果是学校的饭卡,刷卡的时候,实际上操作的是你对应 ID 号相关的数据库中的数据。ID 卡本身不存在任何其他数据,所以,学校使用的 ID 卡饭卡,只能复制卡,刷别人的钱(数据库中的钱),再没有其他办法。破解方法:通过 ID 卡读卡器,读取卡内的 ID 号,然后把这串 ID 号写入到 ID卡空卡中即可,各类工具特别多,需要一个 ID 卡读卡器。最简单的淘宝有卖的工具,两节 7 号电池,按读卡按钮读要复制的卡的 ID,然后再按写卡按钮,把读到的 ID 号写入到空白卡中,即完成了卡复制工作,优点就是方便,缺点就是我们看不到整个过程,对我们安全研究来说作用不大。2、射频 IC 卡破解
4、写在前面的技术铺垫:射频 IC 卡种类繁多,标准也繁多,这些不在介绍范围内,但是以下攻击介绍的原理类似,下面不特别说明就是指的 M1 S50 卡,这也是目前广泛使用的,并且大家做测试时最常见的 IC 卡。常见的破解方法:1)跟 ID 卡一样,复制 IC 卡的 UID 号码写入到新的空白 IC 卡中。2)破解 IC 卡的密码,从而改写 IC 卡中的数据。3)破解 IC 卡的密码之后,把所有数据导出再写入到一个新的空白 IC 卡中,也就是 IC 卡全卡复制(NFC 手机及 PM3 等设备也支持把自己模拟成一个 IC 卡,实际上也属于卡复制一类)。IC 卡破解基本上都逃不脱以上的几种应用,这里面又涉
5、及到一个简单的 IC 的内部结构的说明,便于理解就简单说明一下。IC 卡(S50)分为 16 个扇区(0-15),每个扇区又分为 4 个区域块(0-63),每个扇区都有独立的一对密码 keyA 和 keyB(先记着独立两个字,后面要思考问题)负责控制对每个扇区数据的读写操作,keyA 和 keyB分布在每个扇区的第四块中,第 0 扇区的第一个数据块,存储着 IC 卡的UID 号(想成身份证号),其他扇区可以存储其他的数据,如钱等数据。一般 IC 卡的 UID 是唯一的也是写死的不能更改,其他块的数据是可以更改的,所以也就有了普通 IC 空白卡以及 UID 可写空白卡(可以认为是不遵守规范的商家
6、制作的)。现在我们开始想象破解的几种环境:1)读卡器把 IC 卡当成 ID 卡一样只识别 UID 正确即可,不管 IC卡内其他数据,这时候,只需要把卡的 UID 读出来,并使用一个 UID可写的空白卡,把 UID 写入即可。2)读卡器首先识别 UID 是否正确,然后再识别其他扇区的数据,通过 keyA 或者 keyB 对数据进行读写操作。这样首先 UID 得正确,其次,keyA 或者 keyB 得正确(后面为了说的方便,我们就不说 keyA 或者 keyB,直接说 IC 卡密码)。这样如果知道了 IC 卡密码,我们也不需要复制新卡,那么就可以更改 IC 卡中的数据,比如更改饭卡中的钱数。如果我
7、们想复制一张一模一样的卡,那么就把原卡的所有扇区的数据全面导出来,再写入新的 UID 可写卡中即可。3)读卡器不识别 UID,只管对扇区的密码进行验证,如果验证成功则允许对卡内数据操作等。(如某“XX 快捷酒店”的门卡,就不管 UID,只要扇区密码正确即可),那我们可以通过扇区密码更改门卡中的数据,如房号,住宿的时间等,也可以通过一个普通的 IC 卡(uid 不能更改)复制一张门卡(跟原卡 UID 不同),也可以通过一个 UID 可写的卡,复制一张跟原卡完全相同的卡(跟原卡 UID 也相同)。基本上也就是以上几种环境,改写 UID、通过扇区密码改写扇区数据、通过把原卡数据导出重新导入到新的 I
8、C 卡中复制一张卡。IC 卡的 UID 是不通过密码控制的,可以直接通过读卡器获得,后面讲IC 卡的通信过程会说明。那么我们做 IC 卡破解时,主要的问题就是破解IC 卡每个扇区的控制密码,如果密码破解了,那要怎么操作都随便了。IC 卡密码破解的几种方法:1)使用默认的密码攻击,很多应用 IC 卡都没有更改默认密码,所以导致可以直接使用默认密码来尝试接入 IC 卡,常见的默认密码有:ffffffffffff000000000000a0a1a2a3a4a5b0b1b2b3b4b5aabbccddeeff4d3a99c351dd1a982c7e459ad3f7d3f7d3f7714c5c886e9
9、7587ee5f9350fa0478cc39091533cb6c723f68fd0a4f256e9FFzzzzzzzzzzA0zzzzzzzzzz2)nested authentication 攻击(大家常说的验证漏洞攻击)前面讲到每个扇区都有独立的密码,一些情况下,比如某饭卡,扇区 3 中存储着钱等数据,扇区 3 的更改了默认密码,扇区 5 中也存储着一些数据,扇区 5 也更改了密码,其他扇区没有更改默认密码。我们要操作扇区 3 跟 5,不知道密码怎么办?使用 nested authentication 攻击,这种攻击方式是在已知了 16个扇区中任意一个扇区的密码之后,采用的攻击方式,可以获
10、得其他扇区的密码。我们前面都提到了,16 个扇区的密码都是独立的,那么怎么能通过某个扇区的密码获得其他扇区的密码呢?如果可以,那说明扇区就不是独立的呀,有人会说,由于 M1 卡的加密算法被破解了,我只能说那是还没有理解,具体算法不讲,只说明一下,算法只是使得猜解密码的时间变短,使得猜解密码成为可能。这是什么样的原理呢?首先先了解,这是一个对等加密算法,也就是读卡器跟 tag 中都保存着同样的密码,也都是用同样的算法加密,然后看 rfid 的验证过程:开始交互的时候,tag 就已经把 uid 给 reader 说了,主要牵扯到防冲撞机制,之后才开始验证。第一次验证时,读卡器首先验证 0 扇区的密
11、码,tag 给读卡器发送一个随机数 nt(明文),然后读卡器通过跟密码相关的加密算法加密 nt,同时自己产生一个随机数 nr,(密文)发送给 tag,tag 用自己的密码解密之后,如果解密出来的 nt 就是自己之前发送的 nt,则认为正确,然后通过自己的密码相关的算法加密读卡器的随机数 nr(密文)发送给读卡器,读卡器解密之后,如果跟自己之前发送的随机数 nr 相同,则认为验证通过,之后所有的数据都通过此算法加密传输。首先记住这里面只有第一次的 nt 是明文,之后都是密文,而且nt 是 tag 发送的,也就是验证过程中,tag 是主动的。我们破解的时候,读卡器中肯定没有密码(如果有就不用破解了
12、),那么 tag 发送一个 nt 给读卡器之后,读卡器用错误的密码加密之后发送给 tag,tag 肯定解密错误,然后验证中断,这个过程中,我们只看到 tag 发送的明文随机数,tag 根本没有把自己保存的密码相关的信息发送出来,那怎么破解呢?所以,要已知一个扇区的密码,第一次验证的时候,使用这个扇区验证成功之后,后面所有的数据交互都是密文,而且是 tag 首先发送随机数 nt,这个 nt 是个加密的数据,我们前面也说过每个扇区的密码是独立的,那么加密实际上就是通过 tag 这个扇区的密码相关的算法加密的 nt,这个数据中就包含了这个扇区的密码信息,所以我们才能够通过算法漏洞继续分析出扇区的密码
13、是什么。这也是为什么 nested authentication 攻击必须要知道某一个扇区的密码,然后才能破解其他扇区的密码,这个攻击方式,我倒觉得,加密传输跟扇区密码独立帮了很大的忙,如果每次 nt 都是明文发送,那还真没法破解其他扇区了。3)darkside 攻击假设某个 IC 卡的所有扇区都不存在默认密码怎么办?暴力破解根本不可能,那这时候就是算法的问题导致的 darkside 攻击,我们照样不说具体算法什么漏洞之类,同样,我们考虑首先要把 tag 中的 key 相关的数据骗出来,也就是让 tag 发送出来一段加密的数据,我们通过这段加密的数据才能把 key 破解出来,如果 tag 不发
14、送加密的数据给我们,那没法破解了。前面我们也说了,第一次验证的时候 tag 会发送明文的随机数给读卡器,然后验证读卡器发送加密数据给 tag,tag 验证失败就停止,不会发送任何数据了,这样看,根本就没有办法破解密码。实际上经过研究人员大量的测试之后,发现算法还存在这样一个漏洞,当读卡器发送的加密数据中的某 8bit 全部正确的时候 tag 会给读卡器发送一个加密的 4bit 的数据回复 NACK,其他任何情况下 tag 都会直接停止户。那么这个 4bit 的加密的 NACK 就相当于把 tag 中的 key 带出来了,然后再结合算法的漏洞破解出 key,如果一个扇区的 key 破解出来,就可
15、以再使用 nested authentication 攻击破解其他扇区密码。4)正常验证过程获得 key1-3 都是通过一般的读卡器,把 tag 中的密码破解出来,破解的原理中,不管密码破解算法的漏洞,实际上都是要让 tag 中发送出来一段密文。那如果读卡器本身就保存有密码,卡也是授权的卡,也就是说卡和读卡器都是正确授权的,那么他们之间的加密数据交换就可以直接使用 PM3 等监控下来,然后通过“XOR 效验与算 Key”程序算出密码来。这种情况下一般都是内部人员做案,或者把读卡器中的 SAM 偷出来,SAM 实际上就是保存读卡器中密码的一个模块,然后通过另外的读卡器插入 SAM,用正常的授权的
16、卡刷卡,然后监控交换数据,从而算出密码。5)另一个方面前面 4 类方法基本上把目前的 rfid 卡破解讲清楚了,文字太多,所以也就没有截图,还有一个地方大家不知道考虑了么?我们提到的都是卡和读卡器之间的数据交换,这是加密的数据,但是有没有想过读卡器跟电脑相连这块,电脑中肯定没有加密芯片,所以这块肯定是明文传输,在某种环境中,比如通过电脑的控制程序导入密码(假设是二进制等不能直接观看的密码文件)到读卡器的时候,我们通过监控 USB 口(串口)数据通信,是不是就能明文看到密码呢?截个图:软件装载密码到读卡器使用 USB 监控抓到的明文数据,包含了导入到读卡器中的密码明文。常用工具说明:1)mfoc
17、 mfocgui 以及目前网络上,淘宝上充斥的各类破解工具都是基于 nested authentication 攻击原理,就是内置了一些默认密码,首先使用默认密码对每个扇区进行测试,如果某个扇区存在默认密码,然后就是用 nested authentication 攻击获得其他扇区的密码。2)PM3 的 darkside 攻击,Mfcuk 等为 darkside 攻击工具,一个扇区密码都不知道的情况下破解用的,由于破解算法的原理本身就不是100%成功的,所以如果长时间破解不出来,就停了重新换个 nt,重新选个时间破解,跟运气也有些关系。不要别人几个小时,甚至几十分钟就破解成功了,你几天都没有破解出来,还一直傻傻的等,不如暂停换个 nt,过一会再试。3)Libnfc 工具,目前用的比较多的是 radiowar 的nfcgui,radiowar 网站上也说了,就是给 nfc-list nfc-mfsetuid nfc-mfclassic 这三个工具写了个 gui 界面,你也可以使用命令行模式,或者你也可以自己写个 gui 界面调用这三个程序即可,这些都是操作卡或者读卡数据的工具,国内不同的 IC 卡读卡器都附带有一些读写卡程序,我用的一个比这个要方便的多