首页 > 代码库 > 从乌云的错误漏洞分析看Mifare Classic安全

从乌云的错误漏洞分析看Mifare Classic安全

前言

12年2月初国内著名安全问题反馈平台-乌云发布了有关某公司员工卡的金额效验算法破解的安全问题。从整个漏洞分析来看,漏洞的提交者把员工卡的数据分析得非常仔细,以至很多刚刚接触或者未曾接触的都纷纷赞叹。但从真实的技术角度出发来进行分析的话,从漏洞的标题以及其内部的分析和解决方案都可以看得出,乌云以及漏洞发布者完全不明白究竟哪里才是漏洞!从08年至今时隔四年,国内对于MIFARE Classic安全漏洞在著名的安全问题反馈平台却反映出了国内安全研究者的一种无知。

 

MIFARE安全问题的由来

2008年2月,荷兰政府发布了一项警告,指出当时广泛应用的恩智浦(NXP)公司的Mifare RFID产品所赖以保证安全的密钥存在很高的风险,警告是在两位专家宣称破解了Mifare Classic的加密算法之后立即发布的。随后不久,伦敦公交使用的Mifare被成功克隆。某研究小组甚至使用克隆的预付费公交卡免费乘坐了伦敦地铁。虽然这一行动纯属学术性行为,但其所可能引发的连锁反应已使Mifare芯片技术的所有者荷兰恩智浦半导体感到了问题的严重性。不出NXP所料,荷兰政府很快便宣布推迟了基于同样技术的预付费智能交通卡的实施,并且更换了用于政府大楼门禁系统的Mifare卡。

恩智浦公司有不同级别的芯片,而那次被破译的是在全球广泛使用占据80%份额的非接触智能卡Mifare Classic芯片,其主要用于RFID的门禁控制、校园一卡通、城市公交、地铁等支付领域。自1994年Mifare卡问世以来,全球共有50个国家,650个城市在使用Mifare卡,目前市场已销售十亿张卡,八亿多张标签,全球注册登记的共有7800家卡片及读写器生产商,在四十多种应用跨行业使用,其中中国也有140多个城市在使用。因此这项“成果”引起了不小的恐慌,人们担心:一个掌握该破解技术的小偷可以自由进出政府大楼或公司办公室。
对于Mifare Classic芯片加密算法被破解一事,NXP已经在其公司网站向业界发表声明。声明表示非常遗憾相关研究人员公布Mifare Classic的协议以及算法细节和实际破解方法,但NXP已经就此事与研究人员展开对话进行和解,并就破解及应对措施对行业合作伙伴采取了一系列沟通措施。

 

从分析到认识MIFARE Classic安全问题

乌云安全问题反馈平台缺陷编号: WooYun-2011-03701,这可能是乌云乃至国内首个基于RFID卡类的安全漏洞通告,安全问题的内容经过修改之后把“百度”二字改为了某公司。我们首先从几个部分开始分析这一篇公告,从而去认识Mifare Classic的安全问题。

从简要描述当中我们可以看到,漏洞提交者介绍某公司的员工卡使用了RFID技术,而卡的类型为Mifare Classic 1K卡,我们可以从其下图当中可以看到图片第一栏信息00000000h:** ** ** ** B1 88 04 00,而我们从04 00就可以得知卡的种类是有可能为Mifare Classic 1K,为什么说是有可能?因为从NXP官方的种类分析文档我们可以知道:MIFARE Mini、MIFARE Classic 1K、MIFARE Plus、SmartMX with MIFARE1K emulation(兼容模式)都会在ATQA显示为 04 00的,所以从公告来说对于卡类的判断有所欠缺,因为不同的卡类所出现的问题不一,并且也不一定存在MIFARE Classic的漏洞。或者有些人会问,不管是不是你所说的哪几种卡类,按照漏洞公告的信息来看,只要卡类为MIFARE Classic 1K的卡就会存在问题就是了!这个说法我反对,因为从08年至今4年的时间,NXP不但修复了1K卡的安全问题并且也加强了安全的意识,新的1K不一定存在相关的安全漏洞,并且还是类似上面的话,我们必须要懂得分析什么是MIFARE Classic 1K。那究竟MIFARE Classic的安全漏洞究竟是什么?

