


摘要:Web應用在移動終端的廣泛普及給用戶提供了便利的服務,與此同時惡意Web網頁中的Javascript代碼也會帶來嚴重的安全問題,如何檢測惡意網頁一直是一個熱點安全問題。本文首先介紹常見的惡意網頁攻擊技術,并在此基礎上針對性地提出惡意網頁攻擊的檢測方法;最后闡述了一種基于JavaScript的輕量級惡意網頁檢測技術。
關鍵詞:惡意網頁;攻擊技術;檢測方法;Javascript
中圖分類號:G642 文獻標識碼:A
文章編號:1009-3044(2019)34-0029-02
和傳統的終端設備一樣,移動終端在使用過程中也面臨嚴重的安全風險,這不僅和移動終端自身的安全設置有關,也在很大程度上受到訪問的Web網站的安全性的影響。
終端在訪問網絡頁面時,如果頁面能夠利用終端的設置漏洞對其進行攻擊,則認為這樣的網頁就是惡意網頁,一般認為那些可以偷偷獲取用戶敏感信息、或引誘使用者下載惡意程序的頁面都是惡意網頁。
目前惡意網頁已經發展成一種嚴重的安全問題,相關研究表明它已經成為互聯網上針對移動終端的主要工具,針對移動終端的攻擊技術也呈現出多樣化。更加嚴重的是,為了增加惡意Web頁面的攻擊范圍和能力,惡意網頁開始向云端發展,攻擊手段更加隱蔽。
1 惡意網頁攻擊技術
產生惡意網頁的一個必要前提是提供惡意的Web服務,這些服務只有將惡意頁面推送到用戶終端才能實現惡意攻擊。常見的惡意攻擊途徑包括[1]:(1)瀏覽器及其插件。用戶使用Web應用最常用的入口就是瀏覽器,因此它就成為惡意網頁攻擊的首要途徑。Web應用設計過程中的技術能力、測試水平等因素會導致Web應用存在BUG,一旦遇到特殊的場景會觸發不可預料的行為,也就是常說的漏洞。(2)社交網絡。目前產生了各種各樣的社交應用,包括基于桌面的社交程序、基于瀏覽器的社交論壇等。為了吸引用戶進入預先構建的惡意網站,攻擊者會發布諸如紅包、色情圖片等,一旦用戶點擊就會進入惡意網頁。(3)電子郵件。公開的電子郵件經常受到攻擊者的青睞,惡意網頁會給大量的目標用戶發送有吸引力的郵件,目標用戶一旦點擊就會進入惡意站點。
上述攻擊途徑只是惡意網頁的傳播方式,它們的實現依賴于底層的惡意網頁攻擊技術。常見的惡意網頁攻擊技術包括[2]:Iframe攻擊、目標重定向攻擊、xss跨站腳本攻擊,混淆代碼攻擊以及頁面下載攻擊等。
Iframe攻擊指的是攻擊者在用戶查看的網頁內嵌入使用惡意代碼鏈接的頁面,用戶不能區分此惡意頁面與期望訪問的頁面。因此,這種攻擊方式具有一定的隱蔽性,用戶難以察覺。在網頁實現過程中可以通過多種方式嵌入Iframe,最常見的方式是借助document的write方法和getElementByID方法。在用戶受到Iframe攻擊后,其在網絡頁面中輸入的各種信息,比如用戶資料、資金賬號及密碼等都會被攻擊者獲取;另外,攻擊者還可以在此基礎上進行其他各種方式的攻擊。Iframe攻擊的典型特征是會使用Iframe標簽,所以對JavaScript代碼反混淆后如果發現含有ifame標簽,則說明JavaScript代碼可能有惡意代碼。
目標重定向攻擊指的是改變用戶想要訪問的目標頁面,將其重定向到一個和目標頁面非常相似的惡意頁面。重定向功能的出發點在于縮短網址、避免網絡頁面出現斷開鏈接等現象,但是常被攻擊者用于重定向到惡意頁面。重定向攻擊是XSS等攻擊方式的前提,和Iframe攻擊有一定的相似性,只不過重定向攻擊是直接到達一個新的惡意頁面,Iframe攻擊是在目標頁面中嵌入一個惡意頁面。網頁重定向攻擊也有多種實現方式,比如利用document的location方法或window的location方法。在對頁面反混淆后,如果發現重定向方法就可以認為是存在重定向攻擊。 XSS攻擊又稱為跨站腳本攻擊。有些網絡頁面中的動態功能沒有嚴格區分頁面內容及JavaScript代碼,這樣惡意頁面中的動態內容就能夠繞過同源策略攻擊Web客戶端[3]。如果Web應用沒有進行嚴格的過濾或轉義,那么惡意代碼就有了用武之地??缯灸_本攻擊最主要的目的是竊取Web客戶端的緩存或會話信息。
應用代碼在保持功能不變的前提下可以進行一定的變形,這就是常說的“混淆”。攻擊者也常常會采取混淆的方式隱藏惡意代碼,從而逃過安全工具的檢查。只要靜態分析工具不能檢測出經過混淆的惡意代碼,它就可以存活更長的時間。
2 JavaScript攻擊實例及其檢測方法
在瀏覽器的版本比較舊的情況下,上面的代碼會借助瀏覽器漏洞給代碼中指定的img元素鏈接一個可執行文件,并將此元素隱藏起來;這樣一來,即使用戶加載了含有可執行程序的網頁也不會發現,從而在用戶感覺不到異常的情況下執行惡意代碼。
一個典型的瀏覽器劫持攻擊代碼如下:
Hijack函數會修改正常函數的實現,從而達到瀏覽器劫持的目的。
為了得到類似上述惡意代碼的行為特征,可以獲取代碼內詞匯間的順序關系。上述惡意代碼邏輯上看起來是正常的,傳統的分詞工具難以進行有效分詞,本文實際分詞時采取了如下過程:(1)代碼清洗。先去掉注釋行、空白以及各種標簽以外的內容。(2)生成語法樹。借助Esprima把清洗后的代碼生成為語法樹。(3)分詞。對于html標簽根據等號進行分詞,并且丟棄其他標簽相關賦值語句中的字符串。這樣一來就可以把待檢測代碼轉換為相應的語法樹分詞。然后就能進一步進行特征提取。
3 基于JavaScript的輕量級惡意網頁檢測
惡意頁面代碼和正常的代碼有本質的不同[4]:對于嵌入頁面的攻擊方式而言,惡意頁面的寬度經常被設置為0,以防止用戶發現。在實現過程中,會加入一個始終為真的判斷語句,保證惡意代碼始終執行。惡意頁面地址被拆分為多個短字符串,并在拼接后賦值給一個通過document的write方法動態生成的變量;如果惡意頁面的地址發生變化,也只需要將不同的拆分字符串賦值即可。因此,此類惡意代碼的顯著特征是有較多的字符串變量,以及很多通過“+”連接的字符串。
不論檢測哪種類型的惡意網頁,都離不開一個重要環節——頁面特征提取。特征提取可以提取頁面的特征,如果提取后的頁面符合滿足惡意網頁的特征,則可以認為其是惡意網頁。在提取網頁的特征前,需要先把Javascript代碼進行相應轉換。主要的特征提取步驟包括[5]:(1)對待分析網頁進行詞法分析,輸出為有效的功能性代碼,不再含有注釋以及空白行。(2)將功能性代碼轉換成特征詞表示的代碼。原樣保留關鍵詞、運算符等不變量,并用NUM代替數值,用ID代替變量及函數名。對于字符串則根據其長度進行不同的處理。
例如,對于表達式
parl=c0+“stringl”;
可以將其邏輯轉換為
ID=IDO+str0; 這樣一來既可以保留原來的代碼邏輯結構,又能夠大大簡化原有的代碼量;最重要的是,還可以盡量保留代碼的信息熵,也就是說代碼特征整體上不發生變化。在經過這樣的處理后,每個網頁都可以用特征詞、不變量以及它們出現的頻數來代替。
提取完網頁的特征后,就可以據此構建特征向量。主要有兩種特征向量構造方法:一種是借助每個頁面特征值的頻數的比例構建,另外一種是根據某特征詞是否出現構建。不論哪種構建方法,特征向量的維度一般不超過50,從而保證最后的特征檢測矩陣是一個低維矩陣。
在完成特征提取及特征向量構建后,可以設計出一個包括數據收集、頁面分析、異常檢測等組成部分的輕量級惡意網頁檢測系統。整個檢測系統框架如圖l所示:
在實際測試時,本文把Alexa網站上公布的頁面視為正常頁面,將malwaredomains網站公布的頁面視為惡意網頁,將其組成訓練數據集進行訓練,然后識別待檢測的頁面,對于惡意網頁檢測具有較好的檢測效果。
參考文獻:
[1]張海艦,方舟,陳新.基于深度學習技術的惡意APP檢測方案[J].網絡安全技術與應用,2017(8):109-112.
[2]馬洪亮,王偉,韓臻.面向drive-by-download攻擊的檢測力一法[J].華中科技大學學報:自然科學版,2018,15(7):9-13.
[3]沙鴻州,劉慶云,柳廳文,等.惡意網頁識別研究綜述[f].計算機學報,2018。38(9):21-25.
[4]徐青.JavaScript惡意代碼檢測技術研究[D].西南交通大學,2018.
[5] Wang Y,Cai W D,Wei P C.A deep learning approach for de-tecting malicious JavaScrpt code[J]. Security&CommunicationNetworks, 2016, 9(11):1520-1534.
【通聯編輯:王力】
收稿日期:2019-09-11
作者簡介:姜文秀(1980-),女,江蘇江都人,講師,碩士,研究方向為數據庫、數據挖掘、嵌入式。