第15章--數(shù)據(jù)庫系統(tǒng)安全.ppt_第1頁
第15章--數(shù)據(jù)庫系統(tǒng)安全.ppt_第2頁
第15章--數(shù)據(jù)庫系統(tǒng)安全.ppt_第3頁
第15章--數(shù)據(jù)庫系統(tǒng)安全.ppt_第4頁
第15章--數(shù)據(jù)庫系統(tǒng)安全.ppt_第5頁
免費預(yù)覽已結(jié)束,剩余48頁可下載查看

下載本文檔

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

文檔簡介

1、版權(quán)所有,盜版必糾,第15章 數(shù)據(jù)庫系統(tǒng)安全,李 劍 北京郵電大學(xué)信息安全中心 E-mail: 電話版權(quán)所有,盜版必糾,概論,隨著計算機技術(shù)的飛速發(fā)展,數(shù)據(jù)庫的應(yīng)用十分廣泛,深入到各個領(lǐng)域,但隨之而來產(chǎn)生了數(shù)據(jù)的安全問題。各種應(yīng)用系統(tǒng)的數(shù)據(jù)庫中大量數(shù)據(jù)的安全問題、敏感數(shù)據(jù)的防竊取和防篡改問題,越來越引起人們的高度重視。數(shù)據(jù)庫系統(tǒng)作為信息的聚集體,是計算機信息系統(tǒng)的核心部件,其安全性至關(guān)重要,關(guān)系到企業(yè)興衰、國家安全。因此,如何有效地保證數(shù)據(jù)庫系統(tǒng)的安全,實現(xiàn)數(shù)據(jù)的保密性、完整性和有效性,已經(jīng)成為業(yè)界人士探索研究的重要課題之一,本章就數(shù)據(jù)庫系統(tǒng)安全做討論。,版權(quán)所有,盜

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.3 SQL Serever的單字節(jié)溢出攻擊 15.2.4 SQL注入攻擊 15.3 數(shù)據(jù)庫攻擊的防范措施 15.3.1 數(shù)據(jù)庫攻擊防范概述 15.3.2 SQL注入攻擊的防范 思考題,版權(quán)所有,盜版必糾,15.1 數(shù)據(jù)庫系統(tǒng)安全概述,1. 數(shù)據(jù)庫安全的意義 數(shù)據(jù)庫是當今信息存儲的一個重要形式,數(shù)據(jù)庫系統(tǒng)已經(jīng)被廣泛的應(yīng)用與政府、軍事、金融等眾多領(lǐng)域。如果對與針對數(shù)據(jù)庫的攻擊不加以遏制,輕則干擾人們的日常生活,重則造成巨

3、大的經(jīng)濟損失,甚至威脅到國家的安全。研究數(shù)據(jù)庫安全的意義在于: (1) 目前的對數(shù)據(jù)庫的安全問題重視不足?,F(xiàn)在對于安全威脅的防范多集中在對于主機和操作系統(tǒng)的防護,例如配置防火墻和防病毒軟件,而對數(shù)據(jù)庫安全則關(guān)注甚少。 (2) 數(shù)據(jù)庫才是攻擊者的主要目標。目前的數(shù)據(jù)庫系統(tǒng)中存儲著大量的重要數(shù)據(jù),例如軍事機密、商業(yè)秘密、個人交易賬號和口令等等。大多數(shù)攻擊者的攻擊目標正是獲取這些秘密數(shù)據(jù)。 另外,從網(wǎng)絡(luò)攻擊者的角度來研究安全防御措施,通過分析與利用攻擊者的實施方法,把握攻擊者的心理,對網(wǎng)絡(luò)攻擊進行深入研究,提高安全檢測、主動防御的能力都具有重要意義。,版權(quán)所有,盜版必糾,15.1 數(shù)據(jù)庫系統(tǒng)安全概述

4、,2. 數(shù)據(jù)庫系統(tǒng)的安全威脅 根據(jù)違反數(shù)據(jù)庫安全性所導(dǎo)致的后果,安全威脅可以分為以下幾類: (1) 非授權(quán)的信息泄露:未獲授權(quán)的用戶有意或無意得到信息。通過對授權(quán)訪問的數(shù)據(jù)進行推導(dǎo)分析獲取非授權(quán)的信息。 (2) 非授權(quán)的數(shù)據(jù)修改:包括所有通過數(shù)據(jù)處理和修改而違反信息完整性的行為。但是非授權(quán)修改不一定會涉及到非授權(quán)的信息泄露,因為對于入侵者而言即使不讀出數(shù)據(jù)庫中的數(shù)據(jù)亦可以進行破壞。 (3) 拒絕服務(wù):包括會影響用戶訪問數(shù)據(jù)或使用資源的行為。,版權(quán)所有,盜版必糾,15.1 數(shù)據(jù)庫系統(tǒng)安全概述,3. 數(shù)據(jù)庫系統(tǒng)安全層次 數(shù)據(jù)庫系統(tǒng)的安全可以從以下五個層次來說明: (1) 物理層的安全性 數(shù)據(jù)庫所在

