国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

一種二階SQL注入攻擊防御方法

2019-08-10 06:36陳龍嚴(yán)云洋朱全銀
電腦知識(shí)與技術(shù) 2019年17期
關(guān)鍵詞:代理服務(wù)器數(shù)據(jù)庫

陳龍 嚴(yán)云洋 朱全銀

摘要:SQL注入攻擊已經(jīng)成為Web應(yīng)用程序最大的安全威脅。二階SQL注入危害性大,注入點(diǎn)隱秘性高,注入過程復(fù)雜,不易檢測(cè)。二階SQL注入的攻擊載荷來自數(shù)據(jù)庫,針對(duì)這一特性,提出在Web服務(wù)器和數(shù)據(jù)庫服務(wù)器之間添加代理服務(wù)器,代理服務(wù)器通過Lua腳本監(jiān)控和修改Web服務(wù)器和數(shù)據(jù)庫服務(wù)器之間的通訊數(shù)據(jù),處理危險(xiǎn)數(shù)據(jù),保障二次調(diào)用的數(shù)據(jù)安全。對(duì)代理服務(wù)器的監(jiān)控和數(shù)據(jù)修改功能進(jìn)行改寫,添加數(shù)據(jù)安全處理模塊,對(duì)來自數(shù)據(jù)庫的數(shù)據(jù)集中的敏感字符查找替換,將處理過的“安全”數(shù)據(jù)返回Web服務(wù)器,以防御二階注入漏洞。實(shí)驗(yàn)證明,該系統(tǒng)能有效地防御二階SQL注入,部署方便,成本較低。

關(guān)鍵詞:二階SQL注入;攻擊載荷;數(shù)據(jù)庫;代理服務(wù)器;敏感字符

中圖分類號(hào):TK 8? ? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A

文章編號(hào):1009-3044(2019)17-0005-04s

開放科學(xué)(資源服務(wù))標(biāo)識(shí)碼(OSID):

Abstract: SQL injection attacks have become the biggest security threat for Web applications. Second-order SQL injection has great harm, high privacy of injection points, complicated injection process, and is difficult to detect. The attack load of second-order SQL injection comes from the database. For this feature, a proxy server is added between the Web server and the database server. The proxy server monitors and modifies the communication data between the Web server and the database server through the Lua script. Rewrite the proxy server's monitoring and data modification functions, add a data security processing module, search for and replace sensitive characters in the data set from the database, and return the processed "safe" data to the Web server to prevent second-order injection vulnerabilities. Experiments show that the system can effectively defend against second-order SQL injection, which is convenient to deploy and lower in cost.

Key words: second-order SQL injection; attack payload; database; proxy server; sensitive characters

1 引言

隨著互聯(lián)網(wǎng)的高速發(fā)展,基于Internet的Web應(yīng)用程序和服務(wù)變得原來越普及。絕大多數(shù)的信息系統(tǒng)和商業(yè)應(yīng)用都使用Web應(yīng)用程序來提供服務(wù)。與此同時(shí),Web應(yīng)用程序的漏洞出現(xiàn)頻率也隨之增高。SQL注入是一種利用Web程序數(shù)據(jù)安全漏洞的代碼注入技術(shù)。在2017年OWASP(開放式Web應(yīng)用程序安全項(xiàng)目)發(fā)布的Web安全漏洞Top10中,SQL注入漏洞占據(jù)首位,可見SQL注入危害性之高[1]。近些年,許多專家和學(xué)者在SQL注入技術(shù)和防御技術(shù)上做了大量研究,但是大多數(shù)的研究都是針對(duì)一階SQL注入[2-7],針對(duì)二階注入的研究較少。二階SQL注入技術(shù)是在傳統(tǒng)一階SQL注入技術(shù)基礎(chǔ)上進(jìn)行擴(kuò)展,漏洞形成更加隱蔽,漏洞威脅與一階SQL注入威脅不相上下。樂德廣等[8]提出一種基于二階分片重組盲目注入的新型攻擊模式。 首先通過分片的方式把 SQL盲目注入攻擊載荷拆分成多個(gè)片段存到數(shù)據(jù)庫中,然后在觸發(fā)攻擊階段重組這些片段,并實(shí)施SQL注入攻擊。Chen Ping[9]提出基于指令集的隨機(jī)二階注入攻擊檢測(cè),該方法將Web應(yīng)用程序中包含的可信SQL關(guān)鍵字隨機(jī)地動(dòng)態(tài)構(gòu)建新的SQL指令集,并在DBMS之前添加代理服務(wù)器,代理檢測(cè)接收到的SQL指令是否包含查找攻擊行為的標(biāo)準(zhǔn)SQL關(guān)鍵字。但是該方法對(duì)于未添加SQL關(guān)鍵字的污染數(shù)據(jù),檢測(cè)效果并不理想。

