劉祿源
(中國刑事警察學院 網(wǎng)絡犯罪偵查系,遼寧 沈陽 110854)
網(wǎng)絡入侵行為嚴重威脅著互聯(lián)網(wǎng)安全,網(wǎng)警實戰(zhàn)部門需加大對網(wǎng)絡入侵型案件的打擊力度,加強網(wǎng)絡空間治理,構(gòu)建清朗的網(wǎng)絡空間,維護網(wǎng)絡安全。偵辦網(wǎng)絡入侵案件是網(wǎng)警部門的一項重要工作。采用有效的方法,加大對網(wǎng)絡入侵型案件的打擊力度,加強網(wǎng)絡空間治理,構(gòu)建清朗的網(wǎng)絡空間,維護網(wǎng)絡安全。在網(wǎng)絡入侵案件中,網(wǎng)絡入侵者必會留下痕跡,網(wǎng)絡犯罪偵查需要對這些痕跡進行提取并固定為電子數(shù)據(jù)證據(jù)。網(wǎng)站源文件、網(wǎng)站服務器日志、木馬文件是辦理網(wǎng)絡入侵案件中獲得線索、提取證據(jù)的主要來源。采用有效的偵查方法,可以大大提高此類案件的偵辦效率[1]。
網(wǎng)絡入侵常常伴隨著植入木馬行為,對提取到的疑似木馬文件進行分析,確定其功能、危害,甚至可以得到木馬控制者的密碼、IP等關(guān)鍵信息,為案件充實線索提供判斷依據(jù)[2]。
首先確定目標受害網(wǎng)站,提取網(wǎng)站源代碼文件與網(wǎng)站的服務器日志,結(jié)合網(wǎng)站源代碼文件對日志進行分析,提取可疑的訪問信息,主要有IP地址、訪問時間、訪問行為等,確定了疑似木馬文件后,定位木馬文件的位置,對木馬文件進行處理分析。網(wǎng)站入侵案件的線索收集步驟示意圖如圖1所示。
圖1 網(wǎng)站入侵案件的線索收集步驟
網(wǎng)站源代碼文件是網(wǎng)站運行的基礎,常見的網(wǎng)站開發(fā)腳本語言有ASP、JSP、PHP等。網(wǎng)站服務器日志是記錄Web服務器接收處理請求以及運行時錯誤等各種原始信息的以.log結(jié)尾的文件,它記錄了網(wǎng)站訪問者的訪問時間、訪問次數(shù)、IP地址等信息[3]。
(1)查看分析網(wǎng)站源代碼文件
在網(wǎng)站代碼中尋找可疑文件,可疑文件的特征主要有以下幾種:
①文件格式可疑:網(wǎng)站所使用的編程語言為ASP代碼,但是文件目錄中出現(xiàn)了PHP、JSP代碼文件;
②文件命名可疑:一般正常的文件命名是有必要的含義與規(guī)律的,如index、config等。若出現(xiàn)類似xsasii.php、XXX.asp等命名極不規(guī)范的文件,則這些文件很可能是木馬文件;
③文件仿冒:容易和正常文件混淆的文件名,如indexx.asp。
(2)分析網(wǎng)站服務器日志
結(jié)合網(wǎng)站源文件,找出可疑文件后,在日志中定位可疑URL,可疑URL的格式一般為“網(wǎng)站網(wǎng)址+網(wǎng)站某個目錄+可疑文件名+參數(shù)”,如:“www.xxx.cn/loggers/scriptfrom24.php”,使用日志分析軟件(如Web Log Exploer),通過搜索功能,定位此URL的訪問記錄,收集這些訪問行為的來源IP地址、訪問時間、訪問次數(shù)、訪問參數(shù)等信息。然后查看可疑文件的屬性,收集其創(chuàng)建日期、修改日期、訪問日期,根據(jù)日期信息,到日志中查看相應時間段的可疑訪問行為(如上傳、注入操作)。另外需指出的是,有些木馬文件在上傳時會修改其日期屬性,其日期屬性可能是篡改后的,需考慮此情況[4]。
當一個網(wǎng)站被入侵之后,入侵者通常會留下后門木馬,便于將來繼續(xù)控制該網(wǎng)站。木馬制作者為了使木馬通過殺毒軟件的檢測,增加代碼閱讀難度,對木馬程序代碼進行了代碼混淆、加密、壓縮等處理。直接對這種經(jīng)過復雜化處理的木馬文件進行分析閱讀往往不可行,必須經(jīng)過縝密細致的逆向處理,將復雜代碼簡單化,逐步進行解密、調(diào)試,才可以將木馬的功能分析出來[5]。
對經(jīng)過混淆處理的復雜木馬程序,可以通過以下五個步驟進行逆向分析處理:代碼結(jié)構(gòu)整理、混淆字段替換、關(guān)鍵節(jié)點梳理、運行環(huán)境搭建、本地復現(xiàn)分析。木馬逆向分析的各個步驟及其作用如圖2所示。
圖2 木馬逆向分析流程示意圖
經(jīng)過混淆處理的木馬程序,其代碼格式被打亂。利用代碼編輯工具,經(jīng)過查找替換處理,將結(jié)構(gòu)混亂的代碼初步格式化,利于下一步的分析處理。對于經(jīng)過了加密、壓縮處理的代碼,需要針對其加密、壓縮方法,對其進行解密、解壓。
木馬制作者常采用代碼混淆技術(shù),以通過殺毒軟件檢驗。目前常用的一種代碼混淆方法是將代碼中關(guān)鍵字段(如類名、變量名、函數(shù)名等)的英文字母轉(zhuǎn)換為ASCII擴展字符。對這些難以處理的混淆代碼進行替換,并以易讀易懂的方式重新命名,可以極大地提高代碼可讀性。有些木馬制作者為了進一步增加代碼閱讀難度,會在代碼中插入大量垃圾注釋,可以使用正則表達式去除掉這些不需要的部分。
木馬程序中的關(guān)鍵節(jié)點,一般是指函數(shù)調(diào)用、return返回值、參數(shù)傳遞、輸入、輸出、循環(huán)語句、判斷語句等代碼位置。在此步驟中,對這些關(guān)鍵節(jié)點進行梳理,厘清各函數(shù)的調(diào)用關(guān)系、函數(shù)功能、參數(shù)含義。根據(jù)梳理出的函數(shù)關(guān)系,合理設置斷點可以極大提高手動調(diào)試的效率[6]。
為了達到本地調(diào)試的目的,需要搭建好木馬所需的運行環(huán)境。木馬文件為PHP格式的,可以使用一些集成化環(huán)境配置工具(例如phpStudy、XCMPP、MAMP等軟件)快捷便利地將運行環(huán)境搭建起來。木馬文件為ASP格式的,需安裝配置IIS服務。配置過程中需注意使用的服務類型、開啟服務的端口等信息。
運行環(huán)境搭建配置好后,將處理過的木馬文件導入環(huán)境中,結(jié)合步驟“關(guān)鍵節(jié)點梳理”,對木馬文件手動調(diào)試分析。
某本地生活服務網(wǎng)站租用國內(nèi)某服務器提供商的服務器,網(wǎng)站管理員在運維過程中發(fā)現(xiàn)網(wǎng)站源文件中出現(xiàn)了可疑文件,部分文件信息有改動痕跡,懷疑受到了網(wǎng)絡入侵。在取得網(wǎng)站源代碼文件與網(wǎng)站服務器日志后,利用上文提出的案件偵辦方法,對此網(wǎng)站進行偵查取證工作。
查看被入侵網(wǎng)站的源代碼文件,經(jīng)分析確定這是一個主要由ASP腳本語言編寫后臺代碼的網(wǎng)站。經(jīng)查找,在其文件目錄中發(fā)現(xiàn)了命名為“scriptfrom24.php”、“xx.php”、“safecode.phpd”的PHP腳本文件。查看“scriptfrom24.php”的屬性信息。確定該文件的創(chuàng)建時間與修改時間均為2018年11月18日上午1:24:04。
使用Web Log Exploer日志分析工具,在網(wǎng)站服務器日志中搜索“scriptfrom24.php”文件的訪問記錄,結(jié)合可疑文件的創(chuàng)建時間與該URL的初次訪問時間,獲取到訪問次數(shù)、IP地址等線索。訪問時傳遞的參數(shù)為q=1,key=sdfadsgh4513sdGG4353 41FDGWWDF GDFHDFGDSFGDFSGDFG。日志中可疑URL的訪問記錄如圖3所示。
圖3 日志中可疑URL的訪問記錄
以上一小節(jié)得到的疑似PHP木馬文件為例,通過手動調(diào)試的方法,對該疑似木馬文件的功能進行分析。該文件打開后為不具備可讀性的亂碼。
(1)代碼結(jié)構(gòu)整理
使用EmEditor軟件打開該木馬文件。查找“;”字符,將其全部替換為“; ”,為了正確識別回車符,勾選使用轉(zhuǎn)義序列功能。在除了語句結(jié)尾位置以外的其他位置“;”也可能存在,例如for循環(huán)語句中就存在“;”符號,需要對這種特殊情況進行手動處理。代碼中存在一個或多個函數(shù),使用查找功能,以“function”為關(guān)鍵字,找到函數(shù)定義字段function所在的位置,函數(shù)名之后第一對花括號“{ }”之間的內(nèi)容為此函數(shù)的內(nèi)容部分,將“{ }”前后做換行處理,并將函數(shù)內(nèi)各行代碼對齊,統(tǒng)一右移四個字符長度。
(2)混淆字段替換
該木馬程序中的變量、參數(shù)、函數(shù)名等都經(jīng)過了編碼處理,使用EmEditor軟件的批量替換功能,將亂碼替換為簡潔易懂的名稱。將變量替換為“var1”、“var2”、“var3”...等,將函數(shù)名替換為“fun_1”、“fun_2”、“fun_3”...等,將參數(shù)替換為“para1”、“para2”、“para3”...等,將類名替換為“Class1”、“Class2”、“Class3”...等。
雖然木馬經(jīng)過了混淆處理,但其原始程序中的運算符(如‘+’、‘-’、‘*’、‘=’、‘/’、‘%’等)、基礎語句(如for循環(huán)語句、while語句循環(huán)、if else語句、switch語句等)、特殊符號(如‘$’、‘;’、‘,’、‘.’等)在一般情況下會保留下來不做處理。在進行亂碼字段替換時,需予以注意,避免替換錯誤。
對于“/* */”之間的注釋,使用正則表達式“/*{1,2}[sS]*?*/”將其進行識別,然后批量替換為回車符“ ”。
(3)關(guān)鍵節(jié)點梳理
經(jīng)過以上兩個步驟的處理,該木馬程序的大致代碼結(jié)構(gòu)已經(jīng)清晰。分析程序中的各個函數(shù),找到其return返回值所在位置,使用echo輸出方式,將各個函數(shù)的返回值輸出,根據(jù)輸出情況對函數(shù)的功能進行判斷分析??梢造`活使用echo輸出功能對代碼進行逐行分析,如有必要可以逐行使用echo,對變量、函數(shù)的賦值、運算過程進行細致梳理。
(4)運行環(huán)境搭建
本次分析所采用的實驗機操作系統(tǒng)為Mac OS(10.14.4版本),瀏覽器為Google Chrome (61.0版本),使用MAMP Pro(5.2版本)軟件搭建網(wǎng)站集成環(huán)境。把處理后的木馬文件重命名為“test.php”,拷貝至“/Applications/MAMP/htdocs”路徑下。
(5)本地復現(xiàn)分析
將經(jīng)過處理的木馬文件添加到運行環(huán)境之后,開啟Web服務,在瀏覽器中訪問“http://127.0.0.1:8888/test.php”,即可查看其運行結(jié)果。
使用瀏覽器的查看源代碼功能,可以看到經(jīng)過解釋器解釋后的代碼,根據(jù)其特征,初步判斷此木馬為一個多功能WebShell后門。根據(jù)password字段,找到了此后門木馬的登錄密碼。但密碼經(jīng)過了32位MD5加密。使用MD5解密工具,解出登錄密碼。文件中的后門登錄賬號與密碼信息如圖4所示。
使用解出的后門登錄密碼,訪問被掛馬網(wǎng)站的木馬URL,輸入密碼后成功進入此后門木馬程序。可以看到,通過此WebShell,可以對被控制服務器進行文件管理、反彈Shell、獲取系統(tǒng)信息、執(zhí)行命令等高權(quán)限操作。實際木馬執(zhí)行后的界面如圖5所示。
至此,經(jīng)過一系列的分析,已成功提取到了此案件的入侵者信息(IP地址、入侵時間、行為等)以及入侵者植入的木馬文件,確定了該木馬文件的功能。接下來就可以依據(jù)以上信息進行落地偵查,并將提取到的證據(jù)進行保全了。
圖4 文件中的后門登錄賬號與密碼信息
圖5 實際木馬執(zhí)行后的界面
傳統(tǒng)的網(wǎng)絡入侵案件偵查大多從日志入手,往往忽略對木馬的分析處理。通過網(wǎng)站源文件與日志分析、木馬文件逆向分析,可以提取到多種有效線索,對可疑木馬文件進行驗證,確定木馬的功能,從中提取有價值的信息,為網(wǎng)絡入侵類案件的偵查、取證、鑒定工作帶來幫助。將網(wǎng)絡入侵痕跡偵查與木馬逆向分析相結(jié)合,探尋線索交叉點,互相佐證,提高了此類案件偵辦效率與成功率。
實現(xiàn)網(wǎng)站源文件與日志分析自動化、木馬逆向處理模型化是未來網(wǎng)絡入侵案件偵查研究的發(fā)展方向。網(wǎng)絡入侵案件的痕跡掩蓋手段、木馬隱藏與加密混淆手段還有很多,還需更加深入地進行研究。