RFID之M1卡数据资料_第1页
RFID之M1卡数据资料_第2页
RFID之M1卡数据资料_第3页
RFID之M1卡数据资料_第4页
RFID之M1卡数据资料_第5页
免费预览已结束,剩余13页可下载查看

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、0x01契机一直没有机会也没下定决心认真的去研究某个安全领域,很早之前就看到好多人研究RFID,一直很憧憬那片天空,趁着老大给机会,决定选这个方向作为个人业余努力的方向。差不多四天前入手了ACR122U决定拿自己母校的餐厅饭卡练手。ACR122U的使用很简单,只要安装上驱动,使用M1卡服务程序就可以很快破解,破解完成后查看其生成的dump文件,找到加密扇区的密码,将密码导入到MCT(MifareClassicTool),剩下的就可以完全使用MCT完成了,个人很怀疑破解过程是否完全可以通过手机(支持NF。APP完成。ACR122U勺详细使用过程可以参考:RFID安全之某学校水卡破解,本文主要介绍

2、目前M1卡中的数据分析和M1卡安全防护方案。0x02背景知识了解M1卡的结构可以知道M1卡共16个扇区,编号从0到15,每个扇区配备了从0到3共4个段,每个段可以保存16字节的内容。0x03数据分析阅读RFID安全之某学校水卡破解可以发现该学校的水卡中数据存储比较简单,按照作者的分析,4号扇区的1、2号数据段(编号从0开始)存储了水卡余额,将已知的余额32.31,换算为分为3231,再转为10进制为C9F,即00000C9F,而0c9F取反为FFFFF360,这时比较下4号扇区的值,很容易发现规律:前四个字节不取反倒序(9F0C0000)存储余额,接下来四个字节取反倒序(60F3FFFF)存储

3、余额,再接下来四个字节不取反倒序(9F0C0000)存储余额。000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'MHMH0400000000000000000000000000C5AE9F0C000060F3FFFF9F0C000011EE11EE9F0C000060F3FFFF9F0C000012ED12ED上面提到的“倒序”,可以结合计算机数据存储方式来理解:如下图所示,变量a存储的数据对应的16进制为0A112233,变量b存储的数据对应

4、的16进制为0B445566。Int类型0B变量b44占4字争55共32bft66int类型OA变量a12占4字笔34共32blt56高地址A低地址如果我们把上面数据存储内存图横向摆放,则其效果为:低地址>高地址int类型变量占占4字节共爰bitint类型变量占占4字节共交bit5634126655440B这样就很明显了,5634120A,就是变量a所代表的数据的十六进制0A123456的倒序。作为入门教程,个人认为RFID安全之某学校水卡破解是非常不错的。看完这个教程,并实践结束后,我停下来思考这样一个问题:M1卡的密码破解是傻瓜式的,当然也有文章介绍破解原理,但是作为门外汉,目前我还

5、不是特别关心,我只想找到那种破解成功,可以修改金额的快感!那么在整个M1卡的破解过程中,我自己到底起了什么作用?答案是卡片的数据分析。RFID安全之某学校水卡破解中的数据分析并不难,只要知道水卡的余额就可以定位卡片中余额数据的存储位置,细心的读者肯定可以发现文中的截图5号扇区也存在非0值块,作者在RFID安全之某学校水卡破解后记一一不留后患中作了进一步分析;任意修改学校食堂饭卡余额这篇文章所描述的卡片和RFID安全之某学校水卡破解的分析非常相似;而另一篇破解学校水卡-|RFIDHack初探文中的数据就更简单了,只有余额和消费金额之和,连取反的校验都没做。分析了几篇图文教程式入门文章,加上自己的

6、实际破解过程,总结了一下数据分析的经验。首先,需要收集信息,然后可以通过数据比对法定位余额,如果卡片数据采取了校验保护,可以采用试错法进行排查定位,正如RFID安全之某学校水卡破解后记一一不留后患中所用到的方法。0x03.1比对法比对法,就是将已知数据换算成十六进制,寻找卡片中能与之对应的数据,从而确定卡片中对应的存储位置所存储的数据的意义,或者将卡片中变化的字节转成十进制,判断是否存在相应的数据信息。最常用的比对值当然是卡片余额,还有当前的消费金额,或者是累计的消费金额,这两个数据有出现在前文的引用文中。那么除了这些,还应该考虑哪些数据呢?这里我作一个简单的罗列:消费次数、日期、时间、读卡器

7、编号、卡号(非UID)等之所以认为上面的数据可以存储在卡片中,是因为两个字节(16bit),不考虑符号位,可以表示的最大数值是65535,一个字节(8bit)可以表示最大数值为255。一张卡按四年有效期来算的话,每天要刷44次才能再四年内超过这个数值;日期也可以用两个字节来表示,可以选择整体表示,譬如12月31日,记为1231,对应到16进制04CF,也可以一个字节表示月一个字节表示日,仍然是12月31日,可以记为0C1F(1F=31);时间(不考虑秒)的最大表示数字是23:59,也可以参考日期的表示方式,选择不同的方案;读卡器编号,一般情况下一个单位也不会同时具有65535台读卡设备;卡号,

8、这里卡号一般可以用两个字节表示,如果单位人数较多(超过65535),也可以使用四个字节表示,卡号的意义可以标识一个人,也可以标识单位内的一个部门等。0x03.2试错法试错法就是针对一些不明意义的字节(可能是校验字节),通过修改已知意义的字节来确定其关联性,找出不明意义字节的计算方法。数据比对法,有时并不能分析出所有数据块的数据,这时可以考虑试错法来确定隐晦数据和哪些字段有关联,譬如下面的案例:卡片只有0号扇区有数据:?1439A*040046BA141251100310第30C0D0C1100004A3D002D00000001004741段370BBCE401C200000EA6027D08

9、1D05602段1101*FF078069FFFFFFFFFFFF3段第0段为厂商写死的UID,不可修改,经过多次信息收集发现第1段的数据是不变的,变化的只有第二段,经过比对法,发现第1段白44A3D是卡号,第2段的01C2是本次消费金额,0EA6是余额,027D是消费和充值次数,081D是日期,到此,第2段中还有前四个字节以及最后两个字节的意义不明。下面通过试错来定义各个字节的意义尝试直接修改K1余额,读卡会失败,于是认为刷卡消费过程存在验证,余额和消费金额并不能构成验证对,所以认为验证信息在意义不明的6个字节内。只修改消费金额也会导致读卡失败。H试使用K2的值整体替换K1的第2段,结果读卡

10、依然失败。最后尝试使用K2的值,整体替换K1的第1和第2段,等价于复制卡片,终于读卡成功了。通过以上几步,可以确定消费读卡器在进行扣钱之前,会先校验卡片的正确性,校验值和余额、消费金额以及第1段中的数据都有关联。为了进一步定位信息,做出如下试错计划:1、修改卡号,确认卡片是否可正确识别;2、逐个修改第2段中已知意义的字节,确认卡片是否可正确识别,排除与校验无关的字节3、对第2段中不明意义的6个字节逐个修改,确认卡片是否可正确识别,排除非校验字节4、对第1段中的3个不明意义的字节逐个修改,确认卡片是否可正确识别本质是就是对所有数据字节进行试错,排除与校验无关的字节!通过以上过程缩小与校验相关的字

11、节,再结合比对法中找出的已知意义的字节,从而确定不明意义字节的意义和校验算法。由于刷卡条件限制,以上案例尚未破解完成,试错法也有待该案例进一步验证。破解过程需要大胆猜测,努力求证!0x04卡片防护破解和防护是一对冤家,既然M1卡这么容易被破解,那有没有合适的防护方法呢?上一小节中提到的校验案例就算是一个很小的防护手段,但是依然存在很大被破解的风险。为了降低水卡和饭卡被破解的风险,同时又不增加替换M1卡的成本,可以完全加密数据字段,基于密钥和算法保密性,保证即使可以通过验证攻击获取到M1卡中的数据,黑客也无法快速判断各个数据字段的意义,从而无法完成余额修改!譬如,参考上一小节的校验案例,如果所有

12、数据再与一个2字节的密钥进行异或处理,这时就无法简单的通过比对法判断出哪些字节是余额、哪些是消费金额,进一步降低了破解风险。当然针对密钥可以设计一套动态密钥方案,效果类似支付宝令(需要考虑如何处理长期不使用的卡片),而加密算法可以选择更加复杂的对称加密算法,只要保证不会对消费刷卡机造成过大延迟即可。0x05复制攻击数据加密虽然可以增加黑客分析卡片数据的难度,降低黑客恶意修改余额的风险,但是无法应对卡片复制攻击!复制攻击可能造成的后果是盗刷他人饭卡或水卡,这一点是最容易理解的,当然前提是黑客可以接触到别人的饭卡或水卡。除了这一点,复制攻击是否还存在其它危害?在分析这之前,需要明确几个前提,1)刷

