加载中…
正文 字体大小:

RFID破解三两事

(2013-10-29 13:27:50)
标签:

杂谈

2013-04-23 09:24:23     我来说两句       作者:YunFree
收藏 RFID破解三两事我要投稿
网上看了很多RFID破解的文章,大部分都是工具使用,一步步该怎么操作,基本上没有讲原理的,估计导致了很多初学者非常迷惑,特别是一旦按照操作步骤操作的时候出错时更加迷惑,不知道是什么状况,国内radiowar也同样没有看到过特别介绍原理性的文章。

建议大家还是多看看外文原版的资料说明,会理解的更透彻些,才能更快的加入到RFID安全研究及测试中。

参考站点:

http://www.proxmark.org 多看看论坛里面提问跟回答

http://nfc-tools.orghttp://www.openpcd.org/http://www.rfdump.orghttp://www.libnfc.org

这篇文章就当是我自以为是的普及性介绍,我想应该还是会给很多人解惑。

首先,先说说目前RFID破解涉及到的几种方法,我尽量以最直白的语言描述。

1、最简单ID卡破解

常见破解办法:ID卡复制,ID卡除了复制也没有其他研究的了,毕竟太简单了。

基本原理介绍:

ID卡属于大家常说的低频卡,一般大部分情况下作为门禁卡或者大部分大学里使用的饭卡,一般为厚一些的卡,是只读的,卡里面只保存有一串唯一的数字序号ID,可以把这串数字理解为你的身份证号,刷卡的时候,读卡器只能读到ID号,然后通过跟后台数据库进行匹配,如果是门禁卡,那么数据库里面就是存在这样的ID号,如果匹配上门就开了,匹配不上门就开不了。

如果是学校的饭卡,刷卡的时候,实际上操作的是你对应ID号相关的数据库中的数据。ID卡本身不存在任何其他数据,所以,学校使用的ID卡饭卡,只能复制卡,刷别人的钱(数据库中的钱),再没有其他办法。

破解方法:通过ID卡读卡器,读取卡内的ID号,然后把这串ID号写入到ID卡空卡中即可,各类工具特别多,需要一个ID卡读卡器。最简单的淘宝有卖的工具,两节7号电池,按读卡按钮读要复制的卡的ID,然后再按写卡按钮,把读到的ID号写入到空白卡中,即完成了卡复制工作,优点就是方便,缺点就是我们看不到整个过程,对我们安全研究来说作用不大。

RFID破解三两事

2、射频IC卡破解

写在前面的技术铺垫:

射频IC卡种类繁多,标准也繁多,这些不在介绍范围内,但是以下攻击介绍的原理类似,下面不特别说明就是指的M1 S50卡,这也是目前广泛使用的,并且大家做测试时最常见的IC卡。

常见的破解方法:

1)跟ID卡一样,复制IC卡的UID号码写入到新的空白IC卡中。

2)破解IC卡的密码,从而改写IC卡中的数据。

3)破解IC卡的密码之后,把所有数据导出再写入到一个新的空白IC卡中,也就是IC卡全卡复制(NFC手机及PM3等设备也支持把自己模拟成一个IC卡,实际上也属于卡复制一类)。

IC卡破解基本上都逃不脱以上的几种应用,这里面又涉及到一个简单的IC的内部结构的说明,便于理解就简单说明一下。

IC 卡(S50)分为16个扇区(0-15),每个扇区又分为4个区域块(0-63),每个扇区都有独立的一对密码keyA和keyB(先记着独立两个字,后面要思考问题)负责控制对每个扇区数据的读写操作,keyA和keyB分布在每个扇区的第四块中,第0扇区的第一个数据块,存储着IC卡的UID号(想成身份证号),其他扇区可以存储其他的数据,如钱等数据。

一般IC卡的UID是唯一的也是写死的不能更改,其他块的数据是可以更改的,所以也就有了普通IC空白卡以及UID可写空白卡(可以认为是不遵守规范的商家制作的)。

