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