IC卡介绍
上篇文章我们已经介绍了ID卡的工作原理与破解方法。这篇文章在此介绍IC卡的原理及破解方法。 IC不同于ID卡的是其卡内数据不仅仅是一串写死的ID序列号,其内部有扇区以储存IC卡内包含的大量数据,且可经过反复擦写。即IC卡可支持读取与写入。IC卡可以分为:接触式IC卡、非接触式IC卡和双界面IC卡。
M1卡介绍
这次我们主要介绍的是非接触式IC卡。M1卡就是非接触式IC卡中应用最广泛的卡。M1卡就是Mifare非接触式感应卡,M1卡数据保存期为10年,可改写10万次,读无限次。无电源,自带天线,工作频率为13.56MHZ.M1卡内含加密控制逻辑和通讯逻辑电路。M1卡主要有两种,一种是S50和一种是S70。主要应用:门禁、考勤、会议签到、身份识别、物流、工业自动化、各种会员卡、如售饭、地铁、公交代币卡、俱乐部等电子消费、电子门票、动物识别、目标跟踪、洗衣管理、各种一卡通等等。
M1卡存储空间
M1卡分为16个扇区,每个扇区为4块,每块16个字节,以块为存取单位。每个扇区的块0、块1、块2为数据块,可用于存储数据。而每个扇区的块3为控制块,包括密码keyA,存取控制,密码keyB。存取控制的作用是控制对应扇区记录的读写权限与keyA和keyB的关系。由于每个扇区都有独立的key和存取控制,因此M1卡可以做到一卡多用互不干扰。
每一张M1卡的0扇区0块都称作绝对地址块,这一串是在卡片出厂时厂商赋予的,代表着这张卡独立的身份识别信息。绝对地址块的内容已被固化,无法更改。
M1卡控制位计算
以下为控制位的结构,前6位为密钥A,中间4位存取控制,后6位密钥B。4位控制位中前3位是真实的控制位,第4位是备用控制位,一般用不上,因此我们可以只分析前3位。
三个控制位以正和反两种形式存在于存取控制字节中,决定了该块的访问权限。1个字节等于8个比特,而一个扇区有4个块,每个块有3个控制位,以下是控制位以比特形式的结构图,_b表示取反存储,这边用红色字体已标出。
以FF078069默认控制位为例,我们将FF078069的16进制转化为2进制如下:
FF=11 1 1 1 1 1 1;07= 0 0 0 0 0 1 1 1;80=1 0 0 0 0 0 0 0 ;69=忽略
将以上的2进制数填入表格:
将取反的数再次取反以获得原来的控制位:
存取控制中每个块都的三个控制位定义如下,同时填入上表数据:
块0,块1,块2控制位均是000,存取控制权限可对应以下表:
块3控制位001,存取控制对应如下表:
可见块0,块1,块2通过密钥A或者密钥B认证后可读,可写,可进行加值和减值操作。块3密钥A不可读,但可通过认证密钥A或B修改。验证密钥A或者密钥B后,可读可改写存取控制。验证密钥A或者密钥B后,可读可改写B密码。
综上,存取控制FF078069极不安全,我们可以自定义存取控制进行修改,只要利用上述步骤将想要的控制位列出逆向推回去即可。
M1卡认证原理
这里介绍M1卡的认证原理即三轮认证。三轮认证是保障M1卡安全的重要手段,整个过程采用Crypto-1算法加密。以下是三轮认证的过程。
1. 读写器指定要访问的区,向卡发送身份验证请求,并选择密钥A或B。
2. 卡从位块读取密钥和存取控制条件。然后,卡向读写器发送明文4字节随机数Nt。(第一轮)
3. 读写器利用密钥和随机数Nt计算生成一个新随机数Nr,并将两个随机数一起加密为8个字节的数据发送给卡片。(第二轮)。
4. 卡解密得到Nt与Nr,验证Nt,若通过再一次加密Nr并发送给读卡器(第三轮)。
5. 读写器解密得到Nr,验证通过。
三轮认证在其原理上是可靠的,但是外国研究人员发现了该算法伪随机数生成的漏洞,使得加解密所用到的伪随机数可被正确预测,从而逆向计算出了三轮认证中的扇区密钥。该漏洞的利用在后面会讲到。
M1卡破解
对M1卡进行复制,修改的前提是破解出扇区读写对应的key,这边介绍几种key破解方式。
暴力破解法
暴力破解法原理简单,在此不再赘述,在pm3终端输入hf mf rdbl 00 A FFFFFFFFFFFF或hf mf rdsc 00 A FFFFFFFFFFFF命令,意思是使用keyA密码FFFFFFFFFFFF读取00块/00扇区数据。
默认密码破解法
使用hf mf chk *4 ? t命令,pm3会采用全球通用的12个默认密码进行扫描,原理也较为简单,在此不再赘述。
嵌套认证攻击
上部分我们讲到,三次认证过程本身合理安全,但除了其伪随机数可被预测外,还包含了一个重要漏洞。卡片在通过第一次三轮认证后就会将其他扇区的数据加密后发送给读卡器,每个扇区中块3用来存放密钥,获取了加密后的扇区数据就等于获取了加密后的密钥信息。此时,我们可以使用获得的加密信息辅助暴力破解,大大降低了对48位密钥的搜索空间,缩短了获取密钥的时间成本。这个漏洞利用的前提是必须获得一个扇区的keyA或keyB,也就是我们常讲的“知一密求全密”。
命令:hf mf nested1 0 A FFFFFFFFFFFF,已知0扇区密钥A为FFFFFFFFFFFF,进行嵌套认证攻击。
Prng攻击
M1卡传输数据时会分为若干个1bit的块加密传输给读卡器。而当读卡器发送的加密数据中的某8bit部分全部正确而其他内容错误时,M1卡会给读卡器发送一个加密的4bit的否定响应,而这4bit的响应有助于我们不断枚举卡内数据,结合算法的漏洞可以破解出某个扇区的密钥,之后再进行知一密求全密等。终端输入hf mf darkside命令进行,但是该漏洞仅针对部分全加密卡,我这边的卡漏洞都已修复。
嗅探密钥
上图讲到没有Prng漏洞,建议我们进行嗅探攻击。嗅探攻击原理是使用硬件对卡片和读卡器见进行中间人攻击,目的在于获取卡片与读卡器三次认证中出传输的数据和UID号,再对Crypto-1算法进行逆向破解出真正的密钥。将全加密卡降为半加密卡,再进行嵌套认证攻击。
终端输入hf 14a snoop开始嗅探,将 PM3 高频天线放置读卡机之上,让读卡机正常读卡。如果 Reader 正常工作,Proxmark3 就能监听到正常通信数据,此时绿色灯亮。保持嗅探状态多读取几次,板子上红色灯与绿色灯会交替变亮,等到绿、黄灯都是亮的状态时可以停止嗅探。嗅探完成后,连接PM3,按下button等待指示灯都暗掉,输入命令hf list 14a即可列出数据。
PM3的文档告诉我们,60表示keyA进行身份验证,61表示用keyB进行身份验证。因此我们在获得大量数据的第一步是寻找60或61开头的数据。
以下为搜索到的keyA数据,我们可以分析卡片与读卡器之间的对话。
04 00:卡片表明了自己的类型。
93 20:读卡器请求卡片发送自己的UID号。
7e b4 60 d2 78:卡片发送自己的卡号。
60 03 6e 49:验证03块的keyA密钥,6e49为该命令CRC校验位(忽略)。
88 fd b7 42:随机数Nt
3c df c7 d1 8c 6de4 65:加密后的Nt和Nr。
88d2 60 5a:解密后的随机数Nr。
将以上信息输入Crypto-1算法的逆向软件中,得出该块最终的key。之后可利用嵌套认证攻击,得出全部密钥。
M1卡复制
前文说到,每一张M1卡的0扇区0块都是出厂时厂商赋予的绝对地址块,我们无法在M1卡内直接修改它。假设有一家公司的一卡通是通过绝对地址块进行索引,将其他数据存储在后台数据库的话,我们有办法进行攻击吗?说到这不得不提一下M1卡的复制子卡——UID卡,FUID卡,CUID卡。
UID卡
UID卡是一种IC卡,卡片的绝对地址块可以任意修改,重复修改,此卡可以修改任意扇区,作为M1复制的子卡,主要应用在IC卡复制上,但一些刷卡设备会检测卡片的00块是否可重写,以此判断是否为复制卡而屏蔽,这时就需要用 FUID或CUID代替。
FUID卡
FUID是最早出来避免检测的特殊芯片,但FUID卡一旦写入,备份的dump文件便固化了,成为一张普通的M1卡,丧失了UID卡的特点,专门对升级的防复卡和防复读头。FUID卡的防屏蔽作用目前为止仍是最好的,但他的缺点是成本太高,无法重复利用。
CUID卡
CUID卡可无限次修改0扇区,一般都可以替代FUID卡。无需锁卡自动起防屏蔽作用,可重复擦写使用无废卡,不会像FUID锁死后才起到防屏蔽作用,更不会因为锁卡而变成一次性卡,无法更改卡内数据成为废卡。但仍有被检测出来的几率,所以建议先使用CUID再使用FUID。
综上,我们可以利用M1卡的复制进行攻击,如某公司以卡内00块为识别码进行索引,那么可以复制修改00块,冒用他人身份通过门禁,饭卡消费等。另外如水卡等将金额信息写入扇区内的,假如我们无法成功分析扇区内信息,也可记录下水卡某一时刻金额,消费后再将记录时刻的数据写入,就达到了将金额变回记录时刻数值的效果。
实战扇区分析
这里拿到一张金博电梯的电梯卡,AB密码均是FFFFFFFFFFFF,因此我们直接获取到了扇区数据,我将有数据的一块扇区放到excel中便于我们观察。如图:
事实上及时我们获取到了扇区数据也不一定可以完美破解,有些厂商会将明码存于扇区中,有些则是加密后的暗码,需要破解其算法才行,但难度较大且需要大量的样本。幸好,我拿到的这张电梯卡厂商并没有设置成暗码,给了我们可趁之机。
现在我们需要猜一下卡内可能会存在什么数据,首先是电梯楼层的权限,小区的楼号。前两天我的电梯卡过期了,保安把我的卡在读卡机上刷了改了一下于是就可以,并且问了我的房号。所以我怀疑里面还包含日期和房号信息。
A3:E3和F3:J3我感觉像某个日期2022/1/1/00:00和2022/02/28/23:59,尤其是后者我怀疑是到期时间,那么前者应该是开卡时间,至于为什么开卡年份是2022暂未想明白,可能系统只校验过期时间,或者系统的时间就是2022年。于是3行就没有其它数据了,暂时排除。
我的房号是513,在里面搜索发现M2:N2=05 0D,分别转换为10进制就是513,那么楼层数和楼号一定在前面。
我的楼号是1幢,楼层权限应该是1楼,5楼,3楼(物业所在楼层)。首先我定位在3B=01,这应该是我的楼号,一般通卡的楼层是00或FF,于是我将其改为00。
楼层的位置我找了很久和1,3,5有关的数据,如何用16进制储存楼层信息这个问题困扰我。最后定位在2J=15。将15转换成2进制是0 0 0 1 0 1 0 1,正好第1,3,5个是1。那么将其改成FF:1 1 1 1 1 1 1 1 就可以所有楼层都有权限(很简单吧)。我这幢楼有10多楼,那么以此类推将I2和H2均改成FF。最后我修改后的扇区如下:
结论
以上为M1卡的工作原理与破解原理。所以我个人建议IC卡的安全分以下几个要点:
1. 扇区不使用暗码或滚动码代替明码储存。如有条件将金额等敏感数据存于后台数据库,根据卡号进行索引。
2. 不使用默认或弱密钥,每一个扇区的keyA与keyB均设置不同,做到一卡一密,且修复卡的Prng漏洞。
3. 不使用默认的存取控制FF078069,根据需求合理设置安全的控制位,否则容易扇区锁死。推荐08 77 8F 69(块012 keyAB均可读,仅keyB可写。块3 keyA和keyB均不可读,只能用keyB写入。控制字节keyAB均可读,只有keyB可写。
4. 升级更新读卡器,识别基础UID与CUID复制卡。
5. 完善管理制度,提高人员安全意识,不将卡片随意给予他人。
*本文作者:zyh0830,转载请注明来自FreeBuf.COM
来源:freebuf.com 2020-04-19 08:00:08 by: zyh0830
请登录后发表评论
注册