2013年4月28日 星期日

Master Boot Record (MBR) Bootkit

Master Boot Record (MBR),中文又叫做 主開機紀錄 或 主引導磁區,MBR位於電腦硬碟最起始的SECTOR。
MBR 可說是電腦在開機的時後不可或缺的一環,當電腦按下 POWER 鍵,BIOS做完POST (Power-On Self Test),接著便會將 MBR 載入到記憶體 0000:7C00,然後將CPU執行的控制權交給 MBR 這段程式碼。

一般來說,MBR所記載的開機程式碼,都是固定的。 如下圖所示 Windows XP MBR sample:
(圖片的來源取自於: http://thestarman.pcministry.com/asm/mbr/Win2kmbr.htm ,跟著大師學習)




而 MBR 的程式碼的部份 (0000-012B),主要是讀取Partition Table (ps: partition table裡記錄的就是硬碟裡的分割磁區,假設一顆硬碟裡有兩個分割槽: C槽跟 D槽,那麼 partition table 裡面就會有這兩筆 record)裡的 Active Partition (0x80),以上圖來說 01BE 的 80 便是ACTIVE的 PARTITION,而ACTIVE的 PARTITION 會指到對應的可開機的BOOT PARTITION,一般來說就是 WINDOWS OS 的BOOTLOADER 安裝所在,而假使 MBR 找不到對應的開機磁區,這時電腦螢幕便會看到藍紫色裡的ERROR MESSAGE (ex: Missing operation system.)。(PARTITION TABLE跟後續的WINDOWS OS的BOOTLOADER 這邊就簡單帶過,不是本篇的重點)

而所謂的 MBR BOOTKIT ,便是會將自己的惡意程式塞入MBR裡,藉由MBR開機的時後便執行起來,以往比較常見的BOOTKIT都是直接代換掉MBR 原先的 CODE 部份,換成自己的惡意程式。不過最近倒是遇到了一些更機車的變種,是修改USER的PARTITION TABLE,一般來說partition table 只要壞了,那麼那顆硬碟也就廢了,電腦不會認得裡面的資料。

底下的圖,是改自 自己電腦的一個sample,其中 MBR BOOTKIT是將自己的CODE 放在硬碟的第 52 (0x34) SECTOR 裡:

之前有段時間因為一直收不到sample,造成 rescue disk detect 不到,而無法清除的窘境... (荼)。