Youhui Zhang, Yu Gu, Hongyi Wang, Dongsheng Wang
Tsinghua National Laboratory for Information Science and Technology,
Tsinghua University, 100084, Beijing, China
基于存儲器的入侵檢查系統(IDS),利用虛拟機和智能磁盤技術。虛拟機監控器(VMM)可以防止IDS自身發動特定攻擊,而智能磁盤技術為IDS提供了受控的虛拟機的檔案系統的整體視圖。
使得虛拟磁盤維護一個扇區到檔案的映射表(也叫做檔案--存儲塊層次),和如何聯機檢測對檔案的修改。基于以上特色,普通的檔案層次的入侵檢測規則将被轉變為扇區層次的,以便将入侵檢測函數內建到虛拟記憶體中。我們基于QEMU VMM和 windows xp(虛拟OS)實作了這樣一個原型。
很多入侵檢測系統是基于主機的或基于網絡的。近年來出現了基于存儲器的IDS.很多類型的入侵在重新開機後仍然持續,因為磁盤的持久化資料發生了改變,而這是能被存儲系統檢測到的。更進一步來說,存儲系統是十分适合用來做這個的,因為即使主機系統已經被入侵了,它們還能繼續工作。
面臨一個困境:若IDS運作在主機裡面,那麼它就擁有系統的整個視圖,而它又是會被外部的攻擊所威脅的。若IDS運作在主機外,它對主機的視圖又變得糟糕。
一方面,基于我們的檔案感覺的塊級别的存儲器,它能對被監控的主機的檔案系統的狀态有很好的可見度,另一方面,通過虛拟機技術又能使IDS維護很強的獨立性。我們提出的IDS可以被用作虛拟塊級别存儲器的內建部件。
我們的方法就是讓虛拟機監控器(VMM)把IDS拖到被監控的主機“外部”,這就在IDS和攻擊者的惡意活動中間劃出了一道障礙。一般來說,VMM為上層的OS和應用建構了一些虛拟硬體接口,包括常見的塊級别存儲接口。但攻擊者通常利用系統檔案,是以現有的基于存儲器的IDS通路規則都是根據檔案而不是資料扇區來定義的。
我們提出了檔案感覺的塊級存儲來解決這個問題。這種類型的存儲器可以識别處那個檔案正被上層的OS通路,進而使得相應的檔案層次的入侵檢測規則得以采用。我們設計了一個工具來協助虛拟存儲器進一步發現檔案系統結構的細節,存儲器系統維護了一張扇區到檔案的映射表,并且利用這張表實時地将檔案層次的ID規則轉換為扇區層次的ID規則。
貢獻:1)它基于虛拟機技術和智能存取,這些使得IDS和目标主機相分離,而同時又可以獲得檔案系統的整體視圖。2)利用FAT32檔案系統實作了一個檔案感覺的塊層次虛拟存儲器,這可以被進一步用做運作入侵檢測的虛拟磁盤。
一個基于規則(或叫基于政策)的入侵檢測系統由三個部分組成:1)通路規則及指定規則的機制。2)監控違反規則的機制。3)對于違反規則所采取的行為。我們重點放在1)和2)。
我們的IDS利用VMM技術,它在IDS和可能的入侵間提供了一道障礙。但一個在虛拟機外部運作的IDS隻能通路硬體層的狀态(例如。實體記憶體頁面數和磁盤扇區數等)和事件,而這不是通路規則工作的層次。【9】通過使用虛拟機内部的作業系統結構的詳細知識來在OS級别語義層次解釋這些狀态和事件。在我們的方法中,采用了類似SDS的方法來發現存儲磁盤上的檔案系統資料結構,進而完成檔案到扇區的轉換。
我們的原型支援FAT32檔案系統。我們引入了一個工具來協助虛拟存儲磁盤進一步發現這些存儲扇區,這些扇區包含了我們感興趣的檔案的資料和中繼資料。這是通過以預先定義模式浏覽和(或)讀取相關檔案和(或)目錄來告訴下面的虛拟磁盤那個檔案或目錄正在被通路,而後者就會将相關的扇區進行标記。當然,這需要一些FAT32的知識來分析其複雜的中繼資料結構,例如dir-entry結構。
總而言之,進過上面這些步驟後,存儲磁盤将會維護一張扇區到檔案的映射表。通過VMM,存儲器也在另一個OS進行模拟,進而可以很直接地轉換和指定檔案層次的入侵檢測規則。然後這些就可以被實時地用于監控任何違反規則的行為。系統架構圖如下:
clip_image001
推斷存儲磁盤的結構
成功的入侵者經常修改存儲的資料。可以設定一些規則來監控對檔案内容和(或)相應的中繼資料的修改。規則可以指定那些檔案和它們中繼資料的那些部分會被監控,對這些值的何種類型的通路将構成一個違反行為。
1) 一些受保護的檔案或目錄是隻讀的。不允許對相關的資料或中繼資料的修改,被讀操作引入的除外(如對FAT32的DIR_LstAccDate屬性的修改)。
2) 更新模式:必須檢測更改模式,像對檔案非附加性的修改(例如系統日志檔案)
3) 可疑内容:它必須檢測出現的可疑檔案名字(例如隐藏的”dot”檔案)或内容(例如已知的病毒或攻擊工具)。
是以扇區到檔案的映射表必須包含下列内容:
1) 包含檔案中繼資料的扇區
2) 包含祖先目錄資訊的扇區
3) 包含檔案内容的資料扇區
我們開發了一個工具來發現檔案系統資料結構:
1) 将所有的FAT和保留扇區排除。這一步和工具無關。FAT32檔案系統由很多連續扇區組成,如圖:
clip_image002
a) 保留扇區,位于最開始:第一個保留扇區是啟動扇區(分區啟動記錄)。它包括一塊名為BIOS參數塊(有一些基本的檔案系統資訊(尤其是其類型),和指向其他扇區位置的指針)的區域。
b) FAT區域:出于備援的需要,它包含了檔案配置設定表的兩份拷貝。這些是分區的映射表,指明了簇是如何配置設定的。
c) 接下來的扇區用于存儲根目錄和其他所有資料。
保留扇區和FAT扇區的總數目可以通過啟動扇區裡的某些域計算出來,是以可以進一步将這些扇區排除掉。
2) 找到包含目錄條目的扇區。
工具對目标檔案系統進行全面的檔案/目錄枚舉,并将産生的檔案清單儲存在記憶體中供第3)步使用。相應地,智能磁盤同時記錄被通路的塊集合(用A)表示。
3)産生扇區—檔案映射表。
基于2)中生成的檔案清單,工具逐一讀取目标系統的所有檔案。每個檔案都逐項讀取,并且通路單元是一個扇區(512位元組)。當一個檔案讀取完畢時,工具将同時寫入一系列預先定義的資料(以檔案名結尾)到磁盤上,這些資料用于連續的檔案讀取時作為一種分割,進而協助磁盤建構一張扇區—檔案映射表。
這個過程中涉及到的所有塊也會被智能磁盤所記錄(用B來表示)。很明顯A和B的差集包含了所有資料塊。
clip_image003
4)定位相應的檔案和目錄的目錄項
這一步也是通過磁盤自身完成的。一個FAT32目錄扇區隻是包含32位結構的一個線性表,名為FAT32位元組目錄項結構。
DIR_NAME,檔案的簡短名字:目錄扇區的第二個目錄項的名字被設定為”..”,這表明它是目前目錄的父目錄。
DIR_Attr,檔案屬性:最有用的屬性是ATTR_DIRECTORY,這個表示目前項是其他檔案的一個容器(目錄)。
DIR_FstCluHI,DIR_FstClusLO:此項對應檔案(或目錄)的第一個簇的序列号.
DIR_FileSize:32位DWORD,包含了檔案的大小(以位元組),對應一個目錄,設定
為0。
通過上述屬性,當給定一個檔案的全路徑名時,可以很容易得到包含其對應的目錄項(中繼資料)以及它的祖先目錄的資訊的扇區的位置。我們可以在根目錄扇區中找到第一級目錄,然後通過DIR_Name, DIR_FstCluHI,DIR_FstClusLO找到下一級,直到目标被找到為止。
其他屬性包括:DIR_WrtTime,DIR_WrtDate,DIR_CrtTime,DIR_LstAccDate,表示上次寫,建立或通路的時間。
當特定的操作作用在一個檔案或目錄上時,會出現下列現象:
删除:DIR_Name的第一個位元組會被設定為0xE5(對于FAT32, 0xE5意味着目錄項為空)
重命名:通過先删除原來的,再建立一個新項完成。
修改屬性:目錄項的對應域會被修改。
修改檔案内容:通過删除原來的,再建立一個新項,最後DIR_WrtTime和(或)DIR_WrtDate會被修改。
總而言之,對檔案或目錄的修改将修改對應的目錄項的一個或多個域,而這可以被存儲磁盤識别出。
到目前為止,扇區分布資訊已經被虛拟磁盤所擷取。對于上層OS的任何寫請求,磁盤講會執行下列步驟:
1) 查找扇區—檔案映射表來找出扇區是否被監控。若沒有,則正常執行并等待下一個請求,若是,則進入下一步。
2) 若被一個可疑内容相關的規則所保護并且扇區是資料扇區,它的内容将會被檢測來定位可疑内容。若檢測出,就被視為違反規則。
3) 若相關聯的入侵檢測規則是檢測特定檔案名是否出現,并且扇區是一個目錄項,則檢查DIR_Name屬性是否違反規則。
4) 若是一個隻讀扇區,寫操作本身是一個違反(除了讀操作引入的)。例如,目錄項的DIR_LstAccDate屬性被修改。
5) 若相關規則是更新模式,将執行某些特别的檢測。例如檔案/目錄的時間的復原是禁止的,磁盤将讀取原先的DIR_WrtTime,DIR_WrtDate,DIR_CrtTime,DIR_LstAccDate并和新值進行比較,若任一時間出現復原,則被視為違反。
FAT32位元組目錄項結構包含DIR_NAME等屬性,這些屬性可以被用作識别一個扇區是否是一個合法目錄,對于第2步,集合A的每個扇區被檢測的結果都是YES。
在第3步中,當一個檔案結束讀取時,工具會同時寫入一系列預先定義的資料(以檔案名結尾)到磁盤中去。為了驗證我們的猜想,兩個連續預定義系列之間讀取的扇區(集合A與B的差集)被按序集中起來構成一個檔案,并用這個檔案和OS視圖中相同的檔案進行比較。結果是兩個檔案完全一緻。
我們選擇了一個開源産品,QEMU來作為VMM,它是一個使用了動态解釋進而獲得很好的速度的模拟器。它可以仿真一個完整系統,包括一個或多個處理器和其他各種裝置。是以,可以不做任何修改就用來運作各種作業系統。更進一步,它還引入了一個加速器子產品(名為KQEMU)來增加其速度。在這種模式下,它直接在主機處理器上運作大部分目标代碼,進而達到近乎本地的性能。
在QEMU中,磁盤是通過鏡像檔案來模拟的,并且支援多種磁盤鏡像格式,這些格式的差別在于内部資料組織方式不同,但外部接口是一緻的。是以,我們選擇最簡單的俄格式raw來建立鏡像檔案,它的大小是2G位元組。
我們使用最新的QEMU源代碼并在XP上編譯,然後使用如下指令啟動:./qemu.exe –had[image file name] –cdrom [windows xp installation ISO file] –boot d –m 512 –L ./pc-bios/
這表示從cdrom(安裝ISO鏡像檔案)啟動VM并且我們講winXP安裝在虛拟磁盤上,檔案系統格式為FAT32。
原始的磁盤為上次的子產品提供如下函數:
Raw_open,raw_read,raw_write,raw_close,raw_create和raw_probe.
我們對前四個函數進行了增強:
1) raw_open:增加兩種打開模式:發現模式和入侵檢測模式。第一種模式用來在磁盤上發現檔案系統資訊,第2種開啟入侵檢測并且加載扇區—檔案映射表來記憶體中。
2) raw_read:對于發現模式,它記錄3,4兩步中通路的塊,進而建構一個扇區—檔案映射表。對于入侵檢測模式,隻進行一些日志操作。
3) raw_write:對于入侵檢測模式,它将檢測可能違反規則的任何寫操作。
4) raw_close:關閉鏡像檔案并存儲映射表到一個存儲單元中,這個單元不能被VM所通路。
第一步開啟ID函數是為了發現WinXP系統鏡像檔案中的檔案系統分布。在發現模式下,這個鏡像檔案作為一個普通的驅動進行挂載(不是系統驅動)。然後我們用VM中的工具來發現虛拟原始存儲器的分布。在這個階段,我們發現WinXP SP2的系統驅動(預設安裝模式)包含了7246個檔案,平均檔案大小為134K并且檔案全路徑名的平均長度為40位元組。
然後可以對原始存儲器指定一些ID規則。支援三類警告信号,包括資料/屬性修改,可疑内容和更新模式。相應地,是以規則都存儲在一個配置檔案中并且格式如下:
clip_image004
在我們的原型中,受監控的扇區清單是一個整數數組:它的索引就是資料和目錄扇區的位置号。任一資料扇區隻屬于一個檔案或目錄,是以一個指針被存儲為數組單元,它指向一個包含檔案名及相應規則的檔案結構。
對于發現模式來說,會維護一個Hash表,這個表的鍵是檔案名,而對于的值是中繼資料的ID規則。當一個目錄項被修改時,它的DIR_Name會被用來通路Hash表,進而擷取對應的規則。
當磁盤得到需要的資訊并建構好映射表後,它就被作為系統驅動挂載來以ID模式啟動VM,然後開始實時監控磁盤操作。若任何違反行為發生,ID會通知系統管理者。
本文轉自Phinecos(洞庭散人)部落格園部落格,原文連結:http://www.cnblogs.com/phinecos/archive/2007/11/27/974720.html,如需轉載請自行聯系原作者