FineArt News

端點防護用 Driver 來控管的優缺點分析

App(應用程式)開啟檔案的過程中,是放在Kernel Mode中的NTFSFAT32等檔案系統中,所以App要開啟一個檔案,不是那麼簡單,必須透經過層層的Windows API,進行開檔前的參數及權限檢查,並由User Mode穿透到Kernel Mode,最後才能使用放在Kernel Mode中的NTFSFAT32等檔案系統。

下面的例子,分別展示了2App,由Notepad.exeWinword.exe使用開檔的流程。

 

 

User Mode

將整個Windows系統區分成上方的User Mode以及下方的Kernel Mode。

在上方的User Mode中,每一個App(應用程式),都以為自己擁有整個User Mode的虛擬記憶體空間,而Windows 會使用分時的概念,讓每一個App都能輪流工作。

而每一個App也會分別使用自己的專屬程式庫,例如:Notepad.exe擁有自己專屬的程式庫Kernel32.DLL 及ntdll.DLL;而Winword.exe也擁有自己專屬的程式庫Kernel32.DLL及ntdll.DLL。

一但Notepad.exe要開啟一個檔案,首先必須要先經由左方的順序,一一經過自己專屬的程式庫,例如:在Kernel32.DLL 中的CreateFileW,及 Kernel32.DLL中的NtCreateFile,最後透過 fastsystemCall穿透到Kernel Mode。

同樣的,如果Winword.exe也要開啟一個檔案,就必須在自己的User Mode世界,依循右方的紫線,使用自己的專屬的程式庫,最後進入Kernel Mode。

 

Kernel Mode

如前文所提,User Mode中,每一個App(應用程式)都有自己獨立的世界,並且互不干擾,因此萬一Notepad.exe當掉了,也不會影響到Winword.exe,但是一但進入Kernel Mode就一視同仁,只有單一世界。

再承接原本的開啟檔案流程繼續說明,在下方的 Kernel Mode 中,(1) System Service Dispatcher中,實際上是一個Kernel API的對應表,經由此表再轉跳到對應的Kernel API,早期有很多駭客程式,會修改這個表中的轉跳點,就可以簡單地攔截Kernel API,後來Windows也對此表做出了防護,不讓駭客隨意地修改這個轉跳表。

之後會再經過NtCreateFile,但這個Kernel API是由NtOsKrnl所提供,不同於User Mode中Kernel32.DLL提供的NtCreateFile,不要弄混了。

再來就是I/O的子系統,這個子系統,呼叫及傳傳遞參數的方法有很大的變化,不再是一般人熟知的API Call,因為I/O的子系統會將這個開啟檔案的命令,連同參數,轉成一種獨特的I/O request packets結構,我們通常簡稱這種結構為IRP。IRP的工作原理,就好像是Windows Message一樣,是研發人員攥寫各種Driver時,必須要使用的重要結構,如果我們要寫好一個Driver就必須清楚IRP這種結構。

而實際運作上,I/O的子系統會將IRP發送給各個低層的Driver,通常來說,這些Driver才可以用來做為控管使用,經過層層的Driver檢查、過濾,最後才能到達NTFS或FAT32等檔案系統中,而這些的檔案系統,才能真正的處理開檔動作。

 

控管時,先設計 CreateFile攔截點

由前文可知,當App(應用程式)要開啟一個檔案,實際上必須經過萬里長征,通過很多層的Windows API,也必須跨User Mode及Driver Mode兩個域。

所以我們一但想要攔截App(應用程式)的開檔動作,實際上有很多方案可以進行。

首先要決定是在User Mode或Driver Mode中攔截,兩種攔截方案的實作方式並不相同,有關User Mode的 Hook API 方案及原理,有興趣的朋友,可以參考精品科技之前發表的技術文件,尤其在X-FORT產品中,也大量的使用了User Mode的 Hook API ,所以能成為一個很好的防護系統。

 

使用Driver 控管

Driver的權限很大,可以做出很多原本不可能實現的功能,所以常常是特殊控管的首選方案,但是缺點也很明顯,因為實作困難,技術門檻高,所以若是開發人員不小心,常會導致Windows的不穩定, 像是常見的當機藍畫面BSOD(Blue Screen of Death),當然,如果能夠成功地實作一個安全的Driver,使用Driver 做為控管方案,其結果也會讓人非常驚豔。

在系統安全性方面,使用Driver 控管,也比較好,因為Windows 64上安裝Driver須要微軟簽章,也因為要通過微軟的檢查,所以多數的駭客,無法使用Driver入侵電腦。

 

優點
  1. Driver權限高,可以做很多事
  2. 可以控管不同使用者,及不同的應用程式
  3. 單一程式即可控管
  4. 安裝Driver須要微軟簽章,不易仿冒
  5. 不須使用者登入即可控管
 
缺點
  1. 門檻高,較不易開發
  2. 一旦發生問題時,恐造成 BSOD
  3. Windows 64上安裝Driver須要微軟簽章
  4. 比較不容易測試Driver
  5. Windows相容性要求較高,如:防毒軟體的相容性