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

?

網(wǎng)站注入式攻擊的原理與防范

2013-04-29 00:44:03黃碧玲
計(jì)算機(jī)時(shí)代 2013年8期
關(guān)鍵詞:網(wǎng)絡(luò)安全

黃碧玲

摘 要: 網(wǎng)站注入式攻擊成為Web應(yīng)用系統(tǒng)的嚴(yán)重安全隱患。通過(guò)該類型攻擊,攻擊者能非法獲得對(duì)Web應(yīng)用程序數(shù)據(jù)庫(kù)無(wú)限制的訪問(wèn)權(quán)限,進(jìn)而得到企業(yè)和網(wǎng)絡(luò)用戶的機(jī)密信息,如銀行賬號(hào)、交易數(shù)據(jù)等,給網(wǎng)絡(luò)用戶和企業(yè)造成了巨大損失。通過(guò)對(duì)注入式攻擊途徑、動(dòng)機(jī)、流程及原理的分析,結(jié)合目前普遍采用的攻擊測(cè)試方法,提出一些防范方法和措施。采用這些方法和措施可極大限度地減少網(wǎng)站注入攻擊的可能性,保護(hù)數(shù)據(jù)庫(kù)的安全。

關(guān)鍵詞: 注入式攻擊; 攻擊原理; 攻擊防范; 網(wǎng)絡(luò)安全

中圖分類號(hào):TP309.2 文獻(xiàn)標(biāo)志碼:A 文章編號(hào):1006-8228(2013)08-22-03

0 引言

網(wǎng)站注入是動(dòng)態(tài)網(wǎng)頁(yè)經(jīng)常存在的一種漏洞(這些漏洞并非Window、IIS、SQL Server或者其他底層代碼的漏洞,而是在這些平臺(tái)上運(yùn)行的由程序員自行編寫的代碼中的漏洞),攻擊者利用這種漏洞可以通過(guò)SQL語(yǔ)句直接訪問(wèn)數(shù)據(jù)庫(kù),因而對(duì)系統(tǒng)的安全產(chǎn)生很大隱患。隨著B/S模式應(yīng)用開發(fā)的發(fā)展,相當(dāng)一部分程序員在編寫代碼的時(shí)候,沒(méi)有對(duì)用戶輸入數(shù)據(jù)的合法性進(jìn)行判斷,使應(yīng)用程序存在著安全隱患。本文通過(guò)對(duì)注入式攻擊途徑、動(dòng)機(jī)、流程及原理的分析,結(jié)合目前普遍采用的攻擊測(cè)試方法,提出一些防范方法和措施。這些防范方法可極大程度地減少網(wǎng)站注入攻擊的可能性,保護(hù)數(shù)據(jù)庫(kù)的安全。

1 網(wǎng)站注入攻擊途徑、流程及原理分析

1.1 SQL注入攻擊的途徑

用戶通過(guò)一定的途徑將自己的輸入提交給Web應(yīng)用程序,因而SQL注入也就有其相應(yīng)的攻擊途徑。惡意用戶一般通過(guò)客戶端輸入、Server變量以及Cookie三種[1]基本的方式進(jìn)行畸形SQL語(yǔ)句查詢的提交,從而達(dá)到進(jìn)行SQL注入的最終目的。

通過(guò)用戶輸入注入 在客戶端頁(yè)面上的輸入是用戶和Web應(yīng)用程序最主要的交互方式,用戶輸入主要通過(guò)HTTP的GET和POST請(qǐng)求提交。Web應(yīng)用程序通過(guò)訪問(wèn)這些請(qǐng)求變量并引用包含在這些變量中的用戶輸入值(變量值),然后使用這些用戶輸入值,動(dòng)態(tài)地生成SQL查詢語(yǔ)句,提交給后臺(tái)數(shù)據(jù)庫(kù)。惡意用戶則通過(guò)精心構(gòu)造用戶輸入值進(jìn)行SQL注入。

