2008 年的時候,荷蘭恩智浦(NXP)公司開發的 RFID 產品 Mifare Classic 就被破解了,黑歷史在這里就不在具體說了,想詳細了解可以自己 Google 百度。現在還是重點說說關於 Mifare Classic 破解的內容。
Mifare Classic 提供 1 Kb - 4Kb 的容量,現在國內采用的多數是 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 卡的結構。
更多的RFID卡結構可以閱讀以下內容。
看完上面的文檔我相信你對 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 的論文,大家可以研究下,的確是受益匪淺。(注意是英語的哦。)