13、卡机中会记录哪些信息;2)我们假设刷卡机没7天向中央数据库服务器提交一次数据,刷卡机向中央数据库提交的是哪些数据。如果刷卡机只记录一张卡片的最后一次消费记录,那么其向数据库提交的数据必然要包含余额信息。如果在刷卡机两次向数据库提交数据的时间间隔内,利用复制的卡片(复制较早的卡片数据)做最后一次消费,那么真实卡片消费的数据就会被覆盖掉。当然个人猜测目前的刷卡机应该会记录卡号(非UID)、消费累计金额、消费次数,同步数据库时只需要基于卡号找到对应的记录,然后将余额减去消费累计金额、总消费次数叠加本次提交的消费次数。这种情况下,复制攻击就只能盗刷他人的饭卡或水卡余额了,但是即使是这样,如果不影响被复

14、制的卡,也算是一种修改余额的方式,毕竟刷卡机不会基于数据库信息向卡片写数据!本来以为复制攻击就这些影响了,晚上睡觉前忽然想到,既然可以复制别人的卡,为什么不能复制自己的卡呢。T1时间充值m元,并记录下卡内的数据信息D1,消费一段时间后,T2时间卡内余额n元(n<m),此时将数据信息D1重新拷贝回卡内,卡片信息重新回到T1时间的状态,等价于T1-T2时间段内没做任何消费!这种情况即使是使用UID作校验也无法防护了,除非刷卡机是在线实时查询数据库的,后来发现这种攻击方式12年就有人提出了,并称之为重放/重置攻击。0x06后记刚接触RFID,有描述不准确或错误的地方,请轻拍指正!0x07卷土再