现在我们开始想象破解的几种环境:

1)读卡器把IC卡当成ID卡一样只识别UID正确即可,不管IC卡内其他数据,这时候,只需要把卡的UID读出来,并使用一个UID可写的空白卡,把UID写入即可。

2)读卡器首先识别UID是否正确,然后再识别其他扇区的数据,通过keyA或者keyB对数据进行读写操作。这样首先UID得正确,其次,keyA或者keyB得正确(后面为了说的方便,我们就不说keyA或者keyB,直接说IC卡密码)。

这样如果知道了IC卡密码,我们也不需要复制新卡,那么就可以更改IC卡中的数据,比如更改饭卡中的钱数。如果我们想复制一张一模一样的卡,那么就把原卡的所有扇区的数据全面导出来,再写入新的UID可写卡中即可。

3)读卡器不识别UID,只管对扇区的密码进行验证,如果验证成功则允许对卡内数据操作等。(如某“XX快捷酒店”的门卡,就不管UID,只要扇区密码正确即可),那我们可以通过扇区密码更改门卡中的数据,如房号,住宿的时间等,也可以通过一个普通的IC卡(uid不能更改)复制一张门卡(跟原卡UID不同),也可以通过一个UID可写的卡,复制一张跟原卡完全相同的卡(跟原卡UID也相同)。

基本上也就是以上几种环境,改写UID、通过扇区密码改写扇区数据、通过把原卡数据导出重新导入到新的IC卡中复制一张卡。

IC卡的UID是不通过密码控制的,可以直接通过读卡器获得,后面讲IC卡的通信过程会说明。那么我们做IC卡破解时,主要的问题就是破解IC卡每个扇区的控制密码,如果密码破解了,那要怎么操作都随便了。

IC卡密码破解的几种方法:

1)使用默认的密码攻击,很多应用IC卡都没有更改默认密码,所以导致可以直接使用默认密码来尝试接入IC卡,常见的默认密码有:

ffffffffffff

000000000000

a0a1a2a3a4a5

b0b1b2b3b4b5

aabbccddeeff

4d3a99c351dd

1a982c7e459a

d3f7d3f7d3f7

714c5c886e97

587ee5f9350f

a0478cc39091

533cb6c723f6

8fd0a4f256e9

FFzzzzzzzzzz

A0zzzzzzzzzz

2)nested authentication 攻击(大家常说的验证漏洞攻击)

前面讲到每个扇区都有独立的密码,一些情况下,比如某饭卡,扇区3中存储着钱等数据,扇区3的更改了默认密码,扇区5中也存储着一些数据,扇区5也更改了密码,其他扇区没有更改默认密码。

我们要操作扇区3跟5,不知道密码怎么办?

使用nested authentication 攻击,这种攻击方式是在已知了16个扇区中任意一个扇区的密码之后,采用的攻击方式,可以获得其他扇区的密码。

我们前面都提到了,16个扇区的密码都是独立的,那么怎么能通过某个扇区的密码获得其他扇区的密码呢?如果可以,那说明扇区就不是独立的呀,有人会说,由于M1卡的加密算法被破解了,我只能说那是还没有理解,具体算法不讲,只说明一下,算法只是使得猜解密码的时间变短,使得猜解密码成为可能。

这是什么样的原理呢?首先先了解,这是一个对等加密算法,也就是读卡器跟tag中都保存着同样的密码,也都是用同样的算法加密,然后看rfid的验证过程:

开始交互的时候,tag就已经把uid给reader说了,主要牵扯到防冲撞机制,之后才开始验证。

RFID破解三两事

RFID破解三两事

