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 不到,而無法清除的窘境... (荼)。

2013年4月27日 星期六

Linux Hardware Detection

在玩 Rescue Disk 的時後,當初遇到最頭痛的問題是 hardware 問題。

比方說 我有一台電腦的 硬碟 Linux 根本 MOUNT 不起來。
這時後理想的情況是找出 LINUX 跟 HARDWARE 的關係,讓LINUX也能認得那顆硬碟。

目前手邊知道的方式有兩個:

  • 其中一個是用 Hardware Detection Tool (HDT): Link

    這個 tool 一直到近幾個月都有在更新,可靠度應該也是不錯的。玩open source有趣的一個地方,是像這樣看到一堆人再做各式各樣的東西。

    底下的這張圖,是我用 vmware 截取下來的,它可以很清楚的列出這台機器的硬體所需要Linux Kernel Module的支援 (ata_piix, i2c_piix4 ... etc)。



  • 另一個方式,是用 COMMAND LINE 下指令取得資料。

    雖然我本身不太玩HARDWARE的東西...,不過一般來說 PCI 扮演著主機板跟HARDWARE DEVICE間接連的重要角色。而 LINUX 也提供 "lspci" - list all pci device 這個有用的指令。而 "lspci -k" , -k 這個參數 是可以附帶列出 Linux 對應的 kernel driver/module。

    如底下這張圖所示:



    另外 lsmod, lsusb ... 似乎也都是些有用的指令。


而在硬碟找到對應的 Linux Kernel Module,進一步可以在製作 LINUX KERNEL時,決定要不要將對應的 KERNEL Module/Driver 放入製作的 LINUX KERNEL。
底下的圖,是在編譯LINUX KERNEL前的 make menuconfig:


不過要真的快又正確的的找到所需的 LINUX KERNEL MODULE跟DRIVER,大概還是需要相當的經驗 Orz...