Skip to main content

WD USB一體電路板硬碟,所有資料救援公司都宣稱因為有加密所以救援難度比較高。
真實狀況又是怎一回事?
Gunnar Alendal 跟 Christian Kison 資安專家 在2015 hardwear.io.(在荷蘭的頂尖硬體資安年會)
發表的演講與論文 (文一) (文二) 分析WD USB硬碟加解密架構.

OSSLab 完整披露WD USB加密硬碟架構與破解思路.
(2018 11.12 更新)
這篇文章先以 WD  USB I為範例


WD USB I 代(Jmicron 538 等)硬碟全扇區AES加解密.

WD USB II 已經沒有使用全扇區AES加密.使用類似ATA保護方式加密.因此可用繞過或修改韌體方法來解密.
WD  USB III 跟II一樣 使用更嚴謹的韌體保護 使用工廠指令會返回 :VSC ERR INV FUNC CODE REQ   OSSLab已破解可救援.

WD USB I AES 加解密Mount程式原始碼可參考 
https://github.com/andlabs/reallymine
https://github.com/themaddoctor/linux-mybook-tools
https://github.com/SofianeHamlaoui/WD-Decrypte

章節目錄

全扇區加密是怎回事?
怎控制 Usb to SATA Bridge 加解密與mount,umount?
變更用戶密碼狀況
當密碼忘了?

不瞭解破解底層解密結構算法的土法煉鋼
資料恢復設備PC3000 的Onfly 解密
可以暴力破解嗎?

結論 生命與技術都是會自己走出路

 

一.全扇區加密(Hardware-based full disk encryption)是怎回事?

 

 一般硬碟0 扇區的MBR

經過全扇區加密後 一般硬碟0 扇區的MBR

 

硬碟扇區會變成這樣 是因為透過USB to SATA Bridge IC 做硬體AES加解密運算 .在作業系統層就已經得到解密的LBA .可正常使用

打開WD USB 硬碟會發現如下狀況 發現使用了一體硬碟USB電路板

1

3

加密電路板其實就是在一般硬碟電路板上 多了一顆USB to SATA Bridge

做 WD  一體USB 硬碟資料救援第一步 
先改成SATA接頭
要處理的為先把介面改成 SATA 這邊有下面幾種方法

一體USB板本身還保留SATA接點 直接飛線就可以 此法要走USB供電

各路人馬 研發的各種夾具

把COM口通訊也做進去的夾具

當然 也可以用一般 WD SATA  PCB 來替換.但是因為沒有經過 USB to AES晶片.在碟片上資料都全扇區AES加密.

USB  to SATA AES 加密密鑰架構圖 請把下面定義看懂! 否則無法理解本文

KDF(salt+User PW) = KEK , User PW 做了sha⇒ Key-Encryption-Key (KEK):
 
KEK protects Data-Encryption-Key (DEK)  
KEK保護著DEK
DEK = holy long-term HW AES Key
 SATA to USB bridge SOC 接收DEK AES 來解密扇區 此為終極密鑰  有了他不需要eDEK 也不需要KEK
eDEK (encrypted Data Encryption Key)  
存放在  1.電路板上U14 eeprom  2.硬碟韌體區 3.硬碟LBA扇區 (放在尾端 LBA ,USB to SATa 控制器會屏蔽看不到 )

LBA 位置如下

Initio 
500GB: 976769032   750GB: 1465143304  1000GB: 1953519624

Symwave 
500GB: 976770435  750GB: 1465144707  1000GB: 1953521027

Jmicron 
500GB: 976769056  750GB: 1465143328   1000GB: 1953519648

USB to SATA  soc 運作時候是從U14 ROM上取得eDEK

如果想要不透過硬體而用軟體取得eDEK
eDEK 取得方式:1.讀取特定位置LBA  2.短路E20與GND 接點進入USB Bridge downloader 模式 或解焊 dump U14 EEPROM   3.使用工廠指令讀取碟片上的韌體模塊區

一個加密儲存系統 當然不可能蠢到自己儲自己的密鑰(DEK)明碼.
必需同時有正確的eDEK(在ROM跟韌體區)與KEK (空白或用戶大腦中) 才能求得出正確的DEK . 

User 密碼to KEK的算法  不論機種 鹽都固定為 “WDC.”
以下為 User Password=abc123 為例

Counter = 0 
KEK = ”WDC.abc123” 
while counter < 1000 do 
KEK = SHA256(KEK) counter+ = 1 
end while

所以當User Password=abc123

The final KEK (hex) =

82 44 bc 08 9c 4a ab 5e 53 aa ec 57 ae 90 19 a7 
3f 3c a0 6e de 80 7a 70 5b bb a7 10 cf 7c 3a c8

User 密碼to KEK 是由WD 客戶端軟體算出來傳給 Usb to sata AES bridge 晶片. 控制晶片是接收 做過sha 1000次的(WDC+User密碼)

沒密碼時候
這叫hardcoded KEK  
=   

03 14 15 92 65 35 89 79 32 38 46 26 43 38 32 79 FC 
EB EA 6D 9A CA 76 86 CD C7 B9 D9 BC C7 CD 86

