RFID破解三两事(转)
网上看了很多RFID破解的文章,大部分都是工具使用,一步步该怎么操作,基本上没有讲原理的,估计导致了很多初学者非常迷惑,特别是一旦按照操作步骤操作的时候出错时更加迷惑,不知道是什么状况,国内radiowar也同样没有看到过特别介绍原理性的文章。
建议大家还是多看看外文原版的资料说明,会理解的更透彻些,才能更快的加入到RFID安全研究及测试中。
这篇文章就当是我自以为是的普及性介绍,我想应该还是会给很多人解惑。
首先,先说说目前RFID破解涉及到的几种方法,我尽量以最直白的语言描述。
1、最简单ID卡破解
常见破解办法:ID卡复制,ID卡除了复制也没有其他研究的了,毕竟太简单了。
基本原理介绍:
ID卡属于大家常说的低频卡,一般大部分情况下作为门禁卡或者大部分大学里使用的饭卡,一般为厚一些的卡,是只读的,卡里面只保存有一串唯一的数字序号ID,可以把这串数字理解为你的身份证号,刷卡的时候,读卡器只能读到ID号,然后通过跟后台数据库进行匹配,如果是门禁卡,那么数据库里面就是存在这样的ID号,如果匹配上门就开了,匹配不上门就开不了。
如果是学校的饭卡,刷卡的时候,实际上操作的是你对应ID号相关的数据库中的数据。ID卡本身不存在任何其他数据,所以,学校使用的ID卡饭卡,只能复制卡,刷别人的钱(数据库中的钱),再没有其他办法。
破解方法:通过ID卡读卡器,读取卡内的ID号,然后把这串ID号写入到ID卡空卡中即可,各类工具特别多,需要一个ID卡读卡器。最简单的淘宝有卖的工具,两节7号电池,按读卡按钮读要复制的卡的ID,然后再按写卡按钮,把读到的ID号写入到空白卡中,即完成了卡复制工作,优点就是方便,缺点就是我们看不到整个过程,对我们安全研究来说作用不大。
2、射频IC卡破解
写在前面的技术铺垫:
射频IC卡种类繁多,标准也繁多,这些不在介绍范围内,但是以下攻击介绍的原理类似,下面不特别说明就是指的M1 S50卡,这也是目前广泛使用的,并且大家做测试时最常见的IC卡。
常见的破解方法:
一般IC卡的UID是唯一的也是写死的不能更改,其他块的数据是可以更改的,所以也就有了普通IC空白卡以及UID可写空白卡(可以认为是不遵守规范的商家制作的)。
现在我们开始想象破解的几种环境:
IC卡的UID是不通过密码控制的,可以直接通过读卡器获得,后面讲IC卡的通信过程会说明。那么我们做IC卡破解时,主要的问题就是破解IC卡每个扇区的控制密码,如果密码破解了,那要怎么操作都随便了。
IC卡密码破解的几种方法:
1) 使用默认的密码攻击
很多应用IC卡都没有更改默认密码,所以导致可以直接使用默认密码来尝试接入IC卡,常见的默认密码有:
前面讲到每个扇区都有独立的密码,一些情况下,比如某饭卡,扇区3中存储着钱等数据,扇区3的更改了默认密码,扇区5中也存储着一些数据,扇区5也更改了密码,其他扇区没有更改默认密码。我们要操作扇区3跟5,不知道密码怎么办?使用nested authentication 攻击,这种攻击方式是在已知了16个扇区中任意一个扇区的密码之后,采用的攻击方式,可以获得其他扇区的密码。我们前面都提到了,16个扇区的密码都是独立的,那么怎么能通过某个扇区的密码获得其他扇区的密码呢?如果可以,那说明扇区就不是独立的呀,有人会说,由于M1卡的加密算法被破解了,我只能说那是还没有理解,具体算法不讲,只说明一下,算法只是使得猜解密码的时间变短,使得猜解密码成为可能。
这是什么样的原理呢?首先先了解,这是一个对等加密算法,也就是读卡器跟tag中都保存着同样的密码,也都是用同样的算法加密,然后看rfid的验证过程:开始交互的时候,tag就已经把uid给reader说了,主要牵扯到防冲撞机制,之后才开始验证。
首先记住这里面只有第一次的nt是明文,之后都是密文,而且nt是tag发送的,也就是验证过程中,tag是主动先发随机数的。我们破解的时候,读卡器中肯定没有密码(如果有就不用破解了),那么tag发送一个nt给读卡器之后,读卡器用错误的密码加密之后发送给tag,tag肯定解密错误,然后验证中断,这个过程中,我们只看到tag发送的明文随机数,tag根本没有把自己保存的密码相关的信息发送出来,那怎么破解呢?
所以,要已知一个扇区的密码,第一次验证的时候,使用这个扇区验证成功之后,后面所有的数据交互都是密文,读其他扇区数据的时候,也需要验证,也是tag首先发送随机数nt,这个nt是个加密的数据,我们前面也说过每个扇区的密码是独立的,那么加密实际上就是通过tag这个扇区的密码相关的算法加密的nt,这个数据中就包含了这个扇区的密码信息,所以我们才能够通过算法漏洞继续分析出扇区的密码是什么。
这也是为什么nested authentication攻击必须要知道某一个扇区的密码,然后才能破解其他扇区的密码。
3) darkside攻击
假设某个IC卡的所有扇区都不存在默认密码怎么办?暴力破解根本不可能,那这时候就是算法的问题导致的darkside攻击,我们照样不说具体算法什么漏洞之类,同样,我们考虑首先要把tag中的key相关的数据骗出来,也就是让tag发送出来一段加密的数据,我们通过这段加密的数据才能把key破解出来,如果tag不发送加密的数据给我们,那没法破解了。
前面我们也说了,第一次验证的时候tag会发送明文的随机数给读卡器,然后验证读卡器发送加密数据给tag,tag验证失败就停止,不会发送任何数据了,这样看,根本就没有办法破解密码。
实际上经过研究人员大量的测试之后,发现算法还存在这样一个漏洞,当读卡器发送的加密数据中的某8bit全部正确的时候tag会给读卡器发送一个加密的4bit的数据回复NACK,其他任何情况下tag都会直接停止交互。
那么这个4bit的加密的NACK就相当于把tag中的key带出来了,然后再结合算法的漏洞破解出key,如果一个扇区的key破解出来,就可以再使用nested authentication 攻击破解其他扇区密码。
4) 正常验证过程获得key
1-3都是通过一般的读卡器,把tag中的密码破解出来,破解的原理中,不管密码破解算法的漏洞,实际上都是要让tag中发送出来一段密文。
那如果读卡器本身就保存有密码,卡也是授权的卡,也就是说卡和读卡器都是正确授权的,那么他们之间的加密数据交换就可以直接使用PM3等监控下来,然后通过“XOR效验与算Key”程序算出密码来。
这种情况下一般都是内部人员做案,或者把读卡器中的SAM偷出来,SAM实际上就是保存读卡器中密码的一个模块,然后通过另外的读卡器插入SAM,用正常的授权的卡刷卡,然后监控交换数据,从而算出密码。
5) 另一个方面
前面4类方法基本上把目前的rfid卡破解讲清楚了,文字太多,所以也就没有截图,还有一个地方大家不知道考虑了么?
我们提到的都是卡和读卡器之间的数据交换,这是加密的数据,但是有没有想过读卡器跟电脑相连这块,电脑中肯定没有加密芯片,所以这块肯定是明文传输,在某种环境中,比如通过电脑的控制程序导入密码(假设是二进制等不能直接观看的密码文件)到读卡器的时候,我们通过监控USB口(串口)数据通信,是不是就能明文看到密码呢?
软件装载密码到读卡器
常用工具说明:
nfclib官网:
http://www.geek-workshop.com/thread-10042-1-1.html
RFID破解三两事(转)相关推荐
- RFID破解三两事(原作者:YunFree)
网上看了很多RFID破解的文章,大部分都是工具使用,一步步该怎么操作,基本上没有讲原理的,估计导致了很多初学者非常迷惑,特别是一旦按照操作步骤操作的时候出错时更加迷惑,不知道是什么状况,国内radio ...
- 浅谈AutoCAD下载安装的那些三两事!
很多人在一开始学习CAD的软件时,最关心的问题就是AutoCAD下载安装的这些事.比如电脑选择问题.显卡的问题等等.今天就来以AutoCAD 2022版本为例,聊一聊下载安装的这些事. 首先是硬件方面 ...
- 分享OMS系统实战的三两事
OMS系统实战 1. 前言 2. 架构设计 2.1 业务架构 2.2 系统架构 3. 功能演进 3.1 单据业务演进 3.2 库存管理演进 4. 一般功能设计 4.1 关联数据映射 4.2 状态数据隔 ...
- Win32 API 三两事
学习下一些底层的API调用,所有内容来自网络 1.APIENTRY,WINAPI,CALLBACK等是什么东西? 通常在函数名前面(返回值后面)会有APIENTRY或WINAPI或CALLBACK修饰 ...
- nodeJS与npx之间的三两事
Node.js 是一个基于V8 JavaScript 引擎却又运行在浏览器之外的.开源的.跨平台的 JavaScript 运行时环境.前端开发的同学都很熟悉,在安装了NodeJS之后,除了node命令 ...
- 深信服上网行为管理(AC)部署三两事
AC又被我们成为上网行为管理,如下图 上图是两种不同大小与型号的AC,分别是1U和2U的两款不同的AC,不同的上网行为管理具备的扩展性以及功能上也是略有区别的. 从上面的两台设备上,我们可以看出,1U ...
- Google Protocol Buffers三两事【知识笔记】
目录 一.亮点简介 二.使用指南1.定义.proto文件2.编译.proto文件3.读写数据 三.本文总结 四.参考资料 一.亮点简介 Protocol Buffers一种结构化数据存储格式.特点:快 ...
- Linux使用三两事
修改文件名:mv xx xxx 重构,抽象,不断优化自己的代码 开放端口 firewall-cmd --zone=public --permanent --add-port=8080/tcp 以808 ...
- 行高和高度的三两事:行高 > 高度 文字靠下;行高 < 高度 文字靠上
先明白行高的原理,行高包含内容区域的高度.上半行间距和下班行间距.如果line-heigt:300px; font-size:20px;算出间距280px,上下半行间距都为140px.chrome默认 ...
最新文章
- C++中const char*, string 与char*的转化
- 【PC工具】复制翻译神器!有了这个开源免费的翻译软件,阅读英文文档变得再也不困难了...
- r 多元有序logistic回归_R语言多分类logistic逻辑回归模型在混合分布模拟单个风险损失值评估的应用...
- Cambridge career service
- 【Qt5.8】Qt5.8中串口信息类QSerialPortInfo
- 广州.net俱乐部12月份ABP框架活动场地征集、志愿者征集、合作讲师\副讲师征集...
- Python学习笔记:序列之字符串
- mysql存储过程if多命令_MySQL存储过程if-存储过程中的if-db2存储过程if多条件
- Debug gradle task
- pla3d打印材料密度_FDM 3D打印机最常用的耗材PLA的密度 创想三维
- GenericObjectPoolConfig属性
- 树莓派-10-安装jupyter并控制SG90舵机
- nginx过滤HttpHeader的 中划线
- Apple芯片Mac安装ARM版Win10完美教程(结尾附视频)
- openlayers4+中台风路径播放优化
- QStringList去除重复项
- C++中的全局变量声明和定义
- [bowtie2, libtbb.so.2]error while loading shared libraries: libtbb.so.2: cannot open shared object
- POI 不支持函数XIRR
- java 限制发送频率_java发送短信如何限制发送频率例子代码