Skip to main content

儲存加密安全是很重要的課題 這邊來說明一下 ATA加密與SED自我加密硬碟剖析
筆記型電腦上Bios設定有 Password 後,也會自動對機體的儲存裝置設定ATA Password.
這塊其實是弱保護的.WD ,Seagate ,Hitachi ,Toshiba 等舊款硬碟ATA加密 在專用的資料救援設備前是不堪一擊的.

ATA Security 應用還可以應用SSD 開卡處理.或是讓SSD瞬間資料全扇區=0
這對於SSD的硬碟用久了之後,當空間越來越少,也是會有著效能下降的問題,一般若沒有原廠Flash開卡控制程式.則可用安全性的抹除,來恢復效能.

這邊就來從頭講解ATA加密原理與應用。

 

辨識與解鎖有密碼保護的ATA磁碟

 
ATA/ATAPI指令提供一個使用密碼的安全性功能來限制存取硬碟。當這個功能啟用,除非提供要求的密碼,不然韌體會預防一些ATA指令的執行,包括存取內容。這單純只是存取管控的功能,並沒有使用加密來保護磁碟上的資料。
 
Linux 下 hdparm 這個工具可以判斷硬碟是否有啟動安全功能。例如:

# hdparm -I /dev/sda
Commands/features:
              Enabled Supported:
                      *      Security Mode feature set
Security:
               Master password revision code = 1
                               supported
                               enabled
                               locked
              not           frozen
              not           expired: security count
                               supported: enhanced erase
              security level high
              60min for SECURITY ERASE UNIT. 60min for ENHANCED SECURITY ERASE UNIT.

 
這個 Commands/features: 資訊指出 Security Mode feature set 是存在而且啟用了,然後在 Security: 的資訊也證實了功能是支援並被啟用了。
 
如果 Security: 有列出 enabled,就代表使用者密碼已經被設定,磁碟也會在開機時上鎖。如果磁碟上鎖,像是例子的過程是無法存取直到提供正確的密碼。作業系統在存嘗試存取硬碟時或許會生成一個硬碟錯誤或者失敗的指令錯誤。T13標準描述了哪些指令在硬碟上鎖的時候可以使用。在磁碟上鎖的時候存取某些指令包含查詢 SMART 資訊還是可行的。
 
密碼有兩種,一種為 user,一種為 master,兩者在管理的權限上有所不同,如果設定了 user 密碼,Security 功能會被啟用(就如前面的例子),只設定 master 密碼並不會啟動 Security。
 
兩個密碼會有兩種安全性層級的管控,而安全性層級是參照 T13 標準的 MASTER PASSWORD CAPABILITY 位元,可以設定為 high 或是 maximum。如果安全層級設定為 high,那麼 user 或 master 密碼都可以將硬碟解鎖。如果安全性層級設定為 maximum,master 密碼只能做安全性抹除,只有 user 密碼可以解鎖硬碟。
 
如果Master跟user密碼都沒有,又沒特異技術或是設備 .沒錯 這顆硬碟就變成磚塊了.(硬碟ATA Password 存放在碟片上的韌體區 所以更換電路板也不會有用)
 
 
有些電腦或許會在啟動後執行安全性凍結命令以避免發送更進一步的安全指令,甚至有正確的密碼也會(以避免惡意的密碼設定攻擊)。透過 hdparm 的 Security 輸出結果可以判斷這顆磁碟是否被凍結。許多 USB 連接上沒凍結的磁碟就會自動運作,但如果還有問題,這邊有幾個可能性要試試看:
  • 檢查BIOS設定確認啟用/停用凍結指令
  • 使用開機光碟來避免凍結指令被啟用
  • 將硬碟接到不同的硬碟控制卡(非主機板內建)
  • 將硬碟熱插拔(如果支援)
  • 使用一個不支援凍結指令的主機板
 如果你知道 user 密碼而且硬碟還沒有凍結,你可以使用以下的指令來解開磁碟:


#hdparm –security-unlock “mysecret99” /dev/sdb
security_password=”mysecret99″
 
/dev/sdb:
Issuing SECURITY_UNLOCK command, password=”mysecret99″, user=user

 
預設狀態下,user 密碼可以使用 hdparm 指令來提供,而且使用 masrer 密碼需要精確的指定命令列參數 。如果你知道 master 密碼而且安全層級式設定為 high,你可以使用 master 密碼來解所下列的硬碟:
 

#hdparm –user-master m –security-unlock “companysecret22” /dev/sdb
security_password=”companysecret22″
 
/dev/sdb:
Issuing SECURITY_UNLOCK command, password=”companysecret22″, user=master

 
如果不知道密碼,使用一般的工具是不可能存取這顆硬碟。密碼的資訊儲存在磁碟的 service/system 區域中,如果沒有特殊的硬體或工具是無法存取到的。
 