第一次验证时,读卡器首先验证0扇区的密码,tag给读卡器发送一个随机数nt(明文),然后读卡器通过跟密码相关的加密算法加密nt,同时自己产生一个随机数nr,(密文)发送给tag,tag用自己的密码解密之后,如果解密出来的nt就是自己之前发送的nt,则认为正确,然后通过自己的密码相关的算法加密读卡器的随机数nr(密文)发送给读卡器,读卡器解密之后,如果跟自己之前发送的随机数nr相同,则认为验证通过,之后所有的数据都通过此算法加密传输。

首先记住这里面只有第一次的nt是明文,之后都是密文,而且nt是tag发送的,也就是验证过程中,tag是主动的。

我们破解的时候,读卡器中肯定没有密码(如果有就不用破解了),那么tag发送一个nt给读卡器之后,读卡器用错误的密码加密之后发送给tag,tag肯定解密错误,然后验证中断,这个过程中,我们只看到tag发送的明文随机数,tag根本没有把自己保存的密码相关的信息发送出来,那怎么破解呢?

所以,要已知一个扇区的密码,第一次验证的时候,使用这个扇区验证成功之后,后面所有的数据交互都是密文,而且是tag首先发送随机数nt,这个nt是个加密的数据,我们前面也说过每个扇区的密码是独立的,那么加密实际上就是通过tag这个扇区的密码相关的算法加密的nt,这个数据中就包含了这个扇区的密码信息,所以我们才能够通过算法漏洞继续分析出扇区的密码是什么。

这也是为什么nested authentication攻击必须要知道某一个扇区的密码,然后才能破解其他扇区的密码,这个攻击方式,我倒觉得,加密传输跟扇区密码独立帮了很大的忙,如果每次nt都是明文发送,那还真没法破解其他扇区了。

3)darkside攻击

假设某个IC卡的所有扇区都不存在默认密码怎么办?暴力破解根本不可能,那这时候就是算法的问题导致的darkside攻击,我们照样不说具体算法什么漏洞之类,同样,我们考虑首先要把tag中的key相关的数据骗出来,也就是让tag发送出来一段加密的数据,我们通过这段加密的数据才能把key破解出来,如果tag不发送加密的数据给我们,那没法破解了。

前面我们也说了,第一次验证的时候tag会发送明文的随机数给读卡器,然后验证读卡器发送加密数据给tag,tag验证失败就停止,不会发送任何数据了,这样看,根本就没有办法破解密码。

实际上经过研究人员大量的测试之后,发现算法还存在这样一个漏洞,当读卡器发送的加密数据中的某8bit全部正确的时候tag会给读卡器发送一个加密的4bit的数据回复NACK,其他任何情况下tag都会直接停止户。

那么这个4bit的加密的NACK就相当于把tag中的key带出来了,然后再结合算法的漏洞破解出key,如果一个扇区的key破解出来,就可以再使用nested authentication 攻击破解其他扇区密码。

4)正常验证过程获得key

1-3都是通过一般的读卡器,把tag中的密码破解出来,破解的原理中,不管密码破解算法的漏洞,实际上都是要让tag中发送出来一段密文。

那如果读卡器本身就保存有密码,卡也是授权的卡,也就是说卡和读卡器都是正确授权的,那么他们之间的加密数据交换就可以直接使用PM3等监控下来,然后通过“XOR效验与算Key”程序算出密码来。

这种情况下一般都是内部人员做案,或者把读卡器中的SAM偷出来,SAM实际上就是保存读卡器中密码的一个模块,然后通过另外的读卡器插入SAM,用正常的授权的卡刷卡,然后监控交换数据,从而算出密码。

5)另一个方面

前面4类方法基本上把目前的rfid卡破解讲清楚了,文字太多,所以也就没有截图,还有一个地方大家不知道考虑了么?

我们提到的都是卡和读卡器之间的数据交换,这是加密的数据,但是有没有想过读卡器跟电脑相连这块,电脑中肯定没有加密芯片,所以这块肯定是明文传输,在某种环境中,比如通过电脑的控制程序导入密码(假设是二进制等不能直接观看的密码文件)到读卡器的时候,我们通过监控USB口(串口)数据通信,是不是就能明文看到密码呢?

