首页 > 代码库 > 某公司员工卡金额校验算法破解
某公司员工卡金额校验算法破解
漏洞概要关注数(35) 关注此漏洞
缺陷编号: WooYun-2011-03701
漏洞标题: 某公司员工卡金额校验算法破解
相关厂商: 某奇怪公司
漏洞作者: insight-labs
提交时间: 2011-12-21 21:55
公开时间: 2012-02-04 21:55
漏洞类型: 成功的入侵事件
危害等级: 高
自评Rank: 20
漏洞状态: 厂商已经确认
漏洞来源: http://www.wooyun.org
Tags标签: 盲目信任用户数据 加密算法设计错误 RFID安全 硬件安全
漏洞详情
披露状态:
2011-12-21: 细节已通知厂商并且等待厂商处理中
2011-12-21: 厂商已经确认,细节仅向厂商公开
2011-12-31: 细节向核心白帽子及相关领域专家公开
2012-01-10: 细节向普通白帽子公开
2012-01-20: 细节向实习白帽子公开
2012-02-04: 细节向公众公开
简要描述:
某公司的员工卡使用了RFID技术,其为Mifare Classic 1k卡,有2种功能:1是门禁系统,2是消费系统,可谓一卡走遍某公司大厦。
但其消费系统的实现存在缺陷,导致可以任意构造消费数据进行非法消费。
详细说明:
首先来看一个某公司员工卡的数据,如下图:
观察发现只有第五扇区有数据,其他扇区均为空,那么我们只分析此扇区的4个block的数据结构就可以了。
首先我借来同事的员工卡,分别进行对比分析,想先确定出来哪些部分是常量,哪些部分是变量。
上图为A,B,C,D,E 五个员工卡的第五扇区数据,
首先,蓝色矩阵框所在的block是Access Control Block,而蓝色矩阵框就是Key A,后面的FF 07 80 69是访问控制位,Key B为默认的全FF。注意这里所有的卡的Key都是相同且永远不变的。
然后看红色矩阵框,这里也是每个员工卡都相同的值,且永远不变。再看绿色矩阵框,
这里按入职的顺序排列,可以认为是发卡顺序,每个员工卡都是唯一的值,且永远不变。
这样block 16(图中00000100h)和block 19(图中00000130h)就分析完了,都是常量,
剩余的block 17和block 18都是变量,每次刷卡其中的值都是不断变化的,请看下图:
经过观察分析发现,block 17和block 18每次刷卡后数据都会对调。红色矩阵框是余额,比如第一次刷卡前余额为5.60元,对应60 05 00刷卡后为4.50元对应50 40 00,第二次刷卡前余额为4.50元,对应50 04 00,刷卡后为3.50元,对应50 03 00,之后两个block数据对调。这里的50代表五角零分,03代表零十三元,00代表零千零百元。
绿色矩阵框是消费日期,这里第一次数据中block 17里是11月07日,是上次消费的日期,本次是11月10日。
蓝色矩阵框是当日消费总额,每天清空一次。比如第一次的数据block 17是09 00,说明在11月7日此卡总共消费了9元,然后11月10日这天,第一次消费了1.10元,第二次消费了1.00元,所以1.10 + 1.00 = 2.10,依次类推。
粉色矩阵框是消费的时间,14 09即是下午14点09分。
最后是黄色矩阵框,这里是校验位,分析发现其算法很简单,是当前余额的数字之和与FF异或的结果,比如第一次刷卡的数据中block 18是ab,余额是50 04 00,这里
50+04+00=54,然后54 xor FF = ab
至此某公司员工通消费系统算法完全被攻破。
漏洞证明:
我们可以由算法推算一下数据,假如今天11月11日 ,15:00分充值50元 数据将为
block 18: ff 00 00 00 11 10 00 05 60 00 14 27 00 00 00 00
block 17: fa 00 50 00 11 11 00 00 00 00 15 00 00 00 00 00
修复方案:
修改为复杂算法,或一次一密,即每次刷卡Key的值都在变化。
版权声明:转载请注明来源 insight-labs@乌云
漏洞回应
厂商回应:
危害等级:高
漏洞Rank:20
确认时间:2011-12-21 21:59
厂商回复:
多谢!猜测这个会一样影响到很多其他的公司
最新状态:
暂无