本文采用添加數(shù)據(jù)庫代理服務(wù)器的方式,在數(shù)據(jù)庫服務(wù)器與Web服務(wù)器之間設(shè)置危險(xiǎn)數(shù)據(jù)處理模塊,對(duì)敏感字符集進(jìn)行查找替換,保障來自數(shù)據(jù)庫服務(wù)器的數(shù)據(jù)安全,防御二階SQL注入。

2 SQL注入技術(shù)

2.1 一階SQL注入

一階SQL注入是指用戶提交的數(shù)據(jù)中帶有攻擊載荷,程序?qū)⒃摂?shù)據(jù)拼接到應(yīng)用程序構(gòu)造的動(dòng)態(tài)SQL語句中,該語句符合數(shù)據(jù)庫的語法規(guī)則,將該SQL語句送入相應(yīng)的數(shù)據(jù)庫中,數(shù)據(jù)庫執(zhí)行后形成非“本意”的信息泄露或更改的技術(shù)[10]。圖1顯示了一階SQL注入的攻擊操作流程。

以上語句通過攻擊載荷中的“”將條件語的“password”閉合為空,使用“or 1=1;”這個(gè)恒成立的邏輯語句進(jìn)行拼接,并使用“-- +”來注釋掉原語句中的“;”形成完整的SQL語句。所以Web服務(wù)器將該語句送入數(shù)據(jù)庫中,數(shù)據(jù)庫執(zhí)行攻擊載荷,在沒有驗(yàn)證密碼的情況下將“admin”用戶的所有信息都返回給客戶端,從而出現(xiàn)了SQL注入。SQL注入常用的手段有聯(lián)合查詢注入,報(bào)錯(cuò)注入,盲目SQL注入,Cookie注入和寬字符注入等。

2.2 二階SQL注入

二階注入與一階注入的不同之處在于攻擊載荷的來源不同。一階注入的攻擊載荷來自用戶的輸入數(shù)據(jù),二階注入的攻擊載荷來自數(shù)據(jù)庫中的數(shù)據(jù)。二階注入的過程分為2步,第一步,把設(shè)計(jì)好的攻擊載荷通過正常的Web應(yīng)用功能存入數(shù)據(jù)庫中。第二步,通過合法的應(yīng)用操作,把先前存入數(shù)據(jù)庫的攻擊載荷調(diào)用出來,構(gòu)造存在漏洞的SQL語句再次送入數(shù)據(jù)庫服務(wù)器執(zhí)行,從而形成SQL注入攻擊 [11]。二階注入的根本原因是Web應(yīng)用過分相信來自數(shù)據(jù)庫的數(shù)據(jù)。

二階注入多發(fā)生在頻繁調(diào)用數(shù)據(jù)庫數(shù)據(jù)的模塊,例如用戶資料的修改模塊。當(dāng)管理員已經(jīng)注冊(cè)“admin”為其用戶名,并配上高強(qiáng)度的密碼。普通用戶擁有注冊(cè)和修改密碼的功能。注冊(cè)用戶名為 “'admin';-- '”,密碼為:123,注冊(cè)的代碼為:

