iPhone用戶歡迎AppStore下載本人開發的NFC應用:iNFC。
https://apps.apple.com/cn/app/infc/id1562054959
iNFC適合小白使用NFC功能或專業人士使用iPhone進行NFC調試。
2008年的時候,荷蘭恩智浦(NXP)公司開發的RFID產品Mifare Classic就被破解了,黑歷史在這里就不在具體說了,想詳細了解可以自己Google百度。現在還是重點說說關於Mifare Classic破解的內容。
Mifare Classic提供1k-4k的容量,現在國內采用的多數是Mifare Classic 1k(S50)[后面簡稱M1卡],而我以后的測試也大多是基於M1卡開展。
大家要先了解M1卡的結構,這能夠為后期的破解做鋪墊。
M1卡有從0到15共16個扇區,每個扇區配備了從0到3共4個段,每個段可以保存16字節的內容,為什么這里要強調從0開始呢?這跟C語言里面數組下標默認從0開始是差不多的,好計算地址偏移,我們不必太過在意,只是要記住是從0開始,寫入數據的時候不要寫錯地方就可以了。每個扇區的第4個段(也就是3段)是用來保存KeyA,KeyB和控制位的,因為M1卡允許每個扇區有一對獨立的密碼保護,這樣能夠更加靈活的控制數據的操作,控制位就是這個扇區各種詳細權限計算出來的結果。
每張M1卡都有一個全球唯一的UID號,這個UID號保存在卡的第一個扇區(0扇區)的第一段(0段),也稱為廠商段,其中前4個字節是卡的UID,第5個字節是卡UID的校驗位,剩下的是廠商數據。並且這個段在出廠之前就會被設置了寫入保護,只能讀取不能修改,當然也有例外,有種叫UID卡的特殊卡,UID是沒有設置保護的,其實就是廠家不按規范生產的卡,M1卡出廠是要求要鎖死UID的。下圖很清晰的列出了M1卡的結構。

更多的M1卡結構可以下載這兩個PDF仔細閱讀。
看完上面的文檔我相信你對M1卡也有了一定的了解,現在就來簡單談談M1卡的各種破解方法,后面會陸續發布相對應的實際案例。
(1)暴力破解
暴力破解是破解工作永遠的話題,只要你擁有龐大的計算資源,管你什么密碼都能破解。而且,在CRYPTO1算法的細節沒有被泄露之前,最有效的方法就是暴破了。還有一個很重要的原因就是,M1卡是被動卡,需要讀卡器為它提供能量,一旦讀卡器切斷了電源,卡中的臨時數據就會丟失,這樣就沒有辦法記錄下攻擊者究竟輸錯了多少次密碼,卡永遠不會因為密碼輸入錯誤太多而被鎖定,只要攻擊者有時間慢慢跟它耗,密碼肯定會出來的。
這里列舉一些常見的M1卡密鑰
FFFFFFFFFFFF
A0A1A2A3A4A5
D3F7D3F7D3F7
000000000000
A0B0C0D0E0F0
A1B1C1D1E1F1
B0B1B2B3B4B5
4D3A99C351DD
1A982C7E459A
AABBCCDDEEFF
B5FF67CBA951
714C5C886E97
587EE5F9350F
A0478CC39091
533CB6C723F6
24020000DBFD
000012ED12ED
8FD0A4F256E9
EE9BD361B01B
(2)重放攻擊
重放攻擊是基於M1卡的PRNG算法漏洞實現的,當卡接近讀卡器獲得能量的時候,就會開始生成隨機數序列,但這有一個問題,因為卡是被動式卡,本身自己不帶電源,所以斷電后數據沒辦法保存,這時基於LSRF的PRNG算法缺陷就出來了,每次斷電后再重新接入電,卡就會生成一摸一樣的隨機數序列,所以我們就有可能把這個序列計算出來,所以只有我們控制好時間,就能夠知道在獲得能量后的某一刻時間的隨機數是多少,然后進行重放攻擊,就有可能篡改正常的數據。如果卡的所有權在我們手上的時候,我們甚至不需要浪費太多的時間就可以實現。
(3)克隆卡片
這是一個很簡單也很實用的方法,因為M1卡自帶扇區可以保存數據,所以大部分的卡片會選擇加密扇區后將數據保存在里面,所以我們完全可以克隆一張帶有一樣數據的克隆卡。這就會用到一種叫uid卡的特殊M1模擬卡,前面說到每張M1卡在0扇區第1段都會有一個全球唯一的UID編號,而且這個塊在出廠之后是被廠商設定保護無法修改的,uid卡就是沒有設定0扇區保護的卡,所以你可以隨意的修改你想要的uid,這樣我們就可以克隆出一張連uid都相同的卡片了。
(4)密鑰流竊聽
利用神器proxmark 3可以嗅探到全部扇區都加密的M1卡,在卡和已經授權的讀卡器交換數據的時候進行竊聽,就能把tag數據讀取出來,利用XOR算key工具就可以把扇區的密鑰計算出來,這也是PRNG算法的漏洞所導致的。
(5)驗證漏洞
驗證漏洞是目前使用最多的M1破解手段,在讀卡器嘗試去讀取一個扇區時,卡會首先發一個隨機數給讀卡器,讀卡器接到隨機數之后利用自身的算法加密這個隨機數再反饋回給卡,卡再用自己的算法計算一次,發現結果一致的話就認為讀卡器是授權了的,然后就用開始自己的算法加密會話並跟讀卡器進行傳送數據。這時候問題就來了,當我們再次嘗試去訪問另一個扇區,卡片又會重復剛才那幾個步驟,但此時卡跟讀卡器之間的數據交換已經是被算法加密了的,而這個算法又是由扇區的密鑰決定的,所以密鑰就被泄露出來了。因此驗證漏洞要求我們至少知道一個扇區的密鑰,但目前大部分的扇區都沒有全部加密,所以很容易就會被破解。
破解M1卡當然不僅僅只有這幾種方法,但對於我們來說已經足夠了,目前國內80%的IC卡都是M1卡,例如門禁卡,飯卡,智能電卡之類的。
這里再提供兩篇Radboud大學關於破解Mifare的論文,大家可以研究下,的確是受益匪淺。(注意是英語的哦。)
