class="152934">
來源:IBM
緩沖區溢出攻擊是目前安全最常用的攻擊手段之一,為了應對不斷湧現的緩沖區溢出攻擊,我們研究了在Linux系統下防范緩沖區溢出的方法,通過研究,總結了在Linux平台下防范緩沖區溢出攻擊的安全策略,這些安全策略可以應用於一般企業內部服務器,包括web服務器、mail服務器、samba服務器、ftp服務器以及proxy服務器等。在實際使用中,我們發現通過這些安全策略的配置能夠對緩沖區溢出攻擊起到很好的防范措施。
在對計算機系統安全的研究中,有一種系統安全漏洞引起了我們的關注。一方面是由於這種安全漏洞的廣泛性--幾乎使所有的操作系統平台都受到影響。另一方面,我們為安全基於此類安全漏洞所編寫的攻擊程序的隱蔽性和強大威力所吸引。這就是緩沖區溢出技術。它可以使看似安全的,正在運行常規服務(如;DNS、ftpd等)的主機在幾秒鐘內失去控制權。緩沖區溢出攻擊是目前安全最常用的攻擊手段。在當前CERT和CIAC等發布的Internet安全事件報告中,;緩沖區溢出已成為常見的用語。緩沖區溢出攻擊的目的在於擾亂具有某些特權運行的程序的功能。這樣可以讓攻擊者取得程序的控制權,如果該程序具有足夠的權限,那麼整個主機就被控制了。
為了應對不斷湧現的緩沖區溢出攻擊,我們研究了在Linux系統下防范緩沖區溢出的方法,之所以選擇Linux平台,主要有兩方面的原因:(1)Linux是一個開放源碼的平台,有利於我們在研究的過程中深入技術細節,由於Linux及其上面的大量應用都是基於開放源碼,有很多安全在其上進行了大量的工作,可以說Linux上的網絡攻擊水平代表了整個網絡攻擊的最高水平。(2)Linux是一個類Unix系統,同時也是在Internet中大量使用的操作系統平台,選擇Linux作為研究緩沖區溢出技術的平台是非常具有代表性的,在Linux平台上取得的經驗可以非常容易地移植到其他Unix或者類Unix平台上。
通過研究,我們總結了在Linux平台下防范緩沖區溢出的安全策略,這些安全策略可以應用於一般企業內部服務器,包括web服務器、mail服務器、samba服務器、ftp服務器以及proxy服務器等。我們所總結的這些安全策略如下所示:
不顯示系統提示信息
如果不想讓遠程登錄的用戶看到系統的提示信息,可以改變"/etc/inetd.conf"文件中的telnet設置:
telnet;stream;tcp;nowait;root;/usr/sbin/tcpd;in.telnetd;-h
在末尾加上"-h"參數可以讓daemon不顯示任何系統信息,只顯示登錄提示。當然,只有在服務器上裝了telnet服務器才有這樣做的必要。
處理"rc.local"文件
在默認情況下,當登錄裝有Linux系統的計算機時,系統會告訴你Linux發行版的名字、版本號、內核版本和服務器名稱。這洩露了太多的系統信息。出於安全的考慮,最好只顯示一個"Login:"的提示信息。處理方法如下:
(1)編輯"/etc/rc.d/rc.local"文件,在下面這些行的前面加上"#":
#;This;will;overwrite;/etc/issue;at;every;boot.;So,;make;any;changes;you
#;want;to;make;to;/etc/issue;here;or;you;will;lose;them;when;you;reboot.
#echo;"";>;/etc/issue
#echo;"$R";>>;/etc/issue
#echo;"Kernel;$(uname;-r);on;$a;$(uname;-m)";>>;/etc/issue
#
#cp;-f;/etc/issue;/etc/issue.net
#echo;>>;/etc/issue
(2)刪除"/etc"目錄下的"issue.net"和"issue"文件:
[root@snow]#;rm;-f;/etc/issue
[root@snow]#;rm;-f;/etc/issue.net
"/etc/issue.net"文件是用戶從網絡登錄計算機時(例如:telnet、SSH)看到的登錄提示。同樣在"/etc"目錄下還有一個"issue"文件,是用戶從本地登錄時看到的提示。這兩個文件都是文本文件,可以根據需要改變。但是,如果想刪掉這兩個文件,必須向上面介紹的那樣把"/etc/rc.d/rc.local"腳本中的那些行注釋掉,否則每次重新啟動的時候,系統又會重新創建這兩個文件。
禁止提供finger;服務
在Linux系統下,使用finger命令可以顯示本地或遠程系統中目前已登錄用戶的詳細信息,安全可以利用這些信息,增大侵入系統的機會。為了系統的安全,最好禁止提供finger服務,即從/usr/bin下刪除finger;命令。如果要保留;finger服務,應將finger文件換名,或修改其權限,使得只允許root用戶執行finger命令。
處理"inetd.conf"文件
inetd也叫作"超級服務器",其作用是根據網絡請求裝入網絡程序。"/etc/inetd.conf"文件告訴inetd監聽哪些網絡端口,為每個端口啟動哪個服務。把Linux系統放在任何網絡環境中,第一件要做的事就是了解一下服務器到底要提供哪些服務。不需要的那些服務應該被禁止掉,最好卸載掉,這樣安全就少了一些攻擊系統的機會。查看"/etc/inetd.conf"文件,了解一下inetd提供哪些服務。用加上注釋的方法(在一行的開頭加上#號)禁止任何不需要的服務,再給inetd進程發一個SIGHUP信號。具體操作步驟如下:
(1)把文件"/etc/inetd.conf"的許可權限改成600,只允許root來讀寫該文件。
[root@snow]#;chmod;600;/etc/inetd.conf;
(2)確定"/etc/inetd.conf"文件所有者為root。
[root@snow]#;stat;/etc/inetd.conf
這個命令顯示出來的信息應該是:
File:;"/etc/inetd.conf"
Size:;2869;Filetype:;Regular;File
Mode:;(0600/-rw-------);Uid:;(;0/;root);Gid:;(;0/;root)
Device:;8,6;Inode:;18219;Links:;1
Access:;Fri;Apr;12;14:28:11;2002(00000.00:10:44)
Modify:;Wed;Apr;10;11:20:22;2002(00002.06:12:16)
Change:;Wed;Apr;10;11:20:22;2002(00002.06:12:16)
(3)編輯;/etc/inetd.conf文件(vi;/etc/inetd.conf),禁止所有不需要的服務,如:ftp、telnet、;shell、login、exec、talk、ntalk、imap、pop-2、pop-3、finger、auth等。把不需要的服務關閉可以使系統的危險性降低很多。
(4)改變了"inetd.conf"文件之後,要給inetd進程發送一個SIGHUP信號(killall;-HUP;inetd)。
[root@snow;/root]#;killall;-HUP;inetd;
(5)為了保證"inetd.conf"文件的安全,可以用chattr命令把它設成不可改變的。如下:
[root@snow]#;chattr;+i;/etc/inetd.conf;
這樣可以防止對"inetd.conf"文件的任何修改。一個有"i"屬性的文件是不能被改動的(不能刪除或重命名,不能創建這個文件的鏈接,不能向這個文件裡寫數據)。唯一可以取消這個屬性的人只有root。如果要修改"inetd.conf"文件,首先要取消不可修改的屬性,如下:
[root@snow]#;chattr;-i;/etc/inetd.conf;
再改變了"inetd.conf"文件後,需要再把它的屬性改為不可改變的。