因?yàn)閿?shù)據(jù)庫中“--”為注釋符號(hào),后面的語句不會(huì)執(zhí)行,所以修改密碼的用戶變成了“admin”,即數(shù)據(jù)庫管理員用戶的密碼被修改。形成該漏洞的關(guān)鍵原因是過分相信來自數(shù)據(jù)庫的數(shù)據(jù),在沒有做出任何防御措施的情況下,利用數(shù)據(jù)動(dòng)態(tài)構(gòu)建SQL語句,并提交數(shù)據(jù)庫服務(wù)器執(zhí)行,導(dǎo)致漏洞產(chǎn)生。

圖2為二階SQL注入的流程。步驟1、2、3為存儲(chǔ)階段,用戶將攻擊載荷通過客戶端提交,經(jīng)服務(wù)器動(dòng)態(tài)構(gòu)成SQL語句,交由數(shù)據(jù)庫執(zhí)行存儲(chǔ)。調(diào)用階段,步驟 5、6、7、8、9,通過用戶正常請(qǐng)求,將攻擊載荷從數(shù)據(jù)庫中取出存入內(nèi)存,以便于調(diào)用。步驟10利用攻擊載荷動(dòng)態(tài)構(gòu)造SQL語句,并在步驟11將SQL語句送入數(shù)據(jù)庫中執(zhí)行,形成漏洞。

3 新型二階防御技術(shù)

二階SQL注入的原因是程序默認(rèn)來自數(shù)據(jù)庫的數(shù)據(jù)是安全的,從而直接調(diào)用數(shù)據(jù)構(gòu)造SQL語句,導(dǎo)致漏洞形成。本文提出的新型二階防御技術(shù),是在攻擊載荷已經(jīng)存入數(shù)據(jù)庫的基礎(chǔ)上,在數(shù)據(jù)庫調(diào)出攻擊載荷和服務(wù)器使用攻擊載荷之間添加數(shù)據(jù)檢驗(yàn)?zāi)K,對(duì)數(shù)據(jù)中出現(xiàn)的敏感字符[12]進(jìn)行安全處理。安全處理功能通過代理服務(wù)器實(shí)現(xiàn),安全處理方式參考PHP的mysql_escape_string()函數(shù),對(duì)敏感符號(hào)添加“\”進(jìn)行轉(zhuǎn)義。

3.1 敏感字符

常見的SQL敏感字符有單引號(hào)、破折號(hào)、反斜杠、星號(hào)等。若要達(dá)到完備的SQL注入攻擊效果,敏感字符集應(yīng)該包括能夠改變SQL語句的語法和語義的字符。通過對(duì)大量一階SQL注入攻擊的實(shí)例分析,排除ASCII字符,可以得到33個(gè)字符,再加上SQL 語句接收的換行符、回車符、制表符3個(gè)空白符,構(gòu)成了容量為36的銘感字符集。如表1所示。

3.2 代理服務(wù)器

MySQL數(shù)據(jù)庫簡單、高效且可靠,最重要的應(yīng)用之一是構(gòu)造數(shù)據(jù)庫集群系統(tǒng),MySQL數(shù)據(jù)庫已逐漸成為Web應(yīng)用開發(fā)的首選數(shù)據(jù)庫系統(tǒng)。在出現(xiàn)漏洞的應(yīng)用程序中,PHP參與開發(fā)的程序占據(jù)較高的比率,所以選擇PHP作為程序開發(fā)語言更具有代表性。本文使用Mysql+PHP的模式,選擇Mysql Proxy作為代理服務(wù)器。Mysql代理服務(wù)器處于Web服務(wù)器和Mysql數(shù)據(jù)庫服務(wù)器之間,使用Lua腳本對(duì)Web服務(wù)器和數(shù)據(jù)庫服務(wù)器之間的通信數(shù)據(jù)進(jìn)行監(jiān)控。當(dāng)Mysql代理服務(wù)器工作時(shí),首先扮演服務(wù)器的角色,接收來自Web服務(wù)器的指令,并根據(jù)配置分析和處理客戶端指令中的SQL語句,然后作為客戶端服務(wù)器,把SQL語句發(fā)送至服務(wù)器進(jìn)行處理。其次,在數(shù)據(jù)庫服務(wù)器向Web服務(wù)器傳送數(shù)據(jù)集時(shí),先將數(shù)據(jù)集傳送至Mysql代理服務(wù)器,經(jīng)過設(shè)定的分析處理之后,再將數(shù)據(jù)集傳送給Web服務(wù)器,從而響應(yīng)用戶請(qǐng)求。