15、来基于0x05节的分析和实际验证,通过复制攻击(重放攻击)已经实现0x03.2节示例中卡片的余额修改,但是为了论证0x03.2节试错法的可行性,规划了如下方案:439A*040046BA141251100310第0段12340C0D0C1100004A3D002D000000010047第1段370BBCE401C200000EA6027D081D0560第2段1101*FF078069FFFFFFFFFFFF第3段下:?12?12?12?12?12验证结果如针对以上信息,对第1、2段内容,逐字节进行试错,确认卡片是否可读1、修改第1段第0字节0D0D0C1100004A3D002D00000

16、0010047第1段370BBCE401C200000EA6027D081D0560第2段2、修改第1段第1字节0C0E0C1100004A3D002D000000010047第1段370BBCE401C200000EA6027D081D0560第2段3、修改第1段第2字节0C0D0D1100004A3D002D000000010047第1段370BBCE401C200000EA6027D081D0560第2段4、修改第1段第3字节0C0D0C1200004A3D002D000000010047第1段370BBCE401C200000EA6027D081D0560第2段5、修改第1段第4字节0

17、C0D0C1101004A3D002D000000010047第1段370BBCE401C200000EA6027D081D0560第2段6、修改第1段第5字节0C0D0C1100014A3D002D00000001004711段2370BBCE401C200000EA6027D081D05602段7、修改第1段第6字节?0C0D0C1100004B3D002D00000001004711段2370BBCE401C200000EA6027D081D05602段8、修改第1段第7字节?0C0D0C1100004A3E002D00000001004711段2370BBCE401C200000EA6

18、027D081D05602段9、修改第1段第8字节?0C0D0C1100004A3D012D00000001004711段2370BBCE401C200000EA6027D081D05602段10、修改第1段第9字节0C0D0C1100004A3D002E000000010047第1段370BBCE401C200000EA6027D081D0560第2段11、修改第1段第10字节0C0D0C1100004A3D002D010000010047第1段370BBCE401C200000EA6027D081D0560第2段12、修改第1段第11字节?0C0D0C1100004A3D002D00010