5、節(jié)點必須在物理上得到可靠的保護。 (2) 用戶層的安全性 哪些用戶可以使用數(shù)據(jù)庫,使用數(shù)據(jù)庫的哪些數(shù)據(jù)對象,具有什么樣的權(quán)限等。 (3) 操作系統(tǒng)層的安全性 數(shù)據(jù)庫所在的主機的操作系統(tǒng)的弱點將可能提供惡意攻擊數(shù)據(jù)庫的入口。 (4) 網(wǎng)絡(luò)層的安全性 Oracle 9i數(shù)據(jù)庫主要是面向網(wǎng)絡(luò)提供服務(wù),因此,網(wǎng)絡(luò)軟件的安全性和網(wǎng)絡(luò)數(shù)據(jù)傳輸?shù)陌踩灾陵P(guān)重要。 (5) 數(shù)據(jù)庫系統(tǒng)層的安全性 通過對用戶授予特定的訪問數(shù)據(jù)庫對象的權(quán)利的辦法來確保數(shù)據(jù)庫系統(tǒng)層的安全。,版權(quán)所有,盜版必糾,15.1 數(shù)據(jù)庫系統(tǒng)安全概述,4. 數(shù)據(jù)庫系統(tǒng)的安全需求 根據(jù)上述的數(shù)據(jù)庫安全威脅,提出相應(yīng)的數(shù)據(jù)庫安全需求: (1)防止非

6、法數(shù)據(jù)訪問 這是數(shù)據(jù)庫安全最關(guān)鍵的需求之一。數(shù)據(jù)庫管理系統(tǒng)必須根據(jù)用戶或應(yīng)用的授權(quán)來檢查訪問請求,以保證僅允許授權(quán)的用戶訪問數(shù)據(jù)庫。數(shù)據(jù)庫的訪問控制要比操作系統(tǒng)中的文件訪問控制復(fù)雜得多。首先,控制的對象有更細的粒度,例如表、記錄、屬性等;其次,數(shù)據(jù)庫中的數(shù)據(jù)是語義相關(guān)的,所以用戶可以不直接訪問數(shù)據(jù)項而間接獲取數(shù)據(jù)內(nèi)容。,版權(quán)所有,盜版必糾,15.1 數(shù)據(jù)庫系統(tǒng)安全概述,(2)防止推導(dǎo) 推導(dǎo)是指用戶通過授權(quán)訪問的數(shù)據(jù),經(jīng)過推導(dǎo)而得出的機密信息,而按照安全策略該用戶根本無權(quán)訪問機密信息。特別是在統(tǒng)計數(shù)據(jù)庫中,用戶容易從統(tǒng)計后的信息中推出某些個體信息。 (3)保證完整性 保證數(shù)據(jù)庫的完整性,即保證數(shù)

7、據(jù)庫不被非法修改,以及不會因為病毒、系統(tǒng)中的錯誤等導(dǎo)致存儲數(shù)據(jù)遭破壞。這種保護通過訪問控制、備份/恢復(fù)等安全機制共同實現(xiàn)。 保證數(shù)據(jù)的操作完整性,即在并發(fā)事務(wù)中保證數(shù)據(jù)庫中數(shù)據(jù)的邏輯一致性。數(shù)據(jù)庫庫管理系統(tǒng)中的并發(fā)管理器子系統(tǒng)負責(zé)實現(xiàn)操作的完整性。 保證數(shù)據(jù)的語言完整性,即在修改數(shù)據(jù)時保證新值在一定范圍內(nèi)以確保邏輯上的完整性。對數(shù)據(jù)值的約束通過完整性約束來描述??梢葬槍?shù)據(jù)庫來定義完整性約束(定義數(shù)據(jù)庫處于正確狀態(tài)的條件),也可以針對變換來定義完整性約束(定義修改數(shù)據(jù)庫時需要驗證的條件)。,版權(quán)所有,盜版必糾,15.1 數(shù)據(jù)庫系統(tǒng)安全概述,(4)審計和日志 為了保證數(shù)據(jù)庫中的數(shù)據(jù)安全,一般要求

8、數(shù)據(jù)庫管理系統(tǒng)能夠?qū)⑺袑?shù)據(jù)庫進行的操作記錄下來,以備事后的調(diào)查分析,追查入侵者或者發(fā)現(xiàn)系統(tǒng)漏洞。審計和日志是非常有效的威懾和事后追查、分析工具。 (5)標識和認證 標識和認證是數(shù)據(jù)庫的第一道防線,也是授權(quán)和審計的前提。 (6)多級保護 多級保護表示一個安全需求的集合。現(xiàn)實世界中很多應(yīng)用要求將數(shù)據(jù)劃分不同的秘密等級。同一記錄的不同字段可能劃分為不同的等級,甚至同一字段的不同值都會是不同的等級。在多級保護體系中,對于不同的數(shù)據(jù)項賦予不用的保密級別,然后根據(jù)數(shù)據(jù)項的密級給數(shù)據(jù)項的操作賦予不同的級別。在多級保護體系中,進一步的要求是研究如何賦予多數(shù)據(jù)項組成的集合一個恰當?shù)拿芗墶?shù)據(jù)的完整性和保密性