Mysql代理服務(wù)器的核心功能由connect_+ server()、read_query()和read_query_result()三個(gè)函數(shù)組成。如圖3,connect_server()函數(shù)在客戶端發(fā)起鏈接請(qǐng)求時(shí),為客戶端提供選擇數(shù)據(jù)庫服務(wù)器的功能,并實(shí)現(xiàn)負(fù)載均衡。鏈接認(rèn)證結(jié)束后,使用read_query()函數(shù),將來自客戶端的SQL語句發(fā)送至數(shù)據(jù)庫服務(wù)器。數(shù)據(jù)庫服務(wù)器處理并形成數(shù)據(jù)集,將數(shù)據(jù)集發(fā)送至Mysql代理服務(wù)器,這時(shí)候read_query_result()接收數(shù)據(jù)集,可以對(duì)數(shù)據(jù)集中的數(shù)據(jù)進(jìn)行修改,并將修改后的數(shù)據(jù)集發(fā)送給web服務(wù)器。數(shù)據(jù)驗(yàn)證模塊的敏感字符處理功能通過修改read_query_result()函數(shù)實(shí)現(xiàn)。

3.3防御過程

Mysql代理服務(wù)器的read_query_result()函數(shù),接收來自數(shù)據(jù)庫服務(wù)器響應(yīng)的數(shù)據(jù)集,若該數(shù)據(jù)集中存在攻擊載荷,就會(huì)導(dǎo)致二階注入的產(chǎn)生,所以對(duì)來自數(shù)據(jù)庫的數(shù)據(jù)集進(jìn)行過濾處理是防止二階SQL注入的根本方法。Mysql代理服務(wù)器作為鏈接數(shù)據(jù)庫服務(wù)器和Web服務(wù)器的橋梁,在使用前需要進(jìn)行端口調(diào)節(jié),首先使用proxy-address參數(shù)為Web服務(wù)器提供連接端口,其次使用proxy–backend –address參數(shù)來連接數(shù)據(jù)庫服務(wù)器端口,最后利用proxy-lua-scrip參數(shù)確定敏感字符處理模塊的腳本。處理模塊的具體流程如圖4。

