


如何防范Linux下緩沖區溢出攻擊
緩沖區溢出漏洞是一個困擾了安全專家30多年的難題。簡單來說,它是由于編程機制而導致的、在軟件中出現的內存錯誤。這樣的內存錯誤使得黑客可以運行一段惡意代碼來破壞系統正常地運行,甚至獲得整個系統的控制權。
Linux系統特性
利用緩沖區溢出改寫相關內存的內容及函數的返回地址,從而改變代碼的執行流程,僅能在一定權限范圍內有效。因為進程的運行與當前用戶的登錄權限和身份有關,僅僅能夠制造緩沖區溢出是無法突破系統對當前用戶的權限設置的。因此盡管可以利用緩沖區溢出使某一程序去執行其它被指定的代碼,但被執行的代碼只具有特定的權限,還是無法完成超越權限的任務。
但是,Linux(包括Unix)系統本身的一些特性卻可以被利用來沖破這種權限的局限性,使得能夠利用緩沖區溢出獲得更高的、甚至是完全的權限。主要體現在如下兩方面:
1.Linux(包括Unix)系統通過設置某可執行文件的屬性為SUID或SGID,允許其它用戶以該可執行文件擁有者的用戶ID或用戶組ID來執行它。如果該可執行文件的屬性是root,同時文件屬性被設置為SUID,則該可執行文件就存在可利用的緩沖區溢出漏洞,可以利用它以root的身份執行特定的、被另外安排的代碼。既然能夠使得一個具有root權限的代碼得以執行,就能夠產生一個具有超級用戶root權限的Shell,那么掌握整個系統的控制權的危險就產生了。
2.Linux(包括Unix)中的許多守護進程都是以root權限運行。如果這些程序存在可利用的緩沖區溢出,即可直接使它以root身份去執行另外安排的代碼,而無須修改該程序的SUID或SGID屬性。這樣獲得系統的控制權將更加容易。
隨著現代網絡技術的發展和網絡應用的深入,計算機網絡所提供的遠程登錄機制、遠程調用及執行機制是必須的。這使得一個匿名的Internet用戶有機會利用緩沖區溢出漏洞來獲得某個系統的部分或全部控制權。實際上,以緩沖區溢出漏洞為攻擊手段的攻擊占了遠程網絡攻擊中的絕大多數,這給Linux系統帶來了極其嚴重的安全威脅。
途徑分析
通常情況下攻擊者會先攻擊root程序,然后利用緩沖區溢出時發生的內存錯誤來執行類似“exec(sh)”的代碼,從而獲得root的一個Shell。為了獲得root權限的Shell,攻擊者需要完成如下的工作:
1.在程序的地址空間內安排適當的特定代碼。一般使用如下兩種方法在被攻擊的程序地址空間內安排攻擊代碼。
2.通過適當地初始化寄存器和存儲器,使程序在發生緩沖區溢出時不能回到原來的執行處,而是跳轉到被安排的地址空間執行。
當攻擊者找到一種途徑可以變原程序的執行代碼和流程時,攻擊的危險就產生了。
防范措施
Linux下的緩沖區溢出攻擊威脅既來自于軟件的編寫機制,也來自于Linux(和Unix)系統本身的特性。實際上,緩沖區溢出攻擊及各種計算機病毒猖獗的根本原因在于現代計算機系統都是采用馮?諾依曼“存儲程序”的工作原理。這一基本原理使得程序和數據都可以在內存中被繁殖、拷貝和執行。因此,要想有效地防范緩沖區溢出攻擊就應該從這兩個方面雙管其下。
確保代碼正確安全
緩沖區溢出攻擊的根源在于編寫程序的機制。因此,防范緩沖區溢出漏洞首先應該確保在Linux系統上運行的程序(包括系統軟件和應用軟件)代碼的正確性,避免程序中有不檢查變量、緩沖區大小及邊界等情況存在。比如,使用grep工具搜索源代碼中容易產生漏洞的庫調用,檢測變量的大小、數組的邊界、對指針變量進行保護,以及使用具有邊界、大小檢測功能的C編譯器等。
基于一定的安全策略設置系統
攻擊者攻擊某一個Linux系統,必須事先通過某些途徑對要攻擊的系統做必要的了解,如版本信息等,然后再利用系統的某些設置直接或間接地獲取控制權。因此,防范緩沖區溢出攻擊的第二個方面就是對系統設置實施有效的安全策略。這些策略種類很多,由于篇幅有限只列舉幾個典型措施:
(1)在裝有Telnet服務的情況下,通過手工改寫“/etc/inetd.conf”文件中的Telnet設置,使得遠程登錄的用戶無法看到系統的提示信息。具體方法是將Telnet設置改寫為:
telnet stream tcp nowait root /usr/sbin/tcpd/in.telnetd -h
末尾加上“-h”參數可以讓守護進程不顯示任何系統信息,只顯示登錄提示。
(2)改寫“rc.local”文件。默認情況下,當登錄Linux系統時系統運行rc.local文件,顯示該Lin
新文章:
- CentOS7下圖形配置網絡的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統后丟失windows啟動項
- CentOS單網卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網打印機IP講解
- CentOS7使用hostapd實現無AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網絡重啟出錯
- 解決Centos7雙系統后丟失windows啟動項
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統有什么不同呢
- Centos 6.6默認iptable規則詳解