楊鑫
摘要:利用緩沖區(qū)溢出漏洞對計算機系統(tǒng)實施攻擊,是黑客常用、并且最有效的攻擊手法之一。為了應對不斷涌現(xiàn)的緩沖區(qū)溢出攻擊,研究了在Linux系統(tǒng)下防范緩沖區(qū)溢出的方法,通過研究,總結了在Linux平臺下防范緩沖區(qū)溢出攻擊的安全策略,這些安全策略可以應用于一般企業(yè)內(nèi)部服務器,包括web服務器、mail服務器、samba服務器、ftp服務器以及proxy服務器等。在實際使用中,發(fā)現(xiàn)通過這些安全策略的配置能夠?qū)彌_區(qū)溢出攻擊起到很好的防范措施。
Abstract: Using computer system overflow vulnerability to carry out attacks is one of the common and the most effective attack techniques for hackers. In order to deal with the emerging buffer overflow attack, we come up with some solutions against this problem under Linux system. Through the study, we summarize the security strategy against the overflow buffer attack, which can be applied to general enterprise internal server, including web server, mail server, samba server, FTP server and proxy server, etc. In actual use, we can see it is very good to prevent the attack through these security setup.
關鍵字:Linux 緩沖區(qū)溢出 攻擊
Key Word: Linux, buffer overflow, attack
第一次大規(guī)模的緩沖區(qū)溢出攻擊發(fā)生在1988年的Morris蠕蟲,它造成了6000多臺機器癱瘓,損失在$100000至$10000000之間。緩沖區(qū)溢出攻擊已經(jīng)占了網(wǎng)絡攻擊的絕大多數(shù)。據(jù)統(tǒng)計,大約80%的安全事件與緩沖區(qū)溢出攻擊有關。
緩沖區(qū)溢出漏洞已成為一個困擾了安全專家的難題。簡單來說,它是由于編程機制而導致的、在軟件中出現(xiàn)的內(nèi)存錯誤。這樣的內(nèi)存錯誤使得黑客可以運行一段惡意代碼來破壞系統(tǒng)正常地運行,甚至獲得整個系統(tǒng)的控制權。
在對計算機系統(tǒng)安全的研究中,有一種系統(tǒng)安全漏洞引起了我們的關注。一方面是由于這種安全漏洞的廣泛性--幾乎使所有的操作系統(tǒng)平臺都受到影響。另一方面,我們?yōu)楹诳突诖祟惏踩┒此帉懙墓舫绦虻碾[蔽性和強大威力所吸引。這就是緩沖區(qū)溢出技術。它可以使看似安全的,正在運行常規(guī)服務(如 DNS、ftpd等)的主機在幾秒鐘內(nèi)失去控制權。在當前CERT和CIAC等發(fā)布的Internet安全事件報告中, 緩沖區(qū)溢出已成為常見的用語。緩沖區(qū)溢出攻擊的目的在于擾亂具有某些特權運行的程序的功能。這樣可以讓攻擊者取得程序的控制權,如果該程序具有足夠的權限,那么整個主機就被控制了。
為了應對不斷涌現(xiàn)的緩沖區(qū)溢出攻擊,我們研究了在Linux系統(tǒng)下防范緩沖區(qū)溢出的方法,之所以選擇Linux平臺,主要有兩方面的原因:(1)Linux是一個開放源碼的平臺,有利于我們在研究的過程中深入技術細節(jié),由于Linux及其上面的大量應用都是基于開放源碼,有很多黑客在其上進行了大量的工作,可以說Linux上的網(wǎng)絡攻擊水平代表了整個網(wǎng)絡攻擊的最高水平。(2)Linux是一個類Unix系統(tǒng),同時也是在Internet中大量使用的操作系統(tǒng)平臺,選擇Linux作為研究緩沖區(qū)溢出技術的平臺是非常具有代表性的,在Linux平臺上取得的經(jīng)驗可以非常容易地移植到其他Unix或者類Unix平臺上。
在Linux出現(xiàn)之初,由于其最初的優(yōu)秀設計,似乎具有先天病毒免疫能力,所以當時有許多人相信不會有針對Linux的病毒出現(xiàn),但是 Linux終于也不能例外。1996年秋,澳大利亞一個叫VLAD的組織用匯編語言編寫了據(jù)稱是Linux系統(tǒng)下的第一個病毒的Staog,它專門感染二進制文件,并通過三種方式去嘗試得到root權限。當然,設計Staog病毒只是為了演示和證明Linux有被病毒感染的潛在危險,它并沒有對感染的系統(tǒng)進行任何損壞行動。
2001年,一個名為Ramen的Linux蠕蟲病毒出現(xiàn)了。Ramen病毒可以自動傳播,無需人工干預,雖然它沒有對服務器進行任何破壞,但是它在傳播時的掃描行為會消耗大量的網(wǎng)絡帶寬。Ramen病毒是利用了Linux某些版本(Redhat6.2和 7.0)的rpc.statd和wu-ftp這兩個安全漏洞進行傳播的。同年的另一個針對Linux的蠕蟲病毒Lion則造成了實際的危害。其它Linux平臺下病毒還有OSF.8759、Slapper、Scalper、Unux.Svat和BoxPoison等,當然,大多數(shù)普通的Linux用戶幾乎沒有遇到過它們。這是因為直到目前,Linux上的病毒還非常少,影響的范圍也很小。但隨著Linux用戶的增加,越來越多的Linux系統(tǒng)連接到局域網(wǎng)和廣域網(wǎng)上,自然增加了受攻擊的可能,可以預見到會有越來越多的Linux病毒出現(xiàn),因此如何防范Linux病毒就成為每個Linux用戶現(xiàn)在就應該開始注意的事情了。
隨著現(xiàn)代網(wǎng)絡技術的發(fā)展和網(wǎng)絡應用的深入,計算機網(wǎng)絡所提供的遠程登錄機制、遠程調(diào)用及執(zhí)行機制是必須的。這使得一個匿名的Internet用戶有機會利用緩沖區(qū)溢出漏洞來獲得某個系統(tǒng)的部分或全部控制權。實際上,以緩沖區(qū)溢出漏洞為攻擊手段的攻擊占了遠程網(wǎng)絡攻擊中的絕大多數(shù),這給Linux系統(tǒng)帶來了極其嚴重的安全威脅。
攻擊途徑
通常情況下攻擊者會先攻擊root程序,然后利用緩沖區(qū)溢出時發(fā)生的內(nèi)存錯誤來執(zhí)行類似“exec(sh)”的代碼,從而獲得root的一個Shell。為了獲得root權限的Shell,攻擊者需要完成如下的工作:在程序的地址空間內(nèi)安排適當?shù)奶囟ùa。一般使用如下兩種方法在被攻擊的程序地址空間內(nèi)安排攻擊代碼;通過適當?shù)爻跏蓟拇嫫骱痛鎯ζ鳎钩绦蛟诎l(fā)生緩沖區(qū)溢出時不能回到原來的執(zhí)行處,而是跳轉到被安排的地址空間執(zhí)行。
當攻擊者找到一種途徑可以變原程序的執(zhí)行代碼和流程時,攻擊的危險就產(chǎn)生了。
防范措施
Linux下的緩沖區(qū)溢出攻擊威脅既來自于軟件的編寫機制,也來自于Linux(和Unix)系統(tǒng)本身的特性。實際上,緩沖區(qū)溢出攻擊及各種計算機病毒猖獗的根本原因在于現(xiàn)代計算機系統(tǒng)都是采用馮.諾依曼“存儲程序”的工作原理。這一基本原理使得程序和數(shù)據(jù)都可以在內(nèi)存中被繁殖、拷貝和執(zhí)行。因此,要想有效地防范緩沖區(qū)溢出攻擊就應該從這兩個方面雙管其下。
確保代碼正確安全
緩沖區(qū)溢出攻擊的根源在于編寫程序的機制。因此,防范緩沖區(qū)溢出漏洞首先應該確保在Linux系統(tǒng)上運行的程序(包括系統(tǒng)軟件和應用軟件)代碼的正確性,避免程序中有不檢查變量、緩沖區(qū)大小及邊界等情況存在。