首先,使用read_query()接收到來自Web服務(wù)器的SELECT請(qǐng)求之后,將該請(qǐng)求添加編號(hào)后加入queries請(qǐng)求隊(duì)列中,并將該請(qǐng)求的性質(zhì)定義為resultset_is_ needed = true,該屬性將允許用戶對(duì)響應(yīng)的數(shù)據(jù)集進(jìn)行修改。由隊(duì)列依次向數(shù)據(jù)庫服務(wù)器遞送SQL請(qǐng)求,數(shù)據(jù)庫服務(wù)器完成處理后,返回響應(yīng)數(shù)據(jù)集至Mysql代理服務(wù)器,read_query_result()函數(shù)依次對(duì)數(shù)據(jù)集進(jìn)行抓取,通過設(shè)定的編號(hào)對(duì)數(shù)據(jù)集進(jìn)行篩選,找到對(duì)應(yīng)SQL語句的響應(yīng)數(shù)據(jù)集。響應(yīng)數(shù)據(jù)集無法直接修改,新建響應(yīng)數(shù)據(jù)集,分解原數(shù)據(jù)集,對(duì)原數(shù)據(jù)集resultset 屬性中數(shù)據(jù)列表RAW的數(shù)據(jù)進(jìn)行逐一檢測(cè),使用Lua語言的string.find()和string.gsub()方法,對(duì)表1所示的敏感字符集進(jìn)行搜索和替換。對(duì)出現(xiàn)的敏感字符,添加“\”進(jìn)行字符轉(zhuǎn)義,使用轉(zhuǎn)換后的數(shù)據(jù)列表替換原先的數(shù)據(jù)列表。保持?jǐn)?shù)據(jù)集其他屬性不變的情況下,將新的數(shù)據(jù)集添加入響應(yīng)隊(duì)列中,返回給Web服務(wù)器。Web服務(wù)器再次使用攻擊載荷時(shí),因?yàn)槊舾凶址呀?jīng)被轉(zhuǎn)義,無法構(gòu)造預(yù)設(shè)的攻擊語句,故攻擊失效。

4 測(cè)試結(jié)果與分析

使用本文提出的二階SQL注入防御方法對(duì)Sqli-labs、schoolmate CMS 存在二階注入漏洞的平臺(tái)和應(yīng)用程序,進(jìn)行二階SQL注入防御,測(cè)試防御方法的有效性。Sqli-labs是一款專業(yè)的SQL注入練習(xí)平臺(tái),模擬真實(shí)環(huán)境下的各種SQL注入漏洞。以Sqli-labs平臺(tái)為例,選擇該平臺(tái)下的二階SQL注入漏洞進(jìn)行防御測(cè)試。

部署配置Mysql代理服務(wù)器插件,注冊(cè)新用戶,用戶名為“admin;#”,密碼為123,注冊(cè)信息進(jìn)入數(shù)據(jù)庫服務(wù)器,數(shù)據(jù)庫對(duì) “\” 進(jìn)行過濾后將攻擊載荷“admin;#”存入數(shù)據(jù)庫表user中。登錄該用戶,進(jìn)入修改密碼功能模塊,提交需要修改的密碼。修改密碼模塊經(jīng)歷兩個(gè)步驟,第一步,核對(duì)該用戶信息,并將用戶信息存入內(nèi)存。該步驟使用SELECT 語句查詢信息時(shí),經(jīng)過Mysql代理服務(wù)器處理,發(fā)現(xiàn)響應(yīng)數(shù)據(jù)中的攻擊載荷“admin;#”,經(jīng)過處理變?yōu)椤癮dmin\\;\#” 返回給Web服務(wù)器并存入內(nèi)存。第二步,服務(wù)器端使用 $username= $_SESSION [“userame”]; 從內(nèi)存中接收用戶名,動(dòng)態(tài)構(gòu)造SQL語句:Update users set password = ‘111 where username = ‘a(chǎn)dmin\\;\# and password = 123; 該語句經(jīng)數(shù)據(jù)庫處理后,執(zhí)行結(jié)果為修改用戶“admin;#” 的密碼信息。未發(fā)生二階SQL注入現(xiàn)象。

同樣的部署配置對(duì)應(yīng)用程序schoolmate CMS的二階注入漏洞進(jìn)行了防御,有效阻止漏洞。針對(duì)兩個(gè)平臺(tái)的漏洞形成做出以下總結(jié)。

(1) 針對(duì)來自用戶輸入并存入數(shù)據(jù)庫的數(shù)據(jù),應(yīng)設(shè)置嚴(yán)格的字符和格式過濾,從存儲(chǔ)角度阻止攻擊載荷進(jìn)入數(shù)據(jù)庫。

(2) 對(duì)于動(dòng)態(tài)構(gòu)造SQL語句所需的各項(xiàng)參數(shù),應(yīng)做好數(shù)據(jù)過濾,降低輸入數(shù)據(jù)的直接使用所造成的SQL注入風(fēng)險(xiǎn)。