通過(guò)Server變量注入 Server變量是包含在HTTP、網(wǎng)絡(luò)header和環(huán)境變量中的變量。瀏覽器請(qǐng)求和服務(wù)端的響應(yīng)都包含headers。Headers提供有關(guān)請(qǐng)求和響應(yīng)的附加信息,包括瀏覽器生成請(qǐng)求和服務(wù)端響應(yīng)過(guò)程的信息。惡意用戶就可能通過(guò)偽造HTTP和headers的值操縱數(shù)據(jù)庫(kù),生成攻擊。

通過(guò)Cookie注入 Cookie是Web應(yīng)用程序產(chǎn)生的包含狀態(tài)信息的文件,存儲(chǔ)在客戶端并由客戶端完全控制。因此惡意用戶可以任意處理Cookie內(nèi)容,若Web應(yīng)用程序用Cookie的內(nèi)容動(dòng)態(tài)構(gòu)造SQL查詢,那么惡意用戶就可以使用Cookie的內(nèi)容構(gòu)造SQL查詢,并將攻擊嵌入Cookie提交。

1.2 網(wǎng)站注入攻擊的分類

使用注釋符(- -,#) 使用注釋通常可以使攻擊者繞過(guò)驗(yàn)證。SQL在查詢中支持注釋,如,- -、#等。通過(guò)注入注釋符,惡意用戶或者攻擊者可以毫不費(fèi)力的截?cái)郤QL查詢語(yǔ)句。

重言式攻擊 該類型攻擊是為繞過(guò)驗(yàn)證、識(shí)別可注入的參數(shù)或者提取數(shù)據(jù)。這種攻擊的目的是在條件句中注入代碼,使該條件句恒真。攻擊者利用查詢條件中的可注入字段,將條件轉(zhuǎn)換為重言式,使數(shù)據(jù)庫(kù)返回所有相關(guān)行。這類攻擊的結(jié)果依賴于攻擊對(duì)象在應(yīng)用程序中的作用,最常見的是繞過(guò)驗(yàn)證和提取數(shù)據(jù)。

不合法/邏輯錯(cuò)誤查詢(SQL注入攻擊發(fā)現(xiàn)技術(shù)) 其攻擊動(dòng)機(jī)是識(shí)別可攻擊參數(shù)、識(shí)別數(shù)據(jù)庫(kù)的類型和版本等信息或提取數(shù)據(jù)等。該類型的攻擊其實(shí)是攻擊的一個(gè)預(yù)備步驟,用于為其他類型的攻擊收集信息,包括數(shù)據(jù)庫(kù)的類型和結(jié)構(gòu)。語(yǔ)法錯(cuò)誤可以識(shí)別可注入?yún)?shù),類型轉(zhuǎn)換錯(cuò)誤可以推導(dǎo)某列的數(shù)據(jù)類型或者取得數(shù)據(jù),邏輯錯(cuò)誤可以返回導(dǎo)致錯(cuò)誤的表和列的名字。從這些錯(cuò)誤信息中得到的信息為其他攻擊方法收集了必要的攻擊信息。

Union查詢攻擊 Union查詢動(dòng)機(jī)是繞過(guò)驗(yàn)證或者提取數(shù)據(jù)。攻擊者在查詢語(yǔ)句中注入U(xiǎn)nion SELECT語(yǔ)句,并且因?yàn)橛脩艨刂啤癝ELECT語(yǔ)句”的內(nèi)容,攻擊者可以得到想要的信息。

附帶查詢攻擊 該類型攻擊是為提取數(shù)據(jù)、添加和修改數(shù)據(jù)、實(shí)現(xiàn)拒絕服務(wù)或者執(zhí)行遠(yuǎn)程命令。該類型的攻擊并不改變?cè)胁樵?,而是在原有查詢后插入新的查詢語(yǔ)句。數(shù)據(jù)庫(kù)配置如果允許執(zhí)行多個(gè)查詢語(yǔ)句,那么攻擊者將能在原有查詢后插入任何SQL命令,包括存儲(chǔ)過(guò)程(系統(tǒng)或用戶自定義的),因而這種攻擊能造成巨大危害。

