楊鑫
摘要:利用緩沖區溢出漏洞對計算機系統實施攻擊,是黑客常用、并且最有效的攻擊手法之一。為了應對不斷涌現的緩沖區溢出攻擊,研究了在Linux系統下防范緩沖區溢出的方法,通過研究,總結了在Linux平臺下防范緩沖區溢出攻擊的安全策略,這些安全策略可以應用于一般企業內部服務器,包括web服務器、mail服務器、samba服務器、ftp服務器以及proxy服務器等。在實際使用中,發現通過這些安全策略的配置能夠對緩沖區溢出攻擊起到很好的防范措施。
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 緩沖區溢出 攻擊
Key Word: Linux, buffer overflow, attack
第一次大規模的緩沖區溢出攻擊發生在1988年的Morris蠕蟲,它造成了6000多臺機器癱瘓,損失在$100000至$10000000之間。緩沖區溢出攻擊已經占了網絡攻擊的絕大多數。據統計,大約80%的安全事件與緩沖區溢出攻擊有關。
緩沖區溢出漏洞已成為一個困擾了安全專家的難題。簡單來說,它是由于編程機制而導致的、在軟件中出現的內存錯誤。這樣的內存錯誤使得黑客可以運行一段惡意代碼來破壞系統正常地運行,甚至獲得整個系統的控制權。
在對計算機系統安全的研究中,有一種系統安全漏洞引起了我們的關注。一方面是由于這種安全漏洞的廣泛性--幾乎使所有的操作系統平臺都受到影響。另一方面,我們為黑客基于此類安全漏洞所編寫的攻擊程序的隱蔽性和強大威力所吸引。這就是緩沖區溢出技術。它可以使看似安全的,正在運行常規服務(如 DNS、ftpd等)的主機在幾秒鐘內失去控制權。在當前CERT和CIAC等發布的Internet安全事件報告中, 緩沖區溢出已成為常見的用語。緩沖區溢出攻擊的目的在于擾亂具有某些特權運行的程序的功能。這樣可以讓攻擊者取得程序的控制權,如果該程序具有足夠的權限,那么整個主機就被控制了。
為了應對不斷涌現的緩沖區溢出攻擊,我們研究了在Linux系統下防范緩沖區溢出的方法,之所以選擇Linux平臺,主要有兩方面的原因:(1)Linux是一個開放源碼的平臺,有利于我們在研究的過程中深入技術細節,由于Linux及其上面的大量應用都是基于開放源碼,有很多黑客在其上進行了大量的工作,可以說Linux上的網絡攻擊水平代表了整個網絡攻擊的最高水平。(2)Linux是一個類Unix系統,同時也是在Internet中大量使用的操作系統平臺,選擇Linux作為研究緩沖區溢出技術的平臺是非常具有代表性的,在Linux平臺上取得的經驗可以非常容易地移植到其他Unix或者類Unix平臺上。
在Linux出現之初,由于其最初的優秀設計,似乎具有先天病毒免疫能力,所以當時有許多人相信不會有針對Linux的病毒出現,但是 Linux終于也不能例外。1996年秋,澳大利亞一個叫VLAD的組織用匯編語言編寫了據稱是Linux系統下的第一個病毒的Staog,它專門感染二進制文件,并通過三種方式去嘗試得到root權限。當然,設計Staog病毒只是為了演示和證明Linux有被病毒感染的潛在危險,它并沒有對感染的系統進行任何損壞行動。
2001年,一個名為Ramen的Linux蠕蟲病毒出現了。Ramen病毒可以自動傳播,無需人工干預,雖然它沒有對服務器進行任何破壞,但是它在傳播時的掃描行為會消耗大量的網絡帶寬。Ramen病毒是利用了Linux某些版本(Redhat6.2和 7.0)的rpc.statd和wu-ftp這兩個安全漏洞進行傳播的。同年的另一個針對Linux的蠕蟲病毒Lion則造成了實際的危害。其它Linux平臺下病毒還有OSF.8759、Slapper、Scalper、Unux.Svat和BoxPoison等,當然,大多數普通的Linux用戶幾乎沒有遇到過它們。這是因為直到目前,Linux上的病毒還非常少,影響的范圍也很小。但隨著Linux用戶的增加,越來越多的Linux系統連接到局域網和廣域網上,自然增加了受攻擊的可能,可以預見到會有越來越多的Linux病毒出現,因此如何防范Linux病毒就成為每個Linux用戶現在就應該開始注意的事情了。
隨著現代網絡技術的發展和網絡應用的深入,計算機網絡所提供的遠程登錄機制、遠程調用及執行機制是必須的。這使得一個匿名的Internet用戶有機會利用緩沖區溢出漏洞來獲得某個系統的部分或全部控制權。實際上,以緩沖區溢出漏洞為攻擊手段的攻擊占了遠程網絡攻擊中的絕大多數,這給Linux系統帶來了極其嚴重的安全威脅。
攻擊途徑
通常情況下攻擊者會先攻擊root程序,然后利用緩沖區溢出時發生的內存錯誤來執行類似“exec(sh)”的代碼,從而獲得root的一個Shell。為了獲得root權限的Shell,攻擊者需要完成如下的工作:在程序的地址空間內安排適當的特定代碼。一般使用如下兩種方法在被攻擊的程序地址空間內安排攻擊代碼;通過適當地初始化寄存器和存儲器,使程序在發生緩沖區溢出時不能回到原來的執行處,而是跳轉到被安排的地址空間執行。
當攻擊者找到一種途徑可以變原程序的執行代碼和流程時,攻擊的危險就產生了。
防范措施
Linux下的緩沖區溢出攻擊威脅既來自于軟件的編寫機制,也來自于Linux(和Unix)系統本身的特性。實際上,緩沖區溢出攻擊及各種計算機病毒猖獗的根本原因在于現代計算機系統都是采用馮.諾依曼“存儲程序”的工作原理。這一基本原理使得程序和數據都可以在內存中被繁殖、拷貝和執行。因此,要想有效地防范緩沖區溢出攻擊就應該從這兩個方面雙管其下。
確保代碼正確安全
緩沖區溢出攻擊的根源在于編寫程序的機制。因此,防范緩沖區溢出漏洞首先應該確保在Linux系統上運行的程序(包括系統軟件和應用軟件)代碼的正確性,避免程序中有不檢查變量、緩沖區大小及邊界等情況存在。