从乌云的错误漏洞分析看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问题!!!
原文: http://www.4byte.cn/learning/52814.html
从乌云的错误漏洞分析看Mifare Classic安全的更多相关文章
- 使用Proxmark3进行MIFARE Classic卡的安全测试
使用Proxmark3进行MIFARE Classic卡的安全测试 Proxmark3的MIFARE安全测试是很多朋友都非常重视的一部分,所以我们特地以这个部分进行介绍,告诉大家如何当你完成前期操 ...
- Zabbix 漏洞分析
之前看到Zabbix 出现SQL注入漏洞,自己来尝试分析. PS:我没找到3.0.3版本的 Zabbix ,暂用的是zabbix 2.2.0版本,如果有问题,请大牛指点. 0x00 Zabbix简介 ...
- 以太网驱动的流程浅析(三)-ifconfig的-19错误最底层分析【原创】
以太网驱动流程浅析(三)-ifconfig的-19错误最底层分析 Author:张昺华 Email:920052390@qq.com Time:2019年3月23日星期六 此文也在我的个人公众号以及& ...
- 看个AV也中招之cve-2010-2553漏洞分析
试想:某一天,你的基友给你了一个视频文件,号称是陈老师拍的苍老师的老师题材的最新电影.avi,你满心欢喜,在确定文件格式确实为avi格式后,愉快的脱下裤子准备欣赏,打开后却发现什么也没有,而随后你的基 ...
- 从CVE-2018-1273看漏洞分析
漏洞分析的边界 漏洞分析最应该关注的是漏洞相关的代码,至于其余的代码可以通过关键位置下断点,来理解大概功能. 其中最关键的就是了解数据流,找到离漏洞位置最近的 原始数据 经过的位置,然后开始往下分析, ...
- FFmpeg任意文件读取漏洞分析
这次的漏洞实际上与之前曝出的一个 CVE 非常之类似,可以说是旧瓶装新酒,老树开新花. 之前漏洞的一篇分析文章: SSRF 和本地文件泄露(CVE-2016-1897/8)http://static. ...
- SpringBoot SpEL表达式注入漏洞-分析与复现
目录 0x00前言 0x01触发原因 0x02调试分析 0x03补丁分析 0x04参考文章 影响版本: 1.1.0-1.1.12 1.2.0-1.2.7 1.3.0 修复方案:升至1.3.1或以上版本 ...
- Apache Shiro Java反序列化漏洞分析
1. 前言 最近工作上刚好碰到了这个漏洞,当时的漏洞环境是: shiro-core 1.2.4 commons-beanutils 1.9.1 最终利用ysoserial的CommonsBeanuti ...
- YxCMS 1.4.7 最新版漏洞分析
i春秋作家:F0rmat 原文来自:YxCMS 1.4.7 最新版漏洞分析 0x01前言 很感谢关注我专辑的表哥,我会坚持写下去的,最近会慢一点,一月四篇是正常的. 在先知看到的,大部分都是后台漏洞, ...
随机推荐
- QT在windows下的安装与配置
先了解Qt: Qt一直以来,分为商业.开源两个版本,商业版本为用户提供了二级制的动态库,直接安装既可以使用,但是需要花钱购买license,而开源版本则遵守GPL协议,提供了源码,用户需要自行编译,才 ...
- Install Python+Django+Nginx+UWSGI
一.软件环境: CentOS6.6_64bit 需要用到的软件: [root@django tools]# ll 总用量 33336 -rw-r--r-- 1 root root 7497785 3月 ...
- with(nolock)解释
摘自: http://blog.sina.com.cn/s/blog_5fafba5e010113kr.html with(nolock)解释 所有Select加 With (NoLock)解决阻 ...
- 【Linux】shell中svn报错:svn: Can't convert string from 'UTF-8' to native encoding:xxx
解决办法: shell中svn命令之前添加: #!/bin/bash export LC_ALL=en_US.UTF- export LANG=en_US.UTF- export LANGUAGE=e ...
- 解决Windows server 2012 R2 系统使用IIS8浏览Asp程序出现"An error occurred on the server when processing the URL"错误
进入IIS并将ASP里的“Send Error To Browser”设置为True后点击Appley保存即可 原因是IIS里的Asp设置禁用上当错误信息发送给浏览器,只要启用即可 如果没有Asp选项 ...
- Project Euler 001-006 解法总结
Problem 1. Find the sum of all the multiples of 3 or 5 below 1000. 题目要求找出所有1000以下的3或者5的倍数之和. 最简便 ...
- android KK版本号收到短信后,点亮屏的操作
alps/packages/apps/mms/src/comandroid\mms\transation\MessagingNotification.java private static void ...
- Android Studio之多个Activity的滑动切换(二)
1.因为Android界面上的全部控件一般都位于Layout控件(比方RelativeLayout)之上,而布局控件能够设置响应touch事件,所以能够通过布局控件的setOnTouchListen来 ...
- Nginx 配置 SSL 证书 + 搭建 HTTPS 网站教程
一.HTTPS 是什么? 根据维基百科的解释: 超文本传输安全协议(缩写:HTTPS,英语:Hypertext Transfer Protocol Secure)是超文本传输协议和SSL/TLS的组合 ...
- Linux中more和less命令用法(转)
一.more命令 more功能类似 cat ,cat命令是整个文件的内容从上到下显示在屏幕上. more会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 ...