Skip to main content

這是OSSLab最近收到的案例
客戶的DB被勒索病毒加密. 
(Wallet ,另外一個cesar 也有機會可以處理)

 


看起來好像DB (MDF檔案)數據 沒有加密.

那該怎下手?先瞭解一下 SQL 資料庫結構 , MS 有專文介紹  MDF 基本單位為Page .
Page 大小固定8KB.  Header 96 bytes  
網站寫的有點含糊
Page 包含 : Data ,Text/Image,Global Allocation Map, Shared Global Allocation Map,Page Free Space,Index Allocation Map
Bulk Changed Map,Differential Changed Map

這案例慶幸的是看起來 DATA 沒有加密.但是Header等 都被加密了.
還有資料嗎? 去Github上亂翻 Opensources.  找到這個專案 OracMDf  
程式碼內有 MDF  Pages結構  下圖僅為MDF  Header. 
 

最重要的為  16-21 NextPage ID   跟32-35 PageID

再利用了 SQL Trace Flag指令:dbcc 

dbcc traceon(3604)
go
dbcc page(dbid,fileid,pagepid,3)

順序正確.Page Header參數正常
驗證MDF Page Header解密應該無誤

使用自行編寫的Script 來重組MDF  Page Header. 

成功恢復 客戶資料庫資料 

 

 

看起來是有些勒索病毒的 encrypt 算法為了求效率
對於大型檔案 像SQL 的mdf 他是對mdf page結構 header 加密 ,文本沒加密 .所以說有機會沒有動到Schema跟Data
不過像Wannacry 對DB Data是會全加密的.

當遇到了 駭客攻擊,硬體意外,加密病毒. 損壞或被加密SQL . 又沒有Cluster Storage或備份狀況下怎辦?
下面有些原則非常重要. 
1.遇到加密病毒最好方法是睡眠.因為保持記憶體狀況 還有機會取出裡面RSA 密鑰質數.
2.遇到駭客攻擊也請睡眠.這是最好保存證物的方法. 
3.如果是硬體上的損壞.請立刻關閉損壞硬體.特別是高轉速硬碟. 非常容易刮傷硬碟盤片.
4.Storage Rebuild 跟檔案層的FSCK都不要做. 容易破壞掉資料
5.資料如果很重要,就算有請MIS,DBA,原廠 或外包SI處理, 建議先跟OSSLab聯絡.我們會給你意見降低資料再被破壞可能性.
6.若真的不幸要到資料恢復請選擇具有底層恢復技術的公司.而不是Program  kiddie  資料救援公司.

恢復的資料庫有可能不夠完整. 但是還是可以如下面應用.

1.有增量備份再疊加上去.資料庫完整性就很高
2.假設連AP應用程式碼都沒有了,至少有恢復的Table跟資料庫結構可以參考
3.核對後 節省人工再輸入時間

Leave a Reply