webshell變形的靜態(tài)檢測方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001] 本申請涉及Webshell檢測技術(shù)領(lǐng)域,特別地,涉及一種webshell變形的靜態(tài)檢測 方法和裝置。
【背景技術(shù)】
[0002] 隨著信息技術(shù)的高速發(fā)展,互聯(lián)網(wǎng)已經(jīng)成為人門生活中不可或缺的一部分。現(xiàn)在 的人們衣、食、住、行、娛樂、社交、購物乃至生活的方方面面都已經(jīng)離不開互聯(lián)網(wǎng),而黑客們 每天也在懷著各自的目的嘗試著各種方法做著危害人們生活的事,互聯(lián)網(wǎng)的安全得到人們 空前的關(guān)注。
[0003]webshell作為黑客入侵網(wǎng)站的重要工具,在黑客進(jìn)行網(wǎng)站入侵過程中起到了非常 重要的作用。顧名思義,"web"的含義是顯然需要服務(wù)器開放web服務(wù),"shell"的含義是 取得對服務(wù)器某種程度上操作權(quán)限。webshell常常被稱為入侵者通過網(wǎng)站端口對網(wǎng)站服務(wù) 器的某種程度上操作的權(quán)限。由于webshell大多是以動態(tài)腳本的形式出現(xiàn),也有人稱之為 網(wǎng)站的后門工具。
[0004]webshell是web入侵的常用腳本攻擊工具。簡單的說來,webshell就是一個asp 或Php木馬后門,黑客在入侵了一個網(wǎng)站后,常常在將這些asp或php木馬后門文件放置在 網(wǎng)站服務(wù)器的web目錄中,與正常的網(wǎng)頁文件混在一起。然后黑客就可以用web的方式,通 過asp或php木馬后門控制網(wǎng)站服務(wù)器,包括上傳下載文件、查看數(shù)據(jù)庫、執(zhí)行任意程序命 令等。再通過dos命令或者植入后門木馬、利用服務(wù)器漏洞等達(dá)到提權(quán)的目的,從而旁注同 服務(wù)器其他的網(wǎng)站。
[0005] 由于網(wǎng)站編程語言語法靈活多變,黑客可以利用語法技巧對代碼進(jìn)行變換、變形 甚至加密,讓安全工作人員根本無法提取特征,或者雖然可提取特征,但稍加修改又可繞過 查殺,于是對查殺算法提出了更高的要求。
[0006] 面對各種webshell,現(xiàn)有技術(shù)一般使用特征碼匹配的方式來判斷腳本文件是否為 惡意的webshell,這種方法將網(wǎng)站中的腳本與特征庫中的特征進(jìn)行嚴(yán)格的字符串匹配,若 在腳本中發(fā)現(xiàn)特征字符串,則判定其為webshell;類似的,還可以使用正則表達(dá)式來描述 特征碼的,但本質(zhì)是也是依賴于特征碼。以上算法有著致命的弱點(diǎn),不準(zhǔn)確、誤殺率高、特征 庫龐大且隨時需要工作人員不斷收集樣本提取特征碼,而最重要的缺點(diǎn)是極其容易被黑客 通過語法變形繞過,也就是免殺,webshell變形也是各大安全服務(wù)廠商一直頭疼的問題。
[0007] 對于變形的webshell,單純的特征匹配顯得非常乏力,于是出現(xiàn)下面的查殺方法: 編寫web服務(wù)器插件,對部分關(guān)鍵函數(shù)進(jìn)行hook并進(jìn)行參數(shù)判斷,即以動態(tài)方式對網(wǎng)頁行 為進(jìn)行檢測。其優(yōu)點(diǎn)在于可以實(shí)時進(jìn)行行為監(jiān)測,且可以忽略所有變形技巧。但缺點(diǎn)是:由 于webshell所使用的多數(shù)函數(shù)、對象等在正常腳本中也會使用,有時難以決策其是否為異 常行為;另外,該方案由于增加了邏輯判斷過程,會給web服務(wù)器進(jìn)程增加一定的負(fù)擔(dān),影 響web服務(wù)器反應(yīng)速度,若技術(shù)人員處理不當(dāng),容易造成web服務(wù)器進(jìn)程崩潰,進(jìn)而影響web 服務(wù)器的正常業(yè)務(wù)。
【發(fā)明內(nèi)容】
[0008] 本申請?zhí)峁┝艘环Nwebshell變形的靜態(tài)檢測方法,用于解決現(xiàn)有技術(shù)無法分辨 webshell是否為正常腳本以及對webshell的行為檢測可能會影響正常業(yè)務(wù)的問題。本申 請還提供了一種webshell變形的靜態(tài)檢測裝置,以保證上述方法在實(shí)際中的應(yīng)用。
[0009] 本申請?zhí)峁┑囊环Nwebshell變形的靜態(tài)檢測方法,包括:根據(jù)待檢測webshell文 件內(nèi)容中包括的語言特征判斷該文件的文件類型;根據(jù)待檢測webshell文件的文件類型, 確定要使用的詞法語法分析器、內(nèi)置函數(shù)庫和異常行為規(guī)則庫;利用所述詞法語法分析器 對待檢測webshell文件進(jìn)行詞法和語法分析生成中間代碼;在預(yù)設(shè)的虛擬機(jī)上解釋執(zhí)行 所述中間代碼,并在執(zhí)行過程中利用所述內(nèi)置函數(shù)庫和異常行為規(guī)則庫對中間代碼的行為 進(jìn)行分析,判斷相應(yīng)的代碼是否為惡意代碼。
[0010] 優(yōu)選的,所述中間代碼包括代碼區(qū)和數(shù)據(jù)區(qū),所述代碼區(qū)的代碼包括函數(shù)定義、函 數(shù)調(diào)用和基礎(chǔ)運(yùn)算操作符;所述利用所述詞法語法分析器對待檢測webshell文件進(jìn)行詞 法和語法分析生成中間代碼,具體包括:對待檢測webshell文件中的腳本進(jìn)行掃描,去除 標(biāo)記和注釋信息,得到過濾后的腳本;對過濾后的腳本內(nèi)容進(jìn)行詞法分析,生成由一系列記 號組成的列表;其中所述記號的類型包括對象類聲明、函數(shù)聲明、數(shù)字常量、字符串常量、變 量、函數(shù)調(diào)用和運(yùn)算符;對上述拆分生成的列表進(jìn)行語法分析,將復(fù)雜的表達(dá)式簡化,生成 所述虛擬機(jī)能夠解釋執(zhí)行的中間代碼。
[0011] 優(yōu)選的,所述在預(yù)設(shè)的虛擬機(jī)上解釋執(zhí)行所述中間代碼,利用所述內(nèi)置函數(shù)庫和 異常行為規(guī)則庫對中間代碼的行為進(jìn)行分析判斷所述行為是否異常,具體包括:判斷所述 中間代碼中包括的每個語句的類型,并根據(jù)所述語句的類型執(zhí)行后續(xù)相應(yīng)的操作;對于函 數(shù)調(diào)用,根據(jù)異常行為規(guī)則庫判斷該函數(shù)調(diào)用是否為惡意代碼;對于在執(zhí)行過程中并沒有 代碼調(diào)用的自定義函數(shù),利用模擬參數(shù)進(jìn)行測試調(diào)用;對于既不是內(nèi)置函數(shù)庫中的函數(shù),也 不是自定義函數(shù),根據(jù)異常行為規(guī)則庫判斷該函數(shù)是否為惡意代碼。
[0012] 優(yōu)選的,所述異常行為規(guī)則庫包括敏感函數(shù)調(diào)用規(guī)則和包括有指定函數(shù)集合的大 馬規(guī)則;其中,對于敏感函數(shù)調(diào)用,判斷其是否為惡意代碼的方法是:測試函數(shù)名稱與實(shí)際 參數(shù)是否匹配;對于對象,判斷其是否為惡意代碼的方法是:測試對象類名、方法名以及實(shí) 際參數(shù)是否匹配;對于大馬,判斷方法為:測試在整個執(zhí)行過程中是否存在大馬規(guī)則中包 括的指定函數(shù)集合。
[0013] 優(yōu)選的,所述模擬參數(shù)包括:瀏覽器以GET方式獲得的參數(shù)、瀏覽器以POST方式獲 得的參數(shù)、腳本讀取本地文件的內(nèi)容、腳本讀取遠(yuǎn)程文件的內(nèi)容、COOKIES內(nèi)容和SESSION 內(nèi)容。
[0014] 優(yōu)選的,所述待檢測webshell文件的類型包括php、asp、jsp和cgi。
[0015] 本申請?zhí)峁┑囊环Nwebshell變形的靜態(tài)檢測裝置,包括:語言類別識別模塊,用 于根據(jù)待檢測webshell文件內(nèi)容中包括的語言特征判斷文件類型;中間代碼生成模塊,用 于根據(jù)待檢測webshell文件的文件類型,確定要使用的詞法語法分析器、內(nèi)置函數(shù)庫和異 常行為規(guī)則庫;利用所述詞法語法分析器對待檢測webshell文件進(jìn)行詞法和語法分析生 成中間代碼;虛擬機(jī)模塊,用于解釋執(zhí)行所述中間代碼;惡意代碼判斷模塊,用于根據(jù)所述 內(nèi)置函數(shù)庫和異常行為規(guī)則庫對虛擬機(jī)模塊執(zhí)行中間代碼的過程中的行為進(jìn)行分析,判斷 相應(yīng)的代碼是否為惡意代碼。
[0016] 優(yōu)選的,所述中間代碼包括代碼區(qū)和數(shù)據(jù)區(qū),所述代碼區(qū)的代碼包括函數(shù)定義、函 數(shù)調(diào)用和基礎(chǔ)運(yùn)算操作符;所述中間代碼生成模塊具體包括:腳本過濾子模塊,用于對待 檢測webshell文件中的腳本進(jìn)行掃描,去除標(biāo)記和注釋信息,得到過濾后的腳本;詞法分 析子模塊,用于對所述腳本過濾子模塊獲得的過濾后的腳本內(nèi)容進(jìn)行詞法分析,生成由一 系列記號組成的列表;其中所述記號的類型包括對象類聲明、函數(shù)聲明、數(shù)字常量、字符串 常量、變量、函數(shù)調(diào)用和運(yùn)算符;語法分析子模塊,用于對所述詞法分析子模塊拆分生成的 列表進(jìn)行語法分析,將復(fù)雜的表達(dá)式簡化,生成所述虛擬機(jī)能夠解釋執(zhí)行的中間代碼。
[0017] 優(yōu)選的,所述惡意代碼判