SQL注入技術(shù)和跨站腳本攻擊的檢測(cè) By admin 2010/11/6 10:14:00 1、概述 在這兩年中,安全專(zhuān)家應(yīng)該對(duì)網(wǎng)絡(luò)應(yīng)用層的攻擊更加重視。因?yàn)闊o(wú)論你有多強(qiáng)壯的防火墻規(guī)則設(shè)置或者非常勤于補(bǔ)漏的修補(bǔ)機(jī)制,如果你的網(wǎng)絡(luò)應(yīng)用程序開(kāi)發(fā)者沒(méi)有遵循安全代碼進(jìn)行開(kāi)發(fā),攻擊者將通過(guò)80端口進(jìn)入你的系統(tǒng)。廣泛被使用的兩個(gè)主要攻擊技術(shù)是SQL注入[ref1]和CSS[ref2]攻擊。SQL注入是指:通過(guò)互聯(lián)網(wǎng)的輸入?yún)^(qū)域,插入SQL meta-characters(特殊字符 代表一些數(shù)據(jù))和指令,操縱執(zhí)行后端的SQL查詢(xún)的技術(shù)。這些攻擊主要針對(duì)其他組織的WEB服務(wù)器。CSS攻擊通過(guò)在URL里插入script標(biāo)簽,然后 誘導(dǎo)信任它們的用戶(hù)點(diǎn)擊它們,確保惡意javascript代碼在受害人的機(jī)器上運(yùn)行。這些攻擊利用了用戶(hù)和服務(wù)器之間的信任關(guān)系,事實(shí)上服務(wù)器沒(méi)有對(duì)輸入、輸出進(jìn)行檢測(cè),從而未拒絕Javascript代碼。 這篇文章討論SQL注入和CSS攻擊漏洞的檢測(cè)技術(shù)。網(wǎng)上已經(jīng)有很多關(guān)于這兩種基于WEB攻擊的討論,比如如何實(shí)施攻擊,他們的影響,怎樣更好的編制和設(shè)計(jì)程序防止這些攻擊。 然而, 對(duì)如何檢測(cè)這些攻擊并沒(méi)有足夠的討論。我們采用流行的開(kāi)源的IDS Snort[ref 3],組建根據(jù)檢測(cè)這些攻擊的規(guī)則的正則表達(dá)式。附帶,Snort默認(rèn)規(guī)則設(shè)定包含檢測(cè)CSS的方法,但是這些容易被避開(kāi)檢測(cè)。比如大多通過(guò)hex進(jìn)制編碼,如%3C%73%63%72%69%70% 74%3E代替<script>避開(kāi)檢測(cè)。 依賴(lài)level of paranoia組織的能力,我們已經(jīng)編寫(xiě)了多種檢測(cè)相同攻擊的規(guī)則。如果你希望檢測(cè)各種可能的SQL注入攻擊,那么你需要簡(jiǎn)單的留意任何現(xiàn)行的SQL meta-characters,如單引號(hào),分號(hào)和雙重破折號(hào)。同樣的一個(gè)極端檢測(cè)CSS攻擊的方法,只要簡(jiǎn)單地提防HTML標(biāo)記的角括號(hào)。但這樣會(huì)檢測(cè) 出很多錯(cuò)誤。為了避免這些,這些規(guī)則需要修改使它檢測(cè)更精確些, 當(dāng)仍然不能避免錯(cuò)誤。 在Snort規(guī)則中使用pcre(Perl Compatible Regular ExPRessions)[ref4]關(guān)鍵字,每個(gè)規(guī)則可以帶或不帶其他規(guī)則動(dòng)作。這些規(guī)則也可以被公用軟件如grep(文檔搜索工具)使用,來(lái)審閱網(wǎng)絡(luò)服務(wù)器日志。 但是,需要警惕的是,用戶(hù)的輸入只有當(dāng)以GET提交請(qǐng)求時(shí),WEB服務(wù)器才會(huì)記錄日記,如果是以POST提交的請(qǐng)求在日記中是不會(huì)記錄的。 2. SQL注入的正則表示式 當(dāng) 你為SQL注入攻擊選擇正則表示式的時(shí)候,重點(diǎn)要記住攻擊者可以通過(guò)提交表單進(jìn)行SQL注入,也可以通過(guò)Cookie區(qū)域。你的輸入檢測(cè)邏輯應(yīng)該考慮用戶(hù) 組織的各類(lèi)型輸入(比如表單或Cookie信息)。并且如果你發(fā)現(xiàn)許多警告來(lái)自一個(gè)規(guī)則,請(qǐng)留意單引號(hào)或者是分號(hào),也許些字符是你的Web應(yīng)用程序創(chuàng)造的 合法的在CookieS中的輸入。因此, 您需要根據(jù)你的特殊的WEB應(yīng)用程序評(píng)估每個(gè)規(guī)則。 依照前面提到,一個(gè)瑣細(xì)的檢測(cè)SQL射入攻擊的正則表達(dá)式要留意SQL特殊的meta-characters 譬如單引號(hào)(’)雙重?cái)U(kuò)則號(hào)(--),為了查出這些字符和他們hex等值數(shù), 以下正則表達(dá)式適用: 2.1 檢測(cè)SQL meta-characters的正則表達(dá)式 /(%27)|(’)|(--)|(%23)|(#)/ix 解釋: 我 們首先檢查單引號(hào)等值的hex,單引號(hào)本身或者雙重?cái)U(kuò)折號(hào)。這些是MS SQL Server或Oracle的字符, 表示后邊的為評(píng)論, 隨后的都將被忽略。 另外,如果你使用MySQL,你需要留意 ’#’和它等值的hex的出現(xiàn)。注意我們不需要檢查雙重破折號(hào)等值的hex, 因?yàn)檫@不是HTML meta-character, 瀏覽器不會(huì)進(jìn)行編碼。 并且, 如果攻擊者設(shè)法手工修改雙重破折號(hào)為它的hex值%2D(使用代理像Achilles[ref 5]), SQL注入將失敗。 加入上述正則表達(dá)式的新的Snort規(guī)則如下: alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS $HTTP_PORTS (msg:"SQL Injection - Paranoid"; flow:to_server,established;uricontent:".pl";pcre:"/(%27)|(’)|(--)|(%23)|(#)/i"; classtype:Web-application-attack; sid:9099; rev:5;) 在本篇討論中, uricontent關(guān)鍵字的值為".pl ", 因?yàn)樵谖覀兊臏y(cè)試環(huán)境里, CGI 程序是用Perl寫(xiě)的。uricontent關(guān)鍵字的值取決于您的特殊應(yīng)用, 這個(gè)值也許是".php ", 或" .asp ", 或" .jsp ", 等。 從這點(diǎn)考慮, 我們不顯示對(duì)應(yīng)的Snort 規(guī)則, 但是我們會(huì)給出創(chuàng)造這些規(guī)則的正則表達(dá)式。 通過(guò)這些正則表達(dá)式你可以很簡(jiǎn)單的創(chuàng)造很多的Snort規(guī)則.在前面的正則表達(dá)式里, 我們檢測(cè)雙重破折號(hào)是因?yàn)椋杭幢銢](méi)有單引號(hào)的存在那里也可能是SQL射入點(diǎn)[ref 6]。 例如, SQL查詢(xún)條目只包含數(shù)值,如下: select value1, value2, num_value3 from database where num_value3=some_user_supplied_number 這種情況,攻擊者可以執(zhí)行額外的SQL查詢(xún), 示范提交如下輸入: 3; insert values into some_other_table 最后, pcre的修飾符’ i’ 和’ x ’ 是用于分別匹配大小寫(xiě)和忽略空白處的。 上面的規(guī)則也可以另外擴(kuò)展來(lái)檢查分號(hào)的存在。然而,分號(hào)很可以是正常HTTP應(yīng)答的一部分。為了減少這種錯(cuò)誤,也是為了任何正常的單引號(hào)和雙重?cái)U(kuò)折號(hào)的出現(xiàn),上面的規(guī)則應(yīng)該被修改成先檢測(cè)=號(hào)的存。用戶(hù)輸入會(huì)響應(yīng)一個(gè)GET或POST請(qǐng)求,一般輸入提交如下: username=some_user_supplied_value&passWord=some_user_supplied_value 因此, SQL 注入嘗試將導(dǎo)致用戶(hù)的輸入出現(xiàn)在a = 號(hào)或它等效的hex值之后。 2.2 修正檢測(cè)SQL meta-characters的正則表達(dá)式 /((%3D)|(=))[^n]*((%27)|(’)|(--)|(%3B)|(:))/i 解釋: 這個(gè)規(guī)則首先留意 = 號(hào)或它的hex值(%3D),然后考慮零個(gè)或多個(gè)除換行符以外的任意字符,最后檢測(cè)單引號(hào),雙重破折號(hào)或分號(hào)。 典型的SQL注入會(huì)嘗試圍繞單引號(hào)的用途操作原來(lái)的查詢(xún),以便得到有用的價(jià)值。討論這個(gè)攻擊一般使用1’or’1’=’1字符串. 但是, 這個(gè)串的偵查很容易被逃避,譬如用1’or2>1 --. 然而唯一恒定的部分是最初的字符的值,跟隨一單引號(hào),再加’or’。隨后的布爾邏輯可能在一定范圍上變化,可以是普通樣式也可能是非常復(fù)雜的。這些攻擊可 以相當(dāng)精確被偵測(cè),通過(guò)以下的正則表達(dá)式。2.3章節(jié)講解。 2.3 典型的 SQL 注入攻擊的正則表達(dá)式 /w*((%27)|(’))((%6F)|o|(%4F))((%72)|r|(%52))/ix 解釋: w* - 零個(gè)或多個(gè)字符或者下劃線(xiàn)。 (%27)|’ - 單引號(hào)或它的hex等值。 (%6 F)|o|(%4 F))((%72)|r|-(%52) -‘or’的大小寫(xiě)以及它的hex等值。 union’SQL 查詢(xún)?cè)赟QL注入各種數(shù)據(jù)庫(kù)中攻擊中同樣是很常見(jiàn)的。如果前面的正則表達(dá)式僅僅檢測(cè)單引號(hào)或則其他的SQL meta characters ,會(huì)造成很多的錯(cuò)誤存在。你應(yīng)該進(jìn)一步修改查詢(xún),檢測(cè)單引號(hào)和關(guān)鍵字‘union’。這同樣可以進(jìn)一步擴(kuò)展其他的SQL關(guān)鍵字,像’select’, ’insert’, ’update’, ’delete’, 等等。 2.4 檢測(cè)SQL注入,UNION查詢(xún)關(guān)鍵字的正則表達(dá)式 /((%27)|(’))union/ix (%27)|(’) - 單引號(hào)和它的hex等值 union - union關(guān)鍵字 可以同樣為其他SQL查詢(xún)定制表達(dá)式,如 >select, insert, update, delete, drop, 等等. 如果,到這個(gè)階段,攻擊者已經(jīng)發(fā)現(xiàn)web應(yīng)用程序存在SQL注入漏洞,他將嘗試?yán)盟。如果他認(rèn)識(shí)到后端服務(wù)器式MS SQL server,他一般會(huì)嘗試運(yùn)行一些危險(xiǎn)的儲(chǔ)存和擴(kuò)展儲(chǔ)存過(guò)程。這些過(guò)程一般以‘sp’或‘xp’字母開(kāi)頭。典型的,他可能?chē)L試運(yùn)行 ‘xp_cmdshell’擴(kuò)展儲(chǔ)存過(guò)程(通過(guò)SQL Server執(zhí)行Windows 命令)。SQL服務(wù)器的SA權(quán)限有執(zhí)行這些命令的權(quán)限。同樣他們可以通過(guò)xp_regread, xp_regwrite等儲(chǔ)存過(guò)程修改注冊(cè)表。 2.5 檢測(cè)MS SQL Server SQL注入攻擊的正則表達(dá)式 /exec(s|+)+(s|x)pw+/ix 解釋: exec - 請(qǐng)求執(zhí)行儲(chǔ)存或擴(kuò)展儲(chǔ)存過(guò)程的關(guān)鍵字 (s|+)+ - 一個(gè)或多個(gè)的空白或它們的http等值編碼 (s|x) p- ‘sp’或‘xp’字母用來(lái)辨認(rèn)儲(chǔ)存或擴(kuò)展儲(chǔ)存過(guò)程 w+ - 一個(gè)或多個(gè)字符或下劃線(xiàn)來(lái)匹配過(guò)程的名稱(chēng) 3. 跨站腳本(CSS)的正則表達(dá)式 當(dāng)發(fā)動(dòng)CSS攻擊或檢測(cè)一個(gè)網(wǎng)站漏洞的時(shí)候, 攻擊者可能首先使簡(jiǎn)單的HTML標(biāo)簽如<b>(粗體),<i>(斜體)或<u>(下劃線(xiàn)),或者他可能?chē)L試簡(jiǎn)單的 script標(biāo)簽如<script>alert("OK")</script>. 因?yàn)榇蠖鄶?shù)出版物和網(wǎng)絡(luò)傳播的檢測(cè)網(wǎng)站是否有css漏洞都拿這個(gè)作為例子。這些嘗試都可以很簡(jiǎn)單的被檢測(cè)出來(lái)。 然而,高明點(diǎn)的攻擊者可能用它的hex值替換整個(gè)字符串。這樣<script>標(biāo)簽會(huì)以%3C%73%63%72%69%70%74%3E出 現(xiàn)。 另一方面,攻擊者可能使用web代理服務(wù)器像Achilles會(huì)自動(dòng)轉(zhuǎn)換一些特殊字符如<換成%3C、>換成%3E.這樣攻擊發(fā)生時(shí),URL 中通常以hex等值代替角括號(hào)。 下列正則表達(dá)式將檢測(cè)任何文本中包含的html的<、>。它將捉住試圖使用< b>、<u>、或<script>。這正則表達(dá)式應(yīng)該忽略大小寫(xiě)。我們需要同時(shí)檢測(cè)角括號(hào)和它的hex等值(% 3C|<)。檢測(cè)hex進(jìn)制轉(zhuǎn)化的整個(gè)字符串,我們必須檢測(cè)用戶(hù)輸入的數(shù)字和%號(hào),即使用[a-z0-9%] 。這可能會(huì)導(dǎo)致一些錯(cuò)誤出現(xiàn),不是大部分會(huì)檢測(cè)到真實(shí)攻擊的。 3.1 一般 CSS 攻擊的正則表達(dá)式 /((%3C)|<)((%2F)|/)*[a-z0-9%]+((%3E)|>)/ix 解釋: ((%3C)|<) -檢查<和它hex等值 ((%2F)|/)*-結(jié)束標(biāo)簽/或它的 hex等值 [a-z0-9%]+ -檢查標(biāo)簽里的字母或它hex等值 ((%3E)|>) -檢查>或它的hex等值 Snort 規(guī)則: alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS $HTTP_PORTS (msg:"NII Cross-site scripting attempt"; flow:to_server,established; pcre:"/((%3C)|<)((%2F)|/)*[a-z0-9%]+((%3E)|>)/i"; classtype:Web-application-attack; sid:9000; rev:5;) 跨站腳本同樣可以使用<img src=>技術(shù),F(xiàn)行默認(rèn)的snort規(guī)則可以被輕易避開(kāi)。 3.2章節(jié)提供了防止這種技術(shù)的方法。 3.2 "<img src" CSS 攻擊正則表達(dá)式 /((%3C)|<)((%69)|i|(%49))((%6D)|m|(%4D))((%67)|g|(%47))[^n]+((%3E)|>)/I 解釋: (%3 C)|<) -<或它的hex等值 (%69)|i|(%49))((%6D)|m|(%4D))((%67)|g|(%47) -’img’字母或它的大小寫(xiě)hex等值的變化組合 [^n]+ -除了換行符以外的任何跟隨<img的字符 (%3E)|>) ->或它的hex等值 3.3 CSS 攻擊的極端的正則表達(dá)式 /((%3C)|<)[^n]+((%3E)|>)/I 解釋: 這個(gè)規(guī)則簡(jiǎn)單尋找<+除換行符外的任何字符+>。由于你的web服務(wù)器和web應(yīng)用程序的構(gòu)架,這個(gè)規(guī)則可能產(chǎn)生一些錯(cuò)誤。但它能保證捉住任何CCS或者類(lèi)似CSS的攻擊。 總結(jié): 在 這篇文章中,我們提出了不同種類(lèi)的正則表達(dá)式規(guī)則來(lái)檢測(cè)SQL注入和跨站腳本攻擊。有些規(guī)則簡(jiǎn)單而極端,一個(gè)潛在的攻擊都將提高警惕。但這些極端的規(guī)則可 能導(dǎo)致一些主動(dòng)的錯(cuò)誤?紤]到這點(diǎn),我們修改了這些簡(jiǎn)單的規(guī)則,利用了另外的樣式,他們可以檢查的更準(zhǔn)確些。在這些網(wǎng)絡(luò)應(yīng)用成的攻擊檢測(cè)中,我們推薦將這 些作為調(diào)試你IDS或日志分析方法的起點(diǎn)。再經(jīng)過(guò)幾次修改后,在你對(duì)正常網(wǎng)交易部分的非惡意應(yīng)答進(jìn)行評(píng)估以后,你應(yīng)該可以準(zhǔn)備的檢測(cè)那些攻擊了。 參考 1. SQL Injection http://www.spidynamics.com/papers/SQLInjectionWhitePaper.pdf 2. Cross Site Scripting FAQ http://www.cgisecurity.com/articles/xss- faq.shtml 3. The Snort IDS http://www.snort.org 4. Perl-compatible regular expressions (pcre) http://www.pcre.org 5. Web application proxy, Achilles http://achilles.mavensecurity.com 3. Advanced SQL Injection http://www.nextgenss.com/papers/advanced_sql_injection.pdf 7. Secure Programming HOWTO, David Wheeler www.dwheeler.com 8. Threats and Countermeasures, MSDN, Microsoft 分享聯(lián)系我們 掃二維碼與項(xiàng)目經(jīng)理溝通 我們?cè)谖⑿派?4小時(shí)期待你的聲音 感謝您的關(guān)注分享“SQL注入技術(shù)和跨站腳本攻擊的檢測(cè)” 煙寒網(wǎng)絡(luò)真誠(chéng)為您服務(wù) ,點(diǎn)擊客服直接咨詢(xún)下單. 立即咨詢(xún) 我們服務(wù) 網(wǎng)站建設(shè) 高端網(wǎng)站建設(shè)服務(wù)商、相信品牌力量、相信知名企業(yè);制作后收費(fèi)13014982176! 微信小程序/微信公眾號(hào) 微信小程序 背靠10億流量,不論用戶(hù)需求是什么,都能被開(kāi)發(fā)使用 一點(diǎn)創(chuàng)意,就能在“社交圈”中脫穎而出。 網(wǎng)站優(yōu)化/SEO 讓您的網(wǎng)站更靠近排名位置,讓客戶(hù)更容易找到您,seo優(yōu)化是一個(gè)漫長(zhǎng)過(guò)程,整個(gè)網(wǎng)站營(yíng)銷(xiāo)花最少的錢(qián)起最大的作用。