利用存儲(chǔ)過(guò)程攻擊 數(shù)據(jù)庫(kù)廠商用一些標(biāo)準(zhǔn)存儲(chǔ)過(guò)程來(lái)擴(kuò)展數(shù)據(jù)庫(kù)的功能并允許其與系統(tǒng)交互,或者用戶會(huì)自定義一些存儲(chǔ)過(guò)程。通過(guò)其他類型攻擊搜集到數(shù)據(jù)庫(kù)的相關(guān)信息(數(shù)據(jù)庫(kù)類型)后,就可以構(gòu)造執(zhí)行存儲(chǔ)過(guò)程的命令。而人們以為用存儲(chǔ)過(guò)程寫程序就能避免注入攻擊漏洞,這樣的說(shuō)法是錯(cuò)誤的。

推斷 可以識(shí)別可注入?yún)?shù)、提取數(shù)據(jù)或確定數(shù)據(jù)庫(kù)模式。該種類型的攻擊利用網(wǎng)站對(duì)用戶輸入的返回信息,推導(dǎo)數(shù)據(jù)庫(kù)模式和可注入?yún)?shù)。該類型的攻擊所構(gòu)造的查詢執(zhí)行后得到的答案有兩種:真或假。

替換編碼 該種攻擊主要是為逃避檢測(cè)。通過(guò)替換編碼修改注入文本,以達(dá)到逃避系統(tǒng)已有檢測(cè)機(jī)制(如編碼防御或自動(dòng)防御技術(shù))的目的,經(jīng)常與其他類型攻擊結(jié)合使用。

1.3 網(wǎng)站注入攻擊的流程

網(wǎng)站注入攻擊主要是通過(guò)構(gòu)建特殊的輸入,這些輸入往往是網(wǎng)站語(yǔ)法的一些組合。這些輸入將作為參數(shù)傳入Web應(yīng)用程序。通過(guò)執(zhí)行網(wǎng)站語(yǔ)句而執(zhí)行攻擊者想要的操作。其主要步驟分為:識(shí)別可注入?yún)?shù)→識(shí)別數(shù)據(jù)庫(kù)類型和版本→確定數(shù)據(jù)庫(kù)模式→提取數(shù)據(jù)→添加和修改數(shù)據(jù)→實(shí)現(xiàn)拒絕服務(wù)→逃避檢測(cè)→繞過(guò)驗(yàn)證→執(zhí)行命令[2]。

一般流程都可歸納如下。

⑴ 尋找SQL注入點(diǎn):在含有傳遞參數(shù)的動(dòng)態(tài)網(wǎng)頁(yè)中,判斷是否存在SQL注入漏洞。

⑵ 判斷數(shù)據(jù)庫(kù)的類型:對(duì)于不同的數(shù)據(jù)庫(kù)管理系統(tǒng)其攻擊方式也不同。

⑶ 如果是Access數(shù)據(jù)庫(kù):通過(guò)探測(cè)數(shù)據(jù)庫(kù)表名和列名,并探測(cè)列值(字段值)了解數(shù)據(jù)庫(kù)的相關(guān)信息。該攻擊實(shí)施的動(dòng)機(jī)是確定數(shù)據(jù)庫(kù)的模式,主要通過(guò)不合法/邏輯錯(cuò)誤查詢和推斷的攻擊方法實(shí)現(xiàn)。在得到數(shù)據(jù)庫(kù)的相關(guān)信息(確定數(shù)據(jù)庫(kù)模式)之后,就可以擴(kuò)張權(quán)限。