截个图:

RFID破解三两事

软件装载密码到读卡器

RFID破解三两事

使用USB监控抓到的明文数据,包含了导入到读卡器中的密码明文。

常用工具说明

1)mfoc 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卡读卡器都附带有一些读写卡程序,我用的一个比这个要方便的多

关于:http://www.2cto.com/Article/201304/205336.html
1、最简单ID卡破解

文中提到的是最为之简单的部分,其识别是经过后台数据库进行匹配的,实际上几乎100%的大型环境下(包括文中所说的学校)也是无法做到完全与后台匹配的,或者简单来说那只是跟读卡器的交互而已!谈不上是数据库。

我们所知的HID等基于125kHz频率的低频卡,ID部分都是固化的(或者如本文所说的只读),但实际上并非完全如此,正如文中所说,大家可以购买相关的空白卡进行复制操作。实际上作者完全忽略了一个问题,所谓空白卡是有分别的,好像HID要复制就必须要使用T55X7类的卡,而T55X7也叫TK4100(EM4100)卡,该卡存在ID可修改的功能性并且存在数据存储性。而文中所提到的厚卡和薄卡也是对于ID卡的一种分别!

还有就是作者忽略了一个对于某种卡类的安全隐患!em4100的ID是无法穷举的,但是HID的ID是可以穷举的。

2、射频IC卡破解

射频卡IC卡顾名思义就是所谓的利用射频识别技术的IC卡,然而IC卡就是大家经常所谓存在存储功能的卡,包括了文中所说的S50卡!但实际上em4100系列以及HID系列也是IC卡。

文中提到有三种手法是常见的,但我个人不认为其中的两种是所谓的破解手法:

1、跟ID卡一样,复制IC卡的UID号码写入到新的空白IC卡中。

该手法是基于无需任何密钥的情况下进行的操作,但是我曾经介绍过关于某卡的破解手法就说过为什么需要XOR得出其余的数据,并且就算我们不需要XOR得出相关的数值,就以前8位作为UID写入UID白卡的情况下,你完全无法确保读取系统是否识别,因为0区的数值不仅仅包括了UID。UID作为一种可知的条件存在的时候,不经过任何限制性操作而进行的复制何以成为破解的手法之一?其背后存在各种不稳定因素,使得这个手法未能得到肯定。

3、破解IC卡的密码之后,把所有数据导出再写入到一个新的空白IC卡中(太长不写了)

实际上作者是想说破解得出的数据,利用NFC设备/逆向设备进行相关的Tag模拟,首先要问清楚一下作者的就是NFC手机是基于哪几种芯片而言?系统是什么?因为现在已知的多个操作系统以及NFC芯片是不支持MIFARE CLASSIC的模拟,而只能够模拟基于ISO14443A标准的部分类型,并且模拟是一种很复杂的软件工程,并非是作者说的这么简单,并且这也不是破解,需要破解什么呢?

或者我以看官的角度来说,常见破解手法作者就说了一个,而这一个手法就是“破解”。在已知密钥的情况下进行的一切操作可以谈作为是破解嘛?

关于IC卡部分的介绍也有一点问题,原文内容是“每个扇区都有独立的一对密码KeyA和KeyB负责控制对每个扇区数据的读写操作”这句话前半部分是正确的,而后半部分是错误的,实际上密钥就是Access条件,而这个Access的权限是由卡的控制字节限制,如果按照作者的说法的话,只要你知道密钥你就是拿到超级管理员权限啦,但可惜事实往往是残酷的,控制字节会限制密钥的权限,所以没有控制字节,密钥P都不是,因为作者在这里埋下了炸弹,所以实际上下面的内容就出现不可补救的错误。

