随着社会的发展,现在到处可以见到智能卡的身影,尤其是非接触式卡,广泛的用于公交、管理、门禁等领域。
Mifare是NXP公司生产的一系列遵守ISO14443A标准的射频卡,包括Mifare S50、Mifare S70、Mifare UltraLight、Mifare Pro、Mifare Desfire等产品,Mifare S50的容量为1K字节,常被称为Mifare Standard,又被叫做Mifare 1,是应用很广的一种射频卡。
Mifare1卡共有16个扇区,每个扇区有4块,每块有16字节,结构图如下。

厂商代码块:厂商代码块通常指的是0扇区的块0,通常含有一些制造商的数据比如说卡的UID等等,出于安全考虑和系统需求,此块通常不可写。
数据块:每个扇区通常有三个16字节的块用来存放数据,通常是块0块1块2,数据块通常有两种作用,一种用于一般数据的存储,可对其进行读写操作,比如说门禁卡。另一种用于数据值,比如说电子钱包,可对其进行增值、减值等操作。
尾块:各区均有一个尾块,又称控制块,通常包括密钥A,读写条件,密钥B(可选),如下图。

对指定块内容的读取取决于对应块的密钥和控制块的读写条件。
读写条件:读写条件为4个字节,共32位,每块都有相对应的三个读写控制位。读写控制位管理着使用密钥读写各个块的权限,读写控制位如下图。

控制块的读写条件:对密钥和控制位的读写取决于控制块的访问控制位,分为“禁止”、“KEYA”、“KEYB”和“KEY A|B”,如下图。

1、爆破默认key攻击
很多IC卡默认都没有改密码,这边我们可以用一些默认密码来撞,只要撞出扇区的key,再利用nested authentication攻击方式即可分析出其他key,常见的一些默认key
Key: 00007fffffff
Key: ffffffffffff
Key: a0a1a2a3a4a5
Key: d3f7d3f7d3f7
Key: 000000000000
Key: b0b1b2b3b4b5
Key: 4d3a99c351dd
Key: 1a982c7e459a
Key: aabbccddeeff
Key: 714c5c886e97
Key: 587ee5f9350f
Key: a0478cc39091
Key: 533cb6c723f6
Key: 8fd0a4f256e9
2、 nested authentication 攻击
卡发送一个随机明文给读卡器,读卡器用错误的密码加密之后返回给卡,卡解密错误,但是我们知道其他扇区的密码,验证成功后,后面所有的数据交互都是密文,当读其他扇区数据的时候,卡先发送一个随机的密文,因为用了密钥相关的算法加密了,而且每个扇区的密钥是独立的,所以这个加密密文自然包括了密钥信息,通过后期的算法漏洞分析,分析出扇区密钥是什么。
既然知道了密钥,那就可以读和改相关扇区的数据块了,这边我们如何定位一些电子钱包的具体数据块了?我们可以通过工具dump 出卡里面的数据,然后通过消费对比出前后数据发生变化的数据块,最后定位出和金额相关的数据块,对比如下图。
对比法可能需要多次数据具体分析,个人感觉比较麻烦,这里我们可以选择另一种利用方法——重放攻击,比如当饭卡有500元金额的时候,我们把其整个数据dump出来,用完再整个写入进去就可以了。
关于M1卡的测试工具还是很多的,这里我们使用mfoc 这个开源工具,来实现攻击。
(1)成功读取卡的信息。

(2)成功破解出key

(3)利用key成功读取各个块数据。

如果你也关心企业网络安全,请在微信对话框中回复“安全”或点击屏幕左下角蓝字“阅读原文”参加点融黑帮安全沙龙,与诸位互联网安全领域大神共商要事。

本文作者:Audit0r,信息安全爱好者、网络安全工程师,现任职于点融网技术部安全团队。
随着点融网新一轮融资,点融网即将开始大规模的扩张,需要各种优秀人才的加入,如果你觉得自己够优秀,欢迎加入我们!获取更多职位信息,请关注点融黑帮。


