RFID之M1卡数据资料文档格式.docx
- 文档编号:21396297
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:15
- 大小:882.67KB
RFID之M1卡数据资料文档格式.docx
《RFID之M1卡数据资料文档格式.docx》由会员分享,可在线阅读,更多相关《RFID之M1卡数据资料文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
看完这个教程,并实践结束后,我停下来思考这样一个问题:
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<
m),此时将数据信息D1重新拷贝回卡内,卡片信息重新回到T1时间的状态,等价于T1-T2时间段内没做任何消费!
这种情况即使是使用UID作校验也无法防护了,除非刷卡机是在线实时查询数据库的,后来发现这种攻击方式12年就有人提出了,并称之为重放/重置攻击。
0x06后记
刚接触RFID,有描述不准确或错误的地方,请轻拍指正!
0x07卷土再来
基于0x05节的分析和实际验证,通过复制攻击(重放攻击)已经实现0x03.2节示例中卡片的余额修改,但是为了论证0x03.2节试错法的可行性,规划了如下方案:
针对以上信息,对第1、2段内容,逐字节进行试错,确认卡片是否可读验证结果如下:
1、修改第1段第0字节
0D0D0C1100004A3D002D000000010047
2、修改第1段第1字节
0C0E0C1100004A3D002D000000010047
3、修改第1段第2字节
0C0D0D1100004A3D002D000000010047
4、修改第1段第3字节
0C0D0C1200004A3D002D000000010047
5、修改第1段第4字节
0C0D0C1101004A3D002D000000010047
6、修改第1段第5字节
0C0D0C1100014A3D002D000000010047
7、修改第1段第6字节
0C0D0C1100004B3D002D000000010047
8、修改第1段第7字节
0C0D0C1100004A3E002D000000010047
9、修改第1段第8字节
0C0D0C1100004A3D012D000000010047
10、修改第1段第9字节
0C0D0C1100004A3D002E000000010047第1段
370BBCE401C200000EA6027D081D0560第2段
11、修改第1段第10字节
0C0D0C1100004A3D002D010000010047第1段
12、修改第1段第11字节
0C0D0C1100004A3D002D000100010047
13、修改第1段第12字节
0C0D0C1100004A3D002D000001010047
14、修改第1段第13字节
0C0D0C1100004A3D002D000000020047
15、修改第1段第14字节
0C0D0C1100004A3D002D000000010147
16、修改第1段第15字节
0C0D0C1100004A3D002D000000010048
17、修改第2段第0字节
380BBCE401C200000EA6027D081D0560
18、修改第2段第1字节
370CBCE401C200000EA6027D081D0560
19、修改第2段第2字节
370BBDE401C200000EA6027D081D0560
20、修改第2段第3字节
370BBCE501C200000EA6027D081D0560
21、修改第2段第4字节
370BBCE402C200000EA6027D081D0560
22、修改第2段第5字节
370BBCE401C300000EA6027D081D0560
23、修改第2段第6字节
370BBCE401C201000EA6027D081D0560
24、修改第2段第7字节
370BBCE401C200010EA6027D081D0560
25、修改第2段第8字节
370BBCE401C200000FA6027D081D0560
26、修改第2段第9字节
370BBCE401C200000EA7027D081D0560
27、修改第2段第10字节
370BBCE401C200000EA6037D081D0560
28、修改第2段第11字节
370BBCE401C200000EA6027E081D0560
29、修改第2段第12字节
370BBCE401C200000EA6027D091D0560
30、修改第2段第13字节
370BBCE401C200000EA6027D081E0560
31、修改第2段第14字节
370BBCE401C200000EA6027D081D0660
32、修改第2段第15字节
370BBCE401C200000EA6027D081D0561
本来期望可以得到一个很不错的结果的,甚至连测试结果位置都预留了,天不遂人愿,畏畏缩缩的在一个窗口连刷了32次,每次都是读卡失败,这下郁闷了,本以为破解只能止步于此了。
又拖了一周,感觉自己都没激情了,只是偶尔抽时间看看之前收集的数据,却总结出了下面的结果:
5
6
7
1305712204E200000154031508190DFC
0E0E
13057122271000002864031608190D37
0404
5904719604E200002382031709010DEC
6767
130586B304E200001EA0031809020D66
E7E7
1305898E019000001D10031909030499
1305925C04E20000182E0
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- RFID M1 数据资料