方菽蘭,鄭黎黎,許德鵬,張偉峰
(1.四川鼎誠司法鑒定中心,四川 成都 610011;2.成都賽博思安科技有限公司,四川 成都 610000)
Web應用作為互聯網設備中的一個分支,從1989年發展至今,已成為全球用戶量最多的互聯網信息交換媒介與數據共享平臺。中國許多網站均保存了我國公民的重要身份及財產信息,一旦網站被入侵將導致嚴重的數據泄露事件,危害公民信息財產安全[1]。
近年來批量服務器攻擊事件、數據泄露事件頻發,Web安全越來越受到重視。在已發現的Web攻擊類型中,注入式攻擊發生頻率最高,其攻擊手段根據Web應用漏洞位置千變萬化,且注入式攻擊能夠直接威脅到數據庫或系統安全,造成數據泄露、權限竊取等危害。因此,研究一種高準確率且高效的檢測模型來應對頻繁的注入式攻擊,具有重要的理論意義和實際價值。
本文的設計目標為實現一個基于動態污點分析的注入式攻擊檢測模型。首先,該系統作為檢測程序持續運行在Web服務器上,在服務器上的Web應用中,模型能夠識別并記錄包含不可信源請求數據的所有SQL訪問請求和代碼執行請求;然后,檢測程序實時地提取日志中地請求數據進行攻擊行為檢測,檢測的注入式攻擊類型包括SQL注入攻擊和惡意代碼注入攻擊;對于檢測結果為攻擊行為的請求,通過日志記錄的請求數據獲取攻擊者信息,并還原產生攻擊的Web頁面和外部參數;最后,將上述信息反饋給網站管理員,幫助管理員了解漏洞產生的位置,并對攻擊者進行限制訪問。基于上述目標,本文設計了基于動態污點分析的注入式攻擊檢測模型。
該模型主要分為4個模塊,頂層為動態污點分析模塊,直接加載在Web服務器中;系統的主要模塊為SQL注入檢測模塊和惡意代碼注入檢測模塊;最后日志監控與預警模塊作為整個系統的調度模塊,將各模塊連接在一起。首先在Web服務器運行時,動態污點分析模塊依附在Web服務器中開始運行,以日志的方式記錄符合檢測目標的請求信息;在日志監控與預警模塊,實時監控日志產生的新數據,將待檢測請求信息分發給SQL注入檢測模塊和惡意代碼注入檢測模塊;SQL注入檢測和惡意代碼檢測模塊相互獨立運行,完整賦予檢測功能后,將檢測結果回傳給日志監控與預警模塊,由預警部分將檢測結果進行匯總,完成整個系統的一次請求是否合法的檢測。
SQL注入攻擊檢測模塊包括CNN分類模型訓練和模型檢測2個部分。在模型訓練階段,輸入為SQL注入樣本和正常樣本2種經過人工標記的樣本數據,當分類模型訓練完成后,將其作為檢測模型。在語法分析階段,已經對節點的類型進行了定義,經過灰度污點圖的構建,保留了原節點的2個屬性,即節點類型和污點值。灰度污點圖由原節點的污點值組成矩陣,對于保留的節點類型,則構成了輸入矩陣的色彩通道。將污點圖包含的灰度圖和色彩通道模擬為一個圖像的像素矩陣,傳入卷積神經網絡分類器,然后分別按操作進行訓練或檢測。
本文通過混淆矩陣的方式進行檢測結果的評估,將攻擊行為定義為正類,將正常請求定義為負類,因此,用TP表示攻擊行為正確識別為攻擊識別的數量,TN表示攻擊行為被錯誤識別為正常請求的數量;FP表示正常請求被正確識別為正常請求的數量,FN表示請求被錯誤識別為攻擊行為的數量。評價指標包括精確率(Precision,P),準確率(Accuracy,ACC),召回率(Recall,R)和和調和均值(F1-Measure,F1)。在數據收集階段,通過服務器搭建的Web服務器和依附于服務器的動態污點分析模塊收集實驗數據。將上述收集到的樣本進行數據預處理生成待檢測數據。在SQL注入攻擊模型訓練過程中,一共記錄了22 273次SQL,標記其中7 800條數據為SQL注入攻擊,7 111條數據為正常SQL請求;剩余的記錄作為檢測數據,其中3 733條為未標記的SQL注入攻擊,3 629條為未標記的正常SQL請求。在惡意代碼注入檢測模型訓練過程中,一共記錄了16 436次代碼注入請求,標記其中7 240條數據為惡意代碼注入攻擊,7 171條數據為正常代碼注入請求;剩余的記錄作為檢測數據,其中939條為未標記的惡意代碼注入攻擊,1 086條為未標記的正常代碼注入請求。
對于該模型的實驗過程,本文對網站安全狗、360網站衛士、隨機森林算法3種檢測方法進行了對比。網站安全狗和360網站衛士檢測方法是在Web服務器上安裝相應安全防護軟件,向網頁發送包含測試樣本的HTTP請求,不經過動態污點分析模塊,根據軟件生成的安全日志計算評估指標。基于隨機森林的檢測算法,則是經過動態污點分析后,從生成的污點語法樹中提取特征,使用隨機森林算法進行訓練和分類。對比實驗結果如表1所示。

表1 SQL注入檢測模型對比實驗結果 單位:%
從表1中可以看出,基于卷積神經網絡的SQL注入檢測模型的準確率高于隨機森林算法,但是精確率分別比網站安全狗和360網站衛士略低1.7和0.2個百分點,這是由于上述防護軟件對于正常樣本的誤報率極低,但在識別SQL注入攻擊的惡意樣本時,識別能力不足,具有較高的漏報率,因此與上述防護軟件相比,該模型的準確率分別高出3.6和2.1個百分點。這體現出了使用深度學習的檢測方法比傳統的特征提取檢測方法更為有效,實用性更強。
本文用混淆矩陣分別對基于卷積神經網絡的SQL注入檢測模型和基于FastText的惡意代碼注入檢測模型進行了評估,并和多個檢測方法進行對比實驗,實驗結果證明了本文模型的有效性和可行性。
隨著Web技術的不斷發展,Web應用的安全檢測需要應對千變萬化的攻擊手段。本文提出了基于動態污點分析的注入式攻擊檢測模型,可以有效檢測出SQL注入和惡意代碼注入2種高危的攻擊行為。但是,在面對日益增長的Web安全需求下仍存在一些不足之處,須在今后的工作中進一步研究和改進。
1)對模型基于動態污點分析生成的日志進行檢測并處理時具有一定的滯后性,未能實現實時攔截,在下一步的研究中,將設計更加有效的實時攔截功能。
2)模型的動態污點分析模塊針對PHP編程語言而實現,在下一步的研究中,將對其他的Web編程語言的動態污點分析方法進行研究。