• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于RNN的Webshell檢 測(cè)研究

      2020-07-17 08:19:46龍,王晨,史
      關(guān)鍵詞:源文件字符串準(zhǔn)確率

      周 龍,王 晨,史 崯

      1.武漢郵電科學(xué)研究院,武漢 430000

      2.南京烽火軟件科技股份有限公司,南京 210000

      1 引言

      Webshell是一種惡意代碼,可用于網(wǎng)站管理,主要由PHP、asp、jsp等語(yǔ)言編寫而成。一旦Webshell源文件被入侵者成功植入到服務(wù)器中,入侵者就可通過瀏覽器訪問Webshell,獲取相關(guān)操作權(quán)限,控制服務(wù)器,竊取重要數(shù)據(jù)。

      Webshell可分為兩類,一是小馬,二是大馬。小馬,源文件代碼量較少,通常是幾行到幾十行不等,其功能主要是文件上傳、執(zhí)行命令行程序等。大馬,文件大小少則幾KB,多則幾百KB,甚至超過1 MB,功能復(fù)雜,包括執(zhí)行命令行程序、上傳文件、權(quán)限提升、端口掃描、數(shù)據(jù)庫(kù)操作等。此外,大馬要完成其功能還需要其他源文件的配合,協(xié)同作戰(zhàn),達(dá)到攻擊目的。

      2 相關(guān)工作

      針對(duì)Webshell的檢測(cè)方法,可分為3類:基于文件的檢測(cè)、基于流量的檢測(cè)以及基于日志的檢測(cè)。

      目前的研究集中于基于文件的檢測(cè),即直接分析源文件,提取文本特征,包括API函數(shù)名稱、變量名稱、信息熵、最長(zhǎng)字符串、文件壓縮比、重合指數(shù)、字符串長(zhǎng)度差等。此外,還可針對(duì)具體腳本語(yǔ)言,根據(jù)其執(zhí)行機(jī)制,提取編譯結(jié)果的特征,比如字節(jié)碼特征等。當(dāng)前機(jī)器學(xué)習(xí)相關(guān)技術(shù)的應(yīng)用也是學(xué)術(shù)界的研究熱點(diǎn),網(wǎng)絡(luò)安全就是其中一個(gè)領(lǐng)域。正常web系統(tǒng)其源文件的編碼命名規(guī)范有別于Webshell源文件?;诖讼敕?,文獻(xiàn)[1]提出將余弦相似度應(yīng)用于Webshell檢測(cè),通過比較不同文件的余弦相似度,以及匹配特征關(guān)鍵詞來(lái)判斷Webshell,但是漏報(bào)率和誤報(bào)率較高。文獻(xiàn)[2]針對(duì)PHP源文件,進(jìn)行語(yǔ)法分析,將生成的文件指紋用于Webshell檢測(cè),再進(jìn)一步進(jìn)行污點(diǎn)分析。該方法依賴于預(yù)先設(shè)定的樣本庫(kù),且準(zhǔn)確率較低。文獻(xiàn)[3]將MLP(多層感知機(jī))應(yīng)用于檢測(cè)Webshell,將源文件編譯之后,根據(jù)TF-IDF提取Bi-Gram特征,此方法,需要將源文件預(yù)先編譯,且準(zhǔn)確率較低。文獻(xiàn)[4]將MLP與word2vec相結(jié)合,提取100維詞向量,來(lái)檢測(cè)Webshell,在驗(yàn)證集上實(shí)現(xiàn)了平均準(zhǔn)確率98.6%,取得了較好的效果,但是依賴于word2vec的預(yù)先訓(xùn)練好的詞向量。此外,文獻(xiàn)[5]將神經(jīng)網(wǎng)絡(luò)應(yīng)用于獲取樣本的文本向量,再結(jié)合以SVDD(Support Vector Domain Description,SVDD)算法來(lái)檢測(cè)Webshell,誤報(bào)率較高。國(guó)外也有關(guān)于基于文件的檢測(cè)研究。Wrench P M等人[6]提出了解除混淆,基于聚類的方法對(duì)PHP程序設(shè)計(jì)語(yǔ)言編寫的Webshell源文件進(jìn)行分類。而Tu T D等人[7]提出一種基于最優(yōu)閾值的算法檢測(cè)Webshell。

      基于流量的檢測(cè),相對(duì)基于文件的檢測(cè)而言,研究較少。趙運(yùn)弢等人[8]分析了基于流量的檢測(cè)方法,指出通過網(wǎng)絡(luò)流量負(fù)載,提取具有明顯攻擊傾向的關(guān)鍵詞來(lái)檢測(cè)Webshell。文獻(xiàn)[9]結(jié)合關(guān)鍵詞、機(jī)器學(xué)習(xí)算法和手動(dòng)校驗(yàn),先匹配關(guān)鍵詞,再使用機(jī)器學(xué)習(xí)算法檢測(cè)關(guān)鍵詞匹配之后的樣本,最后手動(dòng)校驗(yàn)。此方法嚴(yán)重依賴于校驗(yàn)人員的經(jīng)驗(yàn)。

      基于日志的檢測(cè),一般情況下針對(duì)系統(tǒng)日志信息進(jìn)行統(tǒng)計(jì)分析。文獻(xiàn)[10]針對(duì)http行為日志進(jìn)行統(tǒng)計(jì)分析,對(duì)比分析了幾種常規(guī)機(jī)器學(xué)習(xí)算法檢測(cè)Webshell的性能。文獻(xiàn)[11]利用日志數(shù)據(jù),結(jié)合特征匹配和頁(yè)面關(guān)聯(lián)分析,來(lái)檢測(cè)Webshell。

      目前,關(guān)于Webshell的檢測(cè)方法,常用的機(jī)器學(xué)習(xí)算法,比如SVM、KNN、MLP等,不能提取深層次的特征,存在準(zhǔn)確率較低、誤報(bào)率和漏報(bào)率較高等不足?;谔卣髌ヅ涞臋z測(cè)算法,受限于特征,不能有效檢測(cè)出Webshell。而深度學(xué)習(xí)方法則可以很好地解決此類問題。鑒于此,本文提出了基于RNN的Webshell檢測(cè)方法。

      3 基于RNN的Webshell檢測(cè)

      RNN[12](Recurrent Neural Network)是一種深度學(xué)習(xí)方法,具有循環(huán)結(jié)構(gòu),被廣泛應(yīng)用于語(yǔ)音識(shí)別、機(jī)器翻譯、文本處理等領(lǐng)域。RNN中的循環(huán)結(jié)構(gòu),有多種選擇,本文選取GRU(Gated Recurrent Unit)。GRU是LSTM(Long Short Term Memory)[13]諸多變體中的一個(gè),在很多領(lǐng)域都得到了大量的使用。

      本文Webshell檢測(cè)方法的處理流程見圖1。傳統(tǒng)的Webshell檢測(cè)方法多是將提取的樣本的各種特征表示成一個(gè)向量,包括信息熵、重合指數(shù)、文件壓縮比等特征,再使用機(jī)器學(xué)習(xí)算法分類。即使提取樣本關(guān)鍵詞,也將每個(gè)關(guān)鍵詞對(duì)應(yīng)一個(gè)特征,統(tǒng)計(jì)該關(guān)鍵詞的詞頻等。而本文則從關(guān)鍵詞集來(lái)近似樣本的角度,通過提取關(guān)鍵詞,使用樣本對(duì)應(yīng)的關(guān)鍵詞集來(lái)近似表示樣本,排除了樣本中的無(wú)用噪聲,在此基礎(chǔ)上使用RNN對(duì)樣本建模。

      圖1 Webshell檢測(cè)流程

      3.1 數(shù)據(jù)預(yù)處理

      預(yù)處理是對(duì)源文件進(jìn)行處理,以提高效率和識(shí)別準(zhǔn)確率。預(yù)處理工作包括切詞、提取關(guān)鍵詞等。

      切詞,對(duì)文本數(shù)據(jù)進(jìn)行切分,得到具有一定實(shí)際意義的詞。

      提取關(guān)鍵詞,出于效率的考慮,以及并不是每個(gè)詞都有助于識(shí)別,由此,需要對(duì)切詞結(jié)果進(jìn)行取舍。

      總體上來(lái)說,源文件中的每一部分,都是為程序?qū)崿F(xiàn)相關(guān)功能服務(wù)的,相輔相成。程序代碼用來(lái)實(shí)現(xiàn)其功能,而注釋是對(duì)程序代碼的補(bǔ)充,依賴于具體程序而存在,以提高可讀性,以及記錄重要信息。不同的源文件,注釋不盡相同。因此,在切詞之前,保留源文件中的所有信息,包括注釋等。

      3.1.1 切詞

      切詞,是根據(jù)某種規(guī)則對(duì)文本文件中的文本進(jìn)行切割。程序代碼是由自然語(yǔ)言編寫的,因此,除了正常的英語(yǔ)之外,還可能存在其他語(yǔ)言,比如中文等。不同的語(yǔ)言,切詞規(guī)則不同,英語(yǔ)是根據(jù)空格進(jìn)行切分,中文是根據(jù)相關(guān)語(yǔ)法、語(yǔ)義等信息來(lái)切割。

      鑒于PHP源文件中有英語(yǔ)和中文,以及大量的運(yùn)算符和標(biāo)點(diǎn)符號(hào)。中文字符一般作為注釋或者變量值,數(shù)量遠(yuǎn)遠(yuǎn)少于英文字符。而英文字符是程序代碼的主體部分,具有實(shí)現(xiàn)相關(guān)功能的作用。

      因此,采用以非字母和非數(shù)字字符作為分割符來(lái)切分源文件。切詞之后,存在大量的各種字母和數(shù)字字符串,包括單個(gè)字母、單個(gè)數(shù)字、字母組成的字符串、數(shù)字串等,這些字符串可能是變量名稱、函數(shù)名稱等。字符串字符長(zhǎng)度范圍變化較大,從1到1 000不等,甚至少量字符串超過1 000個(gè)字符。

      按照上述方法對(duì)整個(gè)數(shù)據(jù)集切詞,統(tǒng)計(jì)分析發(fā)現(xiàn),約95.02%的字符串長(zhǎng)度小于25,其中小于25個(gè)字符的字符串?dāng)?shù)量情況見圖2。

      圖2 不同長(zhǎng)度的字符串?dāng)?shù)量

      從圖2中可見,字符串主要集中在長(zhǎng)度小于15的短字符串。對(duì)于長(zhǎng)度為小于4的字符串一般是沒有實(shí)際意義的變量名或變量值的一部分,幾乎在每個(gè)樣本中都會(huì)大量出現(xiàn)。而字符串長(zhǎng)度大于等于15的字符串大多是經(jīng)過編碼和加密處理之后的字符串,此類字符串詞頻極低,且對(duì)源文件幾乎沒有區(qū)分能力。因此,只保留字符串長(zhǎng)度介于3到15之間的字符串。

      3.1.2 提取關(guān)鍵詞

      由于各個(gè)源文件實(shí)現(xiàn)的功能有差異,導(dǎo)致源文件的大小不一。即使這些源文件實(shí)現(xiàn)的功能相同,但由于編寫人員之間的差異性,包括編碼習(xí)慣不同、編碼水平差異等,其文件大小也不同。關(guān)鍵詞提取,極大地減少了模型訓(xùn)練時(shí)間,在一定程度上屏蔽了編碼人員之間的差異性,均衡樣本之間字符串?dāng)?shù)量差異。

      本文采用TF-IDF算法來(lái)提取關(guān)鍵詞。TF-IDF算法是基于詞頻和逆文檔頻率。通常情況下,對(duì)于詞頻越高的詞,其越能表示文本的信息,對(duì)分本的區(qū)分能力則越強(qiáng)。而逆文檔頻率越高,該詞出現(xiàn)過的文檔越少,對(duì)文本也有很好的區(qū)分能力。因此,TF-IDF算法偏向于選擇詞頻高且出現(xiàn)過的文本少的詞。

      正常源文件和Webshell源文件,因?qū)崿F(xiàn)的功能有差別,調(diào)用的API函數(shù)不同。正常源文件,總體上調(diào)用了幾乎所有的API函數(shù),而Webshell源文件中調(diào)用的主要是系統(tǒng)函數(shù),包括文件操作、執(zhí)行命令行程序等。對(duì)于變量名稱,正常源文件一般是見名知意,可讀性強(qiáng),相比而言,Webshell文件這種特征不明顯。因此,TF-IDF算法可有效地用于關(guān)鍵詞提取。TF-IDF算法提取關(guān)鍵詞示例見表1。

      3.2 模型結(jié)構(gòu)

      本文使用的GRU參考于文獻(xiàn)[14],GRU是對(duì)vanillaLSTM[15]復(fù)雜結(jié)構(gòu)的簡(jiǎn)化,LSTM結(jié)構(gòu)見圖3,GRU結(jié)構(gòu)見圖4。

      表1 關(guān)鍵詞示例

      圖3 vanilla LSTM結(jié)構(gòu)圖

      圖4 GRU結(jié)構(gòu)圖

      原始的LSTM中有3個(gè)門,輸入門、輸出門、遺忘門,而GRU只有更新門(update gate)和重置門(reset gate)2個(gè)門。此外,LSTM有cell狀態(tài)的循環(huán)更新,而GRU中則去掉了cell,取而代之的是更多的直接依賴于GRU的輸出h的加法和乘法運(yùn)算。

      GRU結(jié)構(gòu)中信息流向見方程(1)~(4)。其中重置門和更新門計(jì)算方式見方程(1)和(2),可見兩個(gè)門都依賴于上一時(shí)刻的輸出和當(dāng)前時(shí)刻的輸入,兩者之間是加法關(guān)系。GRU的輸出計(jì)算方式見方程(3)和(4),兩個(gè)門通過其值域限制了上一時(shí)刻信息的通過量,即上一時(shí)刻的輸出,因?yàn)殚T的存在部分信息流向當(dāng)前時(shí)刻的輸出,而剩余的信息則被當(dāng)前時(shí)刻的輸出丟掉。另外,方程(4)是對(duì)中間狀態(tài)和加權(quán)平均,根據(jù)門的取值偏向于兩者中的一個(gè)。重置門的計(jì)算方程:

      更新門計(jì)算方程:

      GRU輸出計(jì)算方程:

      其中,符號(hào)⊙表示對(duì)應(yīng)元素相乘,x表示輸入,h表示某時(shí)刻的輸出,t表示時(shí)間,取值范圍[1,T],l表示層,取值范圍[1,L],W,U分別表示對(duì)應(yīng)的權(quán)值矩陣,σ是sigmoid函數(shù),值域?yàn)閇0,1],分別對(duì)應(yīng)于各個(gè)門。

      從方程中可見,GRU的相鄰時(shí)刻的輸出聯(lián)系緊密,上一個(gè)時(shí)刻的輸出貫穿了當(dāng)前時(shí)刻的輸出的整個(gè)計(jì)算流。

      一般情況下,對(duì)于這種分類問題,通常是取RNN的最后一層的最后一個(gè)時(shí)刻的輸出,即hLT。而多層RNN的每一層都提取不同的特征[16],簡(jiǎn)單地使用最后一層的特征,利用的信息量較少。因此,本文利用每一層的特征表示,即將每一層的最后時(shí)刻的輸出hlT合并,見方程(5),然后通過一個(gè)線性映射到一個(gè)特征向量hG,維度與hl T相同,矩陣W是線性映射的系數(shù),見方程(6)。

      3.3 實(shí)驗(yàn)參數(shù)設(shè)置

      實(shí)驗(yàn)使用的RNN結(jié)構(gòu)由2層GRU構(gòu)成,其隱層單元數(shù)量取200,見圖5。經(jīng)過多次迭代,多層GRU的每層的最后輸出映射到一個(gè)向量,該向量通過一個(gè)全連接層映射到一個(gè)2維向量,通過一個(gè)softmax函數(shù)輸出樣本所屬類別的概率。實(shí)驗(yàn)采用Adam[17]優(yōu)化算法,學(xué)習(xí)率初值取0.001,每1 000步指數(shù)衰減,衰減比率取0.8。損失函數(shù)選擇交叉熵,為防止過擬合,選擇L2損失,系數(shù)取0.001。

      在RNN模型之前還有一個(gè)詞嵌入層,用于將詞映射成詞向量,參數(shù)是一個(gè)隨機(jī)初始化的矩陣。針對(duì)預(yù)處理之后的訓(xùn)練集,建立一個(gè)詞表,將所有詞加入到詞表,若某個(gè)詞不在詞表中,則加入到詞表;反之,不作處理。每個(gè)詞表中的詞都有一個(gè)唯一的索引。通過詞嵌入層,可將樣本中詞序列根據(jù)詞索引映射成一個(gè)詞向量序列,詞的索引對(duì)應(yīng)于矩陣行號(hào)。該矩陣初值每個(gè)元素服從0均值,方差為1的高斯分布。

      圖5 網(wǎng)絡(luò)結(jié)構(gòu)圖

      4 實(shí)驗(yàn)

      4.1 數(shù)據(jù)來(lái)源

      實(shí)驗(yàn)數(shù)據(jù)都來(lái)自于Github,其中Webshell樣本是在GitHub中搜索Webshell,取前6個(gè)搜索結(jié)果,取其中的PHP源文件,而正常樣本是在GitHub中搜索web,編程語(yǔ)言選擇PHP,排除其中Webshell相關(guān)搜索結(jié)果,選擇前50個(gè),取其中的PHP源文件。所有樣本都是PHP源文件,數(shù)量情況見表2。

      表2 各類樣本數(shù)量及占比

      樣本總量為1 307+11 746=13 053個(gè),由表2可知,Webshell樣本和正常樣本之比接近1∶10。

      4.2 數(shù)據(jù)集劃分

      將數(shù)據(jù)集劃分成測(cè)試集、訓(xùn)練集,具體情況見表3。

      表3 各數(shù)據(jù)子集樣本數(shù)量

      表3中測(cè)試集用于最后測(cè)試模型在未知樣本的情況下的預(yù)測(cè)性能,而訓(xùn)練集又進(jìn)一步劃分為2個(gè)子集,用于模型的訓(xùn)練和驗(yàn)證。由于數(shù)據(jù)集中Webshell樣本和正常樣本之比接近1∶10,因此,隨機(jī)過采樣至1∶1。

      4.3 評(píng)級(jí)指標(biāo)

      Webshell的檢測(cè)是個(gè)二分類問題,選擇準(zhǔn)確率、漏報(bào)率、誤報(bào)率3個(gè)指標(biāo)來(lái)綜合評(píng)價(jià)算法的性能。相關(guān)符號(hào)表示見表4。

      表4 實(shí)際類別和預(yù)測(cè)類別符號(hào)標(biāo)記

      準(zhǔn)確率(Accuracy,Acc),正確分類的樣本比例,方程如下:

      漏報(bào)率(Rate of missing report,Rmr),在實(shí)際是Webshell的樣本中,被預(yù)測(cè)為正常樣本的比例,方程如下:

      誤報(bào)率(False alarm rate,F(xiàn)ar),在預(yù)測(cè)為Webshell的樣本中,實(shí)際是正常樣本的比例,方程如下:

      4.4 實(shí)驗(yàn)結(jié)果

      本文主要從算法的角度來(lái)評(píng)價(jià)Webshell的檢測(cè)性能,對(duì)比分析了不同算法對(duì)PHP源文件的檢測(cè)性能。

      對(duì)于GRU(本文方法)、SVM、GBDT(Gradient Boosting Decision Tree)和CNN 4種算法,訓(xùn)練10 000步,每種算法都取驗(yàn)證集上準(zhǔn)確率最高的模型參數(shù),其中GRU驗(yàn)證集準(zhǔn)確率為99.34%,明顯要優(yōu)于其他3種算法。

      針對(duì)測(cè)試集中的未知樣本,Webshell樣本113個(gè),正常樣本887個(gè),4種算法的具體檢測(cè)情況見表5。

      表5 測(cè)試集檢測(cè)結(jié)果

      綜合來(lái)看,針對(duì)未知樣本,GRU明顯優(yōu)于其他3種算法。GRU的分類準(zhǔn)確率明顯高于CNN、GBDT、SVM。雖然GRU的誤報(bào)數(shù)量多于GBDT達(dá)23個(gè),但是漏報(bào)數(shù)量明顯低于GBDT,并且GRU的準(zhǔn)確率為97.4%,高于GBDT約4%,誤報(bào)率高于GBDT約2%。其中CNN中所使用的卷積是5×5,提取文本的局部特征,可能由于數(shù)據(jù)本身的字符串?dāng)?shù)量不同,以及提取關(guān)鍵詞之后,又不同程度地丟掉了信息,導(dǎo)致根據(jù)從數(shù)據(jù)中提取的特征不能有效區(qū)分Webshell。GRU將文本當(dāng)作序列數(shù)據(jù)來(lái)處理,提取樣本的順序特征,并結(jié)合不同層的不同特征,即使預(yù)處理丟掉了較多沒有實(shí)際意義的字符串和對(duì)文件區(qū)分能力較弱的字符串,包括少量的變量名稱、較多的變量值,以及函數(shù)的部分名稱等,但是保留了可用于區(qū)分正常文件和Webshell文件的字符串。因此,可有效識(shí)別出Webshell,且識(shí)別率最優(yōu)。

      以上實(shí)驗(yàn)結(jié)果,TF-IDF提取了每個(gè)樣本的200個(gè)關(guān)鍵詞。可通過調(diào)整字符串長(zhǎng)度取值范圍來(lái)為關(guān)鍵詞提取提供更多的字符串,增加關(guān)鍵詞數(shù)量來(lái)減少每個(gè)樣本預(yù)處理丟掉的信息,減少原始樣本和近似樣本的差異,但是增加關(guān)鍵詞數(shù)量,模型的訓(xùn)練時(shí)間會(huì)延長(zhǎng)。

      5 結(jié)束語(yǔ)

      本文提出的一種基于RNN的Webshell檢測(cè)方法,采用GRU網(wǎng)絡(luò)結(jié)構(gòu),有效地解決了Webshell的檢測(cè)。對(duì)樣本的主要成分PHP程序代碼切詞,根據(jù)TF-IDF算法提取關(guān)鍵詞,關(guān)鍵詞保持原始順序不變。實(shí)驗(yàn)結(jié)果表明,在準(zhǔn)確率、漏報(bào)率等指標(biāo)上,該方法要優(yōu)于其他檢測(cè)算法,比如CNN、GBDT、SVM等。但是,誤報(bào)率還有提升的空間。

      在下一步的研究中,可提取更多的關(guān)鍵詞,結(jié)合BiRNN(Bidirectional Recurrent Neural Network),提取樣本數(shù)據(jù)兩個(gè)方向上的特征。此外,切詞對(duì)Webshell的檢測(cè)結(jié)果有重要影響,需要調(diào)整切詞方法,使得切出來(lái)的詞具有實(shí)際意義,進(jìn)一步提升算法的檢測(cè)性能。

      猜你喜歡
      源文件字符串準(zhǔn)確率
      乳腺超聲檢查診斷乳腺腫瘤的特異度及準(zhǔn)確率分析
      健康之家(2021年19期)2021-05-23 11:17:39
      不同序列磁共振成像診斷脊柱損傷的臨床準(zhǔn)確率比較探討
      2015—2017 年寧夏各天氣預(yù)報(bào)參考產(chǎn)品質(zhì)量檢驗(yàn)分析
      網(wǎng)絡(luò)社區(qū)劃分在軟件質(zhì)量問題分析中的應(yīng)用
      基于源文件可疑度的軟件缺陷定位方法研究
      高速公路車牌識(shí)別標(biāo)識(shí)站準(zhǔn)確率驗(yàn)證法
      LKJ基礎(chǔ)數(shù)據(jù)源文件自動(dòng)編制系統(tǒng)的研究
      一種新的基于對(duì)稱性的字符串相似性處理算法
      誤寫C源文件擴(kuò)展名為CPP的危害
      依據(jù)字符串匹配的中文分詞模型研究
      阜宁县| 攀枝花市| 莎车县| 沽源县| 清水河县| 洪洞县| 库伦旗| 乐安县| 普宁市| 青州市| 新蔡县| 大新县| 同心县| 离岛区| 安塞县| 黑山县| 通辽市| 嵩明县| 包头市| 邯郸县| 乐至县| 贵定县| 汉源县| 石门县| 闽清县| 健康| 沾益县| 天峻县| 田东县| 南乐县| 平南县| 拜城县| 革吉县| 固安县| 贡山| 平陆县| 浦城县| 肃宁县| 信阳市| 通化县| 库尔勒市|