本申請(qǐng)涉及通信技術(shù)領(lǐng)域,尤其涉及一種webshell檢測(cè)方法和裝置。
背景技術(shù):
隨著互聯(lián)網(wǎng)技術(shù)的高速發(fā)展,基于web環(huán)境的互聯(lián)網(wǎng)應(yīng)用越來越廣泛,用戶對(duì)web應(yīng)用安全的關(guān)注度也逐漸升溫。
webshell是以PHP(PHP:Hypertext Preprocessor,超文本預(yù)處理器)、JSP(Java Server Pages,Java服務(wù)器頁(yè)面)、ASP(Active Server Pages,動(dòng)態(tài)服務(wù)器頁(yè)面)等網(wǎng)頁(yè)文件形式存在的一種命令執(zhí)行環(huán)境,也可以稱為一種網(wǎng)頁(yè)后門。入侵者在入侵網(wǎng)站后,可以將webshell與網(wǎng)站服務(wù)器保存在web目錄下的正常網(wǎng)頁(yè)文件混在一起。后續(xù)入侵者可以通過瀏覽器訪問webshell,從而實(shí)現(xiàn)對(duì)網(wǎng)站服務(wù)器的控制,例如:刪除web頁(yè)面、修改主頁(yè)、上傳下載文件、查看數(shù)據(jù)庫(kù)、執(zhí)行任意程序命令等。
相關(guān)技術(shù)中,通??梢杂煞?wù)器將網(wǎng)頁(yè)代碼與特征規(guī)則庫(kù)進(jìn)行匹配,如果匹配成功,則可以確定該網(wǎng)頁(yè)文件中存在webshell。然而,采用這樣的方式難以精確地檢測(cè)出webshell,例如:無法檢測(cè)出經(jīng)過編碼或字符串變換的webshell,因此誤判率較高,對(duì)保障服務(wù)器的安全造成影響。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本申請(qǐng)?zhí)峁┮环Nwebshell檢測(cè)方法和裝置,以解決相關(guān)技術(shù)中webshell檢測(cè)的精確度低的問題。
具體地,本申請(qǐng)是通過如下技術(shù)方案實(shí)現(xiàn)的:
第一方面,本申請(qǐng)?zhí)峁┮环Nwebshell檢測(cè)方法,所述方法應(yīng)用于服務(wù)器,包括:
從網(wǎng)頁(yè)代碼中提取出有效代碼;
基于所述有效代碼生成對(duì)應(yīng)的抽象語法樹;
基于所述抽象語法樹對(duì)所述有效代碼進(jìn)行歸一化計(jì)算,并根據(jù)歸一化計(jì)算結(jié)果修改所述抽象語法樹;
基于修改后的抽象語法樹生成歸一化后的有效代碼;
調(diào)用檢測(cè)模塊對(duì)所述歸一化后的有效代碼進(jìn)行webshell檢測(cè)。
第二方面,本申請(qǐng)?zhí)峁┮环Nwebshell檢測(cè)裝置,所述裝置應(yīng)用于服務(wù)器,包括:
提取單元,用于從網(wǎng)頁(yè)代碼中提取出作為有效代碼;
樹生成單元,用于基于所述有效代碼生成對(duì)應(yīng)的抽象語法樹;
歸一化計(jì)算單元,用于基于所述抽象語法樹對(duì)所述有效代碼進(jìn)行歸一化計(jì)算,并根據(jù)歸一化計(jì)算結(jié)果修改所述抽象語法樹;
代碼生成單元,用于基于修改后的抽象語法樹生成歸一化后的有效代碼;
調(diào)用單元,用于調(diào)用檢測(cè)模塊對(duì)所述歸一化后的有效代碼進(jìn)行webshell檢測(cè)。
分析上述技術(shù)方案可知,服務(wù)器可以先基于抽象語法樹對(duì)網(wǎng)頁(yè)文件中的有效代碼進(jìn)行歸一化計(jì)算,再調(diào)用檢測(cè)模塊,將歸一化后的有效代碼與特征規(guī)則庫(kù)進(jìn)行匹配,如果匹配成功,則可以確定該網(wǎng)頁(yè)文件中存在webshell。與相關(guān)技術(shù)相比,采用這樣的方式可以避免編碼或字符串變換等因素對(duì)特征匹配的影響,從而可以顯著提高服務(wù)器webshell檢測(cè)的精確度,同時(shí)還可以節(jié)省存儲(chǔ)資源,加快匹配速率。
附圖說明
圖1是本申請(qǐng)一示例性實(shí)施例示出的一種webshell檢測(cè)方法的流程圖;
圖2是一種抽象語法樹的示例;
圖3是另一種抽象語法樹的示例;
圖4是另一種抽象語法樹的示例;
圖5是本申請(qǐng)一示例性實(shí)施例示出的一種webshell檢測(cè)裝置所在設(shè)備的硬件結(jié)構(gòu)圖;
圖6是本申請(qǐng)一示例性實(shí)施例示出的一種webshell檢測(cè)裝置的框圖。
具體實(shí)施方式
這里將詳細(xì)地對(duì)示例性實(shí)施例進(jìn)行說明,其示例表示在附圖中。下面的描述涉及附圖時(shí),除非另有表示,不同附圖中的相同數(shù)字表示相同或相似的要素。以下示例性實(shí)施例中所描述的實(shí)施方式并不代表與本申請(qǐng)相一致的所有實(shí)施方式。相反,它們僅是與如所附權(quán)利要求書中所詳述的、本申請(qǐng)的一些方面相一致的裝置和方法的例子。
在本申請(qǐng)使用的術(shù)語是僅僅出于描述特定實(shí)施例的目的,而非旨在限制本申請(qǐng)。在本申請(qǐng)和所附權(quán)利要求書中所使用的單數(shù)形式的“一種”、“所述”和“該”也旨在包括多數(shù)形式,除非上下文清楚地表示其他含義。還應(yīng)當(dāng)理解,本文中使用的術(shù)語“和/或”是指并包含一個(gè)或多個(gè)相關(guān)聯(lián)的列出項(xiàng)目的任何或所有可能組合。
應(yīng)當(dāng)理解,盡管在本申請(qǐng)可能采用術(shù)語第一、第二、第三等來描述各種信息,但這些信息不應(yīng)限于這些術(shù)語。這些術(shù)語僅用來將同一類型的信息彼此區(qū)分開。例如,在不脫離本申請(qǐng)范圍的情況下,第一信息也可以被稱為第二信息,類似地,第二信息也可以被稱為第一信息。取決于語境,如在此所使用的詞語“如果”可以被解釋成為“在……時(shí)”或“當(dāng)……時(shí)”或“響應(yīng)于確定”。
請(qǐng)參考圖1,為本申請(qǐng)一示例性實(shí)施例示出的一種webshell檢測(cè)方法,所述方法可以應(yīng)用在服務(wù)器上,比如:web服務(wù)器等,所述方法包括如下步驟:
步驟101:從網(wǎng)頁(yè)代碼中提取出有效代碼。
網(wǎng)頁(yè)代碼可以分為前端代碼和后端代碼兩部分,而webshell通常存在于后端代碼中。在本實(shí)施例中,服務(wù)器可以定期從網(wǎng)頁(yè)文件所對(duì)應(yīng)的網(wǎng)頁(yè)代碼中提取出后端代碼,并將提取出的后端代碼作為有效代碼。在實(shí)際應(yīng)用中,網(wǎng)頁(yè)文件通??刹捎肞HP、JSP、ASP等編寫,不同的編程語言符合各自特定的編寫規(guī)則,服務(wù)器可以根據(jù)不同編程語言的編寫規(guī)則所指定的字符對(duì)網(wǎng)頁(yè)代碼中的前端代碼和后端代碼進(jìn)行區(qū)分。
以如下采用PHP編寫的網(wǎng)頁(yè)代碼為例:
在這個(gè)例子中,<?php?>內(nèi)的代碼為后端代碼,而<?php?>外的代碼均為前端代碼。針對(duì)該P(yáng)HP網(wǎng)頁(yè)代碼,服務(wù)器可以提取出echo'<p>Hello World</p>';作為有效代碼。
步驟102:基于所述有效代碼生成對(duì)應(yīng)的抽象語法樹。
在本實(shí)施例中,服務(wù)器在提取出有效代碼后,可以基于所述有效代碼生成對(duì)應(yīng)的抽象語法樹。
步驟103:基于所述抽象語法樹對(duì)所述有效代碼進(jìn)行歸一化計(jì)算,并根據(jù)歸一化計(jì)算結(jié)果修改所述抽象語法樹。
在本實(shí)施例中,服務(wù)器可以遍歷生成的抽象語法樹,從而基于所述抽象語法樹對(duì)提取出的有效代碼進(jìn)行歸一化計(jì)算,并根據(jù)歸一化計(jì)算結(jié)果修改所述抽象語法樹。通常,服務(wù)器可以從葉子節(jié)點(diǎn)開始遍歷所述抽象語法樹。所述歸一化計(jì)算可以包括:變量替換、函數(shù)預(yù)計(jì)算、操作符預(yù)計(jì)算等。
以操作符預(yù)計(jì)算為例,假設(shè)服務(wù)器提取出的有效代碼為四則運(yùn)算表達(dá)式1+3*(4-1)+2,則生成的抽象語法樹如圖2所示。
服務(wù)器可以從葉子節(jié)點(diǎn)開始遍歷該抽象語法樹,則首先計(jì)算的是sub(4-1),即4-1=3,后續(xù)服務(wù)器可以刪除節(jié)點(diǎn)4和節(jié)點(diǎn)1,并將該抽象語法樹的節(jié)點(diǎn)sub(-)修改為節(jié)點(diǎn)3,形成圖3所示的抽象語法樹。
下一步計(jì)算的是mul(3*3),即3×3=9,后續(xù)服務(wù)器可以刪除兩個(gè)節(jié)點(diǎn)3,并將該抽象語法樹的節(jié)點(diǎn)mul(*)修改為節(jié)點(diǎn)9,形成圖4所示的抽象語法樹。
以此類推,圖2所示的抽象語法樹在修改后,僅有一個(gè)節(jié)點(diǎn)12。
步驟104:基于修改后的抽象語法樹生成歸一化后的有效代碼。
在本實(shí)施例中,服務(wù)器在完成對(duì)所述抽象語法樹的修改后,可以基于修改后的抽象語法樹生成歸一化后的有效代碼。
以步驟103中的舉例為例,假設(shè)服務(wù)器提取出的有效代碼為:
1+3*(4-1)+2;
則服務(wù)器在基于抽象語法樹對(duì)該有效代碼進(jìn)行操作符預(yù)計(jì)算后,新生成的歸一化后的有效代碼為:
12;
再如,假設(shè)服務(wù)器提取出的有效代碼為:
$a=123;
$b=$a;
則服務(wù)器在基于抽象語法樹對(duì)該有效代碼進(jìn)行變量替換后,新生成的歸一化后的有效代碼為:
$b=123;
在另一個(gè)例子中,假設(shè)服務(wù)器提取出的有效代碼為:
function abc(){
return 1;
}
abc()+3;
則服務(wù)器在基于抽象語法樹對(duì)該有效代碼進(jìn)行函數(shù)預(yù)計(jì)算后,新生成的歸一化后的有效代碼為:
4;
以如下采用PHP編寫的后端代碼為例:
則服務(wù)器在提取出有效代碼,并基于抽象語法樹對(duì)該有效代碼進(jìn)行歸一化計(jì)算后,新生成的歸一化后的有效代碼如下所示:
$as="dfs";
$dd=23;
$xc=5;
23;
"dfseffdfsret";
$v=24.123;
步驟105:調(diào)用檢測(cè)模塊對(duì)所述歸一化后的有效代碼進(jìn)行webshell檢測(cè)。
在本實(shí)施例中,服務(wù)器在得到歸一化后的有效代碼后,可以調(diào)用檢測(cè)模塊對(duì)所述歸一化后的有效代碼進(jìn)行webshell檢測(cè)。其中,所述檢測(cè)模塊可以是基于特征匹配的webshell檢測(cè)引擎,所述webshell檢測(cè)引擎可以通過軟件實(shí)現(xiàn)。
在一個(gè)可選的實(shí)施例中,檢測(cè)模塊可以采用相關(guān)技術(shù)對(duì)所述歸一化后的有效代碼進(jìn)行webshell檢測(cè),包括如下步驟:將所述歸一化后的有效代碼與預(yù)設(shè)的特征規(guī)則庫(kù)進(jìn)行匹配;當(dāng)所述歸一化后的有效代碼匹配所述特征規(guī)則庫(kù)時(shí),確定所述網(wǎng)頁(yè)文件為webshell文件。例如,所述特征規(guī)則庫(kù)中可以包括eval($_POST,用于檢測(cè)PHP一句話木馬。
需要說明的是,在相關(guān)技術(shù)中,經(jīng)過編碼或字符串變換的特征也要添加到特征規(guī)則庫(kù)中,以檢測(cè)出經(jīng)過編碼或字符串變換的webshell。然而在本技術(shù)方案中,由于預(yù)先對(duì)網(wǎng)頁(yè)文件中的有效代碼進(jìn)行了歸一化計(jì)算,因此只需在特征規(guī)則庫(kù)中添加原始特征即可,無需將編碼或字符串變換后的特征也添加到特征規(guī)則庫(kù)中,節(jié)省了存儲(chǔ)資源。
由上述實(shí)施例可見,服務(wù)器可以先基于抽象語法樹對(duì)網(wǎng)頁(yè)文件中的有效代碼進(jìn)行歸一化計(jì)算,再調(diào)用檢測(cè)模塊,將歸一化后的有效代碼與特征規(guī)則庫(kù)進(jìn)行匹配,如果匹配成功,則可以確定該網(wǎng)頁(yè)文件中存在webshell。與相關(guān)技術(shù)相比,采用這樣的方式可以避免編碼或字符串變換等因素對(duì)特征匹配的影響,從而可以顯著提高服務(wù)器webshell檢測(cè)的精確度,同時(shí)還可以節(jié)省存儲(chǔ)資源,加快匹配速率。
與前述webshell檢測(cè)方法的實(shí)施例相對(duì)應(yīng),本申請(qǐng)還提供了webshell檢測(cè)裝置的實(shí)施例。
本申請(qǐng)webshell檢測(cè)裝置的實(shí)施例可以應(yīng)用在服務(wù)器上。裝置實(shí)施例可以通過軟件實(shí)現(xiàn),也可以通過硬件或者軟硬件結(jié)合的方式實(shí)現(xiàn)。以軟件實(shí)現(xiàn)為例,作為一個(gè)邏輯意義上的裝置,是通過其所在服務(wù)器的處理器將非易失性存儲(chǔ)器中對(duì)應(yīng)的計(jì)算機(jī)程序指令讀取到內(nèi)存中運(yùn)行形成的。從硬件層面而言,如圖5所示,為本申請(qǐng)webshell檢測(cè)裝置所在服務(wù)器的一種硬件結(jié)構(gòu)圖,除了圖5所示的處理器、內(nèi)存、網(wǎng)絡(luò)接口、以及非易失性存儲(chǔ)器之外,實(shí)施例中裝置所在的服務(wù)器通常根據(jù)該webshell檢測(cè)的實(shí)際功能,還可以包括其他硬件,對(duì)此不再贅述。
請(qǐng)參考圖6,為本申請(qǐng)一示例性實(shí)施例示出的webshell檢測(cè)裝置的框圖。該webshell檢測(cè)裝置600可以應(yīng)用于圖5所示的服務(wù)器中,包括:
提取單元601,用于從網(wǎng)頁(yè)代碼中提取出作為有效代碼;
樹生成單元602,用于基于所述有效代碼生成對(duì)應(yīng)的抽象語法樹;
歸一化計(jì)算單元603,用于基于所述抽象語法樹對(duì)所述有效代碼進(jìn)行歸一化計(jì)算,并根據(jù)歸一化計(jì)算結(jié)果修改所述抽象語法樹;
代碼生成單元604,用于基于修改后的抽象語法樹生成歸一化后的有效代碼;
調(diào)用單元605,用于調(diào)用檢測(cè)模塊對(duì)所述歸一化后的有效代碼進(jìn)行webshell檢測(cè)。
在一個(gè)可選的實(shí)施例中,所述歸一化計(jì)算包括:變量替換、函數(shù)預(yù)計(jì)算、操作符預(yù)計(jì)算。
在另一個(gè)可選的實(shí)施例中,所述提取單元601具體用于從網(wǎng)頁(yè)代碼中提取出后端代碼作為有效代碼。
在另一個(gè)可選的實(shí)施例中,所述歸一化計(jì)算單元603具體用于從葉子節(jié)點(diǎn)開始,基于所述抽象語法樹對(duì)所述有效代碼進(jìn)行歸一化計(jì)算,并根據(jù)歸一化計(jì)算結(jié)果修改所述抽象語法樹。
在另一個(gè)可選的實(shí)施例中,檢測(cè)模塊對(duì)所述歸一化后的有效代碼進(jìn)行webshell檢測(cè),包括:
將所述歸一化后的有效代碼與預(yù)設(shè)的特征規(guī)則庫(kù)進(jìn)行匹配;
當(dāng)所述歸一化后的有效代碼匹配所述特征規(guī)則庫(kù)時(shí),確定所述網(wǎng)頁(yè)文件中存在webshell。
上述裝置中各個(gè)單元的功能和作用的實(shí)現(xiàn)過程具體詳見上述方法中對(duì)應(yīng)步驟的實(shí)現(xiàn)過程,在此不再贅述。
對(duì)于裝置實(shí)施例而言,由于其基本對(duì)應(yīng)于方法實(shí)施例,所以相關(guān)之處參見方法實(shí)施例的部分說明即可。以上所描述的裝置實(shí)施例僅僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上。可以根據(jù)實(shí)際的需要選擇其中的部分或者全部模塊來實(shí)現(xiàn)本申請(qǐng)方案的目的。本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性勞動(dòng)的情況下,即可以理解并實(shí)施。
以上所述僅為本申請(qǐng)的較佳實(shí)施例而已,并不用以限制本申請(qǐng),凡在本申請(qǐng)的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本申請(qǐng)保護(hù)的范圍之內(nèi)。