◆肖光華
網(wǎng)頁木馬的源碼分析與處理方法
◆肖光華
(江蘇城鄉(xiāng)建設職業(yè)學院 江蘇 213147)
隨著互聯(lián)網(wǎng)技術的迅猛發(fā)展,網(wǎng)絡上的黑客技術也越來越隱蔽和多樣化,其中網(wǎng)頁木馬攻擊已經(jīng)成為威脅互聯(lián)網(wǎng)安全的主要因素。本文通過分析網(wǎng)頁源碼的方式探討了網(wǎng)頁木馬的識別技術,給出了處理網(wǎng)頁木馬的方法,對于熟悉網(wǎng)頁代碼的人來說是一種簡單、安全、有效、識別率高的方式。
網(wǎng)頁木馬;源碼;黑客
隨著互聯(lián)網(wǎng)的飛速發(fā)展,越來越多的用戶都通過瀏覽器訪問互聯(lián)網(wǎng)的數(shù)據(jù)、圖片、視頻等信息,這種基于B/S模式的web程序被廣泛應用同時,也帶來了很多安全隱患。由于開發(fā)人員水平的參差不齊,亦或是安全意識不足,導致編寫的代碼不夠嚴謹,特別是對于隱藏在互聯(lián)網(wǎng)中的內(nèi)部后臺管理系統(tǒng),往往都是出于便利而基于友好環(huán)境編寫的,缺少必要的合法性判斷,一旦被黑客發(fā)現(xiàn)后,很容易遭到攻擊,其中,網(wǎng)頁被掛馬就是常見的攻擊手段之一。網(wǎng)頁被植入木馬后會帶來不堪設想的后果,不僅會給企業(yè)帶來重要利益的損失,還會給網(wǎng)站用戶帶來很多潛在的危害。除了進行必要的系統(tǒng)加固,還需定期清除網(wǎng)頁中的網(wǎng)頁木馬,雖然可以借助一些專業(yè)工具進行檢測,但很難做到100%識別,這給網(wǎng)站管理員帶來很大的困擾?;诖耍疚闹饕ㄟ^分析網(wǎng)頁源碼的方式探討了網(wǎng)頁木馬的識別,給出了處理網(wǎng)頁木馬的方法。
網(wǎng)頁木馬其實是一段經(jīng)黑客精心編寫過的代碼,它可以是獨立的網(wǎng)頁文件,也可以是以某種方式插入到普通網(wǎng)頁中,用戶在訪問網(wǎng)頁的同時會自動下載黑客設置好的木馬并執(zhí)行。其本質(zhì)上是一個HTML網(wǎng)頁,黑客利用瀏覽器的漏洞將木馬或木馬下載途徑嵌入其中,當用戶訪問該網(wǎng)頁時,一些木馬程序、病毒等惡意程序就會隨網(wǎng)頁一并下載到用戶電腦中,從而導致用戶賬戶密碼等私密信息泄露,整個電腦也被黑客連接控制。其工作原理如圖1所示。
圖1 木馬工作原理
網(wǎng)頁木馬被黑客植入網(wǎng)頁中,并且沒有語法錯誤,訪問用戶難以察覺,根據(jù)網(wǎng)站的編寫語言,可以使asp、php、jsp等語言。通過瀏覽器下載的方式誘使用戶下載布置在服務端的木馬,因此這樣的一段網(wǎng)頁木馬是很難被殺毒軟件發(fā)現(xiàn)并查殺的。它作為黑客控制服務器的一條通道,比其它攻擊方式更為隱蔽,因為網(wǎng)頁木馬不是真正的木馬程序,應稱為網(wǎng)頁木馬種植器,真正的木馬是在黑客服務器端。
由于網(wǎng)頁木馬只是一段代碼,只要不涉及語法錯誤或破壞原有網(wǎng)頁代碼的語言邏輯,網(wǎng)頁木馬可以放置在任意位置。
最常見的網(wǎng)頁木馬就是用iframe語句框架將木馬嵌入網(wǎng)頁中,符合HTML語言環(huán)境都可以執(zhí)行該語句,代碼如下,用戶訪問該網(wǎng)頁時,iframe中嵌套的木馬地址就會自動打開,但是由于它的長和寬都為“0”,所以很難察覺,非常具有隱蔽性。另一種代碼為:
一般黑客根據(jù)實際情況調(diào)整cols和scrolling參數(shù)可以把木馬地址網(wǎng)頁和原網(wǎng)頁做的十分相似,通過釣魚的方式獲取用戶的敏感信息。
這里可提取“iframe”或“frame”字符串來分析識別,然后根據(jù)src中的地址判斷是否是網(wǎng)頁木馬。
此類網(wǎng)頁木馬是一種是利用JavaScript腳本文件的調(diào)用原理進行的網(wǎng)頁木馬,黑客直接將 JavaScript 腳本代碼寫在網(wǎng)頁中,當訪問者瀏覽網(wǎng)頁時,惡意的掛馬腳本就會通過用戶的瀏覽器悄悄地打開木馬窗口,隱藏運行,比如將代碼document.write("");保存成一個js文件并放在黑客服務器端,代碼為或者根據(jù)環(huán)境寫成:
document.write("
document.write("")
document.write("
也可以直接在網(wǎng)頁中插入
這里可以提取“src”或“.js”字符串,對于請求地址是外域的JS腳本基本都是網(wǎng)頁木馬。
此類網(wǎng)頁木馬可以直接從原網(wǎng)頁跳轉至木馬地址網(wǎng)頁,木馬直接被運行,或者誘騙用戶輸入某些敏感信息(如賬戶、密碼等),并將提交的信息發(fā)送到黑客指定地方。比如代碼為:,即網(wǎng)頁啟動時就跳轉至黑客木馬地址;或者通過meta標志跳轉,如, 即網(wǎng)頁一旦加載就立即跳轉至木馬地址,content=0表示0秒;此外也可以將木馬植入CSS中,如background-image中加入木馬URL地址,當網(wǎng)頁背景圖片被調(diào)用時下載木馬;還可以直接將JAVA腳本植入網(wǎng)頁中。
通常黑客木馬源碼直接寫在網(wǎng)頁上,因為這邊很容易被識別,而是會通過注入手段,讓網(wǎng)頁遠程調(diào)用外域的 JS 腳本,也就是黑客自己網(wǎng)站上包含有惡意代碼的 JS 掛馬文件,因此可以從這里入手進行識別。
此類木馬是黑客利用圖片或用戶信任網(wǎng)站作為轉移訪問用戶實現(xiàn)的一種方式。比如黑客將木馬植入到圖片中,再用代碼調(diào)用執(zhí)行,具有很高的隱蔽性,可以繞過許多工具的掃描監(jiān)視。代碼如;或者以網(wǎng)頁嵌套的方式,貌似打開了正常的網(wǎng)頁,其實打開了木馬網(wǎng)址。
(1)grep
在手工檢測識別網(wǎng)頁木馬時,通常要利用字符串匹配工具確認木馬所在位置,而grep是一種強大的文本搜索工具,它能使用正則表達式搜索文本,在一個或多個文件中搜索字符串,效率非常高。
(2)sed
sed 是一種流編輯器,它主要用來自動編輯一個或多個文件;簡化對文件的反復操作;編寫轉換程序等。尤其是當黑客大批量的將網(wǎng)頁木馬植入網(wǎng)頁代碼中時,sed工具以其強大的能力和簡單的特性批量清除既定程式的網(wǎng)頁木馬,是一個非常實用的工具。
(3)網(wǎng)頁編程語言
對于有一定網(wǎng)頁編程基礎的人來說,無論掌握哪一門編程語言(如asp、php、jsp、python等),同樣可以通過編寫腳本來批量修改文本中的字符串。
如果熟悉grep和sed使用方法,兩種可以工具配合使用,通過自行編寫一些批處理腳本來修改文件中的字符串可達到事倍功半的效果;如果不熟悉這兩種工具,也可以通過編寫腳本代碼達到同樣的效果。
(1)字符串工具
通過提取特征字符串來識別網(wǎng)頁木馬。如通過grep工具提取特征字符串,具體命令為:grep -E "iframe|frame" *.asp,即檢測當前目錄下所有含iframe或frame字符串的asp文件,返回所在行的值;或者grep frame *.asp | grep src,即檢測當前目錄下既有frame字符串又有src字符串的asp文件,返回所在行的值。如果要檢測子目錄可以加上-S參數(shù)。
根據(jù)返回的結果可以將既定的木馬格式字符串用sed工具批量刪除,具體命令為:sed -i s/木馬字符串//g ./*.asp,表示將所有asp文件中木馬字符串全部刪除,-i 表示操作的是文件,g表示一行中有多個木馬字符串的時,都替換,而不是僅替換第一個。
grep和sed工具也可以配合使用,如sed -i s/木馬字符串/ /g "grep -Sl木馬字符串 *.asp",即將當前目錄下(包括子目錄)的所有asp文件中的木馬字符串刪除,""括起來的grep命令,表示將grep命令的的結果作為操作文件,-l表示僅列出符合條件的文件名,用來傳給sed命令做操作。此外,也可以編輯一些批處理腳本來批量執(zhí)行相關的命令。
(2)網(wǎng)頁編程
以asp語言為例,總體思路就是通過循環(huán)遍歷的方式對目錄中每一個文件內(nèi)容進行字符串匹配,根據(jù)得到的結果做相應的處理。
利用FSO(文件系統(tǒng)對象)組件,可以直接調(diào)用所在文件系統(tǒng)進行操作(如增、刪、改)。核心代碼如下所示:
<%
'On Error Resume Next
Function BianLi(Path) '遍歷遞歸搜索所有文件
Dim fs,ObjFolder,ObjFile 'Fso對象,子目錄對象,文件對象
Set fs=Server.CreateObject("scripting.filesystemObject") '創(chuàng)建讀寫對象
For Each ObjFile in fs.GetFolder(Path).Files '讀取當前目錄下的文件
if right(ObjFile.Name,4)=".asp" then
Response.Write ObjFile.Name&"
"
End If
Next
For Each ObjFolder In fs.GetFolder(Path).SubFolders '讀取子目錄
BianLi(Path & "" & ObjFolder.Name) '調(diào)用遞歸搜索子目錄完整路徑
Next
End Function
%>
該代碼表示遞歸搜索系統(tǒng)路徑目錄下(包括子目錄)所有asp文件并返回文件的名稱。根據(jù)得到結果嵌套循環(huán)讀取文件內(nèi)容,匹配相應的字符串,核心代碼如下所示:
<%
set fs=server.createobject("scripting.filesystemobject")
file=server.mappath("filename")
set txt=fs.opentextfile(file,1,true)
Do while not txt.atendofstream
line=txt.readline
line=Replace(line,"<%","")
line=Replace(line,"%"&">","")
response.write line & "
" ‘插入字符串處理代碼
loop
%>
該代碼逐行讀取數(shù)據(jù),通過instr和relpace等函數(shù)操作相應的字符串達到處理網(wǎng)頁木馬的效果。根據(jù)平時經(jīng)驗的積累,把所遇到的木馬放入字典庫,定期執(zhí)行一下腳本,確保網(wǎng)站的安全。
隨著防毒技術的發(fā)展,黑客的技術手段也會越來越高明,在做好系統(tǒng)加固的基礎上很可能還會出現(xiàn)更隱蔽的網(wǎng)頁木馬,但是只要熟悉網(wǎng)頁源碼,經(jīng)過認真分析,相信這些網(wǎng)頁木馬都會無所遁形。
[1]張慧琳,鄒維,韓心慧.網(wǎng)頁木馬機理與防御技術[J].軟件學報,2013.
[2]孫匯中.網(wǎng)頁木馬檢測關鍵技術研究[D].北方工業(yè)大學,2016.
[3]位愛伶.WEB木馬檢測技術研究[D].哈爾濱工程大學,2016.
江蘇城鄉(xiāng)建設職業(yè)學院校級課題(編號:2017KYC13)。