⑷ 如果是MS SQL Server數(shù)據(jù)庫(kù)系統(tǒng):首先要判斷存在注入點(diǎn)的數(shù)據(jù)庫(kù)是否支持多句查詢、子查詢、數(shù)據(jù)庫(kù)用戶賬號(hào)、數(shù)據(jù)庫(kù)用戶權(quán)限等。如果用戶權(quán)限為sh,且數(shù)據(jù)庫(kù)中存在xp--cmdshll存儲(chǔ)過(guò)程,則可以直接轉(zhuǎn)⑹。如果用戶權(quán)限不是sh,則接下來(lái)可以有兩種方法擴(kuò)張權(quán)限:一種是步驟⑶中給出的確定數(shù)據(jù)庫(kù)相關(guān)信息;另一種是利用系統(tǒng)表Sysobjeets得到數(shù)據(jù)庫(kù)表名和列名,通過(guò)不合法/邏輯錯(cuò)誤查詢和推斷方法確定字段值。

⑸ 擴(kuò)張權(quán)限:通過(guò)步驟⑶、⑷確定了數(shù)據(jù)庫(kù)模式之后就可以擴(kuò)張權(quán)限。

⑹ 實(shí)施真正的攻擊:擁有相應(yīng)的權(quán)限,就可以實(shí)施攻擊。攻擊包括添加管理員賬號(hào)、開放3389遠(yuǎn)程終端服務(wù)、通過(guò)后臺(tái)的上傳功能上傳網(wǎng)頁(yè)木馬實(shí)施對(duì)服務(wù)器的控制等。

1.4 網(wǎng)站注入的實(shí)現(xiàn)原理

根據(jù)網(wǎng)站注入的原理不同,網(wǎng)站注入方式分為三類:常規(guī)注入、字典猜解注入和盲注入[3]。

常規(guī)注入 常規(guī)注入方法是根據(jù)攻擊者惡意構(gòu)造的SQL語(yǔ)句返回的錯(cuò)誤信息的內(nèi)容獲取有用的信息。在實(shí)施真正的攻擊之前需要收集數(shù)據(jù)庫(kù)的相關(guān)信息,并以文字的形式分類對(duì)這些攻擊的依據(jù)和所能得到的信息等方面進(jìn)行分析。通過(guò)攻擊者惡意構(gòu)造的SQL語(yǔ)句返回的錯(cuò)誤信息的內(nèi)容獲取了數(shù)據(jù)庫(kù)用戶的名字。運(yùn)用同樣的原理,可以判斷網(wǎng)站是否存在漏洞,以及數(shù)據(jù)庫(kù)的類型、用戶權(quán)限、表名、列名和字段名。

字典猜解注入 當(dāng)前管理員和多數(shù)網(wǎng)絡(luò)用戶的安全意識(shí)不強(qiáng),字段名稱都遵循某種特定方式,字典猜解將常用的字段名稱生成一部字典,用該字典中的數(shù)據(jù)探測(cè)數(shù)據(jù)庫(kù)的相關(guān)信息。

盲注入 盲注入方法是基于推理的。通過(guò)問(wèn)服務(wù)器“真/假”問(wèn)題,查看客戶端頁(yè)面反應(yīng)獲取信息。也就是說(shuō),在提交的數(shù)據(jù)中注入猜測(cè)的數(shù)據(jù),提交到數(shù)據(jù)庫(kù)中,如果正確返回結(jié)果,則該數(shù)據(jù)即為所要猜測(cè)的值,如果返回錯(cuò)誤,則繼續(xù)問(wèn)是否為其他數(shù)據(jù)。

2 防御網(wǎng)站注入攻擊方法

2.1 數(shù)據(jù)庫(kù)管理員角度

⑴ 數(shù)據(jù)庫(kù)管理員從數(shù)據(jù)庫(kù)服務(wù)器上移除所有數(shù)據(jù)庫(kù)的示例腳本,以便減少冗余腳本數(shù)據(jù)量。

