敬告:破解破的欢,牢底要坐穿


注:以下内容仅建立在常见使用场景下,电梯卡等滚动卡不在讨论范围之内。


Mifare_classic_1K, 简称M1卡,由恩智浦半导体公司(NXP)研发,卡可用数据容量1K byte,分为16个扇区,每个扇区4块,每块16byte,每个扇区独立的密码,每张卡有唯一序列号(32位)

0扇0块固化,不可修改,为厂商数据,余下每个扇区的012三块都是数据块,3块为控制块,包含密码A/B, 存取控制。

存取控制会对A/B Key进行定义,比如验证A正确可读,验证B正确后可写,也就意味着如果你有了M1卡的AB密钥,那么你拥有对这个卡的完全掌控权。

读卡器一般会分两种,有的门禁只会读取UID(0/0)有的也会读取其他扇区中的数据,所以复制的时候一般会全部复制,使用UID/CUID卡。

由于M1设计的时候,UID就是公开的,所以不安全,如果确认门禁只读取UID(0/0)那么仅复制0扇区就可以了。如果是需要数据就需要拿到A/B key, 拿到Key的方法,根据卡的加密程度区别攻击方式有Nested authtication攻击,Darkside攻击,嗅探,Nested Authtication用于攻击半加密卡,Darkside用于攻击全加密卡。

半加密卡的定义是:仅有一部分扇区加密的卡,叫做半加密卡。
全加密卡的定义是:所有扇区都加密的卡,叫全加密卡。

Nested Authtication攻击的原理是使用默认密码进行碰撞,因为片上的加密方式采用的算法可以预测,通过控制其参数(读卡器启动时间与随机数请求时间)可以对密码进行猜测。

对于Nested攻击可以简要描述为:卡向读卡器发送一个随机数A->读卡器加密该数字并返回一个随机数B->卡解密eA比对A,如果完全正确就会将B加密发往读卡器->读卡器解密eB对比B,如果正确,则为验证通过,以后的所有通讯都是加密的。

开始加密通讯后,访问其他扇区仍然通过上述方式验证,只不过是通过加密通讯拿到的是带具有该扇区密码特征的密文,由于该通讯已经是通过加密的,此时就可以进行计算从而对比到合适的密钥。

DarkSide攻击本质上就是暴力破解攻击,不过并不是单纯的暴力破解,根据Nested攻击的原理我们可以知道破解是需要一段加密过的数据才能进行,但是如果第一次验证不通过,两端之间的交流就会停止,看起来全加密的卡似乎牢不可破,但是经过研究人员的测试后,发现了其中一个漏洞,即当读卡器发送的密文中若有8bit全部正确,卡会返回一个加密的NACK的4bit数据,这样就将key带出来了,然后结合算法漏洞破解一个扇区的key出来,然后再进行Nested攻击,整张卡即可dump出来了。

嗅探的硬件要求比较高,需要使用 chameleon 进行嗅探,以获取其中的数据,暂且不表。上述两种攻击均可通过 ProxMark3(PM3)/PN532/ACR122u 实现。

在通过Mfoc(Nested)攻击或者Mfcuk(Darkside)攻击后,即可得到一个dump的文件,这就相当于对原卡的所有数据进行了一个备份,此时只要将其写入一个UID卡或者CUID卡中即可得到一个clone卡。

UID卡:全称 Mifare UID Chinese magic card ,为Mifare S50(1K)的特制版,可以通过指令进入工厂模式,修改0扇区的厂家数据,由于工厂模式的权限很高,所以就算写错也可以修复,但是现在部分读卡器会利用进入工厂模式的指令进行试探,避免克隆卡的使用。

CUID卡:即对UID卡的优化升级版,对于0扇区的修改方法从工厂模式变成了常规密码验证,其余都一样,虽然优化版降低了被检测出来的可能性但是还是可能被检测,而且如果UID的校验位导致无法读卡,无法修复只能报废。

写入UID卡的方式有很多种,Windows下有许多上位机都可以写UID,但是因为检测不到UID的特征无法写入CUID,只能使用手机上的Mifare Classic Tool(MCT)进行写卡操作。至此,一张完整的clone卡就完成了。