天天看點

窺探一個防毒軟體的驅動

作者:BBLeonard

做為一個開發人員,我的電腦常年都是裸奔的。近來内部要求安裝安全管理系統,內建了一個殺病毒軟體,大概看了下,是Avira公司的。它的驅動中包含一個稱做ELAM類的驅動:

窺探一個防毒軟體的驅動

Early Launch驅動

這種類型的驅動按微軟的說法,會在所有Boot型驅動運作前加載,即是最早運作的驅動,并且需要過微軟WHQL簽名,一般也隻有防毒軟體廠商才會向微軟送出ELAM驅動進行特别簽名。

我們感興趣的是這個驅動會做些什麼,先來看驅動大小,隻有20K,其中還包含簽名資料,那代碼量是很少的。在IDA中看了下導入表:

窺探一個防毒軟體的驅動

導入表中真正有實際作用的函數

發現隻有一個IoRegisterbootDeviceCallback函數有實際使用價值,其它函數都是輔助作用。我們來看一下IoRegisterbootDeviceCallback是做什麼的:

The IoRegisterBootDriverCallback routine registers a BOOT_DRIVER_CALLBACK_FUNCTION routine to be called during the initialization of a boot-start driver and its dependent DLLs.

IoRegisterBootDriverCallback注冊一個BOOT_DRIVER_CALLBACK_FUNCTION回調,該回調在Boot型驅動及其依賴的DLL初始化時被調用。

這就是ELAM驅動能夠從系統啟動就檢查其它驅動的關鍵了。我們看看Avira這個驅動是怎麼做的:

窺探一個防毒軟體的驅動

在BootDriverCallback中檢查每一個驅動映像

VerifyImage函數中它首先檢查自己的驅動映像是否完整,然後逐個檢查其它每個加載的驅動映像的簽名,并根據情況記錄日志:

窺探一個防毒軟體的驅動

檢查自帶驅動是否完整

它内置有三個映像的指紋資料,在加載時先判斷證書釋出者是本公司的,然後比較證書指紋是否正确并記錄日志:

窺探一個防毒軟體的驅動

檢查自己的驅動映像

按照目前逆向的資訊來看,這個驅動隻是檢查并記錄日志,推測因為它即使檢測到非法驅動也不能随便阻止系統啟動,應會在系統啟動後配合其它元件實作清除有問題的驅動。