9、是通過賦予用戶權(quán)限來實現(xiàn)的,用戶只能訪問他所擁有的權(quán)限所對應(yīng)級別的數(shù)據(jù)。,版權(quán)所有,盜版必糾,15.1 數(shù)據(jù)庫系統(tǒng)安全概述,(7) 限界 限界的意義在于防止程序之間出現(xiàn)非授權(quán)的信息傳遞。信息傳遞出現(xiàn)在“授權(quán)通道”、“存儲通道”和“隱通道”中。授權(quán)通道通過授權(quán)的操作提供輸出信息。存儲通道是存儲區(qū),一個程序向其中存儲數(shù)據(jù),而其他程序可以讀取。隱通道指的是使用系統(tǒng)中并非設(shè)計用來通信的資源在主體間通信的信道。,版權(quán)所有,盜版必糾,15.2 針對數(shù)據(jù)庫系統(tǒng)的攻擊,數(shù)據(jù)庫系統(tǒng)是在操作系統(tǒng)平臺之上的最重要的系統(tǒng)軟件,數(shù)據(jù)庫系統(tǒng)的安全可以說是十分重要的。曾經(jīng)有句話這樣說:如果網(wǎng)絡(luò)遍地是金錢,那么金錢就在數(shù)據(jù)庫

10、服務(wù)器中。隨著無紙化業(yè)務(wù)環(huán)境的不斷擴大,人們在數(shù)據(jù)庫中存儲著越來越多的敏感信息:銀行賬戶、醫(yī)療記錄、政府文件、軍事機密等等,數(shù)據(jù)庫系統(tǒng)就成為越來越有價值的攻擊目標,因此確保數(shù)據(jù)庫系統(tǒng)的安全也越來越重要。 作為一種大型的系統(tǒng)軟件,數(shù)據(jù)庫系統(tǒng)中也存在著各種各樣的安全漏洞,其中危害性較大的有緩沖區(qū)溢出、堆溢出和SQL注入等。本小節(jié)將講述一些典型的針對數(shù)據(jù)庫系統(tǒng)的攻擊。,版權(quán)所有,盜版必糾,15.2.1 弱口令攻擊,弱口令是指口令強度過低,使非授權(quán)用戶容易在短時間內(nèi)通過猜解或者少量的列舉即可得到口令。弱口令會使非授權(quán)用戶獲得訪問數(shù)據(jù)庫的權(quán)限。這會造成機密數(shù)據(jù)泄露、損壞等嚴重后果。 出現(xiàn)弱口令的原因多是

11、在數(shù)據(jù)庫安裝和建立用戶信息的時候,數(shù)據(jù)庫管理員設(shè)置了統(tǒng)一且簡單的訪問口令,授權(quán)用戶也沒有及時修改默認口令。特別是在某些數(shù)據(jù)庫安裝的過程中,安裝程序會默認建立一個空白口令的特權(quán)用戶。,版權(quán)所有,盜版必糾,15.2.1 弱口令攻擊,下面是一個因為存在默認用戶名和口令的實例。在2005年的1月W32.Spybot.IVQ蠕蟲便是依靠空白口令的root用戶感染了數(shù)以千計的Windows MySQL服務(wù)器。 在MySQL的某些默認配置中,mysql.user表內(nèi)有4個默認條目:兩個條目用于root,兩個條目用于匿名賬戶。在主機build上,有一個用于賬戶root具有root特權(quán)的遠程條目。 如果在本地主

12、機上,可以用空白口令以root特權(quán)進行身份驗證,則可以全面控制數(shù)據(jù)庫。 如果在本地主機上,可以用任何用戶進行身份驗證,則可以guest權(quán)限訪問數(shù)據(jù)庫。,版權(quán)所有,盜版必糾,15.2.1 弱口令攻擊,如果在被稱為build的遠程主機上,可以用任何用戶進行身份驗證,則可以以guest權(quán)限訪問數(shù)據(jù)庫。 在Windows主機上,root賬戶的存在使得任何本地用戶都可以將其自己提升到本地系統(tǒng)級訪問權(quán)限,因為MySQL默認以SYSTEM運行。而且,如果攻擊者簡單地將他的主機命名為build,MySQL服務(wù)一旦啟動,他就具有了對主機的遠程系統(tǒng)級的訪問權(quán)限。 針對這一問題最好的保護是采取以下措施: (1) 安

