如今,在病毒肆虐、黑客無(wú)處不在的網(wǎng)絡(luò)環(huán)境里,軟件的安全性已成為一個(gè)備受關(guān)注的話題。傳統(tǒng)的軟件安全性關(guān)注的主要在于權(quán)限與角色的管理,如訪問(wèn)控制,或是數(shù)據(jù)的機(jī)密性與完整性,如加密解密。但是一個(gè)軟件系統(tǒng)在應(yīng)用了這些安全措施之后就能確保其萬(wàn)無(wú)一失了嗎?答案似乎并不那么簡(jiǎn)單,其中一個(gè)重要(甚至可以說(shuō)致命)的問(wèn)題在于軟件系統(tǒng)中的漏洞。常常在一個(gè)看似牢不可破的系統(tǒng)中,僅僅是因?yàn)榇嬖谝粋€(gè)小小的漏洞,導(dǎo)致整個(gè)安全體系被黑客輕易地攻破,整個(gè)系統(tǒng)的控制權(quán)徹底喪失。
所謂漏洞,通常是指軟件中存在的一些bug,但這種bug又不同于普通軟件測(cè)試中的bug。普通軟件測(cè)試中的bug指的是功能性或邏輯性的錯(cuò)誤,如對(duì)話框彈出出錯(cuò)、系統(tǒng)執(zhí)行某功能失敗等。這些bug影響的只是用戶的使用體驗(yàn),并不對(duì)系統(tǒng)的安全構(gòu)成威脅。而軟件的安全漏洞指的是某些別有用心的用戶非正常的使用軟件,讓軟件執(zhí)行一些自己精心設(shè)計(jì)的惡意代碼,或解析畸形文件,當(dāng)軟件中存在安全漏洞的時(shí)候,程序的正常執(zhí)行流程被改變,從而達(dá)到獲取系統(tǒng)的控制權(quán)或竊取機(jī)密數(shù)據(jù)的目的。
數(shù)據(jù)庫(kù)系統(tǒng)是在操作系統(tǒng)平臺(tái)之上的最重要的系統(tǒng)軟件,數(shù)據(jù)庫(kù)系統(tǒng)的安全可以說(shuō)是十分重要的。曾經(jīng)有句話這樣說(shuō):如果網(wǎng)絡(luò)遍地是金錢,那么金錢就在數(shù)據(jù)庫(kù)服務(wù)器中。隨著無(wú)紙化業(yè)務(wù)環(huán)境的不斷擴(kuò)大,人們?cè)跀?shù)據(jù)庫(kù)中存儲(chǔ)著越來(lái)越多的敏感信息:銀行賬戶、醫(yī)療記錄、政府文件、軍事機(jī)密等等,數(shù)據(jù)庫(kù)系統(tǒng)就成為越來(lái)越有價(jià)值的攻擊目標(biāo),因此確保數(shù)據(jù)庫(kù)系統(tǒng)的安全也越來(lái)越重要。
作為一種大型的系統(tǒng)軟件,數(shù)據(jù)庫(kù)系統(tǒng)中也存在著各種各樣的安全漏洞,其中危害性較大的有緩沖區(qū)溢出、堆溢出和SQL注入等。
1.緩沖區(qū)溢出
緩沖區(qū)溢出是一種很常見(jiàn)也很古老的安全漏洞。早在上個(gè)世紀(jì)80年代,緩沖區(qū)溢出就已經(jīng)為人所知,但時(shí)至今日,大量的緩沖區(qū)溢出漏洞仍被發(fā)現(xiàn)。最的Morris蠕蟲(chóng)就是利用Unix系統(tǒng)上fingerd程序的緩沖區(qū)溢出漏洞。在Oracle 9i發(fā)布之初,Oarcle公司曾宣稱他的數(shù)據(jù)庫(kù)是“ unbreakable ”的,但不到幾個(gè)月的時(shí)間,就暴出Oracle 9i中oracle.exe、XDB等程序存在多個(gè)緩沖區(qū)溢出漏洞。
在C語(yǔ)言中最常見(jiàn)的緩沖區(qū)就是字符數(shù)組,而操縱字符數(shù)組的函數(shù)有g(shù)ets、strcpy、sprintf等。這些函數(shù)在執(zhí)行字符串拷貝的過(guò)程中沒(méi)有對(duì)字符串進(jìn)行長(zhǎng)度檢查,這樣就很容易發(fā)生超長(zhǎng)的字符串溢出緩沖區(qū)的情況。當(dāng)初這樣設(shè)計(jì)是出于效率的考慮,但現(xiàn)在看來(lái),這些函數(shù)的使用已成為C語(yǔ)言軟件脆弱的一個(gè)重要因素。如果程序員沒(méi)有良好的編程習(xí)慣,時(shí)刻注意函數(shù)調(diào)用過(guò)程中是否拷貝了超過(guò)緩沖區(qū)長(zhǎng)度的字符串,那么緩沖區(qū)溢出就不可避免。對(duì)于一個(gè)有緩沖區(qū)溢出漏洞的程序,當(dāng)普通用戶輸入超長(zhǎng)字符串時(shí),通常只會(huì)使該程序崩潰。例如對(duì)于下面一小段代碼:
以下是引用片段:
/* vulprog */
#include
int main(int argc , char * argv[])
{
char buff[8];
strcpy(buff, argv[1]);
}
如果用戶執(zhí)行 ./vulprog AAAAAAAAAAAAAAAA,在Linux上會(huì)出現(xiàn)段錯(cuò)誤,因?yàn)橛脩糨斎肓顺L(zhǎng)的字符串,除了填滿了緩沖區(qū),還覆蓋了其他一些程序正常退出所需要的數(shù)據(jù)。為了研究這個(gè)問(wèn)題,就需要了解Linux系統(tǒng)中進(jìn)程的內(nèi)存空間。
所謂漏洞,通常是指軟件中存在的一些bug,但這種bug又不同于普通軟件測(cè)試中的bug。普通軟件測(cè)試中的bug指的是功能性或邏輯性的錯(cuò)誤,如對(duì)話框彈出出錯(cuò)、系統(tǒng)執(zhí)行某功能失敗等。這些bug影響的只是用戶的使用體驗(yàn),并不對(duì)系統(tǒng)的安全構(gòu)成威脅。而軟件的安全漏洞指的是某些別有用心的用戶非正常的使用軟件,讓軟件執(zhí)行一些自己精心設(shè)計(jì)的惡意代碼,或解析畸形文件,當(dāng)軟件中存在安全漏洞的時(shí)候,程序的正常執(zhí)行流程被改變,從而達(dá)到獲取系統(tǒng)的控制權(quán)或竊取機(jī)密數(shù)據(jù)的目的。
數(shù)據(jù)庫(kù)系統(tǒng)是在操作系統(tǒng)平臺(tái)之上的最重要的系統(tǒng)軟件,數(shù)據(jù)庫(kù)系統(tǒng)的安全可以說(shuō)是十分重要的。曾經(jīng)有句話這樣說(shuō):如果網(wǎng)絡(luò)遍地是金錢,那么金錢就在數(shù)據(jù)庫(kù)服務(wù)器中。隨著無(wú)紙化業(yè)務(wù)環(huán)境的不斷擴(kuò)大,人們?cè)跀?shù)據(jù)庫(kù)中存儲(chǔ)著越來(lái)越多的敏感信息:銀行賬戶、醫(yī)療記錄、政府文件、軍事機(jī)密等等,數(shù)據(jù)庫(kù)系統(tǒng)就成為越來(lái)越有價(jià)值的攻擊目標(biāo),因此確保數(shù)據(jù)庫(kù)系統(tǒng)的安全也越來(lái)越重要。
作為一種大型的系統(tǒng)軟件,數(shù)據(jù)庫(kù)系統(tǒng)中也存在著各種各樣的安全漏洞,其中危害性較大的有緩沖區(qū)溢出、堆溢出和SQL注入等。
1.緩沖區(qū)溢出
緩沖區(qū)溢出是一種很常見(jiàn)也很古老的安全漏洞。早在上個(gè)世紀(jì)80年代,緩沖區(qū)溢出就已經(jīng)為人所知,但時(shí)至今日,大量的緩沖區(qū)溢出漏洞仍被發(fā)現(xiàn)。最的Morris蠕蟲(chóng)就是利用Unix系統(tǒng)上fingerd程序的緩沖區(qū)溢出漏洞。在Oracle 9i發(fā)布之初,Oarcle公司曾宣稱他的數(shù)據(jù)庫(kù)是“ unbreakable ”的,但不到幾個(gè)月的時(shí)間,就暴出Oracle 9i中oracle.exe、XDB等程序存在多個(gè)緩沖區(qū)溢出漏洞。
在C語(yǔ)言中最常見(jiàn)的緩沖區(qū)就是字符數(shù)組,而操縱字符數(shù)組的函數(shù)有g(shù)ets、strcpy、sprintf等。這些函數(shù)在執(zhí)行字符串拷貝的過(guò)程中沒(méi)有對(duì)字符串進(jìn)行長(zhǎng)度檢查,這樣就很容易發(fā)生超長(zhǎng)的字符串溢出緩沖區(qū)的情況。當(dāng)初這樣設(shè)計(jì)是出于效率的考慮,但現(xiàn)在看來(lái),這些函數(shù)的使用已成為C語(yǔ)言軟件脆弱的一個(gè)重要因素。如果程序員沒(méi)有良好的編程習(xí)慣,時(shí)刻注意函數(shù)調(diào)用過(guò)程中是否拷貝了超過(guò)緩沖區(qū)長(zhǎng)度的字符串,那么緩沖區(qū)溢出就不可避免。對(duì)于一個(gè)有緩沖區(qū)溢出漏洞的程序,當(dāng)普通用戶輸入超長(zhǎng)字符串時(shí),通常只會(huì)使該程序崩潰。例如對(duì)于下面一小段代碼:
以下是引用片段:
/* vulprog */
#include
int main(int argc , char * argv[])
{
char buff[8];
strcpy(buff, argv[1]);
}
如果用戶執(zhí)行 ./vulprog AAAAAAAAAAAAAAAA,在Linux上會(huì)出現(xiàn)段錯(cuò)誤,因?yàn)橛脩糨斎肓顺L(zhǎng)的字符串,除了填滿了緩沖區(qū),還覆蓋了其他一些程序正常退出所需要的數(shù)據(jù)。為了研究這個(gè)問(wèn)題,就需要了解Linux系統(tǒng)中進(jìn)程的內(nèi)存空間。

