人員統(tǒng)計的能夠直接確定存在webshell攻擊特征的語句。在通過還原規(guī)則將改動過的特征語句還原后,可以獲得原始的特征語句,此時,網(wǎng)關再通過與基本特征語句進行比對,就可以判斷出還原后的特征語句是否為預設的基本特征語句,從而得出腳本文件是否為webshell攻擊文件。
[0038]105、若還原后的特征語句與基本特征語句相同,則確定腳本文件為webshell攻擊文件。
[0039]由于基本特征語句為攻擊敏感語句,所以當網(wǎng)關檢測出還原后的特征語句與基本特征語句相同時,可以確定該還原后的特征語句為攻擊敏感語句,從而得知腳本文件中存在攻擊敏感語句,進而確定該腳本文件為webshell攻擊文件。反之,當網(wǎng)關檢測出還原后的特征語句與基本特征語句不同時,可以確定該還原后的特征語句不是攻擊敏感語句,從而得知腳本文件中不存在攻擊敏感語句,進而確定該腳本文件不是webshell攻擊文件。
[0040]示例性的,網(wǎng)關檢測到“eval ($/*xyz*/{ “_P”.“OST”} [ ‘op’ ]); ”中存在兩種特征變形痕跡,分別為注釋語句和預設特征字符,所以網(wǎng)關需要根據(jù)對應特征變形痕跡的還原規(guī)則對其進行還原。在實際應用中,對于注釋語句和預設特征字符的還原規(guī)則均為刪除操作,所以將注釋語句與預設特征字符都刪除后,得到的還原后的特征語句為“eval ($_P0ST[ ‘op’]); ”。將該特征語句與基本特征語句進行比較,可判斷出腳本文件是否為webshell攻擊文件。若基本特征語句中包含“eval ($_P0ST [ ‘op’]); ”,則還原后的特征語句與基本特征語句相同,從而得出該腳本文件為webshell攻擊文件;若基本特征語句中不包含“eval ($_P0ST[ ‘op’]); ”,則還原后的特征語句與基本特征語句不同,從而還需要繼續(xù)對腳本文件中的其他特征語句進行判斷,才可確定該腳本文件是否為webshell攻擊文件。
[0041]需要說明的是,在實際應用中,只有當網(wǎng)關確定其所截獲的腳本文件不是webshell攻擊文件時,才將該腳本文件繼續(xù)上傳到網(wǎng)站服務器,而當該腳本文件是webshell攻擊文件時,不再將該腳本文件上傳到網(wǎng)站服務器,從而保證了上傳到網(wǎng)站服務器的腳本文件為安全的文件。
[0042]本發(fā)明實施例提供的基于云的webshell攻擊檢測方法,能夠在外部向網(wǎng)站服務器發(fā)送腳本文件時,截獲該腳本文件,并基于云平臺先對該腳本文件進行特征變形痕跡的檢測,再將改動過的特征語句進行還原,最后將還原后的特征語句與基本特征語句進行比較,若相同,貝lJ判定該腳本文件為webshell攻擊文件。與現(xiàn)有技術中僅進行基本特征語句的檢測方法相比,本發(fā)明通過先將改動后的特征語句進行還原,使得被打亂的特征語句還原為原有的特征語句,再與基本特征語句進行比對,使得隱藏在腳本文件中的基本特征語句被檢測出來,從而確定該腳本文件為webshell攻擊文件。
[0043]進一步的,依據(jù)上述方法實施例可知,當預設的特征變形痕跡只包含一種特征變形痕跡時,網(wǎng)關僅檢測腳本文件中是否存在該特征變形痕跡;當預設的特征變形痕跡中包括多種特征變形痕跡時,網(wǎng)關會同時檢測腳本文件中是否存在該多種特征變形痕跡,或者按照順序依次檢測該腳本文件中是否存在該多種特征變形痕跡。在檢測出特征變形痕跡后,需要將改動過的特征語句還原,然而對于不同類型的特征變形痕跡具有不同的還原方法,下面針對不同情況進行介紹:
[0044]情況一:當特征變形痕跡包括注釋語句時,網(wǎng)關會基于云平臺檢測腳本文件中是否存在注釋語句。若腳本文件中存在注釋語句,則將注釋語句刪除;若腳本文件中不存在注釋語句,則無需進行注釋語句的刪除操作。
[0045]由于注釋語句并不參與程序的執(zhí)行,所以當黑客在特征語句中添加注釋語句后,也不影響該特征語句本身的功能。當該特征語句為基本特征語句時,該腳本文件就是webshell攻擊文件。但是在該特征語句中添加了注釋語句后,改動后的特征語句就不再與基本特征語句相同了,因此需要將添加的注釋語句刪除,才能得到原始的特征語句,以便更精確地檢測出本質上與基本特征語句相同的語句,從而避免發(fā)生webshell攻擊文件漏檢的現(xiàn)象。
[0046]在實際應用中,注釋語句的檢測主要是通過檢測注釋標識,例如:“//”、“/*”、“*/”等。例如,網(wǎng)關檢測到一條特征語句“eva/*XXXXX*/l($_P0ST[ ‘a(chǎn)’]); ”中包含“/*”和“*/”注釋標識,則將攜帶有注釋標識的注釋語句刪除,從而獲得添加注釋語句前的語句,即“eval($_P0ST[ ‘a(chǎn)’]); ”。在獲得改動前的特征語句后,將其與基本特征語句進行比對。若基本特征語句中包含“eval($_P0ST[ ‘a(chǎn)’]); ”,則還原后的特征語句與基本特征語句相同,從而得出該腳本文件為webshell攻擊文件;若基本特征語句中不包含“eval ($_P0ST[ ‘a(chǎn)’]),則還原后的特征語句與基本特征語句不同,從而還需要繼續(xù)對腳本文件中的其他特征語句進行判斷,才可確定該腳本文件是否為webshell攻擊文件。
[0047]情況二:當特征變形痕跡包括變量賦值字符時,網(wǎng)關會基于云平臺檢測腳本文件中是否存在變量賦值字符。若腳本文件中存在變量賦值字符,則將被賦值的變量還原;若腳本文件中不存在變量賦值字符,則無需進行變量還原操作。
[0048]在實際應用中,編程人員常常通過給特征語句中的變量賦值,即用新的變量來代替舊變量,從而使得該特征語句發(fā)生形式上的改變,而實際功能不變。在這種情況下,僅將變量賦值后的特征語句與基本特征語句進行比對,是無法檢測出其隱藏的webshell攻擊特征的。因此,網(wǎng)關需要先將被賦值的變量還原,以獲得原始的特征語句,才可精確地判斷出該特征語句是否為基本特征語句,從而正確地判斷出該腳本文件是否為webshell攻擊文件。
[0049]具體的,變量賦值字符主要包括變量賦值標識,即“=”,也可以包括其他具有賦值功能的字符,在此不作限定。
[0050]例如,腳本文件中有如下代碼:
[0051]$aaa = e ;
[0052]$bbb = V ;
[0053]$ccc = a ;
[0054]$ddd = I ;
[0055]$xsser = $_P0ST[ ‘op,];
[0056]“$aaa”.“$bbb”.“$ccc”.“$ddd”($xsser);
[0057]網(wǎng)關在上述代碼中檢測到變量特征字符(即“ = ”),并且檢測到““$aaa”.“$bbb”.“$ccc”.“$ddd”($xsser); ”語句中的 $aaa、$bbb、$ccc、$ddd 和 $xsser 分別是給 e、v、a、1、和$_P0ST[ ‘op’]賦的新變量,因此網(wǎng)關需要將這些新變量還原為原始變量,還原后的代碼變?yōu)椤癳val ($_P0ST[ ‘op’]); ”,再將此特征語句與基本特征語句進行比較。若基本特征語句中包含“eval($_P0ST[ ‘op’]); ”,則該腳本文件為webshell攻擊文件;若基本特征語句中不包含“eval($_P0ST[ ‘op’]); ”,則需要繼續(xù)對腳本文件中的其他特征語句進行判斷,才能確定該腳本文件是否為webshell攻擊文件。
[0058]情況三:當特征變形痕跡包括預設特征字符時,網(wǎng)關會基于云平臺檢測腳本文件中是否存在預設特征字符。若腳本文件中存在預設特征字符,則將預設特征字符刪除;若腳本文件中不存在預設特征字符,則無需進行預設特征字符刪除操作。
[0059]在實際應用中,黑客常常通過在特征語句中添加拼接符等字符來打亂一個完整的函數(shù)名或者變量名等等,從而僅通過基本特征語句無法檢測出來該特征語句中存在的webshell攻擊特征,因此需要將含有預設特征字符的特征語句還原,才可更進一步地檢測出該特征語句是否是含有webshell攻擊特征的語句,從而判斷該腳本文件是否為webshell攻擊文件。
[0060]例如,網(wǎng)關檢測到““e”.“V”, “a”.“I”($_P0ST[ ‘a(chǎn)’]); ”中含有拼接符雙引號和點,所以將該特征語句中的雙引號和點刪除后,可以獲得原始的語句,即“eval($_P0ST[ ‘a(chǎn)’ ]); ”。此時,將“eval($_P0ST[ ‘a(chǎn)’ ]); ”與基本特征語句比對,若基本特征語句中包含“eval($_P0ST[ ‘a(chǎn)’ ]); ”,則該腳本文件為webshell攻擊文件,若基本特征語句中不包含“eval($_P0ST[ ‘a(chǎn)’]); ”,則需要繼續(xù)對腳本文件中的其他特征語句進行判斷,才能確定該腳本文件是否為webshell攻擊文件。
[0061]情況四:當特征變形痕跡包括預設特征函數(shù)名時,網(wǎng)關會基于云平臺檢測腳本文件中是否存在預設特征函數(shù)名。若腳本文件中存在預設特征函數(shù)名,則根據(jù)特征函數(shù)功能的逆功能對對應特征函數(shù)的語句進行還原;若腳本文件中不存在預設特征函