• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

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

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

      陳龍 嚴云洋 朱全銀

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

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

      中圖分類號:TK 8? ? ? ? 文獻標識碼:A

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

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

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

      2 SQL注入技術(shù)

      2.1 一階SQL注入

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

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

      2.2 二階SQL注入

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

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

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

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

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

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

      3.1 敏感字符

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

      3.2 代理服務器

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

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

      3.3防御過程

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

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

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

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

      部署配置Mysql代理服務器插件,注冊新用戶,用戶名為“admin;#”,密碼為123,注冊信息進入數(shù)據(jù)庫服務器,數(shù)據(jù)庫對 “\” 進行過濾后將攻擊載荷“admin;#”存入數(shù)據(jù)庫表user中。登錄該用戶,進入修改密碼功能模塊,提交需要修改的密碼。修改密碼模塊經(jīng)歷兩個步驟,第一步,核對該用戶信息,并將用戶信息存入內(nèi)存。該步驟使用SELECT 語句查詢信息時,經(jīng)過Mysql代理服務器處理,發(fā)現(xiàn)響應數(shù)據(jù)中的攻擊載荷“admin;#”,經(jīng)過處理變?yōu)椤癮dmin\\;\#” 返回給Web服務器并存入內(nèi)存。第二步,服務器端使用 $username= $_SESSION [“userame”]; 從內(nèi)存中接收用戶名,動態(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)象。

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

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

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

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

      5 結(jié)束語

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

      參考文獻:

      [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注入攻擊檢測與防御系統(tǒng)的研究[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注入攻擊檢測[J]. 電子技術(shù)應用, 2016, 42(3):90-94.

      [6] 周嚴. 基于污點分析的靜態(tài)漏洞檢測可擴展框架[D]. 南京大學, 2017.

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

      [8] 樂德廣, 李鑫, 龔聲蓉, 等. 新型二階SQL注入技術(shù)研究[J]. 通信學報, 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]. 計算機研究與發(fā)展, 2016, 53(10):2262-2276.

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

      猜你喜歡
      代理服務器數(shù)據(jù)庫
      拒絕改動鎖定電腦的代理服務器設置
      電腦愛好者(2022年3期)2022-05-30 10:48:04
      地鐵信號系統(tǒng)中代理服務器的設計與實現(xiàn)
      IP地址隱藏器
      數(shù)據(jù)庫
      財經(jīng)(2017年15期)2017-07-03 22:40:49
      數(shù)據(jù)庫
      財經(jīng)(2017年2期)2017-03-10 14:35:35
      數(shù)據(jù)庫
      財經(jīng)(2016年15期)2016-06-03 07:38:02
      數(shù)據(jù)庫
      財經(jīng)(2016年3期)2016-03-07 07:44:46
      數(shù)據(jù)庫
      財經(jīng)(2016年6期)2016-02-24 07:41:51
      數(shù)據(jù)庫
      財經(jīng)(2010年20期)2010-10-19 01:48:32
      一種容侵系統(tǒng)的設計
      渭源县| 扎赉特旗| 南召县| 绩溪县| 兰考县| 九龙县| 醴陵市| 神池县| 东乌珠穆沁旗| 沁源县| 镇坪县| 公主岭市| 榆林市| 洛宁县| 登封市| 德惠市| 交口县| 陕西省| 杭锦后旗| 庆安县| 辽宁省| 怀仁县| 保亭| 广州市| 德州市| 成安县| 九龙坡区| 拉孜县| 女性| 恩平市| 金昌市| 徐水县| 桐梓县| 工布江达县| 库车县| 汝南县| 百色市| 宁蒗| 威宁| 义乌市| 临朐县|