鄧全才 郭雅靜 張子翼
(河北建筑工程學院數(shù)理系,河北 張家口 075000)
Web應用(網(wǎng)站)已滲透到電子商務、教育、社交網(wǎng)絡等眾多領域.網(wǎng)絡入侵事件時有發(fā)生,當黑客入侵成功后,WebShell被攻擊者上傳至Web服務器,用于控制Web服務主機,非法訪問網(wǎng)站資源,甚至控制具有Web功能的關鍵設施,嚴重威脅著國家網(wǎng)絡空間安全,Web的安全問題變的日益嚴峻.因此,對WebShell檢測技術的研究是有必要而且有意義的[1].
Web通常具有允許用戶進行文件上傳、下載的功能.但是,如果下載檢測程序未嚴格檢測下載文件的格式,或者服務器軟件中有解析漏洞,那么它就可以使黑客能夠下載WebShell并對其進行解析,從實現(xiàn)對網(wǎng)站的控制.WebShell是一種可以進行文件操作和命令執(zhí)行的惡意程序.WebShell通過Web服務獲得Web服務器的管理權限,從而對Web服務器進行深入滲透和控制.WebShell中“Web”指Web服務器的服務功能,“Shell”指為使用者提供服務的一些操作權限,如文件管理、數(shù)據(jù)庫連接、命令執(zhí)行等.
WebShell根據(jù)腳本可以分為PHP腳本木馬,ASP腳本木馬, .NET腳本木馬、JSP腳本木馬、以及與python網(wǎng)頁相關的WebShell.攻擊者在入侵一個Web站點時,將這些腳本文件上傳至Web服務器目錄下.通過瀏覽器訪問的方式,訪問腳本文件的同時,可以控制Web服務器[2],如果Web權限比較高,甚至可以直接運行系統(tǒng)命令.WebShell具體分類如圖1所示[3].
圖1 WebShell分類
WebShell主要有兩方面的作用[4],一是用于Web服務器的管理等;另一方面可以被入侵者利用,從而達到控制目標服務器的目的.除了以上作用外,WebShell還有其它更多豐富的功能:探測服務器上是否存在其他WebShell、連接數(shù)據(jù)庫、集成其它提權工具等.WebShell作為一個惡意動態(tài)腳本,具有隱蔽性,可以利用服務器漏洞進行隱藏,其通信和普通網(wǎng)頁一樣都是通過服務器軟件端口(默認為80端口),因此不會被防火墻攔截.
ADFA-LD數(shù)據(jù)集[5]是澳大利亞國防學院對外發(fā)布的一套主機級入侵檢測系統(tǒng)的數(shù)據(jù)集合,被廣泛應用于入侵檢測類產(chǎn)品的測試.ADFA-LD數(shù)據(jù)集已經(jīng)將各類系統(tǒng)調(diào)用完成了特征化,并針對攻擊類型進行了標注,其中攻擊類型為WebShell的數(shù)據(jù)集放在ADFA-LD文件下,數(shù)據(jù)集分為三組,每一組都包含了原始系統(tǒng)調(diào)用順序.每個訓練集(Training_Data_Master)和驗證集(Validation_Data_Master)的數(shù)據(jù)都是在主機的正常操作過程中收集的.其中訓練集數(shù)據(jù)大小在300比特到6kb之間,驗證集數(shù)據(jù)在300kb到10kb之間.攻擊數(shù)據(jù)集(Attack_Data_Master)里共有6種攻擊方式.
用x=和y=兩個變量分別存儲正常數(shù)據(jù)和異常數(shù)據(jù),并設置正常數(shù)據(jù)標簽為0,異常數(shù)據(jù)標簽為1.通過train_test_split函數(shù)隨機分配訓練集和測試集,訓練集數(shù)據(jù)和測試集數(shù)據(jù)的比例為7:3,random_size:設置隨機數(shù)種子,通過設定為相同的數(shù)值,使每次分割的結果都相同,具體實現(xiàn)如下所示.
x_train,x_test,y_train,y_test=train_test_split(x,y,test size=0.3,random_state=9)
測試數(shù)據(jù)使用和訓練數(shù)據(jù)一樣的詞匯表:使用詞袋模型轉換為系統(tǒng)調(diào)用向量.運用詞袋模型,把所有的詞匯裝到一個袋子里,不考慮其詞法和詞序的問題,即每個詞匯都是獨立的.權重只與每個單詞出現(xiàn)的頻率有關.詞袋模型會先進行分詞,通過統(tǒng)計每個詞匯出現(xiàn)的次數(shù),就可以得到該文本基于詞匯的特征,將文本中的詞匯與其對應的詞頻放在一起即為向量化.
采用Pytorch分別構建BP神經(jīng)網(wǎng)絡和LSTM神經(jīng)網(wǎng)絡模型.Pytorch是一個開源的Python機器學習庫,一個以Python優(yōu)先的深度學習框架.
BP神經(jīng)網(wǎng)絡的層數(shù)設為4層,其中隱藏層層數(shù)為2層,第1層隱藏層有100個神經(jīng)元,第2層隱藏層有50個神經(jīng)元.激活函數(shù)為logistic函數(shù),也就是sigmoid函數(shù),權重優(yōu)化采用隨機梯度下降算法,最大迭代次數(shù)為100.初始學習率設置為0.001.
模型的具體實現(xiàn)步驟如下:
1.定義LSTM神經(jīng)網(wǎng)絡模型,通過繼承nn.Module類來實現(xiàn).同時,定義輸入x的特征維度為124,隱藏層的層數(shù)默認為1,隱藏層的特征維度(隱藏層神經(jīng)元)為100.創(chuàng)建LSTM層提取特征和Linear層用作最后的預測,LSTM算法通過三個不同的因素來控制之前信息對當前信息的影響:先前的隱藏狀態(tài),先前的單元狀態(tài)和當前輸入.
2.定義好每層之后,通過forward函數(shù)以前向傳播的方式將相鄰的兩層串起來,即如何根據(jù)輸入x計算返回所需要的模型輸出.forward函數(shù)的任務需要把輸入層、隱藏層、輸出層連接起來,該函數(shù)的參數(shù)一般為輸入數(shù)據(jù),返回值是輸出數(shù)據(jù).
3.將數(shù)據(jù)集轉換為tensor,Pytorch使用張量tensor存儲數(shù)據(jù),并將訓練數(shù)據(jù)轉換為輸入序列和相應的標簽.
4.模型訓練:設置迭代次數(shù)為100次.每組數(shù)據(jù)有20個,學習率為0.001.enumerate函數(shù)用于在循環(huán)中得到計數(shù),利用它可以同時獲得索引、步數(shù)和值.梯度初始化為0,應用反向傳播求梯度,防止梯度爆炸或者梯度過小時,設定閾值,當梯度小于/大于閾值時,更新的梯度為閾值.設置步長為5,選取softmax函數(shù)作為分類函數(shù),softmax可以更好的處理多分類問題.該函數(shù)將多個神經(jīng)元的輸出映射到大于0小于1的區(qū)間內(nèi),輸出是屬于各個分類的概率,在最后選取輸出結點的時候,選取概率最大(多分類的輸出值對應最大值)結點,作為預測目標.
實驗環(huán)境:操作系統(tǒng)為Windows 10,內(nèi)存8G,CPU:Intel(R)Core(TM)i5-10210U CPU@1.60GHz 2.11 GHz,開發(fā)語言為Python3.6,BP神經(jīng)網(wǎng)絡、LSTM神經(jīng)網(wǎng)絡檢測WebShell實驗結果如圖2、圖3所示.
圖2 BP神經(jīng)網(wǎng)絡模型實驗結果
從圖2可以發(fā)現(xiàn),BP神經(jīng)網(wǎng)絡雖然設置的最大迭代次數(shù)為100次,但是由于連續(xù)10個周期針對損失降低不超過0.001,故程序只迭代了61次,經(jīng)過訓練測試模型loss值在0.03左右擺動,模型最終在測試集準確率為:95%.
圖3 LSTM神經(jīng)網(wǎng)絡模型實驗結果
圖3截取了LSTM模型訓練測試中間結果和最終結果,可以發(fā)現(xiàn)模型loss值很小,模型在測試集上中間出現(xiàn)準確率為100%的情況,然后隨著數(shù)據(jù)量的增加準確率穩(wěn)定在了95%.
綜合上述分析,BP、LSTM兩個模型能較高準確率檢測出WebShell的存在性,說明構建的兩個神經(jīng)網(wǎng)絡模型在模型結構、參數(shù)設置較合理,但是從結果來看BP模型的loss值高于LSTM模型loss近10倍,但兩個模型檢測精度最終均為95%,對于模型的解釋性有待進一步研究.
本文針對Web站點存在的安全問題,WebShell進行了介紹.通過構建兩種不同的深度學習算法模型,分析了基于BP神經(jīng)網(wǎng)絡和LSTM網(wǎng)絡的兩種WebShell檢測技術,為后續(xù)WebShell檢測技術的研究奠定了基礎.