zoukankan      html  css  js  c++  java
  • 使用Proxmark3进行MIFARE Classic卡的安全测试

    使用Proxmark3进行MIFARE Classic卡的安全测试

     

    Proxmark3的MIFARE安全测试是很多朋友都非常重视的一部分,所以我们特地以这个部分进行介绍,告诉大家如何当你完成前期操作之后,进行MIFARE CLassic卡类的安全测试操作。

    首先,我们要把高频天线连接到Proxmark3的天线接口。当我们连接完成之后,我们就需要查看一下天线与Proxmark3是否连接正常并且正常电压为多少?

    命令:hw tune 这个命令大概需要几秒的时间进行回显

    Hw tune.jpg

    有些朋友会问,当我输入完hw tune之后,是不是接下来就是输入hf tune呢?

    我个人认为当你输入完hw tune之后就没有必要再次输入hf tune,这是多此一举的操作。
    并且hf tune的命令实际上是为了当你需要调试手工高频天线而使用的。

    当你输入完hw tune之后,窗口所显示的HF antenna后面的数值就是现在非工作状态下的电压,当你把相关的卡放在高频天线上面/下面的时候,电压就会所变化了(依然是非工作状态下)。

    Hw tune2.jpg

    从图中我们可以看到,当卡没有放到天线的情况下电压为9.22v,而卡放在天线之后电压将为3.9v,现在的电压依然是为非工作电压,但是从这个现象当中我们会得到很多非常有意义的数据。

    Hw tune3.jpg

    变化出来了!第三张hw tune的结果为8.57v,是因为我把一张125kHZ的门禁卡放在了高频天线上面,所以其电压的降幅很低,但是如果我把一张13.56MHz的卡放在 上面就好像第二张图片那样子,电压会降低会很多,有时候会是10v左右。从这个变化当中我们就可以初步识别出高频与低频卡的区别了

    当确定需要测试的卡为13.56MHz卡之后,就开始需要深入的了解这卡的信息了!我们可以从hf命令集当中找到相关的命令

    命令:hf 14a reader

    14a rader.jpg

    什么是RATS?RATS是Request for answer to select (选择应答请求)
    什么是proprietary non-iso14443a card found,RATS not supported?

    有时候Proxmark3在读取部分MIFARE Classic卡UID的信息时,因为无法得到RATS的返回信息,会判断为非ISO14443a标准的卡.国内有太多MIFARE Classic类的卡,并不是NXP出产的,所以Proxmark3就会出现了这样子的提示!

    从图中的信息我们可以看到的是现在读取的卡[ATQA]为04 00,从NXP的识别文档我们可以看到类似的信息。通常ATQA为04 00数值的卡,大部分都是MIFARE Classic或者是CPU兼容模式下的MIFARE Classic。

    当我们可以确定卡类型之后就可以针对其特性进行相关的安全测试了,我之前在RadioWar写过一篇关于MIFARE Classic安全的文章“从乌云的错误漏洞分析看Mifare Classic安全”, 介绍了MIFARE Classic系列卡类主要的安全问题,通常当我们拿到相关的卡的时候,我们应该先用chk命令去检测一下测试卡是否存在出厂时遗留的默认Key,默认的 Key A/Key B是使得MIFARE Classic系列雪上加霜的主要成因,因为使用默认的Key导致恶意用户可以使用其进行卡的信息读取以及修改。

    已知默认Key列表

    • ffffffffffff
    • b0b1b2b3b4b5
    • 4d3a99c351dd
    • 1a982c7e459a
    • 000000000000
    • d3f7d3f7d3f7
    • 0a1a2a3a4a5
    • aabbccddeeff

    从列表当中你是否可以看出另外一个端倪呢?没错,Key的排列大部分都是ABAB/AABB这样子的。所以在你使用MIFARE Classic的时候,请不要使用默认的Key以及不要使用固定的排列,以免被恶意用户进行Key的穷举攻击。

    命令: hf mf chk 0 A a0a1a2a3a4a5 检查0区Key A是否为a0a1a2a3a4a5
    当命令回显为isOK:01 vaid key:a0a1a2a3a4a5

    Mf chk.jpg

    经过默认key的检测,我们发现测试卡当中存在一个默认key:a0a1a2a3a4a5。我们就可以利用这个默认Key进行区块的读取以及更进一步的操作了。有些童鞋就会问如何我们检测默认Key全部都不存在的情况下那怎么办?那样子我们就需要利用“从乌云的错误漏洞分析看Mifare Classic安全”所提到的PRNG漏洞进行测试了。

    命令: hf mf mifare
    当输入命令后,窗口会出现类似进度状态的显示……
    这个时候就需要耐心去等待结果,因为整个过程花费的时间有快有慢。

    Hf mf mfiare.jpg

    当你在无法继续等候或者想停止该项操作的时候,请记住前面提到的“不要使用CTRL+C或者直接关闭窗口,而是选择按下你板子上的黑色按钮”, 否则你有可能会使得Proxmark3出现故障或者报错之类的情况出现。结果出现后,首先要判断的是Found invaid Key还是Found vaid key,如果是invaid key的话,就是代表基于PRNG的漏洞出现的Key是错误的,并非正确的Key来的。但是最起码可以证明卡是存在PRNG漏洞的。接下来就是记住数值当 中的Nt,这个数值将会被利用来进行第二次的PRNG漏洞的攻击测试

    命令: hf mf mifare 524bb6a2
    当输入命令后,窗口会再次进入进度状态,依然请记住耐心等待结果。并且如需停止,请按黑色按钮

    因为基于PRNG的漏洞进行的破解,所以有时候会出现多次Nt的循环,这是很正常的结果,我们需要不断的利用Nt去进行真正Key的破解。整个过程是漫长而乏味的,所以我们才需要借用默认Key的检测来减少安全测试的耗时。

    当使用hf mf mifare得出Key后,我们可以按照得到默认Key的后续操作一样,[读取卡中的区域信息]或者进行全卡所有区域的Key破解测试。

    命令: hf mf nested 1 0 A a0a1a2a3a4a5 基于验证漏洞进行全卡区域Key破解
    必须知道一个正确的Key方可进行相关的操作

    Hf mf nested.jpg

    这个操作的过程比较短暂,而且前提条件是必须存在一个正确的Key进行操作,否者就无法继续进行。基本上MIFARE Classic的安全测试就已经完成了,而基于一些全加密或者CPU兼容模式MIFARE Classic(Cryto-1算法)的卡,我们还可以使用嗅探的测试去进行测试。前提是要记住嗅探模式是需要在正常交互模式下进行的!不要以为用个读卡器读取一下卡就可以了

  • 相关阅读:
    hdu 1028 Ignatius and the Princess III (n的划分)
    CodeForces
    poj 3254 Corn Fields (状压DP入门)
    HYSBZ 1040 骑士 (基环外向树DP)
    PAT 1071 Speech Patterns (25)
    PAT 1077 Kuchiguse (20)
    PAT 1043 Is It a Binary Search Tree (25)
    PAT 1053 Path of Equal Weight (30)
    c++ 常用标准库
    常见数学问题
  • 原文地址:https://www.cnblogs.com/h2zZhou/p/5239782.html
Copyright © 2011-2022 走看看