⑵ 移除不需要用到的存儲(chǔ)過(guò)程,尤其是訪問(wèn)注冊(cè)表的存儲(chǔ)過(guò)程。

⑶ 為每一個(gè)網(wǎng)站單獨(dú)分配一個(gè)專門的操作賬戶,盡可能減少使用sa等默認(rèn)賬戶登錄數(shù)據(jù)庫(kù)及系統(tǒng)。

2.2 應(yīng)用程序設(shè)計(jì)員角度

大部分Web應(yīng)用常見漏洞,均是由于在Web應(yīng)用開發(fā)中,開發(fā)者沒(méi)有對(duì)用戶輸入的參數(shù)進(jìn)行檢測(cè)或檢測(cè)不嚴(yán)格造成的。所以,Web應(yīng)用開發(fā)者應(yīng)該樹立強(qiáng)烈的安全意識(shí),在開發(fā)中編寫安全代碼;對(duì)用戶提交的URL、查詢關(guān)鍵字、HTTP頭、POSE數(shù)據(jù)等進(jìn)行嚴(yán)格的檢測(cè)和限制,只接受一定長(zhǎng)度范圍內(nèi)、采用適當(dāng)格式及編碼的字符,阻塞、過(guò)濾或者忽略其他的任何字符。

⑴ 對(duì)異常處理錯(cuò)誤頁(yè)面跳轉(zhuǎn)到指定頁(yè)面,杜絕將異常處理信息過(guò)多的暴露給用戶。

⑵ 對(duì)于動(dòng)態(tài)構(gòu)造SQL 查詢的場(chǎng)合,強(qiáng)烈建議使用以下技術(shù)以減少注入漏洞:

A. 替換單引號(hào),即把所有單獨(dú)出現(xiàn)的單引號(hào)改成兩個(gè)單引號(hào),防止攻擊者修改SQL命令的含義[4];

B. 刪除用戶輸入內(nèi)容中的所有連字符,防止攻擊者構(gòu)造出類似“select*from tbuser where userName='admin1'-and passWord=''”之類的查詢,因?yàn)檫@類查詢的后半部分已經(jīng)被注釋掉,不再有效,攻擊者只要知道一個(gè)合法的用戶登錄名稱,根本不需要知道用戶的密碼就可以順利獲得訪問(wèn)權(quán)限。對(duì)于用來(lái)執(zhí)行查詢的數(shù)據(jù)庫(kù)帳戶,限制其權(quán)限。用不同的帳戶執(zhí)行查詢、插入、更新、刪除操作。由于隔離了不同帳戶可執(zhí)行的操作,因而也就防止了原本用于執(zhí)行SELECT命令的地方卻被用于執(zhí)行INSERT、UPDATE或DELETE命令。

⑶ 限制表單或查詢字符串輸入的長(zhǎng)度。如果用戶的登錄名字最多只有10個(gè)字符,那么不要認(rèn)可表單中輸入的10個(gè)以上的字符,這將大大增加攻擊者在SQL命令中插入有害代碼的難度。

⑷ 將用戶登錄名稱、密碼等數(shù)據(jù)加密保存。加密用戶輸入的數(shù)據(jù),然后再將它與數(shù)據(jù)庫(kù)中保存的數(shù)據(jù)作比較,用戶輸入的數(shù)據(jù)不再對(duì)數(shù)據(jù)庫(kù)有任何特殊的意義,從而也就防止了攻擊者注入SQL命令。

2.3 系統(tǒng)管理員角度

作為負(fù)責(zé)網(wǎng)站日常維護(hù)管理工作的Web管理員,必須及時(shí)跟蹤并安裝最新的、支撐Web網(wǎng)站運(yùn)行的各種軟件的安全補(bǔ)丁,確保攻擊者無(wú)法通過(guò)軟件漏洞對(duì)網(wǎng)站進(jìn)行攻擊。除了軟件本身的漏洞外,Web服務(wù)器、數(shù)據(jù)庫(kù)等不正確的配置也可能導(dǎo)致Web應(yīng)用安全問(wèn)題。Web網(wǎng)站管理員應(yīng)該對(duì)網(wǎng)站各種軟件配置進(jìn)行仔細(xì)檢測(cè),降低出現(xiàn)安全問(wèn)題的概率。