19、001004711段2370BBCE401C200000EA6027D081D05602段弟弟弟弟弟弟弟弟13、修改第1段第12字节0C0D0C1100004A3D002D00000101004711段2370BBCE401C200000EA6027D081D05602段14、修改第1段第13字节0C0D0C1100004A3D002D00000002004711段2370BBCE401C200000EA6027D081D05602段15、修改第1段第14字节0C0D0C1100004A3D002D00000001014711段2370BBCE401C200000EA6027D081D0560

20、2段16、修改第1段第15字节?0C0D0C1100004A3D002D00000001004811段2370BBCE401C200000EA6027D081D05602段17、修改第2段第0字节?0C0D0C1100004A3D002D00000001004711段2380BBCE401C200000EA6027D081D05602段18、修改第2段第1字节0C0D0C1100004A3D002D00000001004711段2370CBCE401C200000EA6027D081D05602段弟弟弟弟弟弟弟弟弟弟弟弟19、修改第2段第2字节弟弟弟弟弟弟弟弟弟弟弟弟弟0C0D0C110000

21、4A3D002D00000001004711段2370BBDE401C200000EA6027D081D05602段20、修改第2段第3字节0C0D0C1100004A3D002D00000001004711段2370BBCE501C200000EA6027D081D05602段21、修改第2段第4字节0C0D0C1100004A3D002D00000001004711段2370BBCE402C200000EA6027D081D05602段22、修改第2段第5字节?0C0D0C1100004A3D002D00000001004711段2370BBCE401C300000EA6027D081D0

22、5602段23、修改第2段第6字节0C0D0C1100004A3D002D00000001004711段2370BBCE401C201000EA6027D081D05602段24、修改第2段第7字节0C0D0C1100004A3D002D0000000100471 1段2370BBCE401C200010EA6027D081D05602段25、修改第2段第8字节10C0D0C1100004A3D002D0000000100472 1段12?12?12?12?12?12370BBCE401C200000FA6027D081D05602段26、修改第2段第9字节0C0D0C1100004A3D00

23、2D0000000100471段370BBCE401C200000EA7027D081D05602段27、修改第2段第10字节0C0D0C1100004A3D002D0000000100471段370BBCE401C200000EA6037D081D05602段28、修改第2段第11字节0C0D0C1100004A3D002D0000000100471段370BBCE401C200000EA6027E081D05602段29、修改第2段第12字节0C0D0C1100004A3D002D0000000100471段370BBCE401C200000EA6027D091D05602段30、修改第2

24、段第13字节0C0D0C1100004A3D002D0000000100471段370BBCE401C200000EA6027D081E05602段31、修改第2段第14字节0C0D0C1100004A3D002D0000000100471段370BBCE401C200000EA6027D081D0660弟弟弟弟弟弟弟弟弟弟弟弟弟2段32、修改第2段第15字节?0C0D0C1100004A3D002D000000010047第2370BBCE401C200000EA6027D081D0561第2段本来期望可以得到一个很不错的结果的,甚至连测试结果位置都预留了,天不遂人愿,畏畏缩缩的在一个窗口连

25、刷了32次,每次都是读卡失败,这下郁闷了,本以为破解只能止步于此了。又拖了一周,感觉自己都没激情了,只是偶尔抽时间看看之前收集的数据,却总结出了下面的结果:?11305712204E200000154031508190DFC0E0E213057122271000002864031608190D37040435904719604E200002382031709010DEC67674130586B304E200001EA0031809020D66E7E751305898E019000001D10031909030499E7E761305925C04E20000182E031A09040D11F5F

26、57590478530352000014DC031B090509F23535注:这是另一张卡上收集的数据,两个字节两个字节进行异或运算再与始终不变的第1段逐两字节异或开始时,始终没能搞清楚这个异或结果,今天突然想到,每两个字节进行异或的结果出现的是两个相同的字节值,那么逐个字节异或岂不就是0,经此确认,试错法终于可以再次登场了,结合之前的32次试错,大胆猜测卡片的校验过程:第1和第2段逐字节异或为0。现在明确了卡片关键的两段数据逐字节异或为0的校验条件,再次进行如下试错测试:前提:当前卡片数据(消费读卡器可识别)?1439A5DA72388040046BA141251100310第0段20C0D0C1100004A3D002D000000010047第1段326029963012C00000D7A027

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论