IC卡的UID是固化在内而并且写死在内的,所谓写死就是说你可以以权限去进行修改,只不过你没有这个权限,但实际上UID是固化在内的!并且作者没有说有控制自字节的情况下,所以包括0区以内的所有区块都是不可读写的。

破解的几种环境:

1、作者实际上的意思是说当环境识别为基于UID进行认证的认证模式下

2、当环境需要以UID作为第一认证,其密钥作为数据读取条件,而控制字节允许读取写入的情况下

3、当环境不需要以UID作为第一认证,其密钥作为数据读取条件,而控制字节允许读取写入的情况下,读取该卡某个区块的制定数据识别操作,而不是密钥!!

密码破解的几种方法:

1)密钥列表当中的12个0是不存在的,还有就是16进制有Z的吗?看来是我土了!

2)关于认证嵌套漏洞,这个因为作者文章忽略了权限的部分,所以我可否忽略?因为没有权限,何来认证嵌套漏洞呢?

3)DarkSide攻击,仅仅是基于IC卡类别当中NXP公司所发布的MIFARE CLASSIC系列(S50/S70)而不是所有的IC卡!文中没有说明问题究竟是存在于哪里,我也曾经说过关于这个方面的问题,什么是PRNG漏洞,以及PRNG漏洞和WEP的关系!所以不再多说

4)正常验证过程获取Key,首先SAM并非是正常,而是在不安全的对称性算法当中增加了一个安全模块,去加密彼此之间的通信安全,但就是基于读卡器返回的数值是明文而存在了关于监听攻击的内容,文中好像把我之前关于SAM部分非监听部分的内容拿出来说之后,而没有注意究竟问题是什么!

SAM不是仅仅只是保存与读卡器内的一个密码模块,这是SAM最简单最基本的部分,但实际上SAM是基于UID进行分散式的运算,并非如文中作者所说这么简单!因为就算非SAM所授权的卡也可以利用SAM进行破解

5)另一方面,我比较怀疑的一个方面,这个所谓的USB拦截是否是基于交互的过程中?还是仅仅是基于挂载KeyA的时候的操作呢?当中如果是基于非SAM环境下,这样子的通信监听是存在的,我只是怀疑这个演示内容而已。

常用工具说明:

1)mfocGUI是mfoc的GUI版本!并非仅仅是基于认证嵌套漏洞,是基于默认密钥+认证嵌套漏洞的整合。

2)Proxmark3的Darkside就是mfcuk!不要反过来,Proxmark3和mfuck不存在老爸老妈的!mfuck的团队把代码移植去Proxmark3后就将mfuck停止更新了,而且你说错另外一个事情就是,就是因为出现错误的Nt才需要基于错误的Nt进行第二次的攻击,而不是更换另外一个Nt,更换这词代表着攻击者存在多个Nt替换,可惜的就是不存在所谓的Nt进行更换!Nt是随机的而不是已知的。

——————————————————-万恶的分割线———————————————————-

首先,我要声明我刚刚起床,很迷糊迷糊地看完了作者的内容,然后很迷糊迷糊地写下了这篇关于RFID破解两三事的戏文,我没有针对作者的任何意思,因为我也不认识不了解不清楚不知道这位作者是哪位!我只是基于文中我所认为的一些错误进行纠正或者二次介绍,我已经很久很久没有写过相关的文章,是因为我脑子不好使转不过来了,所以也没有多写什么,既然有人写了我就借花敬佛的去说说相关的东西!

请注意“RFID破解两三事”所有的内容都是针对NXP公司的MIFARE CLASSIC系列卡!而不是所有IC或者ID卡!请不要随意或麻木盲从测试!

请作者记住控制字节是什么!

阅读 评论 收藏 转载 喜欢 打印举报
已投稿到:
  • 评论加载中,请稍候...
发评论

       

    验证码: 请点击后输入验证码 收听验证码

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 不良信息反馈 电话:4006900000 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有