跟隨
安全代碼開發,攻擊者將通過端口80進入您的系統。廣泛使用的兩種主要攻擊技術是SQL註入攻擊和CSS攻擊。SQL註入群島
指:通過互聯網的輸入區域插入SQL元字符(特殊字符)。
表示壹些數據)和指令,並操縱執行後端SQL查詢的技術。這些攻擊主要針對其他組織的WEB服務器。CSS攻擊是通過在URL中插入腳本標簽來實現的,然後
誘導信任它們的用戶點擊它們,以確保惡意Javascript代碼在受害者的機器上運行。這些攻擊利用了用戶和服務器之間的信任關系,實際上服務器並沒有損失。
檢測輸入和輸出,因此javascript代碼不會被拒絕。
本文討論了SQL註入和CSS攻擊漏洞的檢測技術。網上已經有很多關於這兩種基於。
討論網絡攻擊,例如如何實施攻擊、攻擊的影響以及如何更好地編譯和設計程序來防止這些攻擊。然而
關於如何檢測這些攻擊沒有足夠的討論。我們采用流行的開源IDSnort
3】,根據檢測這些攻擊的規則形成正則表達式。順便提壹下,Snort的默認規則設置包含檢測CSS的方法,但這些方法很容易避免檢測。比如大部分都是十六進制編碼。
代碼,如%3C%73%63%72%69%70% 74%3E,而不是避免檢測。
的依賴程度
偏執狂組織,我們編寫了各種規則來檢測相同的攻擊。如果您想檢測各種可能的SQL註入攻擊,那麽您只需關註任何現有的SQL。
元字符,如單引號、分號和雙破折號。類似地,檢測CSS攻擊的壹種極端方法就是小心HTML標記的尖括號。但是這可以檢測到
犯很多錯誤。為了避免這些,需要修改這些規則以使其檢測更準確,同時仍然無法避免錯誤。
在Snort規則中使用pcre(Perl)
兼容常規
表達式)【ref4】關鍵字,每個規則可以有或沒有其他規則操作。grep(文檔搜索工具)等公共軟件也可以使用這些規則來審查網絡。
服務器日誌。但是,需要註意的是,只有當使用GET提交請求時,用戶的輸入才會記錄在日誌中,如果使用POST提交請求,則不會記錄在日誌中。
2.SQL註入的正則表達式
當...的時候
當您為SQL註入攻擊選擇正則表達式時,壹定要記住攻擊者可以通過提交表單或通過Cookie區域註入SQL。您的輸入檢測邏輯應該考慮用戶。
組織的各種類型的輸入(如表單或Cookie信息)。如果您發現許多警告來自某個規則,請註意單引號或分號。也許這些角色是由您的Web應用程序創建的。
CookieS中的法律輸入。因此,您需要根據您的特定WEB應用程序來評估每個規則。
如前所述,用於檢測SQL註入攻擊的普通正則表達式應該註意SQL的特殊元字符,例如單引號(‘)和雙擴展名符號(-)。為了找出這些字符及其十六進制等價物,可以使用以下正則表達式:
2.1檢測SQL元字符的正則表達式
/(\ % 27)|(\‘)|(\-\-)|(\ % 23)|(#)/IX
解釋:
我
科學家首先檢查單引號的十六進制等價性,單引號本身還是雙放大符號。這些是MS SQL Server或Oracle的字符,這意味著註釋是跟在後面的。
接下來的內容將被忽略。此外,如果您使用MySQL,則需要註意‘#‘及其等效十六進制的外觀。註意,我們不需要檢查雙破折號的十六進制等價物。
因為這不是HTML元字符,所以瀏覽器不會對其進行編碼。而且,
如果攻擊者試圖手動將雙破折號更改為十六進制值%2D(使用類似阿基裏斯【參考文獻5】的代理),SQL註入將失敗。
添加上述正則表達式的新Snort規則如下:
警報
TCP $ EXTERNAL _ NET any-& gt;$ HTTP _ SERVERS $ HTTP _ PORTS(msg:“SQL
註射——偏執”;
flow:to_server,已建立;uricontent:“。pl“;pcre:“/(\ % 27)|(\‘)|(\-\-)|(% 23)|(#)/I“;
classtype:Web應用程序攻擊;sid:9099;rev:5;)
在這次討論中,
uricontent關鍵字的值為“。因為在我們的測試環境中,CGI
這個程序是用Perl語言編寫的。uricontent關鍵字的值取決於您的特殊應用。這個值可能是“。php“,“。asp“或”。jsp”。
》,等。從這個角度來看,我們沒有顯示相應的Snort規則,但我們將給出正則表達式來創建這些規則。
您可以通過這些正則表達式輕松創建許多Snort規則。在前面的正則表達式中,
我們檢測雙破折號是因為即使沒有單引號,它也可能是SQL註入點【參考文獻6】。例如,SQL查詢條目僅包含數值,如下所示:
從數據庫中選擇值1,值2,數值3
其中數量值3 =某個用戶提供的數量
在這種情況下,攻擊者可以執行額外的SQL查詢並提交以下輸入:
3;將值插入some_other_table
最後,pcre的修飾符“I”和“x”分別用於匹配大小寫和忽略空格。上述規則也可以擴展到檢查分號的存在。然而,分號很可能是普通HTTP響應的壹部分。為了減少這種錯誤,還可以對任何正常的單引號和雙放大符號。
現在,上面的規則應該修改為首先檢測=的存在。用戶輸入將響應GET或POST請求,壹般輸入提交如下:
用戶名=某個用戶提供的值。密碼=某個用戶提供的值
因此,嘗試註入SQL將導致用戶輸入出現在a =符號或其等效十六進制值之後。
2.2更正用於檢測SQL元字符的正則表達式
/((\%3d)|(=))[^\n]*((\%27)|(\')|(\-\-)|(\%3b)|(:))/i
解釋:
該規則首先關註=符號或其十六進制值(%3D),然後考慮除換行符之外的零個或多個任意字符,最後檢測單引號、雙破折號或分號。
學術標準工作
類型-B SQL註入將嘗試圍繞單引號的目的操縱原始查詢,以便獲得有用的值。為了討論這種攻擊,我們通常使用字符串1‘或‘1‘=‘1。然而,
此字符串的調查很容易逃脫,例如使用1‘or 2》;1 - .
然而,唯壹不變的部分是初始字符的值,後面是單引號,然後是“或”。隨後的布爾邏輯可能在壹定範圍內變化,這可能是常見的或非常復雜的。這些攻擊可能
由以下正則表達式相當準確地檢測到。2.3章節解釋。
2.3典型SQL註入攻擊的正則表達式
/\ w *(\ % 27)|(\‘)()| o |(\ % 4F)((\ % 72)| r |(\ % 52)/IX
解釋:
\ w *-零個或多個字符或下劃線。
(\ % 27)| \‘-單引號或其十六進制等效符號。
(\ % 6 f)| o |(\ % 4 f)(\ % 72)| r |-(\ % 52)-‘or‘的大小寫及其十六進制等價形式。
聯合SQL
在SQL註入查詢各種數據庫也很常見。如果前面的正則表達式只檢測單引號或其他SQL元字符。
,會造成很多錯誤。您應該進壹步修改查詢以檢測單引號和關鍵字“union”。這也可以進壹步擴展其他SQL關鍵字,如“select”,
“插入”、“更新”、“刪除”等。
2.4檢測SQL註入和聯合查詢關鍵字的正則表達式。
/((\ % 27)|(\‘)union/IX
(\ % 27)|(\‘)-單引號及其十六進制等效符號
union-聯合關鍵字
您還可以為其他SQL查詢定制表達式,例如》:Select、insert、update、delete、drop等。
諸如
因此,在這壹階段,攻擊者發現web應用程序中存在SQL註入漏洞,並試圖利用該漏洞。如果他實現了基於後端服務器的MS SQL,
服務器時,他通常會嘗試運行壹些危險的存儲和擴展存儲進程。這些過程通常以字母“sp”或“XP”開頭。通常情況下,他可能會試圖逃跑。
XP _ cmdshell擴展存儲過程(通過SQL Server執行Windows
命令)。SQL server的SA權限有權執行這些命令。同樣,他們可以通過XP _ xp_regread、xp_regwrite等存儲過程修改註冊表。
2.5檢測MS SQL Server SQLSQL註入攻擊的正則表達式
/exec(\ s | \+)+(s | x)p \ w+/IX
解釋:
exec-用於請求執行存儲或擴展存儲過程的關鍵字。
(\ s | \+)+-壹個或多個空格或它們的http等效編碼。
字母(s | x)p-“sp”或“XP”用於標識存儲或擴展存儲過程。
\ w+-與過程名稱匹配的壹個或多個字符或下劃線。
3.跨站點腳本(CSS)的正則表達式
當...的時候
當發起CSS攻擊或檢測到網站漏洞時,攻擊者可能首先制作簡單的HTML標記,如(粗體)、(斜體)或(下劃線),或者他可能嘗試簡單的標記。
腳本標簽,如alert(“OK”)。
因為大多數出版物和在線通信測試網站都存在css漏洞,所以以此為例。這些企圖很容易被發現。
然而,聰明的攻擊者可能會用十六進制值替換整個字符串。這樣,標簽將顯示為%3C%73%63%72%69%70%74%3E。
另壹方面,攻擊者可能使用web代理服務器,如Achilles,它會自動轉換壹些特殊字符,如%3E,這樣當攻擊發生時,URL
十六進制等價通常用於代替尖括號。
下面的正則表達式將檢測任何文本中包含的html。它將捕獲使用、或的嘗試。此正則表達式應忽略大小寫。我們需要檢測尖括號及其十六進制等效值(%3C|)
3.1壹般CSS攻擊的正則表達式
/((\ % 3C)|)/IX
解釋:
((\ % 3c)|)-Check》或其等效十六進制值
Snort規則:
警報
TCP $ EXTERNAL _ NET any-& gt;$HTTP_SERVERS $HTTP_PORTS(消息:“NII
跨站點腳本編寫嘗試“;flow:to_server,已建立;
pcre:“/((\ % 3C)|)/I“;classtype:Web應用程序攻擊;sid:9000;rev:5;)
跨站點腳本也可以使用技術。當前默認的snort規則很容易避免。
第3.2節提供了防止這種技術的方法。
3.2 "
/((\ % 3C)|)/I
解釋:
(\ % 3c)|)-& gt;或其十六進制等價物
3.3 CSS攻擊的極端正則表達式
/((\ % 3C)|)/I
解釋:
這條規則很容易找到。由於您的web服務器和web應用程序的體系結構,此規則可能會產生壹些錯誤。但它可以保證捕捉任何類似CCS或CSS的攻擊。
關於避免過濾的CSS方法,請參考Bugtraq提交的方法。
但是請註意,最後壹個極端規則將能夠檢測到所有這些攻擊。
總結:
存在
在本文中,我們提出了不同類型的正則表達式規則來檢測SQL註入和跨站腳本攻擊。壹些規則簡單而極端,潛在的攻擊將提高警惕。但是這些極端的規則可以
會導致壹些主動的錯誤。鑒於此,我們修改了這些簡單的規則並使用了其他樣式,以便可以更準確地檢查它們。在這些網絡的攻擊檢測中,我們建議這樣做。
這些是調試IDS或日誌分析方法的起點。經過幾次修訂後,在評估正常在線交易部分的非惡意響應後,您應該準備好檢測這些攻擊。