而這些加密方式在安全性強度設定的不同情況之下,有的可以透過原廠預設的值來進行重設進而獲得控制權,有些可透過硬體工具從 service area 回復或重置 ATA 安全功能組的密碼。
 
有些硬碟可能可以透過硬體或韌體的破解而取得資訊,所以安全性研究社群也在不停的創新的方法在難以到達的區域存取與修改資料。
 
 
辨識與解鎖 Opal 自我加密磁碟
Self-encrypting drives(SEDs)是一種全磁碟加密(full-disk encryption,FDE)的形式。不像軟體的FDE(TrueCrypt、FileVault、LUKS 之類)是由 OS 來管理,SEDs是真正建立在磁碟的電路及韌體上的加密。SEDs 是非特定作業系統而且基於非廠商制定的標準。這個國際化的標準制定是由 Trusted Computing Group(TCG)所制定。這個標準是 TCG Security Subsystem Class : Opal,規格V2.00。
一個磁碟的物理驗證如果他是Opal SED的話 會有PSID。Physical Secure ID(PSID)字串會印在磁碟的標籤。這個字串是用在 Opal RevertSP 功能,這個功能可以安全的製造新的金鑰、摧毀所有資料以及將磁碟回到原始的出場狀態。PSID無法從磁碟中查到而且必須直接閱讀或透過QR條碼讀取。有 PSID 字串不代表這顆磁碟有上鎖或有設定密碼,它只是代表這顆磁碟支援 Opal 全磁碟加密。
dsc_0094
全磁碟加密有個雞生蛋還是誕生雞的問題,如果整顆磁碟加密,包括開機磁區,那系統要怎樣執行 MBR 與詢問密碼或其他安全性證書?而解決方案就是在磁碟的系統區域儲存一個影子MBR(與SMART資料、壞區列表等資料同一個區域)。當一個 Opal 磁碟在上鎖的狀態,只有影子MBR可以被看見。它是一群沒有被加密的磁區(可以大到150MB),執行起來就像一般的MBR。這個替代方案可以執行程式碼來要求一個密碼、存取TPM或智慧卡片、或其他安全證書。當磁碟解開後,一般的MBR可被看見,而且普通的開機程序就能進行。
 
有個開源的命令列工具是用來在 Linux 下管理 Opal SED 加密。通常叫它 msed,不過這個工具最近重新命名成 sedutil-cli 並搬家到 https://github.com/Drive-Trust-Alliance/sedutil/。這個工具還在持續開發而且不一定能在所有磁碟上運作。小心的根據指示並確定核心裡的 libata.allow_tpm 有被啟用。
 
下面的指令掃描了一台本地端系統用來找出支援 Opal SED 的磁碟。可以看到四顆硬碟中,有一顆是被偵測到使用Opal 第 2 版:

# sedutil-cli –scan
Scanning for Opal Compliant disks
/dev/sda    2     Crucial_CT250MX200SSD1                              MU01
/dev/sda  no    WDC WD20EZRX-00D8PB0                              80.00A80
/dev/sda  no    INTEL SSDSA2CW300G3                                   4PC10302
/dev/sda  no   Kingsron SHPM2280P2H/240G                       0C34L5TA
No more disks present ending scan

可以查詢磁碟來得到關於 Opal 狀態這些資訊,包含磁碟是否加密、上鎖,或者有影子MBR(這些都顯示在這個範例)

# sedutil-cli –query /dev/sda
/dev/sda ATA Crucial_CT250MX200SSD1                            MU01                               15030E69A241
Locking function (0x0002)
       Locked = Y, LockingEnabled = Y, LockingSupported = Y, MBRDone = N,
       MBREnabled = Y, MediaEncrypt = Y

兩個指令在這使用:一個是停用 locking 然後第二個是通報硬碟影子 MBR是不被需要的(MBR 已經 “Done”)。在這個範例中,密碼是 xxmonkey:

# sedutil-cli –disableLockingRange 0 xxmonkey /dev/sda
– 16:33:34.480 INFO: LockingRange0 disabled
# sedutil-cli –setMBRDone on xxmonkey /dev/sda
– 16:33:54.341 INFO: MBRDone set on

 在這邊,核心資訊(dmesg)會顯示裝置的變化。這個例子中的狀態就會變成如下的顯示:

# sedutil-cli –query /dev/sda
/dev/sda ATA Crucial_CT250MX200SSD1                            MU01                       15030E69A241
Locking function (0x0002)
       Locked = N, LockingEnabled = Y, LockingSupported = Y, MBRDone = Y,
       MBREnabled = Y, MediaEncrypt = Y