13、裝MySQL是禁止網(wǎng)絡(luò)訪問(拔掉網(wǎng)線或者應(yīng)用全部防火墻規(guī)則)。 (2) 在安裝之后,應(yīng)立刻刪除mysql.user表內(nèi)除了本地主機(localhost)root賬戶之外的所有賬戶。 (3) 為本地主機的root賬戶設(shè)置復(fù)雜的口令。,版權(quán)所有,盜版必糾,15.2.2 利用漏洞對數(shù)據(jù)庫發(fā)起的攻擊,數(shù)據(jù)庫廠商會發(fā)現(xiàn)自己產(chǎn)品中的某些安全問題,然后為自己的產(chǎn)品提供某些安全補丁,產(chǎn)品的版本隨之不斷升級。作為數(shù)據(jù)庫的用戶,如果不及時升級自己的數(shù)據(jù)庫,就會面臨安全威脅。下面以零長度字符串繞過MySQL身份驗證漏洞攻擊為例子,講解利用漏洞對數(shù)據(jù)庫的攻擊。,版權(quán)所有,盜版必糾,15.2.2 利用漏洞對數(shù)據(jù)庫發(fā)起的

14、攻擊,在MySQL5.0以前的版本中,MySQL通過下面語句: check_scramble_323(passwd, thd-scramble, (ulong *)acl_user_tmp-salt) = 0 來判斷用戶輸入的密碼是否正確,然而在check_scramble_323()函數(shù)內(nèi)可以看到: bool check_scramble_323(const char *scrambled, const char *message, ulong *hash_pass) while (*scrambled) if(*scrambled+ != (char)(*to+ extra) return

15、 1;/密碼錯誤 return 0; ,版權(quán)所有,盜版必糾,15.2.2 利用漏洞對數(shù)據(jù)庫發(fā)起的攻擊,這里,用戶可以指定一個其所需長度的字符串。在這個簡單的身份驗證中,如果指定長度為0的字符串。在最后的循環(huán)中,循環(huán)比較scrambled字符串和MySQL所得到的字符串的每個字符,直到scrambled字符串內(nèi)沒有字符為止。因為scrambled字符串長度為0,根本不會進行循環(huán)比較,所以驗證函數(shù)直接返回0,使得用戶以0長度字符串通過身份驗證。這是一個非常簡單的利用數(shù)據(jù)庫漏洞的例子。,版權(quán)所有,盜版必糾,15.2.3 SQL Serever的單字節(jié)溢出攻擊,SQL Server 2000會監(jiān)聽UD

16、P:1433端口,而且會對值為0 x02的單字節(jié)報文進行響應(yīng),返回關(guān)于SQL Server的信息。但是當單字節(jié)報文的值不是0 x02而是其他值時,SQL Server將會異常。會引起異常的值包括:0 x04,導(dǎo)致棧溢出發(fā)生;0 x08字符,會導(dǎo)致對溢出;0 x0A,會引發(fā)拒絕服務(wù)攻擊。 另外,在一些數(shù)據(jù)庫管理系統(tǒng),如WinMySQLAdmin在my.ini文件中以明文形式保存了MySQL的口令信息。使得非授權(quán)的本地用戶也可以訪問MySQL數(shù)據(jù)庫。,版權(quán)所有,盜版必糾,15.2.4 SQL注入攻擊,1. SQL注入攻擊原理 瀏覽器/服務(wù)器(B/S,Browser/Server,)結(jié)構(gòu)是互聯(lián)網(wǎng)興起

17、后的一種網(wǎng)絡(luò)結(jié)構(gòu)模式,這種模式統(tǒng)一了客戶端,將系統(tǒng)功能實現(xiàn)的核心部分集中到服務(wù)器上,簡化了系統(tǒng)的開發(fā)、維護和使用。B/S結(jié)構(gòu)由服務(wù)端、瀏覽器和通信協(xié)議三大部分組成。如下圖所示:,版權(quán)所有,盜版必糾,15.2.4 SQL注入攻擊,版權(quán)所有,盜版必糾,15.2.4 SQL注入攻擊,采用這種方式構(gòu)建的Web服務(wù),經(jīng)常受到SQL注入的攻擊。近幾年,針對Web服務(wù)數(shù)據(jù)庫的SQL注入攻擊非常多。SQL注入可導(dǎo)致數(shù)據(jù)庫系統(tǒng)中的普通用戶竊取機密數(shù)據(jù)、進行權(quán)限提升等,而這種攻擊方式又不需要太多計算機方面的知識,一般只要能熟練使用SQL語言即可,因此對數(shù)據(jù)庫的安全構(gòu)成了很大的威脅。另外,目前還有NBSI等SQL注

18、入工具,更使得對數(shù)據(jù)庫的安全受到巨大威脅。如圖15.2所示為合作NBSI SQL注入攻擊工具對某網(wǎng)站成功進行了攻擊,從圖中可以看出數(shù)據(jù)庫中的內(nèi)容。,版權(quán)所有,盜版必糾,15.2.4 SQL注入攻擊,版權(quán)所有,盜版必糾,15.2.4 SQL注入攻擊,許多Web應(yīng)用程序在編寫時沒有對用戶輸入數(shù)據(jù)的合法性進行檢驗,導(dǎo)致應(yīng)用程序通過用戶輸入的數(shù)據(jù)構(gòu)造SQL查詢語句時存在著安全隱患。SQL注入攻擊的基本思想就是在用戶輸入中注入一些額外的特殊字符或者SQL語句,使系統(tǒng)構(gòu)造出來的SQL語句在執(zhí)行時改變了查詢條件,或者附帶執(zhí)行了攻擊者注入的SQL語句。攻擊者根據(jù)程序返回的結(jié)果,獲得某些想知道的數(shù)據(jù),這就是所謂

19、的SQL注入。SQL注入攻擊源于英文“SQL Injection Attack” 。目前還沒有一種標準的定義,常見的是對這種攻擊形式、特點的描述。微軟技術(shù)中心從兩個方面進行了描述:,版權(quán)所有,盜版必糾,15.2.4 SQL注入攻擊,(1)腳本注入式的攻擊。 (2)惡意用戶輸入用來影響被執(zhí)行的SQL腳本。 由于SQL注入攻擊利用了SQL的語法,其針對的是基于數(shù)據(jù)的應(yīng)用程序當中的漏洞,這使得SQL注入攻擊具有廣泛性。理論上說,對于所有基于SQL語言標準的數(shù)據(jù)庫軟件都是有效的。一個簡單SQL注入攻擊的示例如下: 通過網(wǎng)頁提交數(shù)據(jù) id、password以驗證某個用戶的登陸信息; 然后通過服務(wù)器端的腳

20、本構(gòu)造如下的SQL查詢語句:,版權(quán)所有,盜版必糾,15.2.4 SQL注入攻擊,SELECT * FROM user WHERE ID = + id + AND PASSWORD =+password+ 如果用戶提交的id=abc,password=123系統(tǒng)會驗證是否有用戶名為abc,密碼為123的用戶存在,但是攻擊者會提交惡意的數(shù)據(jù): id = abc, password = OR 1=1 使得腳本語言構(gòu)造的SQL查詢語句變成: SELECT * FROM user WHERE ID = abc AND PASSWORD = OR 1=1 因為1=1恒為真,所以攻擊者就可以輕而易舉的繞過密

21、碼驗證。 目前易受到SQL注入攻擊的兩大系統(tǒng)平臺組合:MySQL+PHP和SQL Server+ ASP。其中MySQL和SQL Server是兩種SQL數(shù)據(jù)庫系統(tǒng),ASP和PHP是兩種服務(wù)端腳本語言,SQL注入攻擊正是由于服務(wù)器腳本程序存在漏洞造成的。,版權(quán)所有,盜版必糾,15.2.4 SQL注入攻擊,2. SQL注入攻擊的一般步驟 SQL注入攻擊的手法相當靈活,在碰到意外情況時需要構(gòu)造巧妙的SQL語句,從而成功獲取需要的數(shù)據(jù)??傮w來說,SQL注入攻擊有以下幾個步驟: (1) 發(fā)現(xiàn)SQL注入位置。 找到存在SQL注入漏洞的網(wǎng)頁地址,是開始SQL注入的一步。不同的URL地址帶有不同類型的參數(shù),

22、需要不同的方法來判斷。 (2) 判斷數(shù)據(jù)庫的類型。 不同廠商的數(shù)據(jù)庫管理系統(tǒng)的SQL語言雖然都基于標準的SQL語言,但是不同的產(chǎn)品對SQL的支持不盡相同,對SQL也有各自的擴展。而且不同的數(shù)據(jù)有不同的攻擊方法,必須要區(qū)別對待。,版權(quán)所有,盜版必糾,15.2.4 SQL注入攻擊,(3) 通過SQL注入獲取需要的數(shù)據(jù)。 獲得數(shù)據(jù)庫中的機密數(shù)據(jù)是SQL注入攻擊的主要目的。例如管理員的賬戶信息,登陸口令等等。 (4) 執(zhí)行其他的操作。 在取得數(shù)據(jù)庫的操作權(quán)限之后,攻擊者可能會采取進一步的攻擊,例如上傳木馬以獲取更高一級的系統(tǒng)控制權(quán)限,達到完全控制目標主機的目的。這部分內(nèi)容本文不做詳細討論。,版權(quán)所有,

23、盜版必糾,15.2.4 SQL注入攻擊,3. SQL注入漏洞的判斷 一般來說,SQL注入一般存在于形如:http:/localhost/show.asp?id=XX等帶有參數(shù)的動態(tài)網(wǎng)頁中,這些參數(shù)可能有一個或者多個,參數(shù)類型可能是數(shù)字型或者字符型。如果動態(tài)網(wǎng)頁帶有參數(shù)并且訪問數(shù)據(jù)庫,那么就有可能存在SQL注入。 以下以http:/localhost/show.asp?id=XX為例進行分析,XX可能是整型,也有可能是字符串。 (1) 整型參數(shù)的判斷 當輸入的參數(shù)XX為整型時,通常show.asp中SQL語句原貌大致如下: select * from 表名 where 字段=XX,所以可以用以下

24、步驟測試SQL注入是否存在。,版權(quán)所有,盜版必糾,15.2.4 SQL注入攻擊, http:/localhost/show.asp?id=XX(附加一個單引號),此時show.asp中的SQL語句變成了select * from 表名 where 字段=XX,show.asp運行異常; http:/localhost/show.asp?id=XX and 1=1, show.asp運行正常,而且與http:/localhost/show.asp?id=XX運行結(jié)果相同; http:/localhost/show.asp?id=XX and 1=2, show.asp運行異常; 如果以上三步全面

25、滿足,該腳本中一定存在SQL注入漏洞。,版權(quán)所有,盜版必糾,15.2.4 SQL注入攻擊,(2) 字符串型參數(shù)的判斷 當輸入的參數(shù)XX為字符串時,通常show.asp中SQL語句原貌大致如下: select * from 表名 where 字段=XX,所以可以用以下步驟測試SQL注入是否存在。 http:/localhost/show.asp?id=XX(附加一個單引號),此時show.asp中的SQL語句變成了select * from 表名 where 字段=XX, show.asp運行異常; http:/localhost/show.asp?id=XX or 1=1, show.asp運

26、行正常,而且與http:/localhost/show.asp?id=XX運行結(jié)果相同; http:/localhost/show.asp?id=XX and 1=2, show.asp運行異常; 如果以上三步全面滿足,show.asp中一定存在SQL注入漏洞。,版權(quán)所有,盜版必糾,15.2.4 SQL注入攻擊,(3) 特殊情況的處理 有時程序員會在程序過濾掉單引號等字符,以防止SQL注入。此時可以用以下幾種方法嘗試注入。 大小定混合法:由于ASP并不區(qū)分大小寫,而程序員在過濾時通常要么全部過濾大寫字符串,要么全部過濾小寫字符串,而大小寫混合往往會被忽視。如用SelecT代替select,SE

27、LECT等。 UNICODE法:在IIS中,以UNICODE字符集實現(xiàn)國際化,我們完全可以IE中輸入的字符串化成UNICODE字符串進行輸入。如+ =%2B,空格=%20 等。 ASCII碼法:可以把輸入的部分或全部字符全部用ASCII碼代替,如U=chr(85),a=chr(97)等。 圖15.3描述了正常情況下訪問一個網(wǎng)頁的界面,圖15.4是在URL后追加and 1=1時訪問這個網(wǎng)頁的界面、圖15.5是1=2時訪問這個網(wǎng)頁的界面。由此可以確定該頁面存在SQL注入漏洞。,版權(quán)所有,盜版必糾,15.2.4 SQL注入攻擊,版權(quán)所有,盜版必糾,15.2.4 SQL注入攻擊,版權(quán)所有,盜版必糾,1

28、5.2.4 SQL注入攻擊,版權(quán)所有,盜版必糾,15.3 數(shù)據(jù)庫攻擊的防范措施,從上一節(jié)可以看出針對數(shù)據(jù)庫攻擊有各種各樣的攻擊,本章來講述針對于上述攻擊的防范措施。由于目前互聯(lián)網(wǎng)上SQL攻擊比較多,并且危害比較大,所以本節(jié)重點講述如何防范SQL攻擊。,版權(quán)所有,盜版必糾,15.3.1 數(shù)據(jù)庫攻擊防范概述,數(shù)據(jù)庫系統(tǒng)的安全除依賴自身內(nèi)部的安全機制外,還與外部網(wǎng)絡(luò)環(huán)境、應(yīng)用環(huán)境、從業(yè)人員素質(zhì)等因素息息相關(guān),因此,從廣義上講,數(shù)據(jù)庫系統(tǒng)的安全框架如前所述可以劃分為5個層次,這里主要講其中的三個層次: (1)網(wǎng)絡(luò)層安全 從廣義上講,數(shù)據(jù)庫的安全首先依賴于網(wǎng)絡(luò)系統(tǒng)。隨著Internet的發(fā)展和普及,越來

29、越多的公司將其核心業(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ā)揮其強大作用離不開網(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ù)等。,版權(quán)所有,盜版必糾,15.3.1 數(shù)據(jù)庫攻擊防范概述,(2)操作系統(tǒng)層安全 操作系統(tǒng)是大型數(shù)據(jù)庫系統(tǒng)的運行平臺,為數(shù)據(jù)庫系統(tǒng)提供一定程度的安

30、全保護。目前操作系統(tǒng)平臺大多數(shù)集中在Windows NT和Unix,安全級別通常為C1、C2級。主要安全技術(shù)有操作系統(tǒng)安全策略、安全管理策略、數(shù)據(jù)安全等方面。 操作系統(tǒng)安全策略用于配置本地計算機的安全設(shè)置,包括密碼策略、賬戶鎖定策略、審核策略、IP安全策略、用戶權(quán)利指派、加密數(shù)據(jù)的恢復(fù)代理以及其它安全選項。具體可以體現(xiàn)在用戶賬戶、口令、訪問權(quán)限、審計等方面。,版權(quán)所有,盜版必糾,15.3.1 數(shù)據(jù)庫攻擊防范概述,(3)數(shù)據(jù)庫管理系統(tǒng)層安全 數(shù)據(jù)庫系統(tǒng)的安全性很大程度上依賴于數(shù)據(jù)庫管理系統(tǒng)。如果數(shù)據(jù)庫管理系統(tǒng)安全機制非常強大,則數(shù)據(jù)庫系統(tǒng)的安全性能就較好。目前市場上流行的是關(guān)系式數(shù)據(jù)庫管理系統(tǒng),

31、其安全性功能很弱,這就導(dǎo)致數(shù)據(jù)庫系統(tǒng)的安全性存在一定的威脅。 由于數(shù)據(jù)庫系統(tǒng)在操作系統(tǒng)下都是以文件形式進行管理的,因此入侵者可以直接利用操作系統(tǒng)的漏洞竊取數(shù)據(jù)庫文件,或者直接利用OS工具來非法偽造、篡改數(shù)據(jù)庫文件內(nèi)容。這種隱患一般數(shù)據(jù)庫用戶難以察覺,分析和堵塞這種漏洞被認為是B2級的安全技術(shù)措施。,版權(quán)所有,盜版必糾,15.3.1 數(shù)據(jù)庫攻擊防范概述,數(shù)據(jù)庫管理系統(tǒng)層次安全技術(shù)主要是用來解決這一問題,即當前面兩個層次已經(jīng)被突破的情況下仍能保障數(shù)據(jù)庫數(shù)據(jù)的安全,這就要求數(shù)據(jù)庫管理系統(tǒng)必須有一套強有力的安全機制。解決這一問題的有效方法之一是數(shù)據(jù)庫管理系統(tǒng)對數(shù)據(jù)庫文件進行加密處理,使得即使數(shù)據(jù)不幸泄

32、露或者丟失,也難以被人破譯和閱讀。 以上這三個層次構(gòu)筑成數(shù)據(jù)庫系統(tǒng)的安全體系,與數(shù)據(jù)安全的關(guān)系是逐步緊密的,防范的重要性也逐層加強,從外到內(nèi)、由表及里保證數(shù)據(jù)的安全。,版權(quán)所有,盜版必糾,15.3.2 SQL注入攻擊的防范,隨著一些自動化注入攻擊的出現(xiàn),目前針對Web應(yīng)用的SQL注入攻擊越來越普遍,技術(shù)也在不斷翻新。但是SQL注入的基本原理還是通過構(gòu)造畸形的SQL語句,繞過認證系統(tǒng)獲得敏感信息。然而為了使用Web服務(wù)器和數(shù)據(jù)庫服務(wù)器的功能,實現(xiàn)信息交互的目的就不可避免的暴露一些可以被攻擊者非法利用的安全缺陷。如何采取有效的措施阻止內(nèi)部信息泄露,將系統(tǒng)的安全威脅降至最低是防護的關(guān)鍵。這需要從配置

33、Web服務(wù)器、配置數(shù)據(jù)庫和編寫安全代碼等多方面著手,加強系統(tǒng)安全性。,版權(quán)所有,盜版必糾,15.3.2 SQL注入攻擊的防范,1. Web服務(wù)器的安全配置 由于Web服務(wù)器龐大而復(fù)雜的結(jié)構(gòu),使得Web服務(wù)器在安全方面難免存在缺陷漏洞。正確配置Web服務(wù)器可以與有效降低SQL注入的風(fēng)險。 (1) 修改服務(wù)器初始配置 服務(wù)器在安裝時會添加默認的用戶和默認口令,開啟默認的連接端口等,這些都會給攻擊者留下入侵的可能。在安裝完成后應(yīng)該及時刪除默認的賬號或者修改默認登錄名的權(quán)限。關(guān)閉所有服務(wù)端口后,再開啟需要使用的端口。 (2) 及時安裝服務(wù)器安全補丁 及時對服務(wù)器模塊進行必要的更新,特別是官方提供的有助

34、于提高系統(tǒng)安全性的補丁包。使服務(wù)器保持最新的補丁包,運行穩(wěn)定的版本。,版權(quán)所有,盜版必糾,15.3.2 SQL注入攻擊的防范,(3) 關(guān)閉服務(wù)器的錯誤提示信息 錯誤提示信息對于調(diào)試中的應(yīng)用程序有著很重要的作用,但是當Web應(yīng)用一旦發(fā)布,這些錯誤提示信息就應(yīng)該被關(guān)閉。詳細的錯誤信息也會讓攻擊者獲得很多重要信息。自行設(shè)置一種錯誤提示信息,即所有錯誤都只返回同一條錯誤消息,讓攻擊無法獲得有價值的信息。 (4) 配置目錄權(quán)限 對于Web應(yīng)用程序所在的目錄可以設(shè)置其為只讀的。通過客戶端上傳的文件單獨存放,并設(shè)置為沒有可執(zhí)行權(quán)限,并且不在允許Web訪問的目錄下存放機密的系統(tǒng)配置文件。這樣是為了防止注入攻擊

35、者上傳惡意文件,例如Webshell等等。,版權(quán)所有,盜版必糾,15.3.2 SQL注入攻擊的防范,(5) 刪除危險的服務(wù)器組件 有些服務(wù)器組件會為系統(tǒng)管理員提供方便的配置途徑,比如通過Web頁面配置服務(wù)器和數(shù)據(jù)庫、運行系統(tǒng)命令等等。但是這些組件可能被惡意用戶加以利用,從而對服務(wù)器造成更嚴重的威脅。為安全起見,應(yīng)當及時刪除這樣的服務(wù)器組件。 (6) 及時分析系統(tǒng)日志 將服務(wù)器程序的日志存放在安全目錄中,定期對日志文件進行分析,一邊第一時間發(fā)現(xiàn)入侵。但是日志分析只是一種被動的防御手段,只能分析和鑒別入侵行為的存在,但是對于正在發(fā)生的入侵無法做出有效的防范。,版權(quán)所有,盜版必糾,15.3.2 SQ

36、L注入攻擊的防范,2.數(shù)據(jù)庫的安全配置 (1) 修改數(shù)據(jù)庫初始配置 數(shù)據(jù)庫系統(tǒng)在安裝時會添加默認的用戶和默認口令等,例如MySQL安裝過程中默認密碼為空的root賬號。這些都會給攻擊者留下入侵的可能。在安裝完成后應(yīng)該及時刪除默認的賬號或者修改默認登錄名的權(quán)限。 (2) 及時升級數(shù)據(jù)庫 及時對數(shù)據(jù)庫模塊進行必要的更新,特別是官方提供的有助于提高數(shù)據(jù)庫系統(tǒng)安全性的補丁包,可以解決已知的數(shù)據(jù)庫漏洞問題。 (3) 最小權(quán)利法則 Web應(yīng)用程序連接數(shù)據(jù)庫的賬戶只擁有必要的權(quán)限,這有助于保護整個系統(tǒng)盡可能少的受到入侵。用不同的用戶賬戶執(zhí)行查詢、插入、刪除等操作,可以防止用于執(zhí)行SELECT的情況下,被惡意

37、插入執(zhí)行INSERT、UPDATE或者DELETE語句。,版權(quán)所有,盜版必糾,15.3.2 SQL注入攻擊的防范,3. 腳本解析器安全設(shè)置 對于PHP編程語言,在php.ini文件中可以配置一些涉及安全性的設(shè)置,通過這些設(shè)置可以增加SQL的注入難度,降低SQL注入風(fēng)險: (1) 設(shè)置“magic_quotes_gpc”為“on” 該選項是可以將一些輸入的特殊字符自動轉(zhuǎn)義。 (2) 設(shè)置“register_globals”為“off” “register_globals”選項來設(shè)置啟用/禁止PHP為用戶輸入創(chuàng)建全局變量,設(shè)置為off表示:如果用戶提交表單變量a,PHP不會創(chuàng)建 將用戶輸入的參數(shù)中

38、非整數(shù)部分去除。 (2) 簡單的字符和數(shù)字組合參數(shù)驗證 這是最常見的一種輸入允許條件,驗證這樣的數(shù)據(jù),正則表達式為:/w+$/。這將允許用戶輸入字母、數(shù)字和下劃線符號。,版權(quán)所有,盜版必糾,15.3.2 SQL注入攻擊的防范,(3) 包含特殊字符的參數(shù)的處理 目前網(wǎng)絡(luò)公認的SQL注入非法字符主要集中在:“”、“;”、“-”、“+”、“”、“%”、“=”等和一些特殊語句上面,如DELETE。在這些不應(yīng)該出現(xiàn)特殊字符的地方出現(xiàn)了非法字符就可以直接通過過濾阻止,目前通用的此類防范正則表達式為:(|and| |insert|select|delete|-|+|&|update|count|*|%|ch

39、r|mid|master|exec|char|declare)當然還要包括這些符號和字符的十進制和十六進制碼。這里還有些內(nèi)容沒有添加到表達式中,但是它可以隨系統(tǒng)和管理員的需要補充最新的特殊符號,以防止更新的注入攻擊形式。 (4) 限制用戶參數(shù)長度 所有字符串都必須限定為合適的長度。例如,用戶名無需使用256個字符。這樣可以減少惡意字符串的長度,能夠有效地阻止SQL注入攻擊的成功實施。,版權(quán)所有,盜版必糾,15.3.2 SQL注入攻擊的防范,5. 應(yīng)用存儲過程防范SQL注入攻擊 存儲過程是一組編譯在單個執(zhí)行計劃中的Transact-SQL語句,存儲過程是SQL語句和可選控制流語句的預(yù)編譯集合,以一個名稱存儲并作為一個單元處理。存儲過程存儲在數(shù)據(jù)庫內(nèi),可由應(yīng)用程序通過一個調(diào)用執(zhí)行,而且允許用戶聲明變量、有條件執(zhí)行以及其它強大的編程功能。存儲過程可包含程序流、邏輯以及對數(shù)據(jù)庫的查詢。它們可以接受參數(shù)、輸出參數(shù)、返回單個或多個結(jié)果集以及返回值。存儲過程幫助在不同的應(yīng)用程序之間實現(xiàn)一致的邏輯

溫馨提示

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

評論

0/150

提交評論