侯鑫美 董開坤
摘要
隨著信息化時代的到來,網(wǎng)絡安全越來越取得人們的重視,惡意病毒與程序一直是安全工作者的防護中心,網(wǎng)絡安全攻與防的博弈從未停止。本文圍繞惡意程序對主機系統(tǒng)狀態(tài)更改的監(jiān)測為核心,提出了一種基于Windows服務的后臺監(jiān)測方式,利用DLL注入與HOOK API技術從多個維度監(jiān)測系統(tǒng)的異常行為,進而攔截異常行為。該方法彌補了當前惡意行為監(jiān)測維度單一的不足。更值得一提的是,本文采用一種內核層次的注入方式,通過分析注入過程的系統(tǒng)調用,將內核級API作為注入的切入點,解決了當前主流操作系統(tǒng)對注入行為的限制,使跨平臺的通用注入成為可能。最后,系統(tǒng)以Windows服務的形式運行于后臺,降低能耗,提高運行穩(wěn)定性,同時本文提出了本體自御集的概念,為惡意行為監(jiān)測提供了更深層次的研究方向。
關鍵字:Windows服務, 內核級注入, API HOOK, 本體自御集
0 引言
計算機發(fā)展至今,縱觀中國互聯(lián)網(wǎng)安全25年的演進歷史[1],互聯(lián)網(wǎng)用戶的隱私與財產(chǎn)安全等正遭受到前所未有的嚴峻挑戰(zhàn)。為此,本文提出了一種基于惡意行為特征檢測的主動防御策略,彌補現(xiàn)有檢測方案健壯性不足的缺陷,從注冊表、文件、進程、建立本體自御集等多個方面綜合抵御惡意行為,從源頭杜絕危害。
Windows平臺面臨的威脅主要有宏病毒、網(wǎng)頁病毒、腳本病毒、Win32 PE文件病毒等。盡管病毒種類千變萬化,各類病毒卻仍然保持自我復制性、傳播性、潛伏性、破壞性等常態(tài)特征。病毒通過對FSO的創(chuàng)建,進而對文件施行添加、刪除、修改、拷貝等操作以達到病毒的自我復制。病毒感染主機后,利用注冊表獲取操作系統(tǒng)與軟件相關版本信息,探測相關漏洞加以利用。通過修改注冊表,實現(xiàn)開機自啟、常駐內存及一系列的惡意行為[2]。
文獻[3-4]提到基于特征碼數(shù)據(jù)庫的檢測技術,當前主流的云查殺通過網(wǎng)絡傳輸數(shù)據(jù)進行特征碼匹配而獲得快速查殺。但基于特征碼的檢測只能對數(shù)據(jù)庫中存在的病毒進行檢測,無法實現(xiàn)未知病毒的防御技術,呈現(xiàn)出一定的功能缺失。文獻[5]提出了一種基于靜態(tài)特征來展開機器學習的檢測方法,通過對網(wǎng)頁靜態(tài)特征標簽的提取,利用機器學習的方法對網(wǎng)頁提供設計分類,但實驗結果表明,這類基于靜態(tài)特征的機器學習/統(tǒng)計學檢測方法卻有著較高的漏報率。文獻[6-7]重點研究了基于注冊表監(jiān)控的檢測技術,但是,通過對病毒運行原理的剖析就會知道,病毒對系統(tǒng)造成的威脅復雜而繁瑣,僅是依靠注冊表檢測未免失于片面。文獻[8]對殺毒軟件升級流程的安全性給出深入分析后可知,其防護方法需運用多種殺軟,并且過程中更加關注漏洞的挖掘,而且也并未構建實際的防護措施。經(jīng)過如上解析探討后表明,這些檢測技術在性能上各有千秋,但在整體卻都未曾具備自我防御的能力,很難抵御病毒對檢測系統(tǒng)自身的惡意終止。為此,綜合大量文獻的研究成果,本文從主動防御的角度出發(fā),提出了一種基于惡意行為檢測的改進技術,利用API HOOK技術全面監(jiān)控操作系統(tǒng)的進程狀態(tài)、注冊表狀態(tài)及文件狀態(tài),再通過與本體自御集的功能比對,從惡意行為發(fā)生的源頭來實現(xiàn)防微杜漸。除此之外,考慮到檢測系統(tǒng)的健壯性,為防止病毒對防護系統(tǒng)采取輪詢性惡意終止的反殺策略,本文繼而又提出了一種基于Windows服務注冊及DLL注入技術的聯(lián)合守護技術,經(jīng)過測試,該方案能夠完成有關惡意程序對本機的惡意行為特征的檢測。
1 系統(tǒng)設計
惡意行為特征檢測是對Windows操作系統(tǒng)的行為防護。出于功能性、健壯性、與實用性等多方考量,系統(tǒng)框架設計如圖1所示。進程守護模塊負責維護系統(tǒng)的健壯性,監(jiān)測模塊負責記錄windows系統(tǒng)行為,并攔截本體自御集中記錄的惡意行為。注入模塊實現(xiàn)了監(jiān)測模塊在進程中的注入,用以監(jiān)控系統(tǒng)進程狀態(tài),攔截注冊表與文件的異常行為。系統(tǒng)同樣設置日志模塊,用以保存其過程工作狀態(tài)。在此,針對系統(tǒng)設計中的重點功能做出如下論述。
圖1 系統(tǒng)框架設計圖
Fig.1 System framework design
1.1 系統(tǒng)穩(wěn)定性設計
本文利用Windows服務對檢測系統(tǒng)進行健壯性守護,根據(jù)Windows服務技術[9],選用ServiceMain作為監(jiān)控程序的入口函數(shù)。在此過程中,ServiceMain函數(shù)將通過調用RegisterServiceCtrlHandler函數(shù)來回調控制請求處理函數(shù)CtrlHandler,而CtrlHandle則負責響應來自SCP的控制命令并告之SCM服務狀態(tài)信息。
1.2 監(jiān)測注入設計
動態(tài)鏈接庫(dynamic-link library,DLL)是Windows操作系統(tǒng)提供的一種可執(zhí)行文件,本系統(tǒng)使用DLL作為監(jiān)控模塊的容器。為了監(jiān)控系統(tǒng)進程狀態(tài),需將監(jiān)控DLL注入至系統(tǒng)進程空間內,但Microsoft出于系統(tǒng)穩(wěn)定性的現(xiàn)實需要,在設計操作系統(tǒng)時對進程內存享有訪問控制權限。這種設計阻礙了進程資源共享,為此可利用遠程線程注入技術打破界限[10]。但常規(guī)注入方法卻附生有一定的局限性,對64 bit操作系統(tǒng)及win7以上版本操作系統(tǒng)都不能提供有效支持,利用該技術實現(xiàn)的應用程序在跨平臺性及實用性上都將陷入明顯困境。為應對這一挑戰(zhàn),研究應對這一缺陷,我們采用一種更為貼近的內核級別的注入方式解決進程注入的跨平臺問題,該技術將在后文的系統(tǒng)實現(xiàn)章節(jié)中詳細解讀。
1.3 監(jiān)測攔截設計
監(jiān)測攔截模塊時利用API HOOK技術來組織構建整個配置過程的。HOOK技術是當前實現(xiàn)Windows API攔截的主要技術,總而言之就是API函數(shù)的重定向操作[11]。PE文件載入內存后,隨即將動態(tài)引進導入模塊及調用函數(shù),同時由IAT表記錄導入函數(shù)的實際地址。監(jiān)測模塊通過將IAT表中原函數(shù)地址改為相應鉤子函數(shù)的實際地址,當病毒程序嘗試調用被攔截函數(shù)時,將跳轉至本次研究自定義的鉤子函數(shù),若為正常的應用程序,鉤子函數(shù)僅負責記錄工作日志,執(zhí)行結束后則將返回繼續(xù)執(zhí)行原函數(shù)工作,至此監(jiān)測系統(tǒng)完成一次攔截工作。
2 系統(tǒng)實現(xiàn)
2.1 建立“本體自御集”
文獻[12]提出了一種以“生物體免疫”為核心思想的注冊表異常行為檢測技術。受該技術啟發(fā),本文通過建立“本體自御集”對惡意網(wǎng)頁特征行為進行檢測。
“本體自御集”以計算機進程為研究對象,主要數(shù)據(jù)來源分為2部分。其一,系統(tǒng)正常進程常見的仿冒進程。病毒制造者經(jīng)常以假亂真,通過更換相似字符、添加字符等手段為病毒進程命名,借此與系統(tǒng)正常的進程名混淆視聽,使病毒進程長期潛伏在操作系統(tǒng)中。其二,通過訪問惡意網(wǎng)頁,積極響應網(wǎng)頁的惡意行為,記錄新創(chuàng)建進程。絕大多數(shù)惡意網(wǎng)頁中都包含惡意腳本,惡意腳本的實際執(zhí)行后可能在本地創(chuàng)建新進程,為此可將訪問惡意網(wǎng)頁期間新創(chuàng)建的進程作為惡意進程,讓其作為本體自御集的一部分。通過綜合分析常見的系統(tǒng)正常進程和已知病毒進程,建立本地自御集,列舉部分基礎防御進程如表1所示。
2.2 特征行為檢測
計算機被感染后,病毒為了隱藏自身或對系統(tǒng)形成惡意破壞,都會不同程度地修改注冊表,或刪除系統(tǒng)重要文件等。以Win32 PE病毒為例,由于其具備的寄生特性,通過加載動態(tài)鏈接庫kernel32.dll,同時一并取得修改注冊表函數(shù)的API地址,進而調用Windows API對注冊表啟動打開、查詢、讀寫、刪除等操作進程。系統(tǒng)采用API HOOK 技術,攔截相關操作的Windows API函數(shù)以監(jiān)測系統(tǒng)注冊表及文件的狀態(tài)變化,部分用于注冊表/文件狀態(tài)監(jiān)控的被HOOK函數(shù)及替換函數(shù)如表2所示。
特征行為檢測模塊在定制開發(fā)成動態(tài)鏈接庫后,被系統(tǒng)所有進程導入加載,以此達到監(jiān)控系統(tǒng)安全的目的。當負責監(jiān)控的DLL被加載送入后,DLL_PROCESS_ATTACH將觸發(fā)IAT表的修改,對API進行HOOK,同時判斷進程是否屬于本體自御集,若某進程處于自御集就可設置標志位為TRUE,反之置為FALSE。DLL_PROCESS_DETACH則觸發(fā)IAT表的還原,即結束對Windows API的HOOK工作。特征行為檢測模塊被進程加載后,其基礎檢測原理如圖2所示。
2.3 進程防護
進程是惡意行為特征檢測的對象之一。經(jīng)測試,病毒運行總伴隨著新進程創(chuàng)建,監(jiān)控系統(tǒng)監(jiān)測新進程創(chuàng)建與進程行為。進程防護模塊通過維護新、舊2個進程鏈表,配合定時刷新獲取系統(tǒng)快照的方式發(fā)現(xiàn)新創(chuàng)建進程。技術研發(fā)中,pastList用于保存上一時刻系統(tǒng)進程快照,currentList用于保存定時刷新后系統(tǒng)進程快照,通過對比鏈表元素,發(fā)現(xiàn)新創(chuàng)建進程,利用遠程線程注入技術,向新創(chuàng)建進程注入特征行為檢測模塊,以此監(jiān)控新創(chuàng)建進程行為,并檢測新創(chuàng)建進程是否為惡意進程。除此之外,程序運行初始時刻,則將枚舉所有進程。為保證系統(tǒng)所有進程的安全,將為所有進程完成特征行為檢測模塊的注入。
研究中,利用創(chuàng)建遠程線程的方法向目標進程注入特征行為檢測模塊。前文提到傳統(tǒng)注入方式并不可靠,本文采用了一種構造內核函數(shù)原型的改進方法來彌補這一缺陷。以Win7為調試環(huán)境,利用OD工具對CreateRemoteThread函數(shù)進行堆棧調用分析,由此發(fā)現(xiàn),CreateRemoteThread并沒有直接向內核級請求調用ntdll.dll-->ZwCreateThreadEx,而是請求調用了kernelbase.dll-->CreateRemoteThreadEx函數(shù),其中CreateRemoteThreadEx函數(shù)與CreateRemoteThread函數(shù)具有相同的參數(shù)原型,并執(zhí)行相同的函數(shù)行為。CreateRemoteThreadEx函數(shù)又進一步調用了ntdll.dll-->ZwCreateThreadEx完成用戶級到內核級的調用轉換。綜上,通過動態(tài)實現(xiàn)NtCreateThreadEx系統(tǒng)調用,即可完成任意版本操作系統(tǒng)的遠程注入。NtCreateThreadEx是內核級系統(tǒng)調用函數(shù),MSDN未公開內核API 文檔,故該函數(shù)不可被直接調用。在本次研究中,有針對性地定義具有相同原型的函數(shù)指針以完成NtCreateThreadEx的系統(tǒng)調用。
根據(jù)如上分析,當操作系統(tǒng)版本不支持CreateRemoteThread創(chuàng)建遠程線程時,用NtCreateThreadEx函數(shù)對其進行替換。注入的前期工作與傳統(tǒng)注入方式相同,隨后判斷當前操作系統(tǒng)版本,若操作系統(tǒng)為Windows XP/Server 2003,利用傳統(tǒng)方式完成DLL注入。若操作系統(tǒng)為Windows Vista/7/Server 2008,利用本文構造的PFNtCreateThreadEx函數(shù)創(chuàng)建遠程線程,進而完成DLL注入。特征行為檢測DLL注入進程偽代碼如下。
2.4 健壯性維護
為減小系統(tǒng)運行壓力并提高系統(tǒng)健壯性,行為特征檢測功能以Windows服務的方式在后臺運行。同時,為了防止檢測系統(tǒng)意外崩潰或被病毒程序惡意終止,系統(tǒng)創(chuàng)建了獨立的進程來守護特征行為檢測服務。通過定時遍歷系統(tǒng)服務列表,查找目標服務運行狀況,若目標服務被意外終止,則檢測服務立即重啟。
3 結束語
本文提出了一種基于Windows服務的惡意行為特征檢測方案。與現(xiàn)有的檢測技術相比,從多個維度監(jiān)測防護惡意行為。同時,在監(jiān)測模塊的注入實現(xiàn)上,摒棄了CreateRemoteThread的傳統(tǒng)注入技術,采用了內核級的遠程線程注入方法,通過動態(tài)調用NtCreateThreadEx系統(tǒng)函數(shù)來大幅提升進程注入的成功率,同時增強系統(tǒng)的跨平臺能力。研究中還提出了“本體自御集”的概念,通過對當前主流惡意進程的統(tǒng)計,建立本體自御集,基于本體自御集判斷進程的異常行為。但是,本文還存在一定不足。本體自御集的建立應該是一個反復訓練學習的過程,通過不斷豐富仿冒進程、大量訪問惡意網(wǎng)頁,記錄訪問過程中新創(chuàng)建的病毒進程,以此來擴充本體自御集的容量,進而擴展惡意網(wǎng)頁行為特征的檢測范圍。
本文的下一步研究將圍繞擴充本體自御集展開,利用自動化手段,訪問大量的惡意網(wǎng)頁,然后利用機器學習/統(tǒng)計學手段對惡意網(wǎng)頁的行為特征進行更深層次的探索。
4 參考文獻
[1]信息安全25年發(fā)展史[EB/OL]. [2013-05-06]. http://security.zdnet.com.cn/security_zone/2013/0506/2158048.shtml.
[2] 謝億鑫, 孫樂昌. 計算機病毒修改Windows操作系統(tǒng)注冊表原理解析[J]. 計算機安全, 2008(8):117-121.
[3] 張慧琳, 鄒維, 韓心慧. 網(wǎng)頁木馬機理與防御技術[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的注冊表監(jiān)控技術[J]. 計算機應用, 2009, 29(12):3197-3200.
[7] 李偉斌, 王華勇, 羅平. 通過注冊表監(jiān)控實現(xiàn)木馬檢測[J]. 計算機工程與設計, 2006, 27(12):2220-2222.
[8] 傅建明, 劉高, 李鵬偉. 一種殺毒軟件升級流程的安全性分析方法[J]. 武漢大學學報(理學版), 2015, 61(6):509-516.
[9] 曹磊, 蔡皖東. Windows服務隱藏技術研究與實現(xiàn)[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