RFID之M1卡数据分析资料.docx

上传人:b****6 文档编号:5989140 上传时间:2023-01-02 格式:DOCX 页数:15 大小:882.68KB
下载 相关 举报
RFID之M1卡数据分析资料.docx_第1页
第1页 / 共15页
RFID之M1卡数据分析资料.docx_第2页
第2页 / 共15页
RFID之M1卡数据分析资料.docx_第3页
第3页 / 共15页
RFID之M1卡数据分析资料.docx_第4页
第4页 / 共15页
RFID之M1卡数据分析资料.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

RFID之M1卡数据分析资料.docx

《RFID之M1卡数据分析资料.docx》由会员分享,可在线阅读,更多相关《RFID之M1卡数据分析资料.docx(15页珍藏版)》请在冰豆网上搜索。

RFID之M1卡数据分析资料.docx

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 政史地

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1