首页 > 代码库 > 某公司员工卡金额校验算法破解

某公司员工卡金额校验算法破解

漏洞概要关注数(35关注此漏洞

缺陷编号: WooYun-2011-03701

漏洞标题: 某公司员工卡金额校验算法破解

相关厂商: 某奇怪公司

漏洞作者: insight-labs

提交时间: 2011-12-21 21:55

公开时间: 2012-02-04 21:55

漏洞类型: 成功的入侵事件

危害等级: 高

自评Rank: 20

漏洞状态: 厂商已经确认

漏洞来源: http://www.wooyun.org

Tags标签: 盲目信任用户数据 加密算法设计错误 RFID安全 硬件安全

0人收藏 收藏
分享漏洞:
2

漏洞详情

披露状态:

 

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

厂商回复:

多谢!猜测这个会一样影响到很多其他的公司

最新状态:

暂无