數(shù)據(jù)庫系統(tǒng)安全課件_第1頁
數(shù)據(jù)庫系統(tǒng)安全課件_第2頁
數(shù)據(jù)庫系統(tǒng)安全課件_第3頁
數(shù)據(jù)庫系統(tǒng)安全課件_第4頁
數(shù)據(jù)庫系統(tǒng)安全課件_第5頁
已閱讀5頁,還剩101頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第15章數(shù)據(jù)庫系統(tǒng)安全第15章數(shù)據(jù)庫系統(tǒng)安全1概論隨著計(jì)算機(jī)技術(shù)的飛速發(fā)展,數(shù)據(jù)庫的應(yīng)用十分廣泛,深入到各個(gè)領(lǐng)域,但隨之而來產(chǎn)生了數(shù)據(jù)的安全問題。各種應(yīng)用系統(tǒng)的數(shù)據(jù)庫中大量數(shù)據(jù)的安全問題、敏感數(shù)據(jù)的防竊取和防篡改問題,越來越引起人們的高度重視。數(shù)據(jù)庫系統(tǒng)作為信息的聚集體,是計(jì)算機(jī)信息系統(tǒng)的核心部件,其安全性至關(guān)重要,關(guān)系到企業(yè)興衰、國家安全。因此,如何有效地保證數(shù)據(jù)庫系統(tǒng)的安全,實(shí)現(xiàn)數(shù)據(jù)的保密性、完整性和有效性,已經(jīng)成為業(yè)界人士探索研究的重要課題之一,本章就數(shù)據(jù)庫系統(tǒng)安全做討論。概論隨著計(jì)算機(jī)技術(shù)的飛速發(fā)展,數(shù)據(jù)庫的應(yīng)用十分廣泛,深入到各2目錄第15章數(shù)據(jù)庫系統(tǒng)安全15.1數(shù)據(jù)庫系統(tǒng)安全概述15.2針對數(shù)據(jù)庫系統(tǒng)的攻擊15.2.1弱口令攻擊15.2.2利用漏洞對數(shù)據(jù)庫發(fā)起的攻擊15.2.3SQLSerever的單字節(jié)溢出攻擊15.2.4SQL注入攻擊15.3數(shù)據(jù)庫攻擊的防范措施15.3.1數(shù)據(jù)庫攻擊防范概述15.3.2SQL注入攻擊的防范思考題目錄第15章數(shù)據(jù)庫系統(tǒng)安全3數(shù)據(jù)庫安全是指數(shù)據(jù)庫的任何部分都沒有受到侵害,或者沒有受到未經(jīng)授權(quán)的存取和修改。1.?dāng)?shù)據(jù)庫安全的內(nèi)涵數(shù)據(jù)庫安全主要包括數(shù)據(jù)庫系統(tǒng)安全和數(shù)據(jù)庫數(shù)據(jù)安全兩層含義。返回本章首頁15.1數(shù)據(jù)庫系統(tǒng)安全概述數(shù)據(jù)庫安全是指數(shù)據(jù)庫的任何部分都沒有受到侵害,或者沒4(1)數(shù)據(jù)庫系統(tǒng)安全數(shù)據(jù)庫系統(tǒng)安全是指在系統(tǒng)級控制數(shù)據(jù)庫的存取和使用機(jī)制,應(yīng)盡可能地堵住各種潛在的漏洞,防止非法用戶利用這些漏洞危害數(shù)據(jù)庫系統(tǒng)的安全;同時(shí)保證數(shù)據(jù)庫系統(tǒng)不因軟硬件故障和災(zāi)害的影響而不能正常運(yùn)行。數(shù)據(jù)庫系統(tǒng)安全包括:硬件運(yùn)行安全;物理控制安全;操作系統(tǒng)安全;用戶連接數(shù)據(jù)庫需授權(quán);災(zāi)害、故障恢復(fù)等。返回本章首頁(1)數(shù)據(jù)庫系統(tǒng)安全返回本章首頁5(2)數(shù)據(jù)庫數(shù)據(jù)安全數(shù)據(jù)庫數(shù)據(jù)安全是指在對象級控制數(shù)據(jù)庫的存取和使用的機(jī)制,哪些用戶可以存取指定的模式對象及在對象上允許有哪些操作。數(shù)據(jù)庫數(shù)據(jù)安全包括:有效的用戶名/口令鑒別;用戶訪問權(quán)限控制;數(shù)據(jù)存取權(quán)限、方式控制;審計(jì)跟蹤;數(shù)據(jù)加密等。返回本章首頁(2)數(shù)據(jù)庫數(shù)據(jù)安全返回本章首頁62.數(shù)據(jù)庫安全管理原則對數(shù)據(jù)庫系統(tǒng)進(jìn)行安全管理規(guī)劃時(shí)一般要遵循以下原則:(1)管理細(xì)分和委派原則(2)最小權(quán)限原則(3)帳號(hào)安全原則(4)有效審計(jì)原則返回本章首頁2.數(shù)據(jù)庫安全管理原則返回本章首頁7數(shù)據(jù)庫管理系統(tǒng)簡介DBMS是專門負(fù)責(zé)數(shù)據(jù)庫管理和維護(hù)的計(jì)算機(jī)軟件系統(tǒng),是數(shù)據(jù)庫系統(tǒng)的核心,不僅負(fù)責(zé)數(shù)據(jù)庫的維護(hù)工作,還負(fù)責(zé)數(shù)據(jù)庫的安全性和完整性。DBMS是與文件系統(tǒng)類似的軟件系統(tǒng),通過DBMS,應(yīng)用程序和用戶可以取得所需的數(shù)據(jù)。與文件系統(tǒng)不同的是DBMS還定義了所管理的數(shù)據(jù)之間的結(jié)構(gòu)和約束關(guān)系,還提供了一些基本的數(shù)據(jù)管理和安全功能。返回本章首頁數(shù)據(jù)庫管理系統(tǒng)簡介DBMS是專門負(fù)責(zé)數(shù)據(jù)庫管理和維8數(shù)據(jù)庫系統(tǒng)的缺陷與威脅1.數(shù)據(jù)庫系統(tǒng)的缺陷數(shù)據(jù)庫系統(tǒng)的安全缺陷主要體現(xiàn)在以下幾個(gè)方面:數(shù)據(jù)庫系統(tǒng)安全通常與操作系統(tǒng)安全密切相關(guān)數(shù)據(jù)庫系統(tǒng)安全通常被忽視數(shù)據(jù)庫帳號(hào)和密碼容易泄露返回本章首頁數(shù)據(jù)庫系統(tǒng)的缺陷與威脅1.數(shù)據(jù)庫系統(tǒng)的缺陷返回本章首頁92.數(shù)據(jù)庫系統(tǒng)面臨的威脅數(shù)據(jù)庫系統(tǒng)面臨的安全威脅主要來自以下幾個(gè)方面:物理和環(huán)境的因素事務(wù)內(nèi)部故障存儲(chǔ)介質(zhì)故障人為破壞病毒與黑客未經(jīng)授權(quán)的數(shù)據(jù)讀寫與修改對數(shù)據(jù)的異常訪問造成數(shù)據(jù)庫系統(tǒng)故障數(shù)據(jù)庫權(quán)限設(shè)置錯(cuò)誤,造成數(shù)據(jù)的越權(quán)訪問返回本章首頁2.數(shù)據(jù)庫系統(tǒng)面臨的威脅返回本章首頁1015.2針對數(shù)據(jù)庫系統(tǒng)的攻擊數(shù)據(jù)庫系統(tǒng)是在操作系統(tǒng)平臺(tái)之上的最重要的系統(tǒng)軟件,數(shù)據(jù)庫系統(tǒng)的安全可以說是十分重要的。曾經(jīng)有句話這樣說:如果網(wǎng)絡(luò)遍地是金錢,那么金錢就在數(shù)據(jù)庫服務(wù)器中。隨著無紙化業(yè)務(wù)環(huán)境的不斷擴(kuò)大,人們在數(shù)據(jù)庫中存儲(chǔ)著越來越多的敏感信息:銀行賬戶、醫(yī)療記錄、政府文件、軍事機(jī)密等等,數(shù)據(jù)庫系統(tǒng)就成為越來越有價(jià)值的攻擊目標(biāo),因此確保數(shù)據(jù)庫系統(tǒng)的安全也越來越重要。作為一種大型的系統(tǒng)軟件,數(shù)據(jù)庫系統(tǒng)中也存在著各種各樣的安全漏洞,其中危害性較大的有緩沖區(qū)溢出、堆溢出和SQL注入等。本小節(jié)將講述一些典型的針對數(shù)據(jù)庫系統(tǒng)的攻擊。15.2針對數(shù)據(jù)庫系統(tǒng)的攻擊數(shù)據(jù)庫系統(tǒng)是在操作系統(tǒng)平臺(tái)之上1115.2.1弱口令攻擊弱口令是指口令強(qiáng)度過低,使非授權(quán)用戶容易在短時(shí)間內(nèi)通過猜解或者少量的列舉即可得到口令。弱口令會(huì)使非授權(quán)用戶獲得訪問數(shù)據(jù)庫的權(quán)限。這會(huì)造成機(jī)密數(shù)據(jù)泄露、損壞等嚴(yán)重后果。出現(xiàn)弱口令的原因多是在數(shù)據(jù)庫安裝和建立用戶信息的時(shí)候,數(shù)據(jù)庫管理員設(shè)置了統(tǒng)一且簡單的訪問口令,授權(quán)用戶也沒有及時(shí)修改默認(rèn)口令。特別是在某些數(shù)據(jù)庫安裝的過程中,安裝程序會(huì)默認(rèn)建立一個(gè)空白口令的特權(quán)用戶。15.2.1弱口令攻擊弱口令是指口令強(qiáng)度過低,使非授權(quán)用戶1215.2.1弱口令攻擊下面是一個(gè)因?yàn)榇嬖谀J(rèn)用戶名和口令的實(shí)例。在2005年的1月W32.Spybot.IVQ蠕蟲便是依靠空白口令的root用戶感染了數(shù)以千計(jì)的WindowsMySQL服務(wù)器。在MySQL的某些默認(rèn)配置中,mysql.user表內(nèi)有4個(gè)默認(rèn)條目:兩個(gè)條目用于root,兩個(gè)條目用于匿名賬戶。在主機(jī)build上,有一個(gè)用于賬戶root具有root特權(quán)的遠(yuǎn)程條目。如果在本地主機(jī)上,可以用空白口令以root特權(quán)進(jìn)行身份驗(yàn)證,則可以全面控制數(shù)據(jù)庫。如果在本地主機(jī)上,可以用任何用戶進(jìn)行身份驗(yàn)證,則可以guest權(quán)限訪問數(shù)據(jù)庫。15.2.1弱口令攻擊下面是一個(gè)因?yàn)榇嬖谀J(rèn)用戶名和口令的1315.2.1弱口令攻擊如果在被稱為build的遠(yuǎn)程主機(jī)上,可以用任何用戶進(jìn)行身份驗(yàn)證,則可以以guest權(quán)限訪問數(shù)據(jù)庫。在Windows主機(jī)上,root賬戶的存在使得任何本地用戶都可以將其自己提升到本地系統(tǒng)級訪問權(quán)限,因?yàn)镸ySQL默認(rèn)以SYSTEM運(yùn)行。而且,如果攻擊者簡單地將他的主機(jī)命名為build,MySQL服務(wù)一旦啟動(dòng),他就具有了對主機(jī)的遠(yuǎn)程系統(tǒng)級的訪問權(quán)限。針對這一問題最好的保護(hù)是采取以下措施:(1)安裝MySQL是禁止網(wǎng)絡(luò)訪問(拔掉網(wǎng)線或者應(yīng)用全部防火墻規(guī)則)。(2)在安裝之后,應(yīng)立刻刪除mysql.user表內(nèi)除了本地主機(jī)(localhost)root賬戶之外的所有賬戶。(3)為本地主機(jī)的root賬戶設(shè)置復(fù)雜的口令。15.2.1弱口令攻擊如果在被稱為build的遠(yuǎn)程主機(jī)上,1415.2.2利用漏洞對數(shù)據(jù)庫發(fā)起的攻擊數(shù)據(jù)庫廠商會(huì)發(fā)現(xiàn)自己產(chǎn)品中的某些安全問題,然后為自己的產(chǎn)品提供某些安全補(bǔ)丁,產(chǎn)品的版本隨之不斷升級。作為數(shù)據(jù)庫的用戶,如果不及時(shí)升級自己的數(shù)據(jù)庫,就會(huì)面臨安全威脅。下面以零長度字符串繞過MySQL身份驗(yàn)證漏洞攻擊為例子,講解利用漏洞對數(shù)據(jù)庫的攻擊。15.2.2利用漏洞對數(shù)據(jù)庫發(fā)起的攻擊數(shù)據(jù)庫廠商會(huì)發(fā)現(xiàn)自己1515.2.2利用漏洞對數(shù)據(jù)庫發(fā)起的攻擊在MySQL5.0以前的版本中,MySQL通過下面語句:check_scramble_323(passwd,thd->scramble,(ulong*)acl_user_tmp->salt)==0來判斷用戶輸入的密碼是否正確,然而在check_scramble_323()函數(shù)內(nèi)可以看到:boolcheck_scramble_323(constchar*scrambled,constchar*message,ulong*hash_pass){ …… while(*scrambled){ if(*scrambled++!=(char)(*to++^extra)) return1; //密碼錯(cuò)誤}return0;}15.2.2利用漏洞對數(shù)據(jù)庫發(fā)起的攻擊在MySQL5.0以1615.2.2利用漏洞對數(shù)據(jù)庫發(fā)起的攻擊這里,用戶可以指定一個(gè)其所需長度的字符串。在這個(gè)簡單的身份驗(yàn)證中,如果指定長度為0的字符串。在最后的循環(huán)中,循環(huán)比較scrambled字符串和MySQL所得到的字符串的每個(gè)字符,直到scrambled字符串內(nèi)沒有字符為止。因?yàn)閟crambled字符串長度為0,根本不會(huì)進(jìn)行循環(huán)比較,所以驗(yàn)證函數(shù)直接返回0,使得用戶以0長度字符串通過身份驗(yàn)證。這是一個(gè)非常簡單的利用數(shù)據(jù)庫漏洞的例子。15.2.2利用漏洞對數(shù)據(jù)庫發(fā)起的攻擊這里,用戶可以指定一1715.2.3SQLSerever的單字節(jié)溢出攻擊SQLServer2000會(huì)監(jiān)聽UDP:1433端口,而且會(huì)對值為0x02的單字節(jié)報(bào)文進(jìn)行響應(yīng),返回關(guān)于SQLServer的信息。但是當(dāng)單字節(jié)報(bào)文的值不是0x02而是其他值時(shí),SQLServer將會(huì)異常。會(huì)引起異常的值包括:0x04,導(dǎo)致棧溢出發(fā)生;0x08字符,會(huì)導(dǎo)致對溢出;0x0A,會(huì)引發(fā)拒絕服務(wù)攻擊。另外,在一些數(shù)據(jù)庫管理系統(tǒng),如WinMySQLAdmin在my.ini文件中以明文形式保存了MySQL的口令信息。使得非授權(quán)的本地用戶也可以訪問MySQL數(shù)據(jù)庫。15.2.3SQLSerever的單字節(jié)溢出攻擊SQL1815.2.4SQL注入攻擊1.SQL注入攻擊原理瀏覽器/服務(wù)器(B/S,Browser/Server,)結(jié)構(gòu)是互聯(lián)網(wǎng)興起后的一種網(wǎng)絡(luò)結(jié)構(gòu)模式,這種模式統(tǒng)一了客戶端,將系統(tǒng)功能實(shí)現(xiàn)的核心部分集中到服務(wù)器上,簡化了系統(tǒng)的開發(fā)、維護(hù)和使用。B/S結(jié)構(gòu)由服務(wù)端、瀏覽器和通信協(xié)議三大部分組成。如下圖所示:15.2.4SQL注入攻擊1.SQL注入攻擊原理1915.2.4SQL注入攻擊15.2.4SQL注入攻擊2015.2.4SQL注入攻擊采用這種方式構(gòu)建的Web服務(wù),經(jīng)常受到SQL注入的攻擊。近幾年,針對Web服務(wù)數(shù)據(jù)庫的SQL注入攻擊非常多。SQL注入可導(dǎo)致數(shù)據(jù)庫系統(tǒng)中的普通用戶竊取機(jī)密數(shù)據(jù)、進(jìn)行權(quán)限提升等,而這種攻擊方式又不需要太多計(jì)算機(jī)方面的知識(shí),一般只要能熟練使用SQL語言即可,因此對數(shù)據(jù)庫的安全構(gòu)成了很大的威脅。另外,目前還有NBSI等SQL注入工具,更使得對數(shù)據(jù)庫的安全受到巨大威脅。如圖15.2所示為合作NBSISQL注入攻擊工具對某網(wǎng)站成功進(jìn)行了攻擊,從圖中可以看出數(shù)據(jù)庫中的內(nèi)容。15.2.4SQL注入攻擊采用這種方式構(gòu)建的Web服務(wù),經(jīng)2115.2.4SQL注入攻擊15.2.4SQL注入攻擊2215.2.4SQL注入攻擊許多Web應(yīng)用程序在編寫時(shí)沒有對用戶輸入數(shù)據(jù)的合法性進(jìn)行檢驗(yàn),導(dǎo)致應(yīng)用程序通過用戶輸入的數(shù)據(jù)構(gòu)造SQL查詢語句時(shí)存在著安全隱患。SQL注入攻擊的基本思想就是在用戶輸入中注入一些額外的特殊字符或者SQL語句,使系統(tǒng)構(gòu)造出來的SQL語句在執(zhí)行時(shí)改變了查詢條件,或者附帶執(zhí)行了攻擊者注入的SQL語句。攻擊者根據(jù)程序返回的結(jié)果,獲得某些想知道的數(shù)據(jù),這就是所謂的SQL注入。SQL注入攻擊源于英文“SQLInjectionAttack”。目前還沒有一種標(biāo)準(zhǔn)的定義,常見的是對這種攻擊形式、特點(diǎn)的描述。微軟技術(shù)中心從兩個(gè)方面進(jìn)行了描述:15.2.4SQL注入攻擊許多Web應(yīng)用程序在編寫時(shí)沒有對2315.2.4SQL注入攻擊(1) 腳本注入式的攻擊。(2) 惡意用戶輸入用來影響被執(zhí)行的SQL腳本。由于SQL注入攻擊利用了SQL的語法,其針對的是基于數(shù)據(jù)的應(yīng)用程序當(dāng)中的漏洞,這使得SQL注入攻擊具有廣泛性。理論上說,對于所有基于SQL語言標(biāo)準(zhǔn)的數(shù)據(jù)庫軟件都是有效的。一個(gè)簡單SQL注入攻擊的示例如下:通過網(wǎng)頁提交數(shù)據(jù)id、password以驗(yàn)證某個(gè)用戶的登陸信息;然后通過服務(wù)器端的腳本構(gòu)造如下的SQL查詢語句:15.2.4SQL注入攻擊(1) 腳本注入式的攻擊。2415.2.4SQL注入攻擊"SELECT*FROMuserWHEREID='"+id+"'ANDPASSWORD='"+password+"'"如果用戶提交的id=abc,password=123系統(tǒng)會(huì)驗(yàn)證是否有用戶名為abc,密碼為123的用戶存在,但是攻擊者會(huì)提交惡意的數(shù)據(jù):id=abc,password='OR'1'='1使得腳本語言構(gòu)造的SQL查詢語句變成:SELECT*FROMuserWHEREID='abc'ANDPASSWORD=''OR'1'='1'因?yàn)?1'='1'恒為真,所以攻擊者就可以輕而易舉的繞過密碼驗(yàn)證。目前易受到SQL注入攻擊的兩大系統(tǒng)平臺(tái)組合:MySQL+PHP和SQLServer+ASP。其中MySQL和SQLServer是兩種SQL數(shù)據(jù)庫系統(tǒng),ASP和PHP是兩種服務(wù)端腳本語言,SQL注入攻擊正是由于服務(wù)器腳本程序存在漏洞造成的。15.2.4SQL注入攻擊"SELECT*FROMu2515.2.4SQL注入攻擊2.SQL注入攻擊的一般步驟SQL注入攻擊的手法相當(dāng)靈活,在碰到意外情況時(shí)需要構(gòu)造巧妙的SQL語句,從而成功獲取需要的數(shù)據(jù)??傮w來說,SQL注入攻擊有以下幾個(gè)步驟:(1)發(fā)現(xiàn)SQL注入位置。找到存在SQL注入漏洞的網(wǎng)頁地址,是開始SQL注入的一步。不同的URL地址帶有不同類型的參數(shù),需要不同的方法來判斷。(2)判斷數(shù)據(jù)庫的類型。不同廠商的數(shù)據(jù)庫管理系統(tǒng)的SQL語言雖然都基于標(biāo)準(zhǔn)的SQL語言,但是不同的產(chǎn)品對SQL的支持不盡相同,對SQL也有各自的擴(kuò)展。而且不同的數(shù)據(jù)有不同的攻擊方法,必須要區(qū)別對待。15.2.4SQL注入攻擊2.SQL注入攻擊的一般步驟2615.2.4SQL注入攻擊(3)通過SQL注入獲取需要的數(shù)據(jù)。獲得數(shù)據(jù)庫中的機(jī)密數(shù)據(jù)是SQL注入攻擊的主要目的。例如管理員的賬戶信息,登陸口令等等。(4)執(zhí)行其他的操作。在取得數(shù)據(jù)庫的操作權(quán)限之后,攻擊者可能會(huì)采取進(jìn)一步的攻擊,例如上傳木馬以獲取更高一級的系統(tǒng)控制權(quán)限,達(dá)到完全控制目標(biāo)主機(jī)的目的。這部分內(nèi)容本文不做詳細(xì)討論。15.2.4SQL注入攻擊(3)通過SQL注入獲取需要的2715.2.4SQL注入攻擊3.SQL注入漏洞的判斷一般來說,SQL注入一般存在于形如:http://localhost/show.asp?id=XX等帶有參數(shù)的動(dòng)態(tài)網(wǎng)頁中,這些參數(shù)可能有一個(gè)或者多個(gè),參數(shù)類型可能是數(shù)字型或者字符型。如果動(dòng)態(tài)網(wǎng)頁帶有參數(shù)并且訪問數(shù)據(jù)庫,那么就有可能存在SQL注入。以下以http://localhost/show.asp?id=XX為例進(jìn)行分析,XX可能是整型,也有可能是字符串。(1)整型參數(shù)的判斷當(dāng)輸入的參數(shù)XX為整型時(shí),通常show.asp中SQL語句原貌大致如下:select*from表名where字段=XX,所以可以用以下步驟測試SQL注入是否存在。15.2.4SQL注入攻擊3.SQL注入漏洞的判斷2815.2.4SQL注入攻擊①http://localhost/show.asp?id=XX'(附加一個(gè)單引號(hào)),此時(shí)show.asp中的SQL語句變成了select*from表名where字段=XX',show.asp運(yùn)行異常;②http://localhost/show.asp?id=XXand1=1,show.asp運(yùn)行正常,而且與http://localhost/show.asp?id=XX運(yùn)行結(jié)果相同;③http://localhost/show.asp?id=XXand1=2,show.asp運(yùn)行異常;如果以上三步全面滿足,該腳本中一定存在SQL注入漏洞。15.2.4SQL注入攻擊①http://localho2915.2.4SQL注入攻擊(2)字符串型參數(shù)的判斷當(dāng)輸入的參數(shù)XX為字符串時(shí),通常show.asp中SQL語句原貌大致如下:select*from表名where字段='XX',所以可以用以下步驟測試SQL注入是否存在。①http://localhost/show.asp?id=XX'(附加一個(gè)單引號(hào)),此時(shí)show.asp中的SQL語句變成了select*from表名where字段=XX',show.asp運(yùn)行異常;②http://localhost/show.asp?id=XX'or'1'='1,show.asp運(yùn)行正常,而且與http://localhost/show.asp?id=XX運(yùn)行結(jié)果相同;③http://localhost/show.asp?id=XX'and'1'='2,show.asp運(yùn)行異常;如果以上三步全面滿足,show.asp中一定存在SQL注入漏洞。15.2.4SQL注入攻擊(2)字符串型參數(shù)的判斷3015.2.4SQL注入攻擊(3)特殊情況的處理有時(shí)程序員會(huì)在程序過濾掉單引號(hào)等字符,以防止SQL注入。此時(shí)可以用以下幾種方法嘗試注入。①大小定混合法:由于ASP并不區(qū)分大小寫,而程序員在過濾時(shí)通常要么全部過濾大寫字符串,要么全部過濾小寫字符串,而大小寫混合往往會(huì)被忽視。如用SelecT代替select,SELECT等。②UNICODE法:在IIS中,以UNICODE字符集實(shí)現(xiàn)國際化,我們完全可以IE中輸入的字符串化成UNICODE字符串進(jìn)行輸入。如+=%2B,空格=%20等。③ASCII碼法:可以把輸入的部分或全部字符全部用ASCII碼代替,如U=chr(85),a=chr(97)等。圖15.3描述了正常情況下訪問一個(gè)網(wǎng)頁的界面,圖15.4是在URL后追加and1=1時(shí)訪問這個(gè)網(wǎng)頁的界面、圖15.5是1=2時(shí)訪問這個(gè)網(wǎng)頁的界面。由此可以確定該頁面存在SQL注入漏洞。15.2.4SQL注入攻擊(3)特殊情況的處理3115.2.4SQL注入攻擊15.2.4SQL注入攻擊3215.2.4SQL注入攻擊15.2.4SQL注入攻擊3315.2.4SQL注入攻擊15.2.4SQL注入攻擊3415.3數(shù)據(jù)庫攻擊的防范措施從上一節(jié)可以看出針對數(shù)據(jù)庫攻擊有各種各樣的攻擊,本章來講述針對于上述攻擊的防范措施。由于目前互聯(lián)網(wǎng)上SQL攻擊比較多,并且危害比較大,所以本節(jié)重點(diǎn)講述如何防范SQL攻擊。15.3數(shù)據(jù)庫攻擊的防范措施從上一節(jié)可以看出針對數(shù)據(jù)庫攻擊3515.3.1數(shù)據(jù)庫攻擊防范概述數(shù)據(jù)庫系統(tǒng)的安全除依賴自身內(nèi)部的安全機(jī)制外,還與外部網(wǎng)絡(luò)環(huán)境、應(yīng)用環(huán)境、從業(yè)人員素質(zhì)等因素息息相關(guān),因此,從廣義上講,數(shù)據(jù)庫系統(tǒng)的安全框架如前所述可以劃分為5個(gè)層次,這里主要講其中的三個(gè)層次:(1)網(wǎng)絡(luò)層安全 從廣義上講,數(shù)據(jù)庫的安全首先依賴于網(wǎng)絡(luò)系統(tǒng)。隨著Internet的發(fā)展和普及,越來越多的公司將其核心業(yè)務(wù)向互聯(lián)網(wǎng)轉(zhuǎn)移,各種基于網(wǎng)絡(luò)的數(shù)據(jù)庫應(yīng)用系統(tǒng)如雨后春筍般涌現(xiàn)出來,面向網(wǎng)絡(luò)用戶提供各種信息服務(wù)??梢哉f網(wǎng)絡(luò)系統(tǒng)是數(shù)據(jù)庫應(yīng)用的外部環(huán)境和基礎(chǔ),數(shù)據(jù)庫系統(tǒng)要發(fā)揮其強(qiáng)大作用離不開網(wǎng)絡(luò)系統(tǒng)的支持,數(shù)據(jù)庫系統(tǒng)的用戶(如異地用戶、分布式用戶)也要通過網(wǎng)絡(luò)才能訪問數(shù)據(jù)庫的數(shù)據(jù)。網(wǎng)絡(luò)系統(tǒng)的安全是數(shù)據(jù)庫安全的第一道屏障,外部入侵首先就是從入侵網(wǎng)絡(luò)系統(tǒng)開始的。 從技術(shù)角度講,網(wǎng)絡(luò)系統(tǒng)層次的安全防范技術(shù)有很多種,大致可以分為防火墻、入侵檢測、VPN技術(shù)等。15.3.1數(shù)據(jù)庫攻擊防范概述數(shù)據(jù)庫系統(tǒng)的安全除依賴自身內(nèi)3615.3.1數(shù)據(jù)庫攻擊防范概述(2)操作系統(tǒng)層安全操作系統(tǒng)是大型數(shù)據(jù)庫系統(tǒng)的運(yùn)行平臺(tái),為數(shù)據(jù)庫系統(tǒng)提供一定程度的安全保護(hù)。目前操作系統(tǒng)平臺(tái)大多數(shù)集中在WindowsNT和Unix,安全級別通常為C1、C2級。主要安全技術(shù)有操作系統(tǒng)安全策略、安全管理策略、數(shù)據(jù)安全等方面。操作系統(tǒng)安全策略用于配置本地計(jì)算機(jī)的安全設(shè)置,包括密碼策略、賬戶鎖定策略、審核策略、IP安全策略、用戶權(quán)利指派、加密數(shù)據(jù)的恢復(fù)代理以及其它安全選項(xiàng)。具體可以體現(xiàn)在用戶賬戶、口令、訪問權(quán)限、審計(jì)等方面。15.3.1數(shù)據(jù)庫攻擊防范概述(2)操作系統(tǒng)層安全3715.3.1數(shù)據(jù)庫攻擊防范概述(3)數(shù)據(jù)庫管理系統(tǒng)層安全數(shù)據(jù)庫系統(tǒng)的安全性很大程度上依賴于數(shù)據(jù)庫管理系統(tǒng)。如果數(shù)據(jù)庫管理系統(tǒng)安全機(jī)制非常強(qiáng)大,則數(shù)據(jù)庫系統(tǒng)的安全性能就較好。目前市場上流行的是關(guān)系式數(shù)據(jù)庫管理系統(tǒng),其安全性功能很弱,這就導(dǎo)致數(shù)據(jù)庫系統(tǒng)的安全性存在一定的威脅。由于數(shù)據(jù)庫系統(tǒng)在操作系統(tǒng)下都是以文件形式進(jìn)行管理的,因此入侵者可以直接利用操作系統(tǒng)的漏洞竊取數(shù)據(jù)庫文件,或者直接利用OS工具來非法偽造、篡改數(shù)據(jù)庫文件內(nèi)容。這種隱患一般數(shù)據(jù)庫用戶難以察覺,分析和堵塞這種漏洞被認(rèn)為是B2級的安全技術(shù)措施。15.3.1數(shù)據(jù)庫攻擊防范概述(3)數(shù)據(jù)庫管理系統(tǒng)層安全3815.3.1數(shù)據(jù)庫攻擊防范概述數(shù)據(jù)庫管理系統(tǒng)層次安全技術(shù)主要是用來解決這一問題,即當(dāng)前面兩個(gè)層次已經(jīng)被突破的情況下仍能保障數(shù)據(jù)庫數(shù)據(jù)的安全,這就要求數(shù)據(jù)庫管理系統(tǒng)必須有一套強(qiáng)有力的安全機(jī)制。解決這一問題的有效方法之一是數(shù)據(jù)庫管理系統(tǒng)對數(shù)據(jù)庫文件進(jìn)行加密處理,使得即使數(shù)據(jù)不幸泄露或者丟失,也難以被人破譯和閱讀。以上這三個(gè)層次構(gòu)筑成數(shù)據(jù)庫系統(tǒng)的安全體系,與數(shù)據(jù)安全的關(guān)系是逐步緊密的,防范的重要性也逐層加強(qiáng),從外到內(nèi)、由表及里保證數(shù)據(jù)的安全。15.3.1數(shù)據(jù)庫攻擊防范概述數(shù)據(jù)庫管理系統(tǒng)層次安全技術(shù)主3915.3.2SQL注入攻擊的防范隨著一些自動(dòng)化注入攻擊的出現(xiàn),目前針對Web應(yīng)用的SQL注入攻擊越來越普遍,技術(shù)也在不斷翻新。但是SQL注入的基本原理還是通過構(gòu)造畸形的SQL語句,繞過認(rèn)證系統(tǒng)獲得敏感信息。然而為了使用Web服務(wù)器和數(shù)據(jù)庫服務(wù)器的功能,實(shí)現(xiàn)信息交互的目的就不可避免的暴露一些可以被攻擊者非法利用的安全缺陷。如何采取有效的措施阻止內(nèi)部信息泄露,將系統(tǒng)的安全威脅降至最低是防護(hù)的關(guān)鍵。這需要從配置Web服務(wù)器、配置數(shù)據(jù)庫和編寫安全代碼等多方面著手,加強(qiáng)系統(tǒng)安全性。15.3.2SQL注入攻擊的防范隨著一些自動(dòng)化注入攻擊的出4015.3.2SQL注入攻擊的防范1.Web服務(wù)器的安全配置由于Web服務(wù)器龐大而復(fù)雜的結(jié)構(gòu),使得Web服務(wù)器在安全方面難免存在缺陷漏洞。正確配置Web服務(wù)器可以與有效降低SQL注入的風(fēng)險(xiǎn)。(1)修改服務(wù)器初始配置服務(wù)器在安裝時(shí)會(huì)添加默認(rèn)的用戶和默認(rèn)口令,開啟默認(rèn)的連接端口等,這些都會(huì)給攻擊者留下入侵的可能。在安裝完成后應(yīng)該及時(shí)刪除默認(rèn)的賬號(hào)或者修改默認(rèn)登錄名的權(quán)限。關(guān)閉所有服務(wù)端口后,再開啟需要使用的端口。(2)及時(shí)安裝服務(wù)器安全補(bǔ)丁及時(shí)對服務(wù)器模塊進(jìn)行必要的更新,特別是官方提供的有助于提高系統(tǒng)安全性的補(bǔ)丁包。使服務(wù)器保持最新的補(bǔ)丁包,運(yùn)行穩(wěn)定的版本。15.3.2SQL注入攻擊的防范1.Web服務(wù)器的安全配4115.3.2SQL注入攻擊的防范(3)關(guān)閉服務(wù)器的錯(cuò)誤提示信息錯(cuò)誤提示信息對于調(diào)試中的應(yīng)用程序有著很重要的作用,但是當(dāng)Web應(yīng)用一旦發(fā)布,這些錯(cuò)誤提示信息就應(yīng)該被關(guān)閉。詳細(xì)的錯(cuò)誤信息也會(huì)讓攻擊者獲得很多重要信息。自行設(shè)置一種錯(cuò)誤提示信息,即所有錯(cuò)誤都只返回同一條錯(cuò)誤消息,讓攻擊無法獲得有價(jià)值的信息。(4)配置目錄權(quán)限對于Web應(yīng)用程序所在的目錄可以設(shè)置其為只讀的。通過客戶端上傳的文件單獨(dú)存放,并設(shè)置為沒有可執(zhí)行權(quán)限,并且不在允許Web訪問的目錄下存放機(jī)密的系統(tǒng)配置文件。這樣是為了防止注入攻擊者上傳惡意文件,例如Webshell等等。15.3.2SQL注入攻擊的防范(3)關(guān)閉服務(wù)器的錯(cuò)誤提4215.3.2SQL注入攻擊的防范(5)刪除危險(xiǎn)的服務(wù)器組件有些服務(wù)器組件會(huì)為系統(tǒng)管理員提供方便的配置途徑,比如通過Web頁面配置服務(wù)器和數(shù)據(jù)庫、運(yùn)行系統(tǒng)命令等等。但是這些組件可能被惡意用戶加以利用,從而對服務(wù)器造成更嚴(yán)重的威脅。為安全起見,應(yīng)當(dāng)及時(shí)刪除這樣的服務(wù)器組件。(6)及時(shí)分析系統(tǒng)日志將服務(wù)器程序的日志存放在安全目錄中,定期對日志文件進(jìn)行分析,一邊第一時(shí)間發(fā)現(xiàn)入侵。但是日志分析只是一種被動(dòng)的防御手段,只能分析和鑒別入侵行為的存在,但是對于正在發(fā)生的入侵無法做出有效的防范。15.3.2SQL注入攻擊的防范(5)刪除危險(xiǎn)的服務(wù)器組4315.3.2SQL注入攻擊的防范2.數(shù)據(jù)庫的安全配置(1)修改數(shù)據(jù)庫初始配置數(shù)據(jù)庫系統(tǒng)在安裝時(shí)會(huì)添加默認(rèn)的用戶和默認(rèn)口令等,例如MySQL安裝過程中默認(rèn)密碼為空的root賬號(hào)。這些都會(huì)給攻擊者留下入侵的可能。在安裝完成后應(yīng)該及時(shí)刪除默認(rèn)的賬號(hào)或者修改默認(rèn)登錄名的權(quán)限。(2)及時(shí)升級數(shù)據(jù)庫及時(shí)對數(shù)據(jù)庫模塊進(jìn)行必要的更新,特別是官方提供的有助于提高數(shù)據(jù)庫系統(tǒng)安全性的補(bǔ)丁包,可以解決已知的數(shù)據(jù)庫漏洞問題。(3)最小權(quán)利法則Web應(yīng)用程序連接數(shù)據(jù)庫的賬戶只擁有必要的權(quán)限,這有助于保護(hù)整個(gè)系統(tǒng)盡可能少的受到入侵。用不同的用戶賬戶執(zhí)行查詢、插入、刪除等操作,可以防止用于執(zhí)行SELECT的情況下,被惡意插入執(zhí)行INSERT、UPDATE或者DELETE語句。15.3.2SQL注入攻擊的防范2.數(shù)據(jù)庫的安全配置4415.3.2SQL注入攻擊的防范3.腳本解析器安全設(shè)置對于PHP編程語言,在php.ini文件中可以配置一些涉及安全性的設(shè)置,通過這些設(shè)置可以增加SQL的注入難度,降低SQL注入風(fēng)險(xiǎn):(1)設(shè)置“magic_quotes_gpc”為“on”該選項(xiàng)是可以將一些輸入的特殊字符自動(dòng)轉(zhuǎn)義。(2)設(shè)置“register_globals”為“off”“register_globals”選項(xiàng)來設(shè)置啟用/禁止PHP為用戶輸入創(chuàng)建全局變量,設(shè)置為off表示:如果用戶提交表單變量"a",PHP不會(huì)創(chuàng)建"&a",而只會(huì)創(chuàng)建_GET['a']或者_(dá)POSTVARS['a']。15.3.2SQL注入攻擊的防范3.腳本解析器安全設(shè)置4515.3.2SQL注入攻擊的防范(3)設(shè)置“safe_mode”為“on”打開這個(gè)選項(xiàng)會(huì)增加幾條限制:限制指定命令可以執(zhí)行、限制指定函數(shù)可以使用、基于腳本所有權(quán)和目標(biāo)文件所有權(quán)的文件訪問限制、禁止文件上傳功能。(4)設(shè)置“open_basedir”為“off”它可以禁止指定文件目錄之外的文件操作,有效解決include()函數(shù)攻擊。(5)設(shè)置“display_errors”為“off”此時(shí)是禁止把錯(cuò)誤信息顯示在網(wǎng)頁上,因?yàn)檫@些語句中可能會(huì)返回應(yīng)用程序中的有關(guān)變量名、數(shù)據(jù)庫用戶名、表結(jié)構(gòu)信息等。惡意用戶有可能利用其中獲取的有關(guān)信息進(jìn)行注入攻擊。也可以設(shè)置此選項(xiàng)為“on”,但是要修改腳本返回的錯(cuò)誤信息,使其發(fā)生錯(cuò)誤時(shí)只顯示一種信息。15.3.2SQL注入攻擊的防范(3)設(shè)置“safe_m4615.3.2SQL注入攻擊的防范4.過濾特殊字符SQL注入攻擊的實(shí)質(zhì)就是構(gòu)造畸形的SQL語句,同過Web應(yīng)用程序送達(dá)數(shù)據(jù)庫系統(tǒng)執(zhí)行。如果Web應(yīng)用程序沒有對用戶輸入的參數(shù)進(jìn)行過濾,就使用這些參數(shù)構(gòu)造SQL語句送達(dá)數(shù)據(jù)庫系統(tǒng)執(zhí)行,那么極有可能發(fā)生SQL注入攻擊。(1)整形參數(shù)過濾對于整形參數(shù),可以通過強(qiáng)制類型轉(zhuǎn)換,例如:$user_id=(int)_$GET['uid'];將用戶輸入的參數(shù)中非整數(shù)部分去除。(2)簡單的字符和數(shù)字組合參數(shù)驗(yàn)證這是最常見的一種輸入允許條件,驗(yàn)證這樣的數(shù)據(jù),正則表達(dá)式為:/^\w+$/。這將允許用戶輸入字母、數(shù)字和下劃線符號(hào)。15.3.2SQL注入攻擊的防范4.過濾特殊字符4715.3.2SQL注入攻擊的防范(3)包含特殊字符的參數(shù)的處理目前網(wǎng)絡(luò)公認(rèn)的SQL注入非法字符主要集中在:“‘”、“;”、“--”、“+”、“<”、“>”、“%”、“=”等和一些特殊語句上面,如DELETE。在這些不應(yīng)該出現(xiàn)特殊字符的地方出現(xiàn)了非法字符就可以直接通過過濾阻止,目前通用的此類防范正則表達(dá)式為:(|<|>|’|and||insert|select|delete|--|+|&|update|count|*|%|chr|mid|master|exec|char|declare)當(dāng)然還要包括這些符號(hào)和字符的十進(jìn)制和十六進(jìn)制碼。這里還有些內(nèi)容沒有添加到表達(dá)式中,但是它可以隨系統(tǒng)和管理員的需要補(bǔ)充最新的特殊符號(hào),以防止更新的注入攻擊形式。(4)限制用戶參數(shù)長度所有字符串都必須限定為合適的長度。例如,用戶名無需使用256個(gè)字符。這樣可以減少惡意字符串的長度,能夠有效地阻止SQL注入攻擊的成功實(shí)施。15.3.2SQL注入攻擊的防范(3)包含特殊字符的參數(shù)4815.3.2SQL注入攻擊的防范5.應(yīng)用存儲(chǔ)過程防范SQL注入攻擊存儲(chǔ)過程是一組編譯在單個(gè)執(zhí)行計(jì)劃中的Transact-SQL語句,存儲(chǔ)過程是SQL語句和可選控制流語句的預(yù)編譯集合,以一個(gè)名稱存儲(chǔ)并作為一個(gè)單元處理。存儲(chǔ)過程存儲(chǔ)在數(shù)據(jù)庫內(nèi),可由應(yīng)用程序通過一個(gè)調(diào)用執(zhí)行,而且允許用戶聲明變量、有條件執(zhí)行以及其它強(qiáng)大的編程功能。存儲(chǔ)過程可包含程序流、邏輯以及對數(shù)據(jù)庫的查詢。它們可以接受參數(shù)、輸出參數(shù)、返回單個(gè)或多個(gè)結(jié)果集以及返回值。存儲(chǔ)過程幫助在不同的應(yīng)用程序之間實(shí)現(xiàn)一致的邏輯。在一個(gè)存儲(chǔ)過程內(nèi),可以設(shè)計(jì)、編碼和測試執(zhí)行某個(gè)常用任務(wù)所需的SQL語句和邏輯。而后,每個(gè)需要執(zhí)行該任務(wù)的應(yīng)用程序只須執(zhí)行此存儲(chǔ)過程即可。將業(yè)務(wù)邏輯編入單個(gè)存儲(chǔ)過程還提供了單個(gè)控制點(diǎn),以確保業(yè)務(wù)規(guī)則正確執(zhí)行。如果某操作需要大量Transact-SQL代碼或需重復(fù)執(zhí)行,存儲(chǔ)過程將比Transact-SQL批代碼的執(zhí)行要快。將在創(chuàng)建存儲(chǔ)過程時(shí)對其進(jìn)行分析和優(yōu)化,并可在首次執(zhí)行該過程后使用該過程的內(nèi)存中版本。每次運(yùn)行Transact-SQL語句時(shí),都要從客戶端重復(fù)發(fā)送,并且在SQLServer每次執(zhí)行這些語句時(shí),都要對其進(jìn)行編譯和優(yōu)化。一個(gè)需要數(shù)百行Transact-SQL代碼的操作由一條執(zhí)行過程代碼的單獨(dú)語句就可實(shí)現(xiàn),而不需要在網(wǎng)絡(luò)中發(fā)送數(shù)百行代碼。15.3.2SQL注入攻擊的防范5.應(yīng)用存儲(chǔ)過程防范SQ4915.3.2SQL注入攻擊的防范以身份驗(yàn)證頁面為例,在SQLServer2000中編寫存儲(chǔ)過程:CREATEPROCEDUREda_login@usernamevarchar(16),@passwordvarchar(50)ASSETNOCOUNTONSELECT*FROMuserWHEREusername=@usernameANDpassword=@passwordGO該存儲(chǔ)過程包含兩個(gè)輸入?yún)?shù)@username和@password,數(shù)據(jù)類型為varchar,設(shè)用戶提交的username為admin'--,password為321。如果不用存儲(chǔ)過程,驗(yàn)證SQL語句為:SELECT*FROMuserWHEREusername='admin'--'ANDpassword='321',密碼參數(shù)被解釋為注釋語句,這樣只對用戶名進(jìn)行驗(yàn)證,而不對密碼進(jìn)行驗(yàn)證。15.3.2SQL注入攻擊的防范以身份驗(yàn)證頁面為例,在SQ5015.3.2SQL注入攻擊的防范存儲(chǔ)過程參數(shù)用于在存儲(chǔ)過程和調(diào)用存儲(chǔ)過程的應(yīng)用程序或工具之間交換數(shù)據(jù):輸入?yún)?shù)允許調(diào)用方將數(shù)據(jù)值傳遞到存儲(chǔ)過程,輸出參數(shù)允許存儲(chǔ)過程將數(shù)據(jù)值或游標(biāo)變量傳遞回調(diào)用方,他們被預(yù)先作為獨(dú)立的數(shù)據(jù)體與SQL語句交互。上例使用da_login存儲(chǔ)過程驗(yàn)證:admin'--,作為一個(gè)標(biāo)準(zhǔn)varchar的字符串傳遞給參數(shù)@username,即username的值為admin'--;321作為一個(gè)標(biāo)準(zhǔn)varchar的字符串傳遞給參數(shù)@password,即password的值為321。兩個(gè)參數(shù)之間不會(huì)進(jìn)行字符串重組,即存儲(chǔ)過程里的SQL查詢語句不會(huì)組合為:SELECT*FROMuserWHEREusername='admin'--ANDpassword='321'因而da_login存儲(chǔ)過程驗(yàn)證是對用戶名和密碼的完整性驗(yàn)證,是有效地身份驗(yàn)證,在高效能訪問數(shù)據(jù)庫的同時(shí),解決了SQLInjection攻擊。15.3.2SQL注入攻擊的防范存儲(chǔ)過程參數(shù)用于在存儲(chǔ)過程51思考題1.針對數(shù)據(jù)庫的攻擊有哪些?2.如何保障數(shù)據(jù)庫系統(tǒng)的安全?3.SQL攻擊的原理是什么?4.SQL攻擊的過程是什么?5.如何判斷一個(gè)網(wǎng)站是否可以進(jìn)行SQL攻擊?6.如何防范SQL攻擊?思考題1.針對數(shù)據(jù)庫的攻擊有哪些?52返回ThanksForAttendance!致謝返回ThanksForAttendance!致謝53第15章數(shù)據(jù)庫系統(tǒng)安全第15章數(shù)據(jù)庫系統(tǒng)安全54概論隨著計(jì)算機(jī)技術(shù)的飛速發(fā)展,數(shù)據(jù)庫的應(yīng)用十分廣泛,深入到各個(gè)領(lǐng)域,但隨之而來產(chǎn)生了數(shù)據(jù)的安全問題。各種應(yīng)用系統(tǒng)的數(shù)據(jù)庫中大量數(shù)據(jù)的安全問題、敏感數(shù)據(jù)的防竊取和防篡改問題,越來越引起人們的高度重視。數(shù)據(jù)庫系統(tǒng)作為信息的聚集體,是計(jì)算機(jī)信息系統(tǒng)的核心部件,其安全性至關(guān)重要,關(guān)系到企業(yè)興衰、國家安全。因此,如何有效地保證數(shù)據(jù)庫系統(tǒng)的安全,實(shí)現(xiàn)數(shù)據(jù)的保密性、完整性和有效性,已經(jīng)成為業(yè)界人士探索研究的重要課題之一,本章就數(shù)據(jù)庫系統(tǒng)安全做討論。概論隨著計(jì)算機(jī)技術(shù)的飛速發(fā)展,數(shù)據(jù)庫的應(yīng)用十分廣泛,深入到各55目錄第15章數(shù)據(jù)庫系統(tǒng)安全15.1數(shù)據(jù)庫系統(tǒng)安全概述15.2針對數(shù)據(jù)庫系統(tǒng)的攻擊15.2.1弱口令攻擊15.2.2利用漏洞對數(shù)據(jù)庫發(fā)起的攻擊15.2.3SQLSerever的單字節(jié)溢出攻擊15.2.4SQL注入攻擊15.3數(shù)據(jù)庫攻擊的防范措施15.3.1數(shù)據(jù)庫攻擊防范概述15.3.2SQL注入攻擊的防范思考題目錄第15章數(shù)據(jù)庫系統(tǒng)安全56數(shù)據(jù)庫安全是指數(shù)據(jù)庫的任何部分都沒有受到侵害,或者沒有受到未經(jīng)授權(quán)的存取和修改。1.?dāng)?shù)據(jù)庫安全的內(nèi)涵數(shù)據(jù)庫安全主要包括數(shù)據(jù)庫系統(tǒng)安全和數(shù)據(jù)庫數(shù)據(jù)安全兩層含義。返回本章首頁15.1數(shù)據(jù)庫系統(tǒng)安全概述數(shù)據(jù)庫安全是指數(shù)據(jù)庫的任何部分都沒有受到侵害,或者沒57(1)數(shù)據(jù)庫系統(tǒng)安全數(shù)據(jù)庫系統(tǒng)安全是指在系統(tǒng)級控制數(shù)據(jù)庫的存取和使用機(jī)制,應(yīng)盡可能地堵住各種潛在的漏洞,防止非法用戶利用這些漏洞危害數(shù)據(jù)庫系統(tǒng)的安全;同時(shí)保證數(shù)據(jù)庫系統(tǒng)不因軟硬件故障和災(zāi)害的影響而不能正常運(yùn)行。數(shù)據(jù)庫系統(tǒng)安全包括:硬件運(yùn)行安全;物理控制安全;操作系統(tǒng)安全;用戶連接數(shù)據(jù)庫需授權(quán);災(zāi)害、故障恢復(fù)等。返回本章首頁(1)數(shù)據(jù)庫系統(tǒng)安全返回本章首頁58(2)數(shù)據(jù)庫數(shù)據(jù)安全數(shù)據(jù)庫數(shù)據(jù)安全是指在對象級控制數(shù)據(jù)庫的存取和使用的機(jī)制,哪些用戶可以存取指定的模式對象及在對象上允許有哪些操作。數(shù)據(jù)庫數(shù)據(jù)安全包括:有效的用戶名/口令鑒別;用戶訪問權(quán)限控制;數(shù)據(jù)存取權(quán)限、方式控制;審計(jì)跟蹤;數(shù)據(jù)加密等。返回本章首頁(2)數(shù)據(jù)庫數(shù)據(jù)安全返回本章首頁592.數(shù)據(jù)庫安全管理原則對數(shù)據(jù)庫系統(tǒng)進(jìn)行安全管理規(guī)劃時(shí)一般要遵循以下原則:(1)管理細(xì)分和委派原則(2)最小權(quán)限原則(3)帳號(hào)安全原則(4)有效審計(jì)原則返回本章首頁2.數(shù)據(jù)庫安全管理原則返回本章首頁60數(shù)據(jù)庫管理系統(tǒng)簡介DBMS是專門負(fù)責(zé)數(shù)據(jù)庫管理和維護(hù)的計(jì)算機(jī)軟件系統(tǒng),是數(shù)據(jù)庫系統(tǒng)的核心,不僅負(fù)責(zé)數(shù)據(jù)庫的維護(hù)工作,還負(fù)責(zé)數(shù)據(jù)庫的安全性和完整性。DBMS是與文件系統(tǒng)類似的軟件系統(tǒng),通過DBMS,應(yīng)用程序和用戶可以取得所需的數(shù)據(jù)。與文件系統(tǒng)不同的是DBMS還定義了所管理的數(shù)據(jù)之間的結(jié)構(gòu)和約束關(guān)系,還提供了一些基本的數(shù)據(jù)管理和安全功能。返回本章首頁數(shù)據(jù)庫管理系統(tǒng)簡介DBMS是專門負(fù)責(zé)數(shù)據(jù)庫管理和維61數(shù)據(jù)庫系統(tǒng)的缺陷與威脅1.數(shù)據(jù)庫系統(tǒng)的缺陷數(shù)據(jù)庫系統(tǒng)的安全缺陷主要體現(xiàn)在以下幾個(gè)方面:數(shù)據(jù)庫系統(tǒng)安全通常與操作系統(tǒng)安全密切相關(guān)數(shù)據(jù)庫系統(tǒng)安全通常被忽視數(shù)據(jù)庫帳號(hào)和密碼容易泄露返回本章首頁數(shù)據(jù)庫系統(tǒng)的缺陷與威脅1.數(shù)據(jù)庫系統(tǒng)的缺陷返回本章首頁622.數(shù)據(jù)庫系統(tǒng)面臨的威脅數(shù)據(jù)庫系統(tǒng)面臨的安全威脅主要來自以下幾個(gè)方面:物理和環(huán)境的因素事務(wù)內(nèi)部故障存儲(chǔ)介質(zhì)故障人為破壞病毒與黑客未經(jīng)授權(quán)的數(shù)據(jù)讀寫與修改對數(shù)據(jù)的異常訪問造成數(shù)據(jù)庫系統(tǒng)故障數(shù)據(jù)庫權(quán)限設(shè)置錯(cuò)誤,造成數(shù)據(jù)的越權(quán)訪問返回本章首頁2.數(shù)據(jù)庫系統(tǒng)面臨的威脅返回本章首頁6315.2針對數(shù)據(jù)庫系統(tǒng)的攻擊數(shù)據(jù)庫系統(tǒng)是在操作系統(tǒng)平臺(tái)之上的最重要的系統(tǒng)軟件,數(shù)據(jù)庫系統(tǒng)的安全可以說是十分重要的。曾經(jīng)有句話這樣說:如果網(wǎng)絡(luò)遍地是金錢,那么金錢就在數(shù)據(jù)庫服務(wù)器中。隨著無紙化業(yè)務(wù)環(huán)境的不斷擴(kuò)大,人們在數(shù)據(jù)庫中存儲(chǔ)著越來越多的敏感信息:銀行賬戶、醫(yī)療記錄、政府文件、軍事機(jī)密等等,數(shù)據(jù)庫系統(tǒng)就成為越來越有價(jià)值的攻擊目標(biāo),因此確保數(shù)據(jù)庫系統(tǒng)的安全也越來越重要。作為一種大型的系統(tǒng)軟件,數(shù)據(jù)庫系統(tǒng)中也存在著各種各樣的安全漏洞,其中危害性較大的有緩沖區(qū)溢出、堆溢出和SQL注入等。本小節(jié)將講述一些典型的針對數(shù)據(jù)庫系統(tǒng)的攻擊。15.2針對數(shù)據(jù)庫系統(tǒng)的攻擊數(shù)據(jù)庫系統(tǒng)是在操作系統(tǒng)平臺(tái)之上6415.2.1弱口令攻擊弱口令是指口令強(qiáng)度過低,使非授權(quán)用戶容易在短時(shí)間內(nèi)通過猜解或者少量的列舉即可得到口令。弱口令會(huì)使非授權(quán)用戶獲得訪問數(shù)據(jù)庫的權(quán)限。這會(huì)造成機(jī)密數(shù)據(jù)泄露、損壞等嚴(yán)重后果。出現(xiàn)弱口令的原因多是在數(shù)據(jù)庫安裝和建立用戶信息的時(shí)候,數(shù)據(jù)庫管理員設(shè)置了統(tǒng)一且簡單的訪問口令,授權(quán)用戶也沒有及時(shí)修改默認(rèn)口令。特別是在某些數(shù)據(jù)庫安裝的過程中,安裝程序會(huì)默認(rèn)建立一個(gè)空白口令的特權(quán)用戶。15.2.1弱口令攻擊弱口令是指口令強(qiáng)度過低,使非授權(quán)用戶6515.2.1弱口令攻擊下面是一個(gè)因?yàn)榇嬖谀J(rèn)用戶名和口令的實(shí)例。在2005年的1月W32.Spybot.IVQ蠕蟲便是依靠空白口令的root用戶感染了數(shù)以千計(jì)的WindowsMySQL服務(wù)器。在MySQL的某些默認(rèn)配置中,mysql.user表內(nèi)有4個(gè)默認(rèn)條目:兩個(gè)條目用于root,兩個(gè)條目用于匿名賬戶。在主機(jī)build上,有一個(gè)用于賬戶root具有root特權(quán)的遠(yuǎn)程條目。如果在本地主機(jī)上,可以用空白口令以root特權(quán)進(jìn)行身份驗(yàn)證,則可以全面控制數(shù)據(jù)庫。如果在本地主機(jī)上,可以用任何用戶進(jìn)行身份驗(yàn)證,則可以guest權(quán)限訪問數(shù)據(jù)庫。15.2.1弱口令攻擊下面是一個(gè)因?yàn)榇嬖谀J(rèn)用戶名和口令的6615.2.1弱口令攻擊如果在被稱為build的遠(yuǎn)程主機(jī)上,可以用任何用戶進(jìn)行身份驗(yàn)證,則可以以guest權(quán)限訪問數(shù)據(jù)庫。在Windows主機(jī)上,root賬戶的存在使得任何本地用戶都可以將其自己提升到本地系統(tǒng)級訪問權(quán)限,因?yàn)镸ySQL默認(rèn)以SYSTEM運(yùn)行。而且,如果攻擊者簡單地將他的主機(jī)命名為build,MySQL服務(wù)一旦啟動(dòng),他就具有了對主機(jī)的遠(yuǎn)程系統(tǒng)級的訪問權(quán)限。針對這一問題最好的保護(hù)是采取以下措施:(1)安裝MySQL是禁止網(wǎng)絡(luò)訪問(拔掉網(wǎng)線或者應(yīng)用全部防火墻規(guī)則)。(2)在安裝之后,應(yīng)立刻刪除mysql.user表內(nèi)除了本地主機(jī)(localhost)root賬戶之外的所有賬戶。(3)為本地主機(jī)的root賬戶設(shè)置復(fù)雜的口令。15.2.1弱口令攻擊如果在被稱為build的遠(yuǎn)程主機(jī)上,6715.2.2利用漏洞對數(shù)據(jù)庫發(fā)起的攻擊數(shù)據(jù)庫廠商會(huì)發(fā)現(xiàn)自己產(chǎn)品中的某些安全問題,然后為自己的產(chǎn)品提供某些安全補(bǔ)丁,產(chǎn)品的版本隨之不斷升級。作為數(shù)據(jù)庫的用戶,如果不及時(shí)升級自己的數(shù)據(jù)庫,就會(huì)面臨安全威脅。下面以零長度字符串繞過MySQL身份驗(yàn)證漏洞攻擊為例子,講解利用漏洞對數(shù)據(jù)庫的攻擊。15.2.2利用漏洞對數(shù)據(jù)庫發(fā)起的攻擊數(shù)據(jù)庫廠商會(huì)發(fā)現(xiàn)自己6815.2.2利用漏洞對數(shù)據(jù)庫發(fā)起的攻擊在MySQL5.0以前的版本中,MySQL通過下面語句:check_scramble_323(passwd,thd->scramble,(ulong*)acl_user_tmp->salt)==0來判斷用戶輸入的密碼是否正確,然而在check_scramble_323()函數(shù)內(nèi)可以看到:boolcheck_scramble_323(constchar*scrambled,constchar*message,ulong*hash_pass){ …… while(*scrambled){ if(*scrambled++!=(char)(*to++^extra)) return1; //密碼錯(cuò)誤}return0;}15.2.2利用漏洞對數(shù)據(jù)庫發(fā)起的攻擊在MySQL5.0以6915.2.2利用漏洞對數(shù)據(jù)庫發(fā)起的攻擊這里,用戶可以指定一個(gè)其所需長度的字符串。在這個(gè)簡單的身份驗(yàn)證中,如果指定長度為0的字符串。在最后的循環(huán)中,循環(huán)比較scrambled字符串和MySQL所得到的字符串的每個(gè)字符,直到scrambled字符串內(nèi)沒有字符為止。因?yàn)閟crambled字符串長度為0,根本不會(huì)進(jìn)行循環(huán)比較,所以驗(yàn)證函數(shù)直接返回0,使得用戶以0長度字符串通過身份驗(yàn)證。這是一個(gè)非常簡單的利用數(shù)據(jù)庫漏洞的例子。15.2.2利用漏洞對數(shù)據(jù)庫發(fā)起的攻擊這里,用戶可以指定一7015.2.3SQLSerever的單字節(jié)溢出攻擊SQLServer2000會(huì)監(jiān)聽UDP:1433端口,而且會(huì)對值為0x02的單字節(jié)報(bào)文進(jìn)行響應(yīng),返回關(guān)于SQLServer的信息。但是當(dāng)單字節(jié)報(bào)文的值不是0x02而是其他值時(shí),SQLServer將會(huì)異常。會(huì)引起異常的值包括:0x04,導(dǎo)致棧溢出發(fā)生;0x08字符,會(huì)導(dǎo)致對溢出;0x0A,會(huì)引發(fā)拒絕服務(wù)攻擊。另外,在一些數(shù)據(jù)庫管理系統(tǒng),如WinMySQLAdmin在my.ini文件中以明文形式保存了MySQL的口令信息。使得非授權(quán)的本地用戶也可以訪問MySQL數(shù)據(jù)庫。15.2.3SQLSerever的單字節(jié)溢出攻擊SQL7115.2.4SQL注入攻擊1.SQL注入攻擊原理瀏覽器/服務(wù)器(B/S,Browser/Server,)結(jié)構(gòu)是互聯(lián)網(wǎng)興起后的一種網(wǎng)絡(luò)結(jié)構(gòu)模式,這種模式統(tǒng)一了客戶端,將系統(tǒng)功能實(shí)現(xiàn)的核心部分集中到服務(wù)器上,簡化了系統(tǒng)的開發(fā)、維護(hù)和使用。B/S結(jié)構(gòu)由服務(wù)端、瀏覽器和通信協(xié)議三大部分組成。如下圖所示:15.2.4SQL注入攻擊1.SQL注入攻擊原理7215.2.4SQL注入攻擊15.2.4SQL注入攻擊7315.2.4SQL注入攻擊采用這種方式構(gòu)建的Web服務(wù),經(jīng)常受到SQL注入的攻擊。近幾年,針對Web服務(wù)數(shù)據(jù)庫的SQL注入攻擊非常多。SQL注入可導(dǎo)致數(shù)據(jù)庫系統(tǒng)中的普通用戶竊取機(jī)密數(shù)據(jù)、進(jìn)行權(quán)限提升等,而這種攻擊方式又不需要太多計(jì)算機(jī)方面的知識(shí),一般只要能熟練使用SQL語言即可,因此對數(shù)據(jù)庫的安全構(gòu)成了很大的威脅。另外,目前還有NBSI等SQL注入工具,更使得對數(shù)據(jù)庫的安全受到巨大威脅。如圖15.2所示為合作NBSISQL注入攻擊工具對某網(wǎng)站成功進(jìn)行了攻擊,從圖中可以看出數(shù)據(jù)庫中的內(nèi)容。15.2.4SQL注入攻擊采用這種方式構(gòu)建的Web服務(wù),經(jīng)7415.2.4SQL注入攻擊15.2.4SQL注入攻擊7515.2.4SQL注入攻擊許多Web應(yīng)用程序在編寫時(shí)沒有對用戶輸入數(shù)據(jù)的合法性進(jìn)行檢驗(yàn),導(dǎo)致應(yīng)用程序通過用戶輸入的數(shù)據(jù)構(gòu)造SQL查詢語句時(shí)存在著安全隱患。SQL注入攻擊的基本思想就是在用戶輸入中注入一些額外的特殊字符或者SQL語句,使系統(tǒng)構(gòu)造出來的SQL語句在執(zhí)行時(shí)改變了查詢條件,或者附帶執(zhí)行了攻擊者注入的SQL語句。攻擊者根據(jù)程序返回的結(jié)果,獲得某些想知道的數(shù)據(jù),這就是所謂的SQL注入。SQL注入攻擊源于英文“SQLInjectionAttack”。目前還沒有一種標(biāo)準(zhǔn)的定義,常見的是對這種攻擊形式、特點(diǎn)的描述。微軟技術(shù)中心從兩個(gè)方面進(jìn)行了描述:15.2.4SQL注入攻擊許多Web應(yīng)用程序在編寫時(shí)沒有對7615.2.4SQL注入攻擊(1) 腳本注入式的攻擊。(2) 惡意用戶輸入用來影響被執(zhí)行的SQL腳本。由于SQL注入攻擊利用了SQL的語法,其針對的是基于數(shù)據(jù)的應(yīng)用程序當(dāng)中的漏洞,這使得SQL注入攻擊具有廣泛性。理論上說,對于所有基于SQL語言標(biāo)準(zhǔn)的數(shù)據(jù)庫軟件都是有效的。一個(gè)簡單SQL注入攻擊的示例如下:通過網(wǎng)頁提交數(shù)據(jù)id、password以驗(yàn)證某個(gè)用戶的登陸信息;然后通過服務(wù)器端的腳本構(gòu)造如下的SQL查詢語句:15.2.4SQL注入攻擊(1) 腳本注入式的攻擊。7715.2.4SQL注入攻擊"SELECT*FROMuserWHEREID='"+id+"'ANDPASSWORD='"+password+"'"如果用戶提交的id=abc,password=123系統(tǒng)會(huì)驗(yàn)證是否有用戶名為abc,密碼為123的用戶存在,但是攻擊者會(huì)提交惡意的數(shù)據(jù):id=abc,password='OR'1'='1使得腳本語言構(gòu)造的SQL查詢語句變成:SELECT*FROMuserWHEREID='abc'ANDPASSWORD=''OR'1'='1'因?yàn)?1'='1'恒為真,所以攻擊者就可以輕而易舉的繞過密碼驗(yàn)證。目前易受到SQL注入攻擊的兩大系統(tǒng)平臺(tái)組合:MySQL+PHP和SQLServer+ASP。其中MySQL和SQLServer是兩種SQL數(shù)據(jù)庫系統(tǒng),ASP和PHP是兩種服務(wù)端腳本語言,SQL注入攻擊正是由于服務(wù)器腳本程序存在漏洞造成的。15.2.4SQL注入攻擊"SELECT*FROMu7815.2.4SQL注入攻擊2.SQL注入攻擊的一般步驟SQL注入攻擊的手法相當(dāng)靈活,在碰到意外情況時(shí)需要構(gòu)造巧妙的SQL語句,從而成功獲取需要的數(shù)據(jù)??傮w來說,SQL注入攻擊有以下幾個(gè)步驟:(1)發(fā)現(xiàn)SQL注入位置。找到存在SQL注入漏洞的網(wǎng)頁地址,是開始SQL注入的一步。不同的URL地址帶有不同類型的參數(shù),需要不同的方法來判斷。(2)判斷數(shù)據(jù)庫的類型。不同廠商的數(shù)據(jù)庫管理系統(tǒng)的SQL語言雖然都基于標(biāo)準(zhǔn)的SQL語言,但是不同的產(chǎn)品對SQL的支持不盡相同,對SQL也有各自的擴(kuò)展。而且不同的數(shù)據(jù)有不同的攻擊方法,必須要區(qū)別對待。15.2.4SQL注入攻擊2.SQL注入攻擊的一般步驟7915.2.4SQL注入攻擊(3)通過SQL注入獲取需要的數(shù)據(jù)。獲得數(shù)據(jù)庫中的機(jī)密數(shù)據(jù)是SQL注入攻擊的主要目的。例如管理員的賬戶信息,登陸口令等等。(4)執(zhí)行其他的操作。在取得數(shù)據(jù)庫的操作權(quán)限之后,攻擊者可能會(huì)采取進(jìn)一步的攻擊,例如上傳木馬以獲取更高一級的系統(tǒng)控制權(quán)限,達(dá)到完全控制目標(biāo)主機(jī)的目的。這部分內(nèi)容本文不做詳細(xì)討論。15.2.4SQL注入攻擊(3)通過SQL注入獲取需要的8015.2.4SQL注入攻擊3.SQL注入漏洞的判斷一般來說,SQL注入一般存在于形如:http://localhost/show.asp?id=XX等帶有參數(shù)的動(dòng)態(tài)網(wǎng)頁中,這些參數(shù)可能有一個(gè)或者多個(gè),參數(shù)類型可能是數(shù)字型或者字符型。如果動(dòng)態(tài)網(wǎng)頁帶有參數(shù)并且訪問數(shù)據(jù)庫,那么就有可能存在SQL注入。以下以http://localhost/show.asp?id=XX為例進(jìn)行分析,XX可能是整型,也有可能是字符串。(1)整型參數(shù)的判斷當(dāng)輸入的參數(shù)XX為整型時(shí),通常show.asp中SQL語句原貌大致如下:select*from表名where字段=XX,所以可以用以下步驟測試SQL注入是否存在。15.2.4SQL注入攻擊3.SQL注入漏洞的判斷8115.2.4SQL注入攻擊①http://localhost/show.asp?id=XX'(附加一個(gè)單引號(hào)),此時(shí)show.asp中的SQL語句變成了select*from表名where字段=XX',show.asp運(yùn)行異常;②http://localhost/show.asp?id=XXand1=1,show.asp運(yùn)行正常,而且與http://localhost/show.asp?id=XX運(yùn)行結(jié)果相同;③http://localhost/show.asp?id=XXand1=2,show.asp運(yùn)行異常;如果以上三步全面滿足,該腳本中一定存在SQL注入漏洞。15.2.4SQL注入攻擊①http://localho8215.2.4SQL注入攻擊(2)字符串型參數(shù)的判斷當(dāng)輸入的參數(shù)XX為字符串時(shí),通常show.asp中SQL語句原貌大致如下:select*from表名where字段='XX',所以可以用以下步驟測試SQL注入是否存在。①http://localhost/show.asp?id=XX'(附加一個(gè)單引號(hào)),此時(shí)show.asp中的SQL語句變成了select*from表名where字段=XX',show.asp運(yùn)行異常;②http://localhost/show.asp?id=XX'or'1'='1,show.asp運(yùn)行正常,而且與http://localhost/show.asp?id=XX運(yùn)行結(jié)果相同;③http://localhost/show.asp?id=XX'and'1'='2,show.asp運(yùn)行異常;如果以上三步全面滿足,show.asp中一定存在SQL注入漏洞。15.2.4SQL注入攻擊(2)字符串型參數(shù)的判斷8315.2.4SQL注入攻擊(3)特殊情況的處理有時(shí)程序員會(huì)在程序過濾掉單引號(hào)等字符,以防止SQL注入。此時(shí)可以用以下幾種方法嘗試注入。①大小定混合法:由于ASP并不區(qū)分大小寫,而程序員在過濾時(shí)通常要么全部過濾大寫字符串,要么全部過濾小寫字符串,而大小寫混合往往會(huì)被忽視。如用SelecT代替select,SELECT等。②UNICODE法:在IIS中,以UNICODE字符集實(shí)現(xiàn)國際化,我們完全可以IE中輸入的字符串化成UNICODE字符串進(jìn)行輸入。如+=%2B,空格=%20等。③ASCII碼法:可以把輸入的部分或全部字符全部用ASCII碼代替,如U=chr(85),a=chr(97)等。圖15.3描述了正常情況下訪問一個(gè)網(wǎng)頁的界面,圖15.4是在URL后追加and1=1時(shí)訪問這個(gè)網(wǎng)頁的界面、圖15.5是1=2時(shí)訪問這個(gè)網(wǎng)頁的界面。由此可以確定該頁面存在SQL注入漏洞。15.2.4SQL注入攻擊(3)特殊情況的處理8415.2.4SQL注入攻擊15.2.4SQL注入攻擊8515.2.4SQL注入攻擊15.2.4SQL注入攻擊8615.2.4SQL注入攻擊15.2.4SQL注入攻擊8715.3數(shù)據(jù)庫攻擊的防范措施從上一節(jié)可以看出針對數(shù)據(jù)庫攻擊有各種各樣的攻擊,本章來講述針對于上述攻擊的防范措施。由于目前互聯(lián)網(wǎng)上SQL攻擊比較多,并且危害比較大,所以本節(jié)重點(diǎn)講述如何防范SQL攻擊。15.3數(shù)據(jù)庫攻擊的防范措施從上一節(jié)可以看出針對數(shù)據(jù)庫攻擊8815.3.1數(shù)據(jù)庫攻擊防范概述數(shù)據(jù)庫系統(tǒng)的安全除依賴自身內(nèi)部的安全機(jī)制外,還與外部網(wǎng)絡(luò)環(huán)境、應(yīng)用環(huán)境、從業(yè)人員素質(zhì)等因素息息相關(guān),因此,從廣義上講,數(shù)據(jù)庫系統(tǒng)的安全框架如前所述可以劃分為5個(gè)層次,這里主要講其中的三個(gè)層次:(1)網(wǎng)絡(luò)層安全 從廣義上講,數(shù)據(jù)庫的安全首先依賴于網(wǎng)絡(luò)系統(tǒng)。隨著Internet的發(fā)展和普及,越來越多的公司將其核心業(yè)務(wù)向互聯(lián)網(wǎng)轉(zhuǎn)移,各種基于網(wǎng)絡(luò)的數(shù)據(jù)庫應(yīng)用系統(tǒng)如雨后春筍般涌現(xiàn)出來,面向網(wǎng)絡(luò)用戶提供各種信息服務(wù)。可以說網(wǎng)絡(luò)系統(tǒng)是數(shù)據(jù)庫應(yīng)用的外部環(huán)境和基礎(chǔ),數(shù)據(jù)庫系統(tǒng)要發(fā)揮其強(qiáng)大作用離不開網(wǎng)絡(luò)系統(tǒng)的支持,數(shù)據(jù)庫系統(tǒng)的用戶(如異地用戶、分布式用戶)也要通過網(wǎng)絡(luò)才能訪問數(shù)據(jù)庫的數(shù)據(jù)。網(wǎng)絡(luò)系統(tǒng)的安全是數(shù)據(jù)庫安全的第一道屏障,外部入侵首先就是從入侵網(wǎng)絡(luò)系統(tǒng)開始的。 從技術(shù)角度講,網(wǎng)絡(luò)系統(tǒng)層次的安全防范技術(shù)有很多種,大致可以分為防火墻、入侵檢測、VPN技術(shù)等。15.3.1數(shù)據(jù)庫攻擊防范概述數(shù)據(jù)庫系統(tǒng)的安全除依賴自身內(nèi)8915.3.1數(shù)據(jù)庫攻擊防范概述(2)操作系統(tǒng)層安全操作系統(tǒng)是大型數(shù)據(jù)庫系統(tǒng)的運(yùn)行平臺(tái),為數(shù)據(jù)庫系統(tǒng)提供一定程度的安全保護(hù)。目前操作系統(tǒng)平臺(tái)大多數(shù)集中在WindowsNT和Unix,安全級別通常為C1、C2級。主要安全技術(shù)有操作系統(tǒng)安全策略、安全管理策略、數(shù)據(jù)安全等方面。操作系統(tǒng)安全策略用于配置本地計(jì)算機(jī)的安全設(shè)置,包括密碼策略、賬戶鎖定策略、審核策略、IP安全策略、用戶權(quán)利指派、加密數(shù)據(jù)的恢復(fù)代理以及其它安全選項(xiàng)。具體可以體現(xiàn)在用戶賬戶、口令、訪問權(quán)限、審計(jì)等方面。15.3.1數(shù)據(jù)庫攻擊防范概述(2)操作系統(tǒng)層安全9015.3.1數(shù)據(jù)庫攻擊防范概述(3)數(shù)據(jù)庫管理系統(tǒng)層安全數(shù)據(jù)庫系統(tǒng)的安全性很大程度上依賴于數(shù)據(jù)庫管理系統(tǒng)。如果數(shù)據(jù)庫管理系統(tǒng)安全機(jī)制非常強(qiáng)大,則數(shù)據(jù)庫系統(tǒng)的安全性能就較好。目前市場上流行的是關(guān)系式數(shù)據(jù)庫管理系統(tǒng),其安全性功能很弱,這就導(dǎo)致數(shù)據(jù)庫系統(tǒng)的安全性存在一定的威脅。由于數(shù)據(jù)庫系統(tǒng)在操作系統(tǒng)下都是以文件形式進(jìn)行管理的,因此入侵者可以直接利用操作系統(tǒng)的漏洞竊取數(shù)據(jù)庫文件,或者直接利用OS工具來非法偽造、篡改數(shù)據(jù)庫文件內(nèi)容。這種隱患一般數(shù)據(jù)庫用戶難以察覺,分析和堵塞這種漏洞被認(rèn)為是B2級的安全技術(shù)措施。15.3.1數(shù)據(jù)庫攻擊防范概述(3)數(shù)據(jù)庫管理系統(tǒng)層安全9115.3.1數(shù)據(jù)庫攻擊防范概述數(shù)據(jù)庫管理系統(tǒng)層次安全技術(shù)主要是用來解決這一問題,即當(dāng)前面兩個(gè)層次已經(jīng)被突破的情況下仍能保障數(shù)據(jù)庫數(shù)據(jù)的安全,這就要求數(shù)據(jù)庫管理系統(tǒng)必須有一套強(qiáng)有力的安全機(jī)制。解決這一問題的有效方法之一是數(shù)據(jù)庫管理系統(tǒng)對數(shù)據(jù)庫文件進(jìn)行加密處理,使得即使數(shù)據(jù)不幸泄露或者丟失,也難以被人破譯和閱讀。以上這三個(gè)層次構(gòu)筑成數(shù)據(jù)庫系統(tǒng)的安全體系,與數(shù)據(jù)安全的關(guān)系是逐步緊密的,防范的重要性也逐層加強(qiáng),從外到內(nèi)、由表及里保證數(shù)據(jù)的安全。15.3.1數(shù)據(jù)庫攻擊防范概述數(shù)據(jù)庫管理系統(tǒng)層次安全技術(shù)主9215.3.2SQL注入攻擊的防范隨著一些自動(dòng)化注入攻擊的出現(xiàn),目前針對Web應(yīng)用的SQL注入攻擊越來越普遍,技術(shù)也在不斷翻新。但是SQL注入的基本原理還是通過構(gòu)造畸形的SQL語句,繞過認(rèn)證系統(tǒng)獲得敏感信息。然而為了使用Web服務(wù)器和數(shù)據(jù)庫服務(wù)器的功能,實(shí)現(xiàn)信息交互的目的就不可避免的暴露一些可以被攻擊者非法利用的安全缺陷。如何采取有效的措施阻止內(nèi)部信息泄露,將系統(tǒng)的安全威脅降至最低是防護(hù)的關(guān)鍵。這需要從配置Web服務(wù)器、配置數(shù)據(jù)庫和編寫安全代碼等多方面著手,加強(qiáng)系統(tǒng)安全性。15.3.2SQL注入攻擊的防范隨著一些自動(dòng)化注入攻擊的出9315.3.2SQL注入攻擊的防范1.Web服務(wù)器的安全配置由于Web服務(wù)器龐大而復(fù)雜的結(jié)構(gòu),使得Web服務(wù)器在安全方面難免存在缺陷漏洞。正確配置Web服務(wù)器可以與有效降低SQL注入的風(fēng)險(xiǎn)。(1)修改服務(wù)器初始配置服務(wù)器在安裝時(shí)會(huì)添加默認(rèn)的用戶和默認(rèn)口令,開啟默認(rèn)的連接端口等,這些都會(huì)給攻擊者留下入侵的可能。在安裝完成后應(yīng)該及時(shí)刪除默認(rèn)的賬號(hào)或者修改默認(rèn)登錄名的權(quán)限。關(guān)閉所有服務(wù)端口后,再開啟需要使用的端口。(2)及時(shí)安裝服務(wù)器安全補(bǔ)丁及時(shí)對服務(wù)器模塊進(jìn)行必要的更新,特別是官方提供的有助于提高系統(tǒng)安全性的補(bǔ)丁包。使服務(wù)器保持最新的補(bǔ)丁包,運(yùn)行穩(wěn)定的版本。15.3.2SQL注入攻擊的防范1.Web服務(wù)器的安全配9415.3.2SQL注入攻擊的防范(3)關(guān)閉服務(wù)器的錯(cuò)誤提示信息錯(cuò)誤提示信息對于調(diào)試中的應(yīng)用程序有著很重要的作用,但是當(dāng)Web應(yīng)用一旦發(fā)布,這些錯(cuò)誤提示信息就應(yīng)該被關(guān)閉。詳細(xì)的錯(cuò)誤信息也會(huì)讓攻擊者獲得很多重要信息。自行設(shè)置一種錯(cuò)誤提示信息,即所有錯(cuò)誤都只返回同一條錯(cuò)誤消息,讓攻擊無法獲得有價(jià)值的信息。(4)配置目錄權(quán)限對于Web應(yīng)用程序所在的目錄可以設(shè)置其為只讀的。通過客戶端上傳的文件單獨(dú)存放,并設(shè)置為沒有可執(zhí)行權(quán)限,并且不在允許Web訪問的目錄下存放機(jī)密的系統(tǒng)配置文件。這樣是為了防止注入攻擊者上傳惡意文件,例如Webshell等等。15.3.2SQL注入攻擊的防范(3)關(guān)閉服務(wù)器的錯(cuò)誤提9515.3.2SQL注入攻擊的防范(5)刪除危險(xiǎn)的服務(wù)器組件有些服務(wù)器組件會(huì)為系統(tǒng)管理員提供方便的配置途徑,比如通過Web頁面配置服務(wù)器和數(shù)據(jù)庫、運(yùn)行系統(tǒng)命令等等。但是這些組件可能被惡意用戶加以利用,從而對服務(wù)器造成更嚴(yán)重的威脅。為安全起見,應(yīng)當(dāng)及時(shí)刪除這樣的服務(wù)器組件。(6)及時(shí)分析系統(tǒng)日志將服務(wù)器程序的日志存放在安全目錄中,定期對日志文件進(jìn)行分析,一邊第一時(shí)間發(fā)現(xiàn)入侵。但是日志分析只是一種被動(dòng)的防御手段,只能分析和鑒別入侵行為的存在,但是對于正在發(fā)生的入侵無法做出有效的防范。15.3.2SQL注入攻擊的防范(5)刪除危險(xiǎn)的服務(wù)器組9615.3.2SQL注入攻擊的防范2.數(shù)據(jù)庫的安全配置(1)修改數(shù)據(jù)庫初始配置數(shù)據(jù)庫系統(tǒng)在安裝時(shí)會(huì)添加默認(rèn)的用戶和默認(rèn)口令等,例如MySQL安裝過程中默認(rèn)密碼為空的root賬號(hào)。這些都會(huì)給攻擊者留下入侵的可能。在安裝完成后應(yīng)該及時(shí)刪除默認(rèn)的賬號(hào)或者修改默認(rèn)登錄名的權(quán)限。(2)及時(shí)升級數(shù)據(jù)庫及時(shí)對數(shù)據(jù)庫模塊進(jìn)行必要的更新,特別是官方提供的有助于提高數(shù)據(jù)庫系統(tǒng)安全性的補(bǔ)丁包,可以解決已知的數(shù)據(jù)庫漏洞問題。(3)最小權(quán)利法則Web應(yīng)用程序連接數(shù)據(jù)庫的賬戶只擁有必要的權(quán)限,這有助于保護(hù)整個(gè)系統(tǒng)盡可能少的受到入侵。用不同的用戶賬戶執(zhí)行查詢、插入、刪除等操作,可以防止用于執(zhí)行SELECT的情況下,被惡意插入執(zhí)行INSERT、UPDATE或者DELETE語句。15.3.2SQL注入攻擊的防范2.數(shù)據(jù)庫的安全配置9715.3.2SQL注入攻擊的防范3.腳本解析器安全設(shè)置對于PHP編程語言,在php.ini文件中可以配置一些涉及安全性的設(shè)置,通過這些設(shè)置可以增加SQL的注入難度,降低SQL注入風(fēng)險(xiǎn):(1)設(shè)置“magic_quotes_gpc”為“on”該選項(xiàng)是可以將一些輸入的特殊字符自動(dòng)轉(zhuǎn)義。(2)設(shè)置“register_globals”為“off”“register_globals”選項(xiàng)來設(shè)置啟用/禁止PHP為用戶輸入創(chuàng)建全局變量,設(shè)置為off表示:如果用戶提交表單變量"a",PHP不會(huì)創(chuàng)建"&a",而只會(huì)創(chuàng)建_GET['a']或者_(dá)POSTVARS['a']。15.3.2SQL注入攻擊的防范3.腳本解析器安全設(shè)置9815.3.2SQL注入攻擊的防范(3)設(shè)置“safe_mode”為“on”打開這個(gè)選項(xiàng)會(huì)增加幾條限制:限制指定命令可以執(zhí)行、限制指定函數(shù)可以使用

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論