此外,Web管理員還應(yīng)該定期審查Web服務(wù)器日志,檢測(cè)是否存在異常訪問(wèn),及早發(fā)現(xiàn)潛在的安全問(wèn)題。

3 結(jié)束語(yǔ)

本文深入介紹并討論了SQL注入攻擊的途徑、分類和注入的流程、原理等,結(jié)合目前普遍采用的攻擊測(cè)試方法,提出了針對(duì)數(shù)據(jù)庫(kù)管理員、應(yīng)用程序設(shè)計(jì)員和系統(tǒng)管理員對(duì)防范注入攻擊方法,極大限度地減少網(wǎng)站注入攻擊的可能性,保護(hù)數(shù)據(jù)庫(kù)的安全。然而,通過(guò)人工的方法對(duì)網(wǎng)站存在的SQL注入式漏洞進(jìn)行檢測(cè),容易出現(xiàn)遺漏,因此,下一步將重點(diǎn)研究注入式漏洞的自動(dòng)檢測(cè)技術(shù)及其應(yīng)用。

參考文獻(xiàn):

[1] Anley C. Advanced SQL injection in SQL server applications[J].White paper, Next Generation Security Software Ltd,2002.

[2] Halfond W G, Viegas J, Orso A. A classification of SQL-injection attacks and countermeasures[C]//Proceedings of the IEEE International Symposium on Secure Software Engineering,Arlington,VA,USA,2006:13-15

[3] 張卓.SQL注入技術(shù)與防范措施研究[D].上海交通大學(xué),2007:50-51

[4] Yuki Kosuga, Kenji Kono, Miyuki Hanaoka, Miho Hishiyama, Yu Takahama. Sania:Syntactic and Semantic Analysis for Automated Testing against SQL injection. IEEE Computer Society 2007. Miami Beach,F(xiàn)lorida,USA.2007.USA.,IEEE 2007:107-117

猜你喜歡
網(wǎng)絡(luò)安全
網(wǎng)絡(luò)安全知多少?
新形勢(shì)下的特種設(shè)備網(wǎng)絡(luò)安全防護(hù)探討
新量子通信線路保障網(wǎng)絡(luò)安全
網(wǎng)絡(luò)安全
網(wǎng)絡(luò)安全人才培養(yǎng)應(yīng)“實(shí)戰(zhàn)化”
上網(wǎng)時(shí)如何注意網(wǎng)絡(luò)安全?
網(wǎng)絡(luò)安全與執(zhí)法專業(yè)人才培養(yǎng)探索與思考
設(shè)立網(wǎng)絡(luò)安全專項(xiàng)基金 促進(jìn)人才培養(yǎng)
網(wǎng)絡(luò)安全監(jiān)測(cè)數(shù)據(jù)分析——2015年12月
網(wǎng)絡(luò)安全監(jiān)測(cè)數(shù)據(jù)分析——2015年11月
北票市| 普兰店市| 阿拉善右旗| 偃师市| 泾源县| 浮梁县| 凤翔县| 高邮市| 雷州市| 申扎县| 通榆县| 连江县| 孟州市| 浦城县| 永新县| 潜江市| 陆河县| 泸定县| 茂名市| 栖霞市| 高青县| 岢岚县| 武山县| 香港| 同仁县| 米林县| 贵港市| 枣强县| 温泉县| 清远市| 哈巴河县| 竹溪县| 西乡县| 河津市| 广丰县| 平邑县| 浮梁县| 曲阜市| 福鼎市| 崇礼县| 铁力市|