侯鑫美 董開坤



摘要
隨著信息化時代的到來,網絡安全越來越取得人們的重視,惡意病毒與程序一直是安全工作者的防護中心,網絡安全攻與防的博弈從未停止。本文圍繞惡意程序對主機系統狀態更改的監測為核心,提出了一種基于Windows服務的后臺監測方式,利用DLL注入與HOOK API技術從多個維度監測系統的異常行為,進而攔截異常行為。該方法彌補了當前惡意行為監測維度單一的不足。更值得一提的是,本文采用一種內核層次的注入方式,通過分析注入過程的系統調用,將內核級API作為注入的切入點,解決了當前主流操作系統對注入行為的限制,使跨平臺的通用注入成為可能。最后,系統以Windows服務的形式運行于后臺,降低能耗,提高運行穩定性,同時本文提出了本體自御集的概念,為惡意行為監測提供了更深層次的研究方向。
關鍵字:Windows服務, 內核級注入, API HOOK, 本體自御集
0 引言
計算機發展至今,縱觀中國互聯網安全25年的演進歷史[1],互聯網用戶的隱私與財產安全等正遭受到前所未有的嚴峻挑戰。為此,本文提出了一種基于惡意行為特征檢測的主動防御策略,彌補現有檢測方案健壯性不足的缺陷,從注冊表、文件、進程、建立本體自御集等多個方面綜合抵御惡意行為,從源頭杜絕危害。
Windows平臺面臨的威脅主要有宏病毒、網頁病毒、腳本病毒、Win32 PE文件病毒等。盡管病毒種類千變萬化,各類病毒卻仍然保持自我復制性、傳播性、潛伏性、破壞性等常態特征。病毒通過對FSO的創建,進而對文件施行添加、刪除、修改、拷貝等操作以達到病毒的自我復制。病毒感染主機后,利用注冊表獲取操作系統與軟件相關版本信息,探測相關漏洞加以利用。通過修改注冊表,實現開機自啟、常駐內存及一系列的惡意行為[2]。
文獻[3-4]提到基于特征碼數據庫的檢測技術,當前主流的云查殺通過網絡傳輸數據進行特征碼匹配而獲得快速查殺。但基于特征碼的檢測只能對數據庫中存在的病毒進行檢測,無法實現未知病毒的防御技術,呈現出一定的功能缺失。文獻[5]提出了一種基于靜態特征來展開機器學習的檢測方法,通過對網頁靜態特征標簽的提取,利用機器學習的方法對網頁提供設計分類,但實驗結果表明,這類基于靜態特征的機器學習/統計學檢測方法卻有著較高的漏報率。文獻[6-7]重點研究了基于注冊表監控的檢測技術,但是,通過對病毒運行原理的剖析就會知道,病毒對系統造成的威脅復雜而繁瑣,僅是依靠注冊表檢測未免失于片面。文獻[8]對殺毒軟件升級流程的安全性給出深入分析后可知,其防護方法需運用多種殺軟,并且過程中更加關注漏洞的挖掘,而且也并未構建實際的防護措施。經過如上解析探討后表明,這些檢測技術在性能上各有千秋,但在整體卻都未曾具備自我防御的能力,很難抵御病毒對檢測系統自身的惡意終止。為此,綜合大量文獻的研究成果,本文從主動防御的角度出發,提出了一種基于惡意行為檢測的改進技術,利用API HOOK技術全面監控操作系統的進程狀態、注冊表狀態及文件狀態,再通過與本體自御集的功能比對,從惡意行為發生的源頭來實現防微杜漸。除此之外,考慮到檢測系統的健壯性,為防止病毒對防護系統采取輪詢性惡意終止的反殺策略,本文繼而又提出了一種基于Windows服務注冊及DLL注入技術的聯合守護技術,經過測試,該方案能夠完成有關惡意程序對本機的惡意行為特征的檢測。
1 系統設計
惡意行為特征檢測是對Windows操作系統的行為防護。出于功能性、健壯性、與實用性等多方考量,系統框架設計如圖1所示。進程守護模塊負責維護系統的健壯性,監測模塊負責記錄windows系統行為,并攔截本體自御集中記錄的惡意行為。注入模塊實現了監測模塊在進程中的注入,用以監控系統進程狀態,攔截注冊表與文件的異常行為。系統同樣設置日志模塊,用以保存其過程工作狀態。在此,針對系統設計中的重點功能做出如下論述。
圖1 系統框架設計圖
Fig.1 System framework design
1.1 系統穩定性設計
本文利用Windows服務對檢測系統進行健壯性守護,根據Windows服務技術[9],選用ServiceMain作為監控程序的入口函數。在此過程中,ServiceMain函數將通過調用RegisterServiceCtrlHandler函數來回調控制請求處理函數CtrlHandler,而CtrlHandle則負責響應來自SCP的控制命令并告之SCM服務狀態信息。
1.2 監測注入設計
動態鏈接庫(dynamic-link library,DLL)是Windows操作系統提供的一種可執行文件,本系統使用DLL作為監控模塊的容器。為了監控系統進程狀態,需將監控DLL注入至系統進程空間內,但Microsoft出于系統穩定性的現實需要,在設計操作系統時對進程內存享有訪問控制權限。這種設計阻礙了進程資源共享,為此可利用遠程線程注入技術打破界限[10]。但常規注入方法卻附生有一定的局限性,對64 bit操作系統及win7以上版本操作系統都不能提供有效支持,利用該技術實現的應用程序在跨平臺性及實用性上都將陷入明顯困境。為應對這一挑戰,研究應對這一缺陷,我們采用一種更為貼近的內核級別的注入方式解決進程注入的跨平臺問題,該技術將在后文的系統實現章節中詳細解讀。
1.3 監測攔截設計
監測攔截模塊時利用API HOOK技術來組織構建整個配置過程的。HOOK技術是當前實現Windows API攔截的主要技術,總而言之就是API函數的重定向操作[11]。PE文件載入內存后,隨即將動態引進導入模塊及調用函數,同時由IAT表記錄導入函數的實際地址。監測模塊通過將IAT表中原函數地址改為相應鉤子函數的實際地址,當病毒程序嘗試調用被攔截函數時,將跳轉至本次研究自定義的鉤子函數,若為正常的應用程序,鉤子函數僅負責記錄工作日志,執行結束后則將返回繼續執行原函數工作,至此監測系統完成一次攔截工作。
2 系統實現
2.1 建立“本體自御集”
文獻[12]提出了一種以“生物體免疫”為核心思想的注冊表異常行為檢測技術。受該技術啟發,本文通過建立“本體自御集”對惡意網頁特征行為進行檢測。
“本體自御集”以計算機進程為研究對象,主要數據來源分為2部分。其一,系統正常進程常見的仿冒進程。病毒制造者經常以假亂真,通過更換相似字符、添加字符等手段為病毒進程命名,借此與系統正常的進程名混淆視聽,使病毒進程長期潛伏在操作系統中。其二,通過訪問惡意網頁,積極響應網頁的惡意行為,記錄新創建進程。絕大多數惡意網頁中都包含惡意腳本,惡意腳本的實際執行后可能在本地創建新進程,為此可將訪問惡意網頁期間新創建的進程作為惡意進程,讓其作為本體自御集的一部分。通過綜合分析常見的系統正常進程和已知病毒進程,建立本地自御集,列舉部分基礎防御進程如表1所示。
2.2 特征行為檢測
計算機被感染后,病毒為了隱藏自身或對系統形成惡意破壞,都會不同程度地修改注冊表,或刪除系統重要文件等。以Win32 PE病毒為例,由于其具備的寄生特性,通過加載動態鏈接庫kernel32.dll,同時一并取得修改注冊表函數的API地址,進而調用Windows API對注冊表啟動打開、查詢、讀寫、刪除等操作進程。系統采用API HOOK 技術,攔截相關操作的Windows API函數以監測系統注冊表及文件的狀態變化,部分用于注冊表/文件狀態監控的被HOOK函數及替換函數如表2所示。
特征行為檢測模塊在定制開發成動態鏈接庫后,被系統所有進程導入加載,以此達到監控系統安全的目的。當負責監控的DLL被加載送入后,DLL_PROCESS_ATTACH將觸發IAT表的修改,對API進行HOOK,同時判斷進程是否屬于本體自御集,若某進程處于自御集就可設置標志位為TRUE,反之置為FALSE。DLL_PROCESS_DETACH則觸發IAT表的還原,即結束對Windows API的HOOK工作。特征行為檢測模塊被進程加載后,其基礎檢測原理如圖2所示。
2.3 進程防護
進程是惡意行為特征檢測的對象之一。經測試,病毒運行總伴隨著新進程創建,監控系統監測新進程創建與進程行為。進程防護模塊通過維護新、舊2個進程鏈表,配合定時刷新獲取系統快照的方式發現新創建進程。技術研發中,pastList用于保存上一時刻系統進程快照,currentList用于保存定時刷新后系統進程快照,通過對比鏈表元素,發現新創建進程,利用遠程線程注入技術,向新創建進程注入特征行為檢測模塊,以此監控新創建進程行為,并檢測新創建進程是否為惡意進程。除此之外,程序運行初始時刻,則將枚舉所有進程。為保證系統所有進程的安全,將為所有進程完成特征行為檢測模塊的注入。
研究中,利用創建遠程線程的方法向目標進程注入特征行為檢測模塊。前文提到傳統注入方式并不可靠,本文采用了一種構造內核函數原型的改進方法來彌補這一缺陷。以Win7為調試環境,利用OD工具對CreateRemoteThread函數進行堆棧調用分析,由此發現,CreateRemoteThread并沒有直接向內核級請求調用ntdll.dll-->ZwCreateThreadEx,而是請求調用了kernelbase.dll-->CreateRemoteThreadEx函數,其中CreateRemoteThreadEx函數與CreateRemoteThread函數具有相同的參數原型,并執行相同的函數行為。CreateRemoteThreadEx函數又進一步調用了ntdll.dll-->ZwCreateThreadEx完成用戶級到內核級的調用轉換。綜上,通過動態實現NtCreateThreadEx系統調用,即可完成任意版本操作系統的遠程注入。NtCreateThreadEx是內核級系統調用函數,MSDN未公開內核API 文檔,故該函數不可被直接調用。在本次研究中,有針對性地定義具有相同原型的函數指針以完成NtCreateThreadEx的系統調用。
根據如上分析,當操作系統版本不支持CreateRemoteThread創建遠程線程時,用NtCreateThreadEx函數對其進行替換。注入的前期工作與傳統注入方式相同,隨后判斷當前操作系統版本,若操作系統為Windows XP/Server 2003,利用傳統方式完成DLL注入。若操作系統為Windows Vista/7/Server 2008,利用本文構造的PFNtCreateThreadEx函數創建遠程線程,進而完成DLL注入。特征行為檢測DLL注入進程偽代碼如下。
2.4 健壯性維護
為減小系統運行壓力并提高系統健壯性,行為特征檢測功能以Windows服務的方式在后臺運行。同時,為了防止檢測系統意外崩潰或被病毒程序惡意終止,系統創建了獨立的進程來守護特征行為檢測服務。通過定時遍歷系統服務列表,查找目標服務運行狀況,若目標服務被意外終止,則檢測服務立即重啟。
3 結束語
本文提出了一種基于Windows服務的惡意行為特征檢測方案。與現有的檢測技術相比,從多個維度監測防護惡意行為。同時,在監測模塊的注入實現上,摒棄了CreateRemoteThread的傳統注入技術,采用了內核級的遠程線程注入方法,通過動態調用NtCreateThreadEx系統函數來大幅提升進程注入的成功率,同時增強系統的跨平臺能力。研究中還提出了“本體自御集”的概念,通過對當前主流惡意進程的統計,建立本體自御集,基于本體自御集判斷進程的異常行為。但是,本文還存在一定不足。本體自御集的建立應該是一個反復訓練學習的過程,通過不斷豐富仿冒進程、大量訪問惡意網頁,記錄訪問過程中新創建的病毒進程,以此來擴充本體自御集的容量,進而擴展惡意網頁行為特征的檢測范圍。
本文的下一步研究將圍繞擴充本體自御集展開,利用自動化手段,訪問大量的惡意網頁,然后利用機器學習/統計學手段對惡意網頁的行為特征進行更深層次的探索。
4 參考文獻
[1]信息安全25年發展史[EB/OL]. [2013-05-06]. http://security.zdnet.com.cn/security_zone/2013/0506/2158048.shtml.
[2] 謝億鑫, 孫樂昌. 計算機病毒修改Windows操作系統注冊表原理解析[J]. 計算機安全, 2008(8):117-121.
[3] 張慧琳, 鄒維, 韓心慧. 網頁木馬機理與防御技術[J]. 軟件學報, 2013, 24(4):843-858.
[4] WU Shaohua, HU Yong. Study of Trojans Detection and Prevention Technology[J]. Computer Science and Application, 2015, 5(12):429-435.
[5] CANALI D, COVA M, VIGNA G, et al. Prophiler: a fast filter for the large-scale detection of malicious web pages[C]// International Conference on World Wide Web, WWW 2011. Hyderabad, India:ACM, 2011:197-206.
[6] 李珂泂, 寧超. 惡意腳本程序研究以及基于API HOOK的注冊表監控技術[J]. 計算機應用, 2009, 29(12):3197-3200.
[7] 李偉斌, 王華勇, 羅平. 通過注冊表監控實現木馬檢測[J]. 計算機工程與設計, 2006, 27(12):2220-2222.
[8] 傅建明, 劉高, 李鵬偉. 一種殺毒軟件升級流程的安全性分析方法[J]. 武漢大學學報(理學版), 2015, 61(6):509-516.
[9] 曹磊, 蔡皖東. Windows服務隱藏技術研究與實現[J]. 微電子學與計算機, 2011, 28(12):10-13.
[10] 張懿, 劉嘉勇. 剖析遠程控制免殺DLL木馬[J]. 信息安全與通信保密, 2011(4):56-57,60.
[11] SHAID S Z M, MAAROF M A. In memory detection of Windows API call hooking technique[C]// International Conference on Computer, Communications, and Control Technology, IEEE 2015. Malaysia, Kuching:IEEE, 2015:294-298.
[12] 鮑欣龍, 羅文堅, 曹先彬,等. 可用于惡意腳本識別的注冊表異常行為檢測技術[J]. 計算機工程, 2005, 31(8):137-139.
Malicious Behavior Monitoring Technology
Based On Windows Service
Hou Xeimei*, Dong Kaikun*
(*School of Computer Science and Technology,Harbin Institute of
Technology,Harbin 150001)
Abstract
With the advent of the information age, more and more people pay attention to the network security. safety engineers have treated malicious virus and programs as the protection key, network security offensive and defensive game never stops. This paper proposes a malicious behavior backend monitoring scheme based on Windows Service, detecting and intercepting the abnormal behaviors with DLL Injection and API HOOK caused by virus from Multi-Demensions. This method covers the shortage of single detection dimension. It is particularly worth mentioning here that this paper adopts a way of kernel-level injection by analysing kernel-level System Calls, and works out the limitation on injection behaviors by mainstream OS, makes the Cross-platform general injection possible. Finally, this system runs in backend in a Windows Service way, reduces the energy consumption and improves the operation stability. Meanwhile, we propose the conception of “Selfish Protection Set” providing a deeper research direction for Malicious behaviors monitoring.
Keywords: Windows Service, kernel-level Injection, API HOOK, Selfish Protection Set