物理渗透-Mifare Classic S50(IC)卡分析
前言
我們不管是在小區里還是公司里,都可能會使用過門禁卡,比如乘坐電梯需要刷工牌才使用,而且只能去特定的樓層。生活中還有很多地方用到過IC卡,商鋪的會員卡、交通的公交卡等等。關于IC、ID卡的基礎、本節不做詳細敘述,只介紹M1的IC卡如何去分析并嘗試破解。
M1卡介紹
MIFARE CLASSIC是恩智浦半導體開發的可用于非接觸式智能卡,我們一般稱為M1卡,是非接觸式IC卡的一種。符合ISO/IEC 14443A類標準。
有S20,S50(M1),S70幾種規格,主要是根據存儲器容量劃分,存儲器容量分別為320B,1K,4K,直觀體現就是S50只有16個扇區,而S70有40個扇區,適用的場景不同。
卡片構成
MF1 S50卡片本身是塑料,里面有一塊芯片和幾匝線圈。集成電路芯片內含1 Kbyte
EEPROM、RF接口和數字控制單元。能量和數據通過天線傳輸,卡中天線為幾匝線圈,直接連接到芯片上。不再需要額外的組件。
- RF接口:調制解調器、檢波器、時鐘發生器、上電復位、穩壓器
- 防沖突:讀寫范圍內的幾張卡可以逐一選定和操作,防止干擾。
- 認證:在所有存儲器操作之前進行認證過程,保證必須通過各塊指定的密鑰才能訪問該塊。
- 控制和算術邏輯單元:數值以特定的冗余格式存儲,可以增減。
- 加密單元:域驗證的CRYPTO1 數據流加密,保證數據交換的安全。
- EEPROM: 1 Kbyte,分16區,每區4塊。每一塊有16字節,這就是數據存儲的模塊。
特性
- 非接觸數據傳輸并提供能源(不需電池)
- 工作距離:可達100mm (取決于天線尺寸結構)
- 工作頻率:13.56 MHz
- 快速數據傳輸:106 kbit/s
- 高度數據完整性保護:16 Bit CRC,奇偶校驗,位編碼,位計數
- RF接口(ISO/IEC 14443A):根據非接觸式智能卡標準實現。兩個方向的數據通信在每一幀的開始只有一個起始位。每個字節一位校驗位(奇校驗)。選擇塊的最低(LSB)的字節最選傳輸,最大幀長度為163位(16字節數據+ 2 CRC字節= 16′2′9 + 9 + 1起始位)。
- EEPROM:1 Kbyte,分為16個區,每區4個塊,每塊16字節。
- 用戶可定義內存塊的讀寫條件
- 數據耐久性10年
- 寫入耐久性100.000次
- 防卡繞:智能防干擾功能允許同時又多張卡在現場工作。防干擾算法分別選擇每一張卡,并確保選定的卡正確執行交易,不會受到現場另一張卡的干擾。
- 安全性:相互三輪認證(ISO/IEC DIS9798-2),帶重現攻擊保護的射頻通道數據加密,每區(每應用)兩個密鑰,支持密鑰分級的多應用場合,每卡一個唯一序列號,在運輸過程中以傳輸密鑰保護對EEPROM的訪問權
- 非接觸能源和數據傳遞:在MIFARE卡中,芯片連接到一個幾匝的天線線圈上,并嵌入塑料中,形成了一個無源的非接觸卡。不需要電池。當卡接近讀寫器天線時,高速的RF通訊接口將以106 kBit/s 的速率傳輸數據。
安全與保護
數據完整性
以下機制在非接觸通訊過程中于讀卡器和卡片之間實現,卡片確保數據正確性:
- 每個數據塊有16位CRC
- 為每個字節奇偶校驗位
- 位數檢查
- 位編碼區分"1",“0"和"無信息”
- 監測信道(協議序列和位流分析)
三輪認證
執行流程
包括三部分,分別是初始化及選擇過程,認證過程以及數據操作過程
呼叫:讀卡器發送REQA/WUPA命令,卡返回ATQA的過程
防沖突循環:在防沖突循環過程中將讀取卡片的ID,如果存在多張卡,則通過ID進行區別,并選擇一張卡進一步處理,其他卡回到IDLE狀態等待REQA/WUPA命令。
選卡:讀寫器發送SELECT,卡返回SAK的過程,SAK指示當前卡是否支持14443-4協議和UID是否完整。
三輪認證:選卡后,讀卡器指定后續讀寫的存儲器位置,并用相應的密鑰進行三輪認證。認證成功后,所有的存儲器操作都是加密的。
存儲器操作
認證后可執行下列操作:
讀塊
寫塊
減值:減少數值塊內的值,并將結果保存在數據寄存器中。
加值:增加數值塊內的值,并將結果保存在數據寄存器中。
恢復:將數據塊內容移入數據寄存器中。
轉存:將數據寄存器的內容寫入數值塊。
存儲器組織
廠商代碼塊:位于第1區的第一塊(塊0),它含有集成電路制造商數據。出于安全和系統需求,此塊是制造商在生產過程中編程后寫保護的,只允許讀取。
如果是4字節UID,則0~3字節為序列號,第4字節為校驗字節(異或值),第5字節為卡片容量,第6、7字節為卡片類型。
數據塊:各區均有3個16字節的塊用于存儲數據(區0只有兩個數據塊以及一個只讀的廠商代碼塊)。
數據塊可以通過讀寫控制位設置為:
讀寫塊,例如用于非接觸門禁管理。
數值塊,例如用于電子錢包,另有可直接控制存儲值的命令,如增值、減值。(有效命令:read,write,increment,decrement,restore,transfer),有固定的數據格式,以便于錯誤檢測、糾錯和備份管理。數值塊只能通過以數值塊格式的寫操作生成。
數據分析
數值:4字節數值。數值的最低字節存儲在最低地址字節。負值以標準的2的補碼形式存儲。出于數據完整性和安全原因,數值存儲三次,兩次不取反,一次取反。
地址(Adr):1字節地址,當進行備份管理時,可用于保塊的地址。地址保存四次。兩次取反,兩次不取反。在increment、decrement、restore和transfer操作中,地址保存不變。它只能通過write命令更改。
舉例:
對于10進制數1234567,地址17來說:10進制:1234567 -> 16進制:0012d687
低字節存儲在第0字節,高字節為第3字節,可以理解為從右->左寫。
補碼,也就是取反值,先將16進制:0012d687 -> 轉換成2進制:00000000000100101101011010000111
注意這里是32位的,少的位數需要用0來補齊,
再將1和0互換,得到2進制:11111111111011010010100101111000 -> 16進制: ffed2978
同理地址10進制:17 -> 16進制:11,這里是8位,所以轉換成2進制就是00010001,取反就是11101110轉換成16進制:ee
結果如下圖:
上面說的數值塊,接下來看下尾塊
尾塊:
各區均有一個尾塊,存有密鑰A和B(可選)。卡片發行時,所有的密鑰被設置為FFFFFFFFFFFF。如果讀密鑰的權限不滿足則讀出的密鑰值全為0。該區四個塊的讀寫條件,存儲在字節6-9。
讀寫控制位也指定了數據塊的類型(讀寫塊或數值塊)。
如果不需要密鑰B,塊3的最后6字節可以用作數據字節。
尾塊的字節9可用于用戶數據。因為此字節享有與字節6、7、8相同的讀寫權限。
如下圖所示:
存儲器操作
對指定塊可以執行的存儲器操作取決于所用的密鑰和存儲在相應尾塊中的讀寫條件。
讀寫條件:
每個數據塊和尾塊的讀寫條件均由3個bit定義,并以非取反和取反形式保存在各個區的尾塊中。
讀寫控制位管理著使用密鑰A和B讀寫的權限。如果知道相關的密鑰,并且當前讀寫條件允許,讀寫條件是可以更改的。
控制位組成
其中,右下標代表塊,橫杠代表取反,比如C13則是塊3的C1值。
尾塊訪問條件:
根據尾塊的訪問控制位,對于key的讀/寫訪問的權限包括:never、keyA、keyB或者keyA|B。通過上面得到的值,在下表中找到對應部分,注意:下圖是尾塊的權限控制,所以是C13C23C33的值。
數據塊的權限控制,C102、C202、C30~2的值對照下圖
數據塊的訪問控制條件
對數據塊(塊0至2)的讀寫訪問取決于其訪問控制位,分為"禁止"、“KEY A”、“KEY B”、“KEY A|KEY B”
相關訪問控制位的設置確定了其用途以及相應的可用命令。
讀寫塊:允許讀、寫操作。
數值塊:運行另外的數值操作——加值、減值、轉存和恢復。在用于非充值卡的一種情況(‘001’)下,只能夠讀和減值。在另一種情況(‘110’)下,可以用key
B充值。
制造廠商塊:只讀,不受訪問控制位設置的影響。
密鑰管理:在傳輸配置狀態下,必須用Key A認證。
舉例:
卡片發行時的控制字節為:FF078069
轉換成2進制:
FF:11111111->取反:00000000
07:00000111->部分取反:00001000
80:10000000->不取反:10000000
得到:
C10 C20 C30=000,塊0的讀、寫、增、減、恢復、傳送的權限都是keyA或者keyB
C11 C21 C31=000,塊1的讀、寫、增、減、恢復、傳送的權限都是keyA或者keyB
C12 C22 C32=000,塊2的讀、寫、增、減、恢復、傳送的權限都是keyA或者keyB
C13 C23 C33=001,塊3的keyA讀權限never,keyA的寫權限、Access bits和keyB的讀寫權限都是keyA
例子1:
C11 C21
C31=010,即塊1的讀權限為keyA|keyB,寫、增、減、恢復、傳送的權限為never。修改尾塊的值為:FFFFFFFFFFFFDF078200FFFFFFFFFFFF
例子2:
C1X C2X
C3X=111,即數據塊的所有權限都為never,尾塊的讀控制字節權限為keyA|B,其他都為never。修改尾塊的值為:FFFFFFFFFFFF00F0FF00FFFFFFFFFFFF
實際演示
***如果要獲取卡中的數據,只能通過卡中的給的權限,比如獲取扇區9的數值,條件是通過keyA的值,那么只有在知道keyA后才能獲取里面存放的數據。所以一般都是通過暴力破解,利用密碼字典來獲取數值。
讀卡器工具:PM設備系列(某寶有)
當然少不了一些輔助工具
控制字節輔助工具:
數據分析工具:
演示:
我們通過讀卡工具,將爆破到的數據保存為dump格式,然后拖入分析工具
注意,上文中的數據格式等等是通用格式,實際上每個制造商都有自己的規則,需要實際分析
可以看到,這里通過特征分析出是金博梯控,梯號往往代表的是幾幢,01就是1幢
通過樓層碼得到允許訪問的樓層
如果要修改樓層,可以通過轉換得到16進制數據,這邊我們添加4,5層
將得到的值再寫入dump文件中
再寫入卡中就完成了訪問樓層的修改。
網絡安全工程師企業級學習路線
這時候你當然需要一份系統性的學習路線
如圖片過大被平臺壓縮導致看不清的話,可以在文末下載(無償的),大家也可以一起學習交流一下。
一些我收集的網絡安全自學入門書籍
一些我白嫖到的不錯的視頻教程:
上述資料【掃下方二維碼】就可以領取了,無償分享
總結
以上是生活随笔為你收集整理的物理渗透-Mifare Classic S50(IC)卡分析的全部內容,希望文章能夠幫你解決所遇到的問題。