CGI安全:從Web服務器配置入手
來源:程序員人生 發布時間:2013-12-09 22:50:47 閱讀次數:3426次
隨著防火墻技術的發展以及人們對服務器本身的安全性的重視,未來的主流攻擊方向將逐漸轉向Web端口.CGI程序本身的安全性是程序員的事情,這對于某些管理員來說他們是無能為力的.但我們仍然可以通過正確合理的配置,使我們的Web服務器降低CGI程序本身安全問題所帶來的各種威脅.本文便是從CGI安全角度來描述了兩種主流的Web服務器(IIS和APACHE)的具體配置,相信這樣配置之后,我們的服務器安全性會得到很大提高.
一、Windows IIS環境
由于Wmdows+IIS+CGT本身的安全性并不好,所以會出現的問題比較多。好比說PsKey最近發現的一批LB5000論壇的漏洞吧,這些漏洞都是基于Windows+IIS平臺的。因為在Windows+IIS環境中,CGI程序文件權限沒有可執行相和不可執行一說。所以,只要是在有腳本執行權限的虛擬目錄里,CGT文件都會被執行。這就帶來了很多安全上的問題。PsKey發現的幾個漏洞都是往.CGI文件里寫入符合Peri語法的語句,來構造一個小型的WebShell。而對于一個功能強大的CGI程序來說,其自然不可能面面俱到,多多少少部會存在一些問題也屬正常。但只要控制好虛擬目錄的權限,危險性將會大大降低。
現在我們以LB為例"對于LB來說,它本身很多地方已經做得很好了,但其安全問題大多就是由干對一些字符的過濾不嚴所造成的。在IIS中默認情況下,子目錄將繼承父目錄的權限,如果一個目錄被設置了 "腳本和可執行程序"權限,那么其子目錄也將有"腳本和可執行程序"權限。所以,只要將LB5000論壇所在目錄設置為可執行,將其子目錄全設為不可執行。這些問題就迎刃而解了。因為即使你可以往其子目錄的一些文件里寫入WebShell。但由于子目錄沒有執行權限,一樣沒用。
LB的CGI程序和數據文件結構是這樣設計的:將需要執行的CGI程序文件與一些.cgi后綴的數據文件放在不同的目錄中。我們強烈建議寫程序時這樣做,因為這樣。管理員就只需要按照要求去設置虛擬目錄的權限了
現在,讓我們來一步一步對IIS虛擬目錄進行設置吧.
1.開始→運行,輸入:%SystemRoot%System32Intestrviis.msc打開 "Intenet服務管理器"。
2.選中將要設置的門IIS虛擬目錄。點右鍵→屬性,將LB論壇的cgi-bin目錄設置為許執行"純腳本"。
3.然后再逐一對cgi-bin目錄的子目錄進行設置,比如cgi-bin/data目錄進行設置,選中data目錄,點右鍵→屬性,將可執行設置為"無",這樣一來.在此目錄中的CGT程序將不允許被執行。
按照這個方法。將cgi-bin目錄下的每一個子目錄的可執行權限都設置為 "無"。最后,還要將non-cgi目錄進行設置,一般也將可執行權限設置為 "無"。
好了,我們對論壇的目錄權限設置就結束了。這樣一來,即使論壇再被發現有什么過濾不嚴密的漏洞只要他無法執行被竅人WebShell的文件。一樣不能達到人侵的目的。但我不敢保證就不出現任何問題,因為對于CGI漏洞的攻擊千奇百怪,出其不意,很難說將來會不會出現什么新的攻擊方法。但是,這樣設置絕對可以很大程度地降低CGI程序本身所帶來的威脅。
二、Windows十APACHE環鏡
由于默認安裝APACHE服務器建以SYSTEM僅限啟動。這一點它和IIS不同。在IIS中,如果CGI程序解釋程序不在LM/W3SVC/InProcessIsapiApps中的話。它的權限疑繼:敢DLLHOST.EXE;的IWA.M_-MACHINENAME權限。但APJACHE一旦啟動,所有的CGI程序都會繼承apache.ex.e的SYSTEM權限,所以距危險。一旦一個CGT程序出現問題。那么服務器將完全被控制。如果你真的想在Windows上跑APACHE的話,強烈建議另建一個CUESTS組的用戶,用這個新建的用戶啟動APACHE服務。這種情況下對CGI程序本身來說。安全性要比IIS中稍好些。因為APACHE中,CGI程序的解釋器是在程序的首行定義的,如:#!c:/perl/bin/perl,而IIS則是是在LM/W3SVVC/ScriptMaps中。如果商行沒有定義,那么CGI程序運行將出錯。所以。如果要想利用程序漏洞寫出一個可以成功執行的WebShell是有一定難度的,但這并不代表不可以。我在測試中發現,其實首行不需要定全路徑的,寫成這樣也可以:#!peri。因為在安裝ActivePerl的時候,其會在環境變量的PATH中自動加上peri.exe的路徑。所以我們成功利用這種漏洞的困難減少了。當然在這種環境下,我們也可以對APACHE配置文件httpd.conf進行合理的配置以降低來自CGI程序本身帶來的威脅.
下面我們來對APACHE服務及其配置文件httpd.conf進行配置。
1.在正確安裝好APACHE服務器后,新建一個用戶。并將其從原來的USERS組中刪除,將它加到GUESTS組中,命令如下;
net user apacheuser newpassword/add
net localgroup users apacheuser/del
net localgroup guests apacheuser/add
2.將APACHE安裝目錄(如:C:apache)的權限設置為apacheuser只讀和執行,其他非administrators組用戶拒絕訪問,還要將C:apachelogs目錄設置為可寫和可修改,不然APACHE會運行出錯,不能啟動.命令如下:
3.現在再讓APACHE服務以這個新建的用戶apacheuser來啟動.開始→運行,輸入:Services.msc選中apache服務這一項,然后點右鍵→屬性→登錄→此帳戶→瀏覽,選擇我們剛才新建的那個用戶(這里是以apacheuser這個用戶為例),在下面的密碼框中輸入用戶名的密碼(這里是newpasswork),然后一路"確定"下去.
這樣.APACHE服務就設置好了,接著,我們再來對httpd.conf進行設置,還是以LB5000論壇為例.我們要對LB的每個目錄進行詳細的設置,需要在httpd.conf文件中添加一些內容.
4.先設置cgi-bin目錄如下:
ScriptAlias/LB5000/cgi-bin/"d:/inetpub/wwwroot/LB5000/cgi-bin/"
AllowOverride None
Options ExecCGI
Order allow,deny
Allow from all
5.然后再一一設置其子目錄,這里只以cgi-bin/data目錄為例,其他的以此類推:
Alias/LB5000/cgi-bin/data/"d:/inetpub/
wwwroot/LB5000/cgi-bin/data/"
cgi-bin/data">
AllowOverride None
Options None
Order allow,deny
Allow from all
6.最后別忘了設置non-cgi目錄:
Alias/LB5000/non-cgi/"d:/inetpub/wwwroot/LB5000
non-cgi/"
AllowOverride None
Options None
Order allow,deny
Allow from all
到這里,Windows環境下的APACHE基本上設置好了。
三、Linux/Unix+APACHE環境
這種環境相對于前兩種來說,安全性高得多。首先,一個CGI程序要執行,那么在文件系統當中必須要有可執行權限,即+x。你有能力往.cgi文件里寫一個完整的WebShell,但并不代表你可以讓它有執行權限。其次,還要在虛擬目錄里定義可執行。所以,這種配置的CGI程序安全問題大多數都出在提交非法數據暴露敏感文件以及直接執行程序等方面。而這些就與配置關系不大了,所以我也就不贅述了。
后記
好了,經過上兩的詳細配置之后,應該說可以增強Web服務器的安全性。但也不一定就很安全了。這還要看CG,程序的結構。一般的編寫結構是這樣的,把所有需要執行的程序集中放到一個目錄、在配置Web服務器時給這個目錄執行腳本的權限。其他所有目錄都不要給執行腳本的權限。所有需要讀寫的數據文件集中放到另一個目錄。在設置虛擬目錄時不要給這個目錄任何權限。如有必要也可以將它放到Web目錄以外的目錄。將一些自已寫的模塊文件和函數文件集中放到一個目錄,設置虛擬目錄時不要給任何權限,包括訪問權限。到這里,關于Web服務器的配置就差不多了。本人對CG1的研究也非常有限,希望這篇文量能起到拋磚引玉的作用。
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