陳佳麗 莊金蓮
(龍巖學(xué)院數(shù)學(xué)與計(jì)算機(jī)科學(xué)學(xué)院 福建龍巖 364012)
基于本體的SQL注入攻擊檢測(cè)方法研究*
陳佳麗 莊金蓮
(龍巖學(xué)院數(shù)學(xué)與計(jì)算機(jī)科學(xué)學(xué)院 福建龍巖 364012)
本文在介紹了SQL注入攻擊的概念和步驟的基礎(chǔ)上,提出了一種基于本體的SQL注入檢測(cè)方法。通過在正常網(wǎng)頁頁面與異常網(wǎng)頁頁面(即可能存在SQL注入漏洞的頁面)之間建立共識(shí)的領(lǐng)域本體,在二者之間進(jìn)行信息比對(duì),據(jù)此對(duì)Web頁面中存在的SQL注入攻擊漏洞進(jìn)行檢測(cè)。相關(guān)實(shí)驗(yàn)結(jié)果顯示,該方法具備較高的檢測(cè)準(zhǔn)確率。
SQL注入攻擊,本體,網(wǎng)絡(luò)安全,信息比對(duì)
隨著Internet應(yīng)用的普及,各行各業(yè)都陸續(xù)開始使用基于Web和數(shù)據(jù)庫的管理系統(tǒng),如電子商務(wù)、電子政務(wù)、銀行、醫(yī)療等。便捷的互聯(lián)網(wǎng)服務(wù)不僅吸引了眾多網(wǎng)站用戶,也“吸引”了愈來愈多的網(wǎng)站“破壞者”,網(wǎng)站的安全承受著越來越嚴(yán)重的威脅。據(jù)開放式Web應(yīng)用程序安全項(xiàng)目(open web application security project,OWASP)組織2010年發(fā)布的《The top 10 most critical web application security risks》,即《Web應(yīng)用的十大關(guān)鍵風(fēng)險(xiǎn)》報(bào)告顯示[1],以SQL注入漏洞為主的“注入式漏洞”已成為最危險(xiǎn)的網(wǎng)絡(luò)安全風(fēng)險(xiǎn),并已位居Web安全漏洞的榜首。如何應(yīng)對(duì)變幻無窮的SQL注入攻擊漏洞,保障業(yè)務(wù)安全及應(yīng)用安全,最大限度減少SQL注入的風(fēng)險(xiǎn),從根本上防止SQL注入的實(shí)施,是網(wǎng)絡(luò)安全領(lǐng)域面臨的關(guān)鍵問題?;诖?,本文提出了一種基于本體的SQL注入攻擊檢測(cè)方法,該方法在領(lǐng)域本體的構(gòu)建之下,對(duì)正常網(wǎng)頁頁面與異常頁面(即可能存在SQL注入漏洞的網(wǎng)頁頁面)進(jìn)行信息比對(duì),使得它們之間存在的差異信息,在本體的框架上達(dá)到一定程度的共識(shí),據(jù)此來對(duì)系統(tǒng)中可能存在的漏洞進(jìn)行檢測(cè)。
SQL注入攻擊來自英文“SQL Injection Attack”,簡稱為SIA。1999年,國外開始出現(xiàn)SQL注入的概念,但至今沒有一個(gè)標(biāo)準(zhǔn)明確的定義,根據(jù)其攻擊的特點(diǎn),微軟技術(shù)中心對(duì)其進(jìn)行了說明:(1)腳本注入式攻擊;(2)惡意攻擊者輸入惡意數(shù)據(jù),以此來影響被執(zhí)行的SQL腳本。關(guān)系數(shù)據(jù)庫的標(biāo)準(zhǔn)語言SQL本身并不存在攻擊漏洞,但若在應(yīng)用程序的代碼中直接嵌入SQL語句就有可能產(chǎn)生SQL攻擊漏洞。攻擊者通過輸入惡意代碼,由應(yīng)用程序處理后,再轉(zhuǎn)交給數(shù)據(jù)庫服務(wù)器執(zhí)行,以此達(dá)到注入的目的。在最嚴(yán)重的情況下,攻擊者除了可以掌握存儲(chǔ)在數(shù)據(jù)庫中的用戶的敏感信息(如用戶名、密碼、聯(lián)系方式和信用卡信息等)之外,還可能執(zhí)行刪除數(shù)據(jù)表和數(shù)據(jù)庫等操作,控制整個(gè)數(shù)據(jù)庫服務(wù)器,甚至作為進(jìn)入操作系統(tǒng)的墊腳石,給網(wǎng)絡(luò)安全帶來了極大的威脅。
2.1 SQL注入攻擊的原理
下面通過一個(gè)簡單的示例來說明SQL注入攻擊的原理。
現(xiàn)有一個(gè)由C#語言編寫的存在SIA漏洞的登錄界面。該界面提供兩個(gè)文本框作為輸入?yún)^(qū)域,分別是用于輸入用戶名的“textBoxName”和用于輸入密碼的“textBoxPassword”。典型的服務(wù)器端所構(gòu)造的連接字符串為:
Cmd.CommandText=”select * from Test_Table where Name=@textBoxName and password=@textBoxPassword”;
如果用戶在“textBoxName”和“textBoxPassword”中分別輸入“Tom”和“123456”,則上述連接字符串轉(zhuǎn)換為:
md.CommandText=”select * from Test_Table where Name=' Tom' and password=' 123456' ”;
在用戶名和對(duì)應(yīng)密碼匹配的情況下,該查詢語句將列出用戶Tom的相關(guān)信息。
但若攻擊者或者黑客在textBoxName中惡意輸入“Tom' or 1=1--”,在textBoxPassword中輸入“”(即不輸入任何值),正常的代碼會(huì)被替換為:
Cmd.CommandText=”select * from Test_Table where Name='Tom' or 1=1--' and password=' ' ”;
輸入串“Tom' OR 1=1--”中的“'”與SQL語句中的左單引號(hào)“‘”進(jìn)行匹配閉合,而“--”是SQL語句中的注釋符號(hào),其后所有內(nèi)容會(huì)被忽略,此例中“' and password=' '”將被忽略。另where子句中“or 1=1”是恒成立的,這樣就導(dǎo)致該SQL語句的條件是恒為真的,查詢返回的結(jié)果將是所有用戶的信息,而不需要任何用戶名和密碼。
上述示例中,攻擊者或者黑客通過注入惡意代碼,修改SQL語句命令,繞過SQL語句的驗(yàn)證邏輯,導(dǎo)致系統(tǒng)會(huì)錯(cuò)誤地授權(quán)給攻擊者,所產(chǎn)生的危害是不可估量的。
2.2 SQL注入攻擊步驟
不同攻擊者發(fā)起SIA的目的不同,但是其流程卻是相似的,即:尋找SQL注入點(diǎn)→獲取數(shù)據(jù)庫的相關(guān)信息→擴(kuò)展權(quán)限→實(shí)施攻擊。其中此處與數(shù)據(jù)庫有關(guān)的信息因數(shù)據(jù)庫的類型不同而不同,具體的攻擊步驟如圖1所示[2]。
圖1 SQL注入攻擊流程圖
3.1 本體
本體是一種說明規(guī)范,是在特定領(lǐng)域下進(jìn)行的“形式化”處理,它為機(jī)器能解釋的信息提供相關(guān)的語義。Guarino所提出的對(duì)本體進(jìn)行分類后生成的層次結(jié)構(gòu)如圖2所示,其中頂層的是研究通用概念的頂層本體,位于中間層的是研究特定領(lǐng)域概念的領(lǐng)域本體以及研究通用任務(wù)的任務(wù)本體,最底層的則是研究特定應(yīng)用的應(yīng)用本體。
圖2 本體的分類層次
本體系統(tǒng)由概念以及這些概念之間的聯(lián)系所構(gòu)成,這類結(jié)構(gòu)確保了高層的概念較為抽象概括,可用于描述具有通用性的SQL語言,而底層概念則較為具體,可以針對(duì)不同形式的SQL注入。如圖3所示,在從現(xiàn)實(shí)世界轉(zhuǎn)換或抽象到概念世界的過程中,通過引入領(lǐng)域本體系統(tǒng),把領(lǐng)域?qū)<医⒌奶囟ǜ拍钣成涞綄?duì)應(yīng)的實(shí)現(xiàn)過程,然后以領(lǐng)域本體的方式形式化地表達(dá)出來。在概念世界轉(zhuǎn)換到項(xiàng)目世界的過程中,引入應(yīng)用本體,并基于應(yīng)用本體通過邏輯推理的手段,來建立概念系統(tǒng)之間的語義關(guān)系,從而通過本體系統(tǒng)之間的語義關(guān)聯(lián),來實(shí)現(xiàn)對(duì)SQL注入攻擊漏洞的檢測(cè)。
圖3 抽象過程和本體
3.2 領(lǐng)域本體的創(chuàng)建
目前本體的構(gòu)建主要是通過領(lǐng)域?qū)<覍?duì)本行業(yè)的信息進(jìn)行歸納和提取來完成,這是一項(xiàng)工作量大、過程繁雜的任務(wù)。可借鑒Uschold和King的骨架法[3]進(jìn)行構(gòu)建,構(gòu)建過程如圖4所示,具體描述如下。
(1)分析本體。明確建立本體的目的、適用范圍、原因、用戶及用途等。
(2)表示本體。此階段涉及到相關(guān)文檔的編寫,即將本體中可能涉及到的基本概念、元本體等內(nèi)容,以書面形式展現(xiàn)。
(3)評(píng)價(jià)本體。對(duì)所構(gòu)建的本體給出技術(shù)上的評(píng)估。
(4)概念捕獲。先找出特定領(lǐng)域內(nèi)的有關(guān)概念,再識(shí)別出這些概念和概念間的聯(lián)系,最后生成特定文字加以定義。
(5)對(duì)本體進(jìn)行編碼。即采用某種“形式化”的、特定的語言描述上述文字定義。
(6)集成本體。對(duì)現(xiàn)有本體進(jìn)行集成。
(7)構(gòu)建本體。循環(huán)上述(4)-(5),完成本體的構(gòu)建。
圖4 本體構(gòu)建過程
當(dāng)然,領(lǐng)域本體的創(chuàng)建是一個(gè)不斷循環(huán)、不斷積累的過程。
3.3 基于本體的SQL注入檢測(cè)框架
如前所述,應(yīng)用程序主要依據(jù)所獲得的用戶輸入值,動(dòng)態(tài)地更改SQL查詢語句后得到帶有漏洞的語句,而后對(duì)后臺(tái)數(shù)據(jù)庫進(jìn)行訪問。在攻擊者精心構(gòu)造出帶有注入攻擊的SQL語句,并提交后臺(tái)數(shù)據(jù)庫后,必將會(huì)返回一個(gè)異常的網(wǎng)頁頁面,此處的異常體現(xiàn)在該網(wǎng)頁頁面可能包含數(shù)據(jù)庫錯(cuò)誤信息,或者與正常網(wǎng)頁不同的頁面,或者越權(quán)使用的頁面。因此,對(duì)SQL注入攻擊的檢測(cè)過程,實(shí)際上就是對(duì)返回網(wǎng)頁與正常網(wǎng)頁的比對(duì)過程。若攻擊者在訪問某URL地址時(shí),在其后附加類似“Tom' or 1=1--”字符串后,仍可正常進(jìn)入系統(tǒng),則可初步判定該Web應(yīng)用程序容易受到注入漏洞的威脅。如何進(jìn)行比對(duì)正常網(wǎng)頁頁面和異常網(wǎng)頁頁面,是亟需要解決的問題。
當(dāng)前主要有兩種比對(duì)方法,一是根據(jù)返回的HTTP代碼和網(wǎng)頁內(nèi)容的長短來判斷,二是根據(jù)關(guān)鍵字進(jìn)行判斷。大量實(shí)驗(yàn)結(jié)果表明,這兩種方法雖然簡單可行,但都具有較高的誤判率。本體具備較好的分層結(jié)構(gòu),能較好地支持邏輯推理,使用本體的構(gòu)建規(guī)則,在基于本體的信息比對(duì)過程中,不僅能找到特定領(lǐng)域的待比對(duì)信息,還能通過本體中的概念,把這些比對(duì)信息與其語義進(jìn)行連接[4]。本文在已有研究的基礎(chǔ)上提出了一種如圖5所示的基于本體的SQL注入檢測(cè)框架,并對(duì)本體在檢測(cè)過程中的作用進(jìn)行了介紹。
圖5 基于本體的SQL注入檢測(cè)框架
引入本體的SQL注入攻擊檢測(cè)方法,以所構(gòu)建的本體為核心,利用本體中已定義的概念、關(guān)系、關(guān)鍵詞等對(duì)于SQL注入漏洞進(jìn)行檢測(cè)。其中,整個(gè)系統(tǒng)的實(shí)現(xiàn)主要包括:領(lǐng)域本體的構(gòu)建過程、應(yīng)用本體與SQL語句的匹配過程、應(yīng)用本體之間的比對(duì)過程以及正常網(wǎng)頁頁面與異常網(wǎng)頁頁面之間的比對(duì)過程。通過上述操作過程及比對(duì)結(jié)果,判斷并確認(rèn)該Web應(yīng)用程序中是否存在SQL注入攻擊。
4.1 系統(tǒng)總體設(shè)計(jì)結(jié)構(gòu)
基于本體檢測(cè)的原型系統(tǒng)總體設(shè)計(jì)結(jié)構(gòu)如圖6所示,具體描述如下:
(1)通過Web瀏覽器及目標(biāo)URL地址,獲取SQL語句及待檢測(cè)網(wǎng)頁的html文檔;
(2)將二者結(jié)合進(jìn)行頁面預(yù)處理,得到xhtml處理結(jié)果;
(3)進(jìn)行應(yīng)用本體之間的比對(duì);
(4)進(jìn)行不同網(wǎng)頁頁面之間的比對(duì);
(5)對(duì)SQL注入漏洞進(jìn)行判定,得出檢測(cè)結(jié)果。
圖6 系統(tǒng)總體設(shè)計(jì)結(jié)構(gòu)
上述步驟可具體說明如下:
(1)頁面預(yù)處理:該模塊用于在進(jìn)行比對(duì)檢測(cè)之前,首先分別獲取正常頁面的html文檔,及異常頁面的html文檔,然后對(duì)它們實(shí)施規(guī)范化的處理,最后獲得經(jīng)處理后的等價(jià)的、規(guī)范的、嚴(yán)謹(jǐn)?shù)膞html文檔。
(2)注入檢測(cè)模塊:該模塊在初始化工作基礎(chǔ)上,利用本文所提的方法對(duì)SQL語句的結(jié)構(gòu)進(jìn)行比對(duì),包括應(yīng)用本體之間的比對(duì)及不同網(wǎng)頁頁面之間的比對(duì)。
(3)注入判定:該模塊根據(jù)比對(duì)結(jié)果,對(duì)注入漏洞進(jìn)行判定。
(4)檢測(cè)結(jié)果:若存在注入漏洞,則檢測(cè)結(jié)果模塊會(huì)進(jìn)行相應(yīng)的處理。
4.2 實(shí)驗(yàn)數(shù)據(jù)及結(jié)果分析
為驗(yàn)證方法的有效性,設(shè)計(jì)并開發(fā)了一個(gè)簡單的學(xué)籍信息管理系統(tǒng)進(jìn)行測(cè)試,該系統(tǒng)采用SQL Server 2008作為數(shù)據(jù)庫服務(wù)器,采用Tomcat 6.0作為Web服務(wù)器。由于大多數(shù)SIA都發(fā)生在用戶輸入?yún)^(qū),為驗(yàn)證方法的可行性,構(gòu)造了大量的SQL注入攻擊語句對(duì)系統(tǒng)進(jìn)行驗(yàn)證,所設(shè)計(jì)的SQL注入攻擊方式主要有:邏輯重言式攻擊、邏輯錯(cuò)誤攻擊、聯(lián)合查詢攻擊、捎帶查詢攻擊等。實(shí)驗(yàn)結(jié)果如表1所示。
表1 SQL注入攻擊檢測(cè)結(jié)果
由表1可以看出,引入本體后的SQL注入攻擊檢測(cè)方法能有效防止SQL注入,能保證學(xué)籍信息管理系統(tǒng)的正常運(yùn)行,有效驗(yàn)證了該方法的可行性。
檢測(cè)SQL注入攻擊漏洞,對(duì)提高Web應(yīng)用程序和網(wǎng)絡(luò)的安全性有著十分重要的意義。本文在已有研究基礎(chǔ)之上,將本體引入到SQL注入檢測(cè)中,提出了一種基于本體的SQL注入攻擊檢測(cè)方法,對(duì)領(lǐng)域本體進(jìn)行抽象,然后在基于應(yīng)用本體比對(duì)的基礎(chǔ)之上,對(duì)不同網(wǎng)頁頁面進(jìn)行比對(duì),提高了檢測(cè)結(jié)果的準(zhǔn)確率,具有較高的正確率。不足之處在于目前還只能針對(duì)特定領(lǐng)域進(jìn)行構(gòu)建本體,也只能采用半自動(dòng)的構(gòu)建方式,有待于后續(xù)階段進(jìn)一步研究。
[1]Category:OWASP Top Ten Project. https://www.owasp.org/index.php/Category:OWASP_Top_Ten_Project.
[2]王永生.基于Web應(yīng)用的SQL注入攻擊入侵檢測(cè)研究[D].鄭州:鄭州大學(xué),2012.
[3]王志華,魏斌,李占波,等.基于本體的Web信息抽取系統(tǒng)[J].計(jì)算機(jī)工程與設(shè)計(jì),2012,23(7):2634.
[4]M Uschold, M King, S Moralee, et al.The enterprise ontology [J].The knowledge engineering Review, 1998, 13(1):31.
(責(zé)任編輯胡安娜)
Research on Detection of SQL Injection Attack Based on Ontology
CHEN Jiali, ZHUANG Jinlian
(School of Mathematics and Computer Science, LongYan University, Longyan, Fujian 364012 , China)
After explaining the concept and processes of SQL injection attack, a way to detect the SQL injection attack based on ontology was presented. By establishing the domain ontology and taking information comparison between normal web pages and abnormal web pages (pages which might include SQL injection vulnerabilities), it detected the SQL injection attack vulnerabilities which exist in the web pages. The experimental results indicated that this method had higher accurateness.
SQL injection attack, ontology, network security, information comparison
龍巖學(xué)院校立服務(wù)海西面上項(xiàng)目(編號(hào)LYXY2011055)成果之一。
2014-3-24
陳佳麗(1983-),女,漢族,湖北仙桃人,碩士,講師,研究方向?yàn)楝F(xiàn)代數(shù)據(jù)庫與信息安全。Email:chenjialicjl425@163.com。
TP 393.1
A
1674-9545(2014)02-0037-(05)