同系列晶片未設定密碼時候,KEK都是如上一樣的,但是eDEK可不同了.
因此DEK也會不同

控制 Usb to SATA Bridge 加解密與mount,umount

WD 客戶端軟體軟體使用 VSC 工廠ATA指令集(Vendor Specific Commands) 對控制晶片下達 
status, unlock (authentication), erase, setpassword, changepassword, removepassword.
這邊可以用 sg3 util  程式下達scsi command 做範例.
上鎖

sg raw −r 1 k / dev / sdb c1 e1 00 00 00 00 00 00 28 45 00 00 00 00 00 00 20 <32-byte KEK>

(如用戶密碼為上述abc123 , KEK就為03 14 15 92……)
這時候 就會產生eDEk. 變更用戶密碼狀況

變更用戶密碼時候如果把DEK給變換了,整個硬碟扇區就要重新寫入.很耗費時間並且對原有資料很不安全
因此變化用戶密碼時候還是一樣的DEK.不同的是eDEK 變化了.
變化的用戶密碼(KEK)+變化的eDEK=原來的 DEK 

當密碼忘了?

使用官方程式時候.用戶密碼輸入錯誤五次時候.可以選擇Erase 

下Factory reset (Erase) 時候 ,就會改變DEK ,而產生新的DEK 與eDEK.  
因此要救援的Erase的硬碟 若是沒有保留erase前的 eDEK . 光有原有KEK 想要再恢復資料非常困難.

function GENERATEDEK(HostSuppliedBLOB)
// Key material bytes provided by host computer
KeyBytesHost = HostSuppliedBLOB[8 : 8 + KeyLength]
// Host computer decides if on-board RNG generated key material should be mixed in
bM ixKeyBytesHost = HostSuppliedBLOB[3]
if bM ixKeyBytesHost == 0x01 then
for i = 0;i < KeyLength;i + + do
// Mix key material from host computer with My Passport on-board RNG
DEK[i] = KeyBytesHost[i] ⊕ HWRNGBYTE()
end for
else
for i = 0;i < KeyLength;i + + do
// Use host supplied key material as raw DEK key
DEK[i] = KeyBytesHost[i]
end for
end if
return DEK
end function

對於整個AES 加解密想要更了解 
這有程式原始碼可參考 https://github.com/andlabs/reallymine

不瞭解破解底層解密結構算法的土法煉鋼
資料恢復公司則是用原來硬體環境來處理解密來獲取資料 
南京數據恢復開發的WD 解密電路板.把原來的U14 EEPROM (eDEK) 放在上面IC腳座
再配合空白或已知用戶密碼(KEK). 就可對硬碟解密.
但使用此方法需要全扇區備份.萬一硬碟狀況不理想時候.會降低資料恢復的成功性.
 

資料恢復設備PC3000 的Onfly 解密

 

PC3000 在2015 7 更新後 可以 Onfly 模擬 AES解密檔案系統 就不用替整個硬碟做全扇區鏡像了

 

PC3000 會從硬碟碟上韌體模塊區取得 eDEK.

 

可以暴力破解嗎?

理解 WD AES加密演算架構後  就有AES 暴力破解方式 .
目前資料救援設備MRT產品就提供此項功能.

原理如下
正常硬碟的首扇區最末尾是有特征碼”55AA”的,那麼當被加密的首扇區被解密時如果出現了這個特征碼,那麼程式便認為已經猜解出正確的密碼(KEK)。
因此必需先讀取出加密過後的硬碟首扇區。

加密硬盤的加解密系統在解密時,一樣必須先在硬碟模塊(韌體)或U14 EEPROM 獲得“eDEK”,
暴力破解原理是用“eDEK”與“用戶密碼 (KEK)”合成算法再跟0扇區結尾55AA做比對 如果一樣 表示破解求得KEK成功.
再結合eDEK回算出正確DEK.將整個硬碟扇區解密.

但此項功能會耗時很久.

MRT WD AES 加密USB  密碼找回功能圖

結論 生命與技術都是會自己走出路

雖然只是個廉價並且生活隨處可見的外接式硬碟.但是從中我們可以學習加解密原理.

ACELab 逆向整個WD Passportr加密硬碟 是在這三位資安專家發表之前. 並且已經實做成設備內的功能.
這是因為大量資料救援公司客戶需求 , 有需求就有人會去逆向工程.
所以現實的說 
有真實客戶需求 –>可以有真正獲利–>逆向工程技術->有用的0day ->成熟穩定的產品->不停的修改前進的產品

不管是資料救援設備公司ACELab 、MRT  或是一般資料恢復公司. 就想盡各種手段與設備.
來處理WD USB一體硬碟的資料救援

如果純像數位鑑識設備公司客戶群沒辦法使用他們產品產生正面營收.自然不會研發底層0 day技術
(買個40萬設備 一年只有個位數使用次數 無法回本) 而只能用別人現成的exploit .

感謝我們在一個資訊開放與分享時代. 

OSSLab 的WD USB恢復成功案例

Thx Chang

Author Thx Chang

More posts by Thx Chang