(3) 正確使用文中提出的二階注入防御方法,對(duì)來自數(shù)據(jù)庫的數(shù)據(jù)做好過濾,防止二階SQL注入漏洞。

5 結(jié)束語

隨著Web應(yīng)用程序的普及,作為Web應(yīng)用程序最主要的應(yīng)用漏洞,SQL注入漏洞逐漸受到大家的重視,對(duì)于漏洞的防御也逐漸健全。本文中提出的二階注入防御技術(shù),通過實(shí)驗(yàn)證明可以起到防御效果,但是模型本身也存在不足和需要改進(jìn)的地方,因?yàn)槊舾袛?shù)據(jù)集數(shù)量較大,所以搜尋時(shí)間較長,隨之頁面應(yīng)答時(shí)間較長。提高防御模塊準(zhǔn)確性和查詢效率,是接下來研究和學(xué)習(xí)的目標(biāo)。

參考文獻(xiàn):

[1] http : / /www.owasp.org/index.php/Category: OWASP_ Top Ten _Project.

[2] Clarke J, Fowler K, Oftedal E, et al. SQL Injection Attacks and Defense[M]. Elsevier LTD, Oxford, 2009.

[3] 王苗苗, 錢步仁, 許瑩瑩, 等. 基于通用規(guī)則的SQL注入攻擊檢測(cè)與防御系統(tǒng)的研究[J]. 電子設(shè)計(jì)工程, 2017, 25(5): 24-28.

[4] Briand L C, Briand L C, Briand L C, et al. SOFIA: an automated security oracle for black-box testing of SQL-injection vulnerabilities[C]// Ieee/acm International Conference on Automated Software Engineering. ACM, 2016:167-177.

[5] 張燕. 數(shù)據(jù)挖掘提取查詢樹特征的SQL注入攻擊檢測(cè)[J]. 電子技術(shù)應(yīng)用, 2016, 42(3):90-94.

[6] 周嚴(yán). 基于污點(diǎn)分析的靜態(tài)漏洞檢測(cè)可擴(kuò)展框架[D]. 南京大學(xué), 2017.

[7] 董敏. 基于動(dòng)態(tài)污點(diǎn)分析的SQL注入攻擊檢測(cè)問題的研究[D]. 北京工業(yè)大學(xué), 2014.

[8] 樂德廣, 李鑫, 龔聲蓉, 等. 新型二階SQL注入技術(shù)研究[J]. 通信學(xué)報(bào), 2015, 36(s1):85-93.

[9] C. Ping, "A second-order SQL injection detection method," 2017 IEEE 2nd Informtion Technology, Networking, Electronic and Automation Control Conference (ITNEC), Chengdu, 2017: 1792-1796.

[10] PINZONA C I, PAZB J F D, HERRERO ?, et al. id MAS-SQL: intrusion detection based on MAS to detect and block SQL injection through data mining[J]. Information Sciences, 2013,231(5):15-31.

[11] DAHSE J, HOLZ T. Static detection of second-order vulnerabilities in Web applications[A]. Proceedings of the 23rd USENIX Conference on Security Symposium (USENIX)[C]. 2014:989-1003.

[12] 張慧琳, 丁羽, 張利華, 等. 基于敏感字符的SQL注入攻擊防御方法[J]. 計(jì)算機(jī)研究與發(fā)展, 2016, 53(10):2262-2276.

【通聯(lián)編輯:代影】

猜你喜歡
代理服務(wù)器數(shù)據(jù)庫
地鐵信號(hào)系統(tǒng)中代理服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn)
IP地址隱藏器
基于排隊(duì)論的列調(diào)SIP代理服務(wù)器性能分析
CDN架構(gòu)下流媒體代理緩存策略的研究
一種容侵系統(tǒng)的設(shè)計(jì)