本文講的是<b>一次對路邊飲用水RFID供應機的跑路玩法</b>,WARNING!!! 本文具有相當的攻擊性以及複現性,僅供技術參考與教學用途研究,切勿用于非法用途,參考此文進行犯罪的相關人員與本人無關。
No.1免責聲明
參考刑法修正案:構成非法提供控制計算機資訊系統的程式、工具罪,兩罪量刑都是三年以下有期徒刑或者拘役,并處或者單處罰金,情節嚴重的,處三年以上七年以下有期徒刑,并處罰金。非法擷取計算機資訊系統資料罪
這次我們要用到的工具:ProxMark3
鎮樓寶圖在此:
No.2開始搞事
為了打發漫長而炎熱的假期,回到了祖父家避暑,結果發現原本破敗荒蕪的家屬大院内多了一台純淨水供應裝置,而祖父也剛好辦了一張卡,華山這幾天溫度熱的要死,我竟然神奇的把黑色連到從北京坑到了華山美其名曰避暑然而,連續五天溫度過了42度,無形裝逼最為緻命。現在家裡面無聊到爆,于是總是再找點事情做,048 049玩爛了。于是拿出了随身攜帶的戰術包中的Proxmark3 hackrf 等工具 玩爛了RTL8187 HACKRF出問題 于是在一個炎熱的午後去打水,發現了那張水卡。踏破鐵鞋無覓處得來全不費工夫,不要慫,就是幹。征得物業同意之後開始測試這個水機的認證系統。
過程
· 首先拿出手電筒對着M1卡片照射看其中線圈結構。結果發現是正方形線圈,按照經驗是13.56MHZ的高頻卡,于是話不多說直接上工具,是經proxmark3的檢測,結果印證了是Mifare Classic 1k的卡
上手過程按照國際慣例先掃了掃預設密碼區,結果發現密碼區防護做的相當的好,每個M1卡都有一個唯一的序列号,我們稱為“UID”,是32位的,也就是4個位元組。
注:其中每個data 資料區為一個“塊”。這樣我們可以計算一下:16b* 4(塊)*16(扇區)=1024B 就是1K。
第0扇區的塊0(即絕對位址0塊),它用于存放廠商代碼,已經固化鎖死,不可更改。原來在實驗室見過一個廠商代碼沒有鎖死的M1 被我玩了好久。。。。。
在全扇區加密時,通常用前三個“塊”(0,1,2号塊)存放資料,用最後一個”塊“(3号塊)存放密碼。
其中密碼分為A密碼和B密碼:前6個位元組存放A密碼,中間4位元組為控制字段,後6位元組存放B密碼。
· M1卡是典型的高頻卡,工作頻率為13.56MHz,一般調頻(FM)收音機接收的廣播頻率在87MHz到108MHz之間。而我們常說的路由器工作在2.4GHZ中。這個時候注意一個小科普,很多人分不清5G路由和5GLTE。導緻很多人認為5G路由就是5G通訊技術的路由,這裡進行一個更正
.一般路由是工作在2.4GHZ 頻段下面的通訊信号,而所謂的5G路由是工作頻率在5.8GHZ下的路由器。而5GLTE指的是第五代通訊技術,而逆向工程最好的方法就是了解他的基礎結構,我們來看一下M1卡的工作通訊機制
言歸正傳,來看看M1卡的通訊通信速率:106KBPS,也就是說可以在10毫秒的時間内完成讀寫内容。
工作半徑:100mm。大約在100mm以内的距離,可以使用讀卡器對m1卡進行操作(一般寫距離小于讀距離)。
在使用proxmark3對M1卡進行破解時 ,我先用了預設密碼掃描,結果發現卡的安全是很好的,沒有預設密碼
于是使用了有卡嗅探,網上很多人都在用proxmark3去暴力破解或者RPNG漏洞利用,對于proxmark3來說真的是大材小用。Proxmark3可以通過抓取卡與讀卡器之間的通訊來解開相應的密碼
準備1個充電寶 和1跟 雙頭usb供電線資料線淘寶一大把
和原來一樣正常連接配接電腦。打開視窗(下圖)
一切正常之後 你輸入 hf 14a snoop這時主機闆會亮一個燈
再撥了主機上的USB口
到電梯那裡去刷卡.(把 PM3天線 放 卡片 和 卡機 之間)
讓天線 夾到卡與讀卡器之間
不同角度的刷卡 多刷幾次
刷到主機闆上的燈全滅了
拿 回來直接連接配接上電腦
打開軟體
再輸入 hf list 14a
檢視監聽資料
如果監聽到完整資料後
通過軟體直接算出來就可以了
這就是完整的資料
這是激卡 04 00
9320 是要卡傳回卡号
93 70 是選擇卡号
這三個就是密碼了 (當然是加密的) 通過軟體可以算出密碼
破解中間我們可以看下M1卡的通訊工作流程圖以更加好的了解工作原理:
破解M1卡的破解算法已經爛大街了,我們可以利用M1卡已知的PRNG 漏洞來爆破出其他幾個扇區的密碼最後讀出資料。儲存資料後後我又過去進行了一次消費,用來進行資料對比(卡中金額有變動
· 的話資料也有變動。)對比資料:然後發現資料存儲在14塊、15塊。16塊有資料但是沒有變動,初步猜測是使用者識别資訊。其他區塊都是空的。也是夠了。
上手逆向在上手逆向之前我們要認識一下CRC備援校驗和奇偶校驗以及異或校驗,累加校驗等
舉個例子:循環備援碼CRC(Cyclic Redundancy Code)又稱多項式碼.
任何一個由二進制數位串組成的代碼,都可以惟一地與一個隻含有0和1兩個系數的多項式建立一一對應的關系.例如,代碼1010111對應的多項式為X6+X4+X2+X+1,多項式X5+X3+X2+X+1對應的代碼為10111.
CRC碼在發送端編碼和接收端檢驗時,都可以利用事先約定的生成多項式G(X)來得到.設G(X)中最高位X的次方為Xr,資訊位為K(X);則CRC碼=Xr乘以K(X)再除以G(X).
比如:資訊位K(X)=X6+X4+X3+1既1011001,生成多項式G(X)=11001既X4+X3+1(可得Xr=X4)
則CRC碼=X4* (X6+X4+X3+1)/(X4+X3+1)=X10+X8+X7+X4/(X4+X3+1)=10110010000/11001
得到的餘數就是CRC碼
注:以上除法用的是模2除法,是一種不考慮減法借位的運算.既0-0=0,0-1=1,1-0=1,1-1=0
每個塊的前八組HEX和後八組HEX中,資料基本相同 ,而變動資料是紅框部位,後面的因為相同忽略不計。然後經過詳細的觀察和運算發現:
當方框中劃出的資料用FF做異或運算後,得出的數值剛好與箭頭所指資料相同
A4異或FF 等于5B
答案很明顯了 使用的是異或校驗運算。我刷掉了1.5元而校驗值是箭頭指向的資料減去金額,而M1卡資料寫入機制是倒序的。也就是說金額資料是14 A4/14 08 我們用校驗位減去相應金額再轉化為十六進制即我們想要的資料:
e31400001cebff ffe314000014eb14eb
爆破原理深源揭秘不法分子爆破M1卡的方式。
使用技術手段完成M1卡破解的方式有4種:
1.暴力破解
即便是暴力破解,也需要先得到确切的明文和對應的碼流。這大約要進行1536次認證過程,用時在一秒鐘之内。不過還要進行離線暴力破解,估計在36分鐘可完成。但是需要專用的硬體裝置。
2.以讀卡器的挑戰值做變量
這裡說的讀卡器實際上指的是用來模拟讀卡器的攻擊工具,下個攻擊亦如此。這種攻擊又可稱選擇密文攻擊,想法用工具控制被攻擊的卡每次在認證時産生同一挑戰值,而讀卡端則回應不同值。這種攻擊需要大約28500次的認證過程,用時約15分鐘,然後計算密鑰,用時約一分鐘。
3.卡的挑戰值做變量
第三種攻擊與攻擊2類似,但需要使自己的工具的挑戰值為常數,而令卡的挑戰值數不斷變化。需要預制一個384 GB的狀态表。要進行4096次認證。大約用時2分鐘。
4.嵌套認證攻擊
第四種攻擊假設攻擊者已知了至少一個扇區的密鑰,他可以根據漏洞得到其它密鑰的32位,然後對其它16位進行窮舉攻擊。隻需3次認證(時間可以忽略不計)。離線攻擊計算時間約為一秒。
M1卡的存儲器組織 M1卡存儲詳細解說。1024 x 8 bit EEPROM存儲器分為16區,每區4塊,每塊16位元組。
在擦處後的狀态下,EEPROM的單元讀為邏輯“0”,寫後的狀态下讀為“1”。
3.6.1 廠商代碼塊
這是第1區的第1塊(塊0)。它含有內建電路制造商資料。出于安全和系統需求,此塊是制造商在生産過程中程式設計後寫保護的。
3.6.2 資料塊
各區均有3個16位元組的塊用于存儲資料(區0隻有兩個資料塊以及一個隻讀的廠商代碼塊)。
資料塊可以通過讀寫控制位設定為:
· 讀寫塊,例如用于非接觸門禁管理
· 數值塊,例如用于電子錢包,另有可直接控制存儲值的指令,如增值、減值。
在任何存儲器操作之前必須執行認證指令。
3.6.2.1數值塊
數值塊具有電子錢包功能(有效指令:read, write, increment,decrement, restore, transfer)。
數值塊有固定的資料格式,以便于錯誤檢測、糾錯和備份管理。
數值塊隻能通過以數值塊格式的寫操作生成:
· 數值:有符号4位元組數值。數值的最低位元組存儲在最低位址位元組。負值以标準的2的補碼形式存儲。出于資料完整性和安全原因,數值存儲三次,兩次不取反,一次取反。
· 位址(Adr):1位元組位址,當進行備份管理時,可用于儲存塊的位址。位址儲存四次。兩次取反,兩次不取反。在increment、decrement、restore和transfer 操作中,位址保持不變。它隻能通過write指令更改。
3.6.3 尾塊(塊3)
各區均有一個尾塊,存有:
· 密鑰A和B(可選),讀時傳回邏輯“0”。
· 該區四個塊的讀寫條件,存儲在位元組6至9 。讀寫控制位也指定了資料塊的類型(讀寫塊或數值塊)。
如果不需要密鑰B,塊3的最後6位元組可以用作資料位元組。
尾塊的位元組9可用于使用者資料。因為此位元組享有與位元組6、7、8相同的讀寫權限。
3.7 存儲器讀寫
必須如前所述,先標明卡并通過認證,才能執行存儲器操作。
對指定塊可以執行的存儲器操作取決于所用的密鑰和存儲在相應尾塊中的讀寫條件。
3.7.1 讀寫條件
每個資料塊和尾塊的讀寫條件均由3個bit定義,并以非取反和取反形式儲存在各個區的尾塊中。
讀寫控制位管理着使用密鑰A和B讀寫存儲器的權限。如果知道相關的密鑰,并且目前讀寫條件允許,讀寫條件是可以更改的。
注意:在每一次存儲器讀寫時,内部邏輯會驗證存儲條件的格式。如果發現個是錯誤,這個區将被永久性鎖死。
注意:在下列說明中,讀寫控制位是僅以非取反形式表述的。
MF1的内部邏輯保證了指令隻有在通過認證後才被執行。
3.7.2 尾塊的讀寫條件
對密鑰和控制位的讀寫取決于尾塊(塊3)的通路控制位,分為“禁止”、“KEY A”、“KEY B”和“KEY A|B”( KEY A或KEY B)。
注:灰色行為key B可讀并可用于存儲資料的通路控制條件。
尾塊和key A被預定義為傳輸配置狀态。因為在傳輸配置狀态下key B可讀,新卡必須用key A認證。
因為通路控制位本身也可以禁止通路,是以個人化時應當特别小心。
3.7.3 資料塊的通路控制條件
對資料塊(塊0至2)的讀寫通路取決于其通路控制位,分為“禁止”、“KEY A”、“KEY B”和“kEY A|B”( KEY A或KEY B)。相關通路控制位的設定确定了其用途以及相應的可用指令。
· 讀寫塊:允許讀、寫操作。
· 數值塊:運作另外的數值操作——加值、減值、轉存和恢複。在用于非儲值卡的一種情況(‘001’)下,隻能夠讀和減值。在另一種情況(‘110‘)下,可以用key B充值。
· 制造廠商塊:隻讀,不受訪位控制位設定的影響!
· 密鑰管理:在傳輸配置狀态下,必須用key A 認證。
1 如果相應扇區尾塊Key B可讀,則不得用作認證(前表中所有灰色行)。
後果:如果讀寫器試圖用灰色行的通路控制條件以Key B認證任何扇區的任何塊,卡将在認證後拒絕所有後續存儲器通路。
Ps:突發奇想可以用M1卡當資料存儲解密玩。
原文釋出時間為:2017年8月10日
本文作者:i春秋學院
本文來自雲栖社群合作夥伴嘶吼,了解相關資訊可以關注嘶吼網站。
<a href="%E4%B8%80%E6%AC%A1%E5%AF%B9%E8%B7%AF%E8%BE%B9%E9%A5%AE%E7%94%A8%E6%B0%B4RFID%E4%BE%9B%E5%BA%94%E6%9C%BA%E7%9A%84%E8%B7%91%E8%B7%AF%E7%8E%A9%E6%B3%95" target="_blank">原文連結</a>