物理渗透-Mifare Classic S50(IC)卡分析
前言
我们不管是在小区里还是公司里,都可能会使用过门禁卡,比如乘坐电梯需要刷工牌才使用,而且只能去特定的楼层。生活中还有很多地方用到过IC卡,商铺的会员卡、交通的公交卡等等。关于IC、ID卡的基础、本节不做详细叙述,只介绍M1的IC卡如何去分析并尝试破解。
M1卡介绍
MIFARE CLASSIC是恩智浦半导体开发的可用于非接触式智能卡,我们一般称为M1卡,是非接触式IC卡的一种。符合ISO/IEC 14443A类标准。
有S20,S50(M1),S70几种规格,主要是根据存储器容量划分,存储器容量分别为320B,1K,4K,直观体现就是S50只有16个扇区,而S70有40个扇区,适用的场景不同。
卡片构成
MF1 S50卡片本身是塑料,里面有一块芯片和几匝线圈。集成电路芯片内含1 Kbyte
EEPROM、RF接口和数字控制单元。能量和数据通过天线传输,卡中天线为几匝线圈,直接连接到芯片上。不再需要额外的组件。
- RF接口:调制解调器、检波器、时钟发生器、上电复位、稳压器
- 防冲突:读写范围内的几张卡可以逐一选定和操作,防止干扰。
- 认证:在所有存储器操作之前进行认证过程,保证必须通过各块指定的密钥才能访问该块。
- 控制和算术逻辑单元:数值以特定的冗余格式存储,可以增减。
- 加密单元:域验证的CRYPTO1 数据流加密,保证数据交换的安全。
- EEPROM: 1 Kbyte,分16区,每区4块。每一块有16字节,这就是数据存储的模块。
特性
- 非接触数据传输并提供能源(不需电池)
- 工作距离:可达100mm (取决于天线尺寸结构)
- 工作频率:13.56 MHz
- 快速数据传输:106 kbit/s
- 高度数据完整性保护:16 Bit CRC,奇偶校验,位编码,位计数
- RF接口(ISO/IEC 14443A):根据非接触式智能卡标准实现。两个方向的数据通信在每一帧的开始只有一个起始位。每个字节一位校验位(奇校验)。选择块的最低(LSB)的字节最选传输,最大帧长度为163位(16字节数据+ 2 CRC字节= 16´2´9 + 9 + 1起始位)。
- EEPROM:1 Kbyte,分为16个区,每区4个块,每块16字节。
- 用户可定义内存块的读写条件
- 数据耐久性10年
- 写入耐久性100.000次
- 防卡绕:智能防干扰功能允许同时又多张卡在现场工作。防干扰算法分别选择每一张卡,并确保选定的卡正确执行交易,不会受到现场另一张卡的干扰。
- 安全性:相互三轮认证(ISO/IEC DIS9798-2),带重现攻击保护的射频通道数据加密,每区(每应用)两个密钥,支持密钥分级的多应用场合,每卡一个唯一序列号,在运输过程中以传输密钥保护对EEPROM的访问权
- 非接触能源和数据传递:在MIFARE卡中,芯片连接到一个几匝的天线线圈上,并嵌入塑料中,形成了一个无源的非接触卡。不需要电池。当卡接近读写器天线时,高速的RF通讯接口将以106 kBit/s 的速率传输数据。
安全与保护
数据完整性
以下机制在非接触通讯过程中于读卡器和卡片之间实现,卡片确保数据正确性:
- 每个数据块有16位CRC
- 为每个字节奇偶校验位
- 位数检查
- 位编码区分"1",“0"和"无信息”
- 监测信道(协议序列和位流分析)
三轮认证
- 卡从指定扇区的尾块读出密钥和访问权限,并产生4字节随机数发送给读卡器。
- 读卡器使用密钥加密收到的随机数,把加密结果连同字节产生的随机数一起发送给卡(共8字节)
- 卡使用第1轮中读出的密钥验证读卡器返回的加密数据,如正确则把收到的随机数加密后发送给读卡器,否则不发送数据。
执行流程
包括三部分,分别是初始化及选择过程,认证过程以及数据操作过程
呼叫:读卡器发送REQA/WUPA命令,卡返回ATQA的过程
防冲突循环:在防冲突循环过程中将读取卡片的ID,如果存在多张卡,则通过ID进行区别,并选择一张卡进一步处理,其他卡回到IDLE状态等待REQA/WUPA命令。
选卡:读写器发送SELECT,卡返回SAK的过程,SAK指示当前卡是否支持14443-4协议和UID是否完整。
三轮认证:选卡后,读卡器指定后续读写的存储器位置,并用相应的密钥进行三轮认证。认证成功后,所有的存储器操作都是加密的。
存储器操作
认证后可执行下列操作:
读块
写块
减值:减少数值块内的值,并将结果保存在数据寄存器中。
加值:增加数值块内的值,并将结果保存在数据寄存器中。
恢复:将数据块内容移入数据寄存器中。
转存:将数据寄存器的内容写入数值块。
存储器组织
厂商代码块:位于第1区的第一块(块0),它含有集成电路制造商数据。出于安全和系统需求,此块是制造商在生产过程中编程后写保护的,只允许读取。
如果是4字节UID,则0~3字节为序列号,第4字节为校验字节(异或值),第5字节为卡片容量,第6、7字节为卡片类型。
数据块:各区均有3个16字节的块用于存储数据(区0只有两个数据块以及一个只读的厂商代码块)。
数据块可以通过读写控制位设置为:
读写块,例如用于非接触门禁管理。
数值块,例如用于电子钱包,另有可直接控制存储值的命令,如增值、减值。(有效命令:read,write,increment,decrement,restore,transfer),有固定的数据格式,以便于错误检测、纠错和备份管理。数值块只能通过以数值块格式的写操作生成。
数据分析
数值:4字节数值。数值的最低字节存储在最低地址字节。负值以标准的2的补码形式存储。出于数据完整性和安全原因,数值存储三次,两次不取反,一次取反。
地址(Adr):1字节地址,当进行备份管理时,可用于保块的地址。地址保存四次。两次取反,两次不取反。在increment、decrement、restore和transfer操作中,地址保存不变。它只能通过write命令更改。
举例:
对于10进制数1234567,地址17来说:10进制:1234567 -> 16进制:0012d687
低字节存储在第0字节,高字节为第3字节,可以理解为从右->左写。
补码,也就是取反值,先将16进制:0012d687 -> 转换成2进制:00000000000100101101011010000111
注意这里是32位的,少的位数需要用0来补齐,
再将1和0互换,得到2进制:11111111111011010010100101111000 -> 16进制: ffed2978
同理地址10进制:17 -> 16进制:11,这里是8位,所以转换成2进制就是00010001,取反就是11101110转换成16进制:ee
结果如下图:
上面说的数值块,接下来看下尾块
尾块:
各区均有一个尾块,存有密钥A和B(可选)。卡片发行时,所有的密钥被设置为FFFFFFFFFFFF。如果读密钥的权限不满足则读出的密钥值全为0。该区四个块的读写条件,存储在字节6-9。
读写控制位也指定了数据块的类型(读写块或数值块)。
如果不需要密钥B,块3的最后6字节可以用作数据字节。
尾块的字节9可用于用户数据。因为此字节享有与字节6、7、8相同的读写权限。
如下图所示:
存储器操作
对指定块可以执行的存储器操作取决于所用的密钥和存储在相应尾块中的读写条件。
读写条件:
每个数据块和尾块的读写条件均由3个bit定义,并以非取反和取反形式保存在各个区的尾块中。
读写控制位管理着使用密钥A和B读写的权限。如果知道相关的密钥,并且当前读写条件允许,读写条件是可以更改的。
控制位组成
其中,右下标代表块,横杠代表取反,比如C13则是块3的C1值。
尾块访问条件:
根据尾块的访问控制位,对于key的读/写访问的权限包括:never、keyA、keyB或者keyA|B。通过上面得到的值,在下表中找到对应部分,注意:下图是尾块的权限控制,所以是C13C23C33的值。
数据块的权限控制,C102、C202、C30~2的值对照下图
数据块的访问控制条件
对数据块(块0至2)的读写访问取决于其访问控制位,分为"禁止"、“KEY A”、“KEY B”、“KEY A|KEY B”
相关访问控制位的设置确定了其用途以及相应的可用命令。
读写块:允许读、写操作。
数值块:运行另外的数值操作——加值、减值、转存和恢复。在用于非充值卡的一种情况(‘001’)下,只能够读和减值。在另一种情况(‘110’)下,可以用key
B充值。
制造厂商块:只读,不受访问控制位设置的影响。
密钥管理:在传输配置状态下,必须用Key A认证。
举例:
卡片发行时的控制字节为:FF078069
转换成2进制:
FF:11111111->取反:00000000
07:00000111->部分取反:00001000
80:10000000->不取反:10000000
得到:
C10 C20 C30=000,块0的读、写、增、减、恢复、传送的权限都是keyA或者keyB
C11 C21 C31=000,块1的读、写、增、减、恢复、传送的权限都是keyA或者keyB
C12 C22 C32=000,块2的读、写、增、减、恢复、传送的权限都是keyA或者keyB
C13 C23 C33=001,块3的keyA读权限never,keyA的写权限、Access bits和keyB的读写权限都是keyA
例子1:
C11 C21
C31=010,即块1的读权限为keyA|keyB,写、增、减、恢复、传送的权限为never。修改尾块的值为:FFFFFFFFFFFFDF078200FFFFFFFFFFFF
例子2:
C1X C2X
C3X=111,即数据块的所有权限都为never,尾块的读控制字节权限为keyA|B,其他都为never。修改尾块的值为:FFFFFFFFFFFF00F0FF00FFFFFFFFFFFF
实际演示
***如果要获取卡中的数据,只能通过卡中的给的权限,比如获取扇区9的数值,条件是通过keyA的值,那么只有在知道keyA后才能获取里面存放的数据。所以一般都是通过暴力破解,利用密码字典来获取数值。
读卡器工具:PM设备系列(某宝有)
当然少不了一些辅助工具
控制字节辅助工具:
数据分析工具:
演示:
我们通过读卡工具,将爆破到的数据保存为dump格式,然后拖入分析工具
注意,上文中的数据格式等等是通用格式,实际上每个制造商都有自己的规则,需要实际分析
可以看到,这里通过特征分析出是金博梯控,梯号往往代表的是几幢,01就是1幢
通过楼层码得到允许访问的楼层
如果要修改楼层,可以通过转换得到16进制数据,这边我们添加4,5层
将得到的值再写入dump文件中
再写入卡中就完成了访问楼层的修改。
网络安全工程师企业级学习路线
这时候你当然需要一份系统性的学习路线
如图片过大被平台压缩导致看不清的话,可以在文末下载(无偿的),大家也可以一起学习交流一下。
一些我收集的网络安全自学入门书籍
一些我白嫖到的不错的视频教程:
上述资料【扫下方二维码】就可以领取了,无偿分享
物理渗透-Mifare Classic S50(IC)卡分析相关推荐
- MIFARE Classic S50技术详解
Mifare Classic 简介 MIFARE Classic是恩智浦半导体开发的可用于非接触式智能卡,符合ISO/IEC 14443 A类标准.用于公共交通票证等应用,还可用于各类其他应用有S20 ...
- Android针对IC卡读写的NFC开发
菜鸟进场,方圆十里,寸草不生 这两天研究了NFC功能,网上查了很多的资料,不过感觉别人讲的都大同小异,但都缺了那么一点点火候,因为第一次接触有些概念是不清楚的,所以代码看上去很吃力,这个博客呢就是想整 ...
- 漏洞已破解 你手中的IC卡一卡通还安全吗?
"听说有人把IC卡密码破解了,我使用的北京市政交通一卡通还安全吗?"近日,读者王女士给本报来电话. IC卡是现实生活中最常用的一种小额支付卡.和银行卡不同的是IC卡背面没有磁条,其 ...
- IC卡(M1卡)梯控日期的算法解析和计算
在IC卡分析工具的帮助下,我把常见的一些梯控日期的算法进行了分析和推导,总结出了IC卡梯控日期的算法规则,具体内容如下表所示: 序号 位数 明暗 方法 梯控 算法(以2099年12月31日为例) 十六 ...
- 【OD矩阵】《城市公交IC卡·数据分析方法及应用》基于ICAVL数据的上车站点识别
<城市公交IC卡·数据分析方法及应用> 陈学武.李海波.候贤耀著 <城市公交IC卡·数据分析方法及应用>基于IC&AVL数据的上车站点识别·笔记 算法基本思路: 此处算 ...
- 卡--配合--读卡器使用 磁卡 CPU卡 IC卡、ID卡、M1卡、射频卡区别 我在项目中使用到的S50卡(M1卡的一种)S50(Mifare 1K)卡简介及存储控制原理
S50(Mifare 1K)卡简介及存储控制原理 https://blog.csdn.net/D_azzle/article/details/85012669?ops_request_misc=%25 ...
- 破解mifare Classic(M1)非接触式射频IC卡--Mifare crack Hack 笔记一
最近对NFC有点感兴趣,找资料时发现mifare Classic的卡已经被破解了(包括s50.s70),从网上下了Mifare crack Hack开始啃,一个LFSR(线性反馈位移寄存器)就把我弄晕 ...
- 破解mifare Classic(M1)非接触式射频IC卡--Mifare crack Hack 笔记二
光说不练假把式,昨天一咬牙一跺脚入手了一块PN532开发板,看了几天的PN532C106 Application Note.User Manual,感觉这个芯片还行.关键是只有这个芯片的开发板比较便宜 ...
- MIFARE系列逻辑加密卡的安全性分析
MIFARE系列逻辑加密卡的安全性分析 原文摘自:http://www.nb-card.com 近来广为讨论的话题,就是MIFARE系列的逻辑加密卡可以被破解和复制一事,因国内发行的这 ...
最新文章
- 女生参加web前端培训可以吗
- Jenkins构建Docker容器
- centos ping不通局域网_新手小白初次安装虚拟机,网络不通怎么办,踩过的坑都告诉你...
- mysql 类型 自动转化_自动MySQL数据类型转换
- Web 自动化神器,批量下载美图,可直接导入使用
- php网站跨站脚本监测,基于PHP的在线跨站脚本检测工具.pdf
- Serverless 实战 —— Serverless 架构揭秘与静态网站部署实战
- break , continue , exit
- 工程介绍好处费性质_中间人拿工程好处费是否违法
- inno setup安装之前关闭mysql_inno setup 安装前判断进程是否存在,以及停止相应进程转...
- Matlab程序中调用其他程序
- 【OR】YALMIP 含参数规划
- asc怎么用 linux zip_asc文件扩展名,asc文件怎么打开?
- 可能是全网唯一办法:解决粘滞键(shift)键一直按下,在配置中心无法关闭_v1.0.0
- AR增强现实技术解读
- Vue3 suspense
- Vue进阶(壹佰):当前页面刷新并重载页面数据
- 操作系统文件管理习题
- 从零开始设计开发优惠券系统
- shell同时启多个进程,并等待所有子进程结束