首先(PRNG安全缺陷),国外的安全研究人员发现,MIFARE Classic采用的是Crypto-1私有加密算法,其算法的特点就是对称式的密码算法或者说是私钥密码系统。其主要组成部分是伪随机数发生器(PRNG)、48位的线性反馈移位寄存器(LFSR)以及非线性函数。由于算法当中的Filter Function的设计出现缺陷,导致改变线性反馈移位寄存器的后8位数值就有可能得到所对应的Keystream。这个缺陷类似于802.11b WEP算法,不同的明文有极高的可能性被相同的Keystream,使得整个加密算法出现了漏洞。

第二(已知密钥穷举),从多次针对算法的破解得出的Key列表中发现,很多使用MIFARE Classic的用户都会将其默认的密钥延续使用,意思就是很多人宁可贪图一时方便继续使用出厂时的密钥,也不会根据自身的安全需求而进行改变,以至我们可以不需要花费太多的时间就可以进行破解从而得到卡类的信息。综合上述,我们知道如果要处理任何MIFARE Classic卡的数据都需要利用密钥进行识别,从而读取对应的数据。不破解就不可能读取其内容。

第三(暴力破解,缺乏防碰撞机制),从WEP到WPA/WPA2的密钥破解我们可以知道,暴力破解已经从浪费时间、成功率低到现在GPU暴力破解时间短、成功率高转变,MIFARE Classic也是如此,我们可以利用GPU等高速暴力破解手段进行破解,从而得到我们所需要的密钥

那现在我们继续回头看看乌云的漏洞报告,详细说明并没有写出任何关于MIFARE Classic的安全问题,最起码提交者根本就不了解其如何拿到卡内的数据的原理是什么!我们从截图进行推断,提交者使用的是ACR122U或者Proxmark3之类的设备进行卡类的破解。通常如果我们使用ACR122U这类的RFID读写器进行破解操作的时候,我们都是采用offline模式,因为我们都脱离了真实环境下的读取方式,利用暴力、已知密钥穷举等方式去进行破解操作。例如大家常用的mfocGUI就是已知密钥穷举的典型软件。如果在破解的过程中,无法进行穷举以及暴力破解操作时,很大可能是因为卡类已经增加了防碰撞机制,导致无法完成穷举和暴力破解。而Proxmark3采用的破解形式却与ACR122U恰恰相反,Proxmark3是基于PRNG的安全缺陷进行的随机数碰撞,利用PRNG的安全缺陷我们可以很快速地得到对应的密钥,从而进行进一步的破解操作。和ACR122U的手法一样,当我们无法进行基于PRNG的安全缺陷破解的时候,也是因为卡类增加了对应的机制以及修复了漏洞。

从报告当中我们看不到真正漏洞是什么,也看不到有什么漏洞的出现,为什么这么说?漏洞提交者从卡的信息得出了电子钱包的位置,并且从中完成了修改电子钱包数值的操作,把该电子钱包的所谓算法,因其脆弱性被列为了安全缺陷。但实际上都是错的,因为我们可以从国家的pboc1.0应用规范看到,电子钱包一直以来都是受到应用规范的规定,这是中国金融行业电子钱包的一个规范,并不是安全缺陷或者安全漏洞。

而真正的安全问题是基于卡类密钥以及其卡使用的整体机制,如果某公司在员工卡的使用自定义的密钥,或许针对mfoc这样的低门槛破解软件就有一定的阻碍作用。并且其消费系统不采用联网等一系列行之有效的方法去进行运作,以至攻击者可以破解卡的密钥从而进行金额的修改以及重放攻击。

从漏洞报告当中的修复方案来看,“修改为复杂算法,或一次一密,即每次刷卡Key的值都在变化。”再次证明了,漏洞提交者不懂得MIFARE Classic的原理更加不明白应该如何修复问题。从MIFARE Classic的安全问题来看,我们应该选择使用MIFARE Classic以上的高端卡类,例如:CPU卡等等的卡类,并且要设计好其相关的消费、门禁等等的系统,不仅仅要识别UID、还要在数据内进行对比和数据联网。

总的来说,乌云的漏洞报告从卡的数据内容来看是完全没有任何安全缺陷以及安全漏洞的,其报告的分析流程以及内容都是正确无误的,这是一篇某公司员工卡数据分析文章并不是某公司员工卡金额效验算法破解的文章。作为一个国内著名的安全问题反馈平台,是不是需要检讨或者改善相关方面的审核以及自身的技术呢?记住这不是你所谓的ID问题!!!