磁碟再也沒有上鎖,而且影子MBR也看不見,真正的MBR與其餘加密磁碟的部分都可使用,而且他們只需要使用一般的取證工具就能存取。現在Linux安裝的磁區表可被看見,顯示如下:
screen-shot-2016-11-22-at-8-07-28-pm 
一個上鎖的磁碟如果沒有啟用影子MBR的話,使用核心dmesg輸出狀態時會出現多個錯誤訊息。
 
有些 Opal 磁碟使用這個工具或許會有看起來不同的結果,在真實的狀況下,金鑰或許不是個簡單的密碼,而是與TPM綁定,或是其他的企業級安全機制。如過在這種情況下使用了錯誤的指令, 磁碟上的資料會不可挽回的摧毀(如果金鑰被毀的話會即刻發生)
 
從取證的方面來看,映像影子MBR來分析或許是很有用的,它會包含從這個磁碟加密被設定起的有趣人造痕跡。它也可以預料到相容Opal 的磁碟會把資料隱藏在影子MBR區域裡。
 
 
ATA安全刪除的指令
 
ATA標準定義了一個安全刪除的指令讓你可以直接對磁碟做抹除。這個 ATA SECURITY ERASE UNIT 指令會對磁碟上所有使用者可以存取的磁區寫零。而 EXTENDED SECURITY ERASE 會寫入一個預先定義的範本(由磁碟製造商定義)來取代寫零。
 
如果沒有先設定密碼,有些磁碟會拒絕刪除的指令。下面的範例是有顆硬碟已經使用過,並在使用 –security-erase 命令前先將密碼設定為 dummy:
 

#hdparm –security-erase dummy /dev/sdh
security_password=”dummy”
 
/dev/sdh:
Issuing SECURITY_ERASE command, password=”dummy”, user=user

這個磁碟已經被安全的抹除並可以再度使用。如果磁碟要求設定一組密碼,別忘記在安全的刪除完成後去停用密碼。 

這擦除指令也可應用於 SSD 清除回收垃圾塊.恢復速度.

 
 
毀掉加密磁碟的金鑰
 
你可以透過毀掉所有已知的金鑰來摧毀加密磁碟與檔案系統。如果這個金鑰是透過安全裝置像是智慧卡、TPM 或 Opal 磁碟產生,那它只會有一支金鑰存在。如果是企業環境中的檔案系統或磁碟,他們或許會有個備份或第三方拷貝以方便做回復。
 
清掉金鑰的動作在作業系統層級的加密磁碟上,像是微軟的 BitLocker、蘋果的 FIleVault、Linux 的 LUKS/sm-crypt 或 TrueCrypt 等版本,會需要詳細的知識才知道金鑰被存放在哪。金鑰或許是密碼/短語保護摒除存在磁碟中一個檔案或某幾個區塊裡。它們也可能儲存在別處的一個金鑰檔。如果沒辦法鎖定並完全清除掉那個私人金鑰,那只能清掉磁碟並做全磁碟的清除。
 
基本上,加密外接USB隨身碟在弄丟密碼時會有個原廠重設功能,這可以用來毀掉金鑰及整個磁碟的內容。
 
毀掉 Opal SED 磁碟上的內容也是迅速而簡單的,只要透過輸入 PSID 來摧毀加密金鑰。PSID通常會用QR條碼印在外盒上,可以用掃描代替手動輸入。PSID 無法透過 ATA 指令查詢磁碟來獲得,只能在磁碟的外盒找到。
 
而 sedutil-cli 指令中有個特別的選項用 PSID 來做無法倒回的重置磁碟金鑰:

# time sedutil-cli –yesIreallywantotERASEALLmydatausingthePSID  
                                3HTEWZB0TVOLH2MZU8F7LCFD28U7GJPG    /dev/sdi
    – 22:21:13.738 INFO: revertTper completed successfully
 
real 0m0.541s
user 0m0.000s
sys 0m0.000s

 
磁碟中的加密金鑰已經被重置了,而且資料也有效的清除了。磁碟現在是原廠重置、解開、也可以再使用.擦除一顆120GB的SSD所需的時間大約是半秒鐘。
 
 
 
 
 未知密碼ATA 加密的破解
 
舊款硬碟ATA 密碼 沒有鎖死限制 這邊這套硬體工具MRT 可以做 暴力破解ATA密碼
但是對於硬碟比較不適用 因為硬碟通電上電要時間.耗時會頗長
image_thumb.png
 
 
 
或是使用 Pc3000 ,MRT等韌體層工具,可以直接從硬碟碟片上韌體層Service area 讀取ATA 密碼
image_thumb.png
 
 
 
或直接重設定密碼 
image_thumb.png
 
這些都能夠簡易破解密碼 但是針對都偏向於非SED硬碟與SSD.
Thx Chang

Author Thx Chang

More posts by Thx Chang