RFID之M1卡数据分析资料.docx
- 文档编号:5989140
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:15
- 大小:882.68KB
RFID之M1卡数据分析资料.docx
《RFID之M1卡数据分析资料.docx》由会员分享,可在线阅读,更多相关《RFID之M1卡数据分析资料.docx(15页珍藏版)》请在冰豆网上搜索。
RFID之M1卡数据分析资料
0x01契机
一直没有机会也没下定决心认真的去研究某个安全领域,很早之前就看到好多人研究RFID,一直很憧憬那片天空,趁着老大给机会,决定选这个方向作为个人业余努力的方向。
差不多四天前入手了ACR122U,决定拿自己母校的餐厅饭卡练手。
ACR122U的使用很简单,只要安装上驱动,使用M1卡服务程序就可以很快破解,破解完成后查看其生成的dump文件,找到加密扇区的密码,将密码导入到MCT(MifareClassicTool),剩下的就可以完全使用MCT完成了,个人很怀疑破解过程是否完全可以通过手机(支持NFC)APP完成。
ACR122U的详细使用过程可以参考:
RFID安全之某学校水卡破解,本文主要介绍目前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)存储余额,再接下来四个字节不取反倒序(9F0C0000)存储余额。
上面提到的“倒序”,可以结合计算机数据存储方式来理解:
如下图所示,变量a存储的数据对应的16进制为0A112233,变量b存储的数据对应的16进制为0B445566。
这样就很明显了,5634120A,就是变量a所代表的数据的十六进制0A123456的倒序。
作为入门教程,个人认为《RFID安全之某学校水卡破解》是非常不错的。
看完这个教程,并实践结束后,我停下来思考这样一个问题:
M1卡的密码破解是傻瓜式的,当然也有文章介绍破解原理,但是作为门外汉,目前我还不是特别关心,我只想找到那种破解成功,可以修改金额的快感!
那么在整个M1卡的破解过程中,我自己到底起了什么作用?
答案是卡片的数据分析。
《RFID安全之某学校水卡破解》中的数据分析并不难,只要知道水卡的余额就可以定位卡片中余额数据的存储位置,细心的读者肯定可以发现文中的截图5号扇区也存在非0值块,作者在《RFID安全之某学校水卡破解后记——不留后患》中作了进一步分析;《任意修改学校食堂饭卡余额》这篇文章所描述的卡片和《RFID安全之某学校水卡破解》的分析非常相似;而另一篇《破解学校水卡---|||RFIDHack初探》文中的数据就更简单了,只有余额和消费金额之和,连取反的校验都没做。
分析了几篇图文教程式入门文章,加上自己的实际破解过程,总结了一下数据分析的经验。
首先,需要收集信息,然后可以通过数据比对法定位余额,如果卡片数据采取了校验保护,可以采用试错法进行排查定位,正如《RFID安全之某学校水卡破解后记——不留后患》中所用到的方法。
0x03.1比对法
比对法,就是将已知数据换算成十六进制,寻找卡片中能与之对应的数据,从而确定卡片中对应的存储位置所存储的数据的意义,或者将卡片中变化的字节转成十进制,判断是否存在相应的数据信息。
最常用的比对值当然是卡片余额,还有当前的消费金额,或者是累计的消费金额,这两个数据有出现在前文的引用文中。
那么除了这些,还应该考虑哪些数据呢?
这里我作一个简单的罗列:
消费次数、日期、时间、读卡器编号、卡号(非UID)等之所以认为上面的数据可以存储在卡片中,是因为两个字节(16bit),不考虑符号位,可以表示的最大数值是65535,一个字节(8bit)可以表示最大数值为255。
一张卡按四年有效期来算的话,每天要刷44次才能再四年内超过这个数值;日期也可以用两个字节来表示,可以选择整体表示,譬如12月31日,记为1231,对应到16进制04CF,也可以一个字节表示月一个字节表示日,仍然是12月31日,可以记为0C1F(1F=31);时间(不考虑秒)的最大表示数字是23:
59,也可以参考日期的表示方式,选择不同的方案;读卡器编号,一般情况下一个单位也不会同时具有65535台读卡设备;卡号,这里卡号一般可以用两个字节表示,如果单位人数较多(超过65535),也可以使用四个字节表示,卡号的意义可以标识一个人,也可以标识单位内的一个部门等。
0x03.2试错法
试错法就是针对一些不明意义的字节(可能是校验字节),通过修改已知意义的字节来确定其关联性,找出不明意义字节的计算方法。
数据比对法,有时并不能分析出所有数据块的数据,这时可以考虑试错法来确定隐晦数据和哪些字段有关联,譬如下面的案例:
卡片只有0号扇区有数据:
?
1
2
3
4
439A********040046BA141251100310 第0段
0C0D0C1100004A3D002D000000010047 第1段
370BBCE401C200000EA6027D081D0560 第2段
1101********FF078069FFFFFFFFFFFF 第3段
第0段为厂商写死的UID,不可修改,经过多次信息收集发现第1段的数据是不变的,变化的只有第二段,经过比对法,发现第1段的4A3D是卡号,第2段的01C2是本次消费金额,0EA6是余额,027D是消费和充值次数,081D是日期,到此,第2段中还有前四个字节以及最后两个字节的意义不明。
下面通过试错来定义各个字节的意义尝试直接修改K1余额,读卡会失败,于是认为刷卡消费过程存在验证,余额和消费金额并不能构成验证对,所以认为验证信息在意义不明的6个字节内。
只修改消费金额也会导致读卡失败。
尝试使用K2的值整体替换K1的第2段,结果读卡依然失败。
最后尝试使用K2的值,整体替换K1的第1和第2段,等价于复制卡片,终于读卡成功了。
通过以上几步,可以确定消费读卡器在进行扣钱之前,会先校验卡片的正确性,校验值和余额、消费金额以及第1段中的数据都有关联。
为了进一步定位信息,做出如下试错计划:
1、修改卡号,确认卡片是否可正确识别;2、逐个修改第2段中已知意义的字节,确认卡片是否可正确识别,排除与校验无关的字节3、对第2段中不明意义的6个字节逐个修改,确认卡片是否可正确识别,排除非校验字节4、对第1段中的3个不明意义的字节逐个修改,确认卡片是否可正确识别本质是就是对所有数据字节进行试错,排除与校验无关的字节!
通过以上过程缩小与校验相关的字节,再结合比对法中找出的已知意义的字节,从而确定不明意义字节的意义和校验算法。
由于刷卡条件限制,以上案例尚未破解完成,试错法也有待该案例进一步验证。
破解过程需要大胆猜测,努力求证!
0x04卡片防护
破解和防护是一对冤家,既然M1卡这么容易被破解,那有没有合适的防护方法呢?
上一小节中提到的校验案例就算是一个很小的防护手段,但是依然存在很大被破解的风险。
为了降低水卡和饭卡被破解的风险,同时又不增加替换M1卡的成本,可以完全加密数据字段,基于密钥和算法保密性,保证即使可以通过验证攻击获取到M1卡中的数据,黑客也无法快速判断各个数据字段的意义,从而无法完成余额修改!
譬如,参考上一小节的校验案例,如果所有数据再与一个2字节的密钥进行异或处理,这时就无法简单的通过比对法判断出哪些字节是余额、哪些是消费金额,进一步降低了破解风险。
当然针对密钥可以设计一套动态密钥方案,效果类似支付宝令(需要考虑如何处理长期不使用的卡片),而加密算法可以选择更加复杂的对称加密算法,只要保证不会对消费刷卡机造成过大延迟即可。
0x05复制攻击
数据加密虽然可以增加黑客分析卡片数据的难度,降低黑客恶意修改余额的风险,但是无法应对卡片复制攻击!
复制攻击可能造成的后果是盗刷他人饭卡或水卡,这一点是最容易理解的,当然前提是黑客可以接触到别人的饭卡或水卡。
除了这一点,复制攻击是否还存在其它危害?
在分析这之前,需要明确几个前提,1)刷卡机中会记录哪些信息;2)我们假设刷卡机没7天向中央数据库服务器提交一次数据,刷卡机向中央数据库提交的是哪些数据。
如果刷卡机只记录一张卡片的最后一次消费记录,那么其向数据库提交的数据必然要包含余额信息。
如果在刷卡机两次向数据库提交数据的时间间隔内,利用复制的卡片(复制较早的卡片数据)做最后一次消费,那么真实卡片消费的数据就会被覆盖掉。
当然个人猜测目前的刷卡机应该会记录卡号(非UID)、消费累计金额、消费次数,同步数据库时只需要基于卡号找到对应的记录,然后将余额减去消费累计金额、总消费次数叠加本次提交的消费次数。
这种情况下,复制攻击就只能盗刷他人的饭卡或水卡余额了,但是即使是这样,如果不影响被复制的卡,也算是一种修改余额的方式,毕竟刷卡机不会基于数据库信息向卡片写数据!
本来以为复制攻击就这些影响了,晚上睡觉前忽然想到,既然可以复制别人的卡,为什么不能复制自己的卡呢。
T1时间充值m元,并记录下卡内的数据信息D1,消费一段时间后,T2时间卡内余额n元(n 这种情况即使是使用UID作校验也无法防护了,除非刷卡机是在线实时查询数据库的,后来发现这种攻击方式12年就有人提出了,并称之为重放/重置攻击。 0x06后记 刚接触RFID,有描述不准确或错误的地方,请轻拍指正! 0x07卷土再来 基于0x05节的分析和实际验证,通过复制攻击(重放攻击)已经实现0x03.2节示例中卡片的余额修改,但是为了论证0x03.2节试错法的可行性,规划了如下方案: ? 1 2 3 4 439A********040046BA141251100310 第0段 0C0D0C1100004A3D002D000000010047 第1段 370BBCE401C200000EA6027D081D0560 第2段 1101********FF078069FFFFFFFFFFFF 第3段 针对以上信息,对第1、2段内容,逐字节进行试错,确认卡片是否可读验证结果如下: 1、修改第1段第0字节 ? 1 2 0D0D0C1100004A3D002D000000010047 第1段 370BBCE401C200000EA6027D081D0560 第2段 2、修改第1段第1字节 ? 1 2 0C0E0C1100004A3D002D000000010047 第1段 370BBCE401C200000EA6027D081D0560 第2段 3、修改第1段第2字节 ? 1 2 0C0D0D1100004A3D002D000000010047 第1段 370BBCE401C200000EA6027D081D0560 第2段 4、修改第1段第3字节 ? 1 2 0C0D0C1200004A3D002D000000010047 第1段 370BBCE401C200000EA6027D081D0560 第2段 5、修改第1段第4字节 ? 1 2 0C0D0C1101004A3D002D000000010047 第1段 370BBCE401C200000EA6027D081D0560 第2段 6、修改第1段第5字节 ? 1 2 0C0D0C1100014A3D002D000000010047 第1段 370BBCE401C200000EA6027D081D0560 第2段 7、修改第1段第6字节 ? 1 2 0C0D0C1100004B3D002D000000010047 第1段 370BBCE401C200000EA6027D081D0560 第2段 8、修改第1段第7字节 ? 1 2 0C0D0C1100004A3E002D000000010047 第1段 370BBCE401C200000EA6027D081D0560 第2段 9、修改第1段第8字节 ? 1 2 0C0D0C1100004A3D012D000000010047 第1段 370BBCE401C200000EA6027D081D0560 第2段 10、修改第1段第9字节 0C0D0C1100004A3D002E000000010047第1段 370BBCE401C200000EA6027D081D0560第2段 11、修改第1段第10字节 0C0D0C1100004A3D002D010000010047第1段 370BBCE401C200000EA6027D081D0560第2段 12、修改第1段第11字节 ? 1 2 0C0D0C1100004A3D002D000100010047 第1段 370BBCE401C200000EA6027D081D0560 第2段 13、修改第1段第12字节 ? 1 2 0C0D0C1100004A3D002D000001010047 第1段 370BBCE401C200000EA6027D081D0560 第2段 14、修改第1段第13字节 ? 1 2 0C0D0C1100004A3D002D000000020047 第1段 370BBCE401C200000EA6027D081D0560 第2段 15、修改第1段第14字节 ? 1 2 0C0D0C1100004A3D002D000000010147 第1段 370BBCE401C200000EA6027D081D0560 第2段 16、修改第1段第15字节 ? 1 2 0C0D0C1100004A3D002D000000010048 第1段 370BBCE401C200000EA6027D081D0560 第2段 17、修改第2段第0字节 ? 1 2 0C0D0C1100004A3D002D000000010047 第1段 380BBCE401C200000EA6027D081D0560 第2段 18、修改第2段第1字节 ? 1 2 0C0D0C1100004A3D002D000000010047 第1段 370CBCE401C200000EA6027D081D0560 第2段 19、修改第2段第2字节 ? 1 2 0C0D0C1100004A3D002D000000010047 第1段 370BBDE401C200000EA6027D081D0560 第2段 20、修改第2段第3字节 ? 1 2 0C0D0C1100004A3D002D000000010047 第1段 370BBCE501C200000EA6027D081D0560 第2段 21、修改第2段第4字节 ? 1 2 0C0D0C1100004A3D002D000000010047 第1段 370BBCE402C200000EA6027D081D0560 第2段 22、修改第2段第5字节 ? 1 2 0C0D0C1100004A3D002D000000010047 第1段 370BBCE401C300000EA6027D081D0560 第2段 23、修改第2段第6字节 ? 1 2 0C0D0C1100004A3D002D000000010047 第1段 370BBCE401C201000EA6027D081D0560 第2段 24、修改第2段第7字节 ? 1 2 0C0D0C1100004A3D002D000000010047 第1段 370BBCE401C200010EA6027D081D0560 第2段 25、修改第2段第8字节 ? 1 2 0C0D0C1100004A3D002D000000010047 第1段 370BBCE401C200000FA6027D081D0560 第2段 26、修改第2段第9字节 ? 1 2 0C0D0C1100004A3D002D000000010047 第1段 370BBCE401C200000EA7027D081D0560 第2段 27、修改第2段第10字节 ? 1 2 0C0D0C1100004A3D002D000000010047 第1段 370BBCE401C200000EA6037D081D0560 第2段 28、修改第2段第11字节 ? 1 2 0C0D0C1100004A3D002D000000010047 第1段 370BBCE401C200000EA6027E081D0560 第2段 29、修改第2段第12字节 ? 1 2 0C0D0C1100004A3D002D000000010047 第1段 370BBCE401C200000EA6027D091D0560 第2段 30、修改第2段第13字节 ? 1 2 0C0D0C1100004A3D002D000000010047 第1段 370BBCE401C200000EA6027D081E0560 第2段 31、修改第2段第14字节 ? 1 2 0C0D0C1100004A3D002D000000010047 第1段 370BBCE401C200000EA6027D081D0660 第2段 32、修改第2段第15字节 ? 1 2 0C0D0C1100004A3D002D000000010047 第1段 370BBCE401C200000EA6027D081D0561 第2段 本来期望可以得到一个很不错的结果的,甚至连测试结果位置都预留了,天不遂人愿,畏畏缩缩的在一个窗口连刷了32次,每次都是读卡失败,这下郁闷了,本以为破解只能止步于此了。 又拖了一周,感觉自己都没激情了,只是偶尔抽时间看看之前收集的数据,却总结出了下面的结果: ? 1 2 3 4 5 6 7 1305712204E200000154031508190DFC 0E0E 13057122271000002864031608190D37 0404 5904719604E200002382031709010DEC 6767 130586B304E200001EA0031809020D66 E7E7 1305898E019000001D10031909030499 E7E7 1305925C04E20000182E
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- RFID M1 数据 分析 资料