出處:seayuan'Blog 時(shí)間:Tue, 25 Jul 2006 13:39:46 +0000 作者:seayuan 地址:http://www.seayuan.com/read.php/3.htm 隨著網(wǎng)絡(luò)技術(shù)的普及、應(yīng)用和Web技術(shù)的不斷完善,Web服務(wù)已經(jīng)成為互聯(lián)網(wǎng)上頗為重要的服務(wù)形式之一。原有的客戶/服務(wù)器模式正在逐漸被瀏覽器/服務(wù)器模式所取代。本文將重點(diǎn)介紹Web面臨的主要威脅,并結(jié)合在Linux中使用較多的Apache服務(wù)器,介紹進(jìn)行Web服務(wù)器安全配置的技巧。 Web服務(wù)器面臨的安全隱患為了保護(hù)Web服務(wù)器不被惡意攻擊和破壞,第一步就是要了解和識(shí)別它所面臨的安全風(fēng)險(xiǎn)。以前,Web站點(diǎn)僅僅提供靜態(tài)的頁面,因此安全風(fēng)險(xiǎn)很少。惡意破壞者進(jìn)入這類Web站點(diǎn)的惟一方法是獲得非法的訪問權(quán)限。近年來,大部分Web服務(wù)器不再提供靜態(tài)的HTML頁面,它們提供動(dòng)態(tài)的內(nèi)容,許多Web站點(diǎn)與頗有價(jià)值的客戶服務(wù)或電子商務(wù)活動(dòng)應(yīng)用結(jié)合在一起(這也是風(fēng)險(xiǎn)所在,通常不注意的)。◆ HTTP拒絕服務(wù)。攻擊者通過某些手段使服務(wù)器拒絕對(duì)HTTP應(yīng)答。這使得Apache對(duì)系統(tǒng)資源(CPU時(shí)間和內(nèi)存)需求的劇增,最終造成系統(tǒng)變慢甚至完全癱瘓。◆ 緩沖區(qū)溢出。攻擊者利用CGI程序編寫的一些缺陷使程序偏離正常的流程。程序使用靜態(tài)分配的內(nèi)存保存請(qǐng)求數(shù)據(jù),攻擊者就可以發(fā)送一個(gè)超長請(qǐng)求使緩沖區(qū)溢出。比如一些Perl編寫的處理用戶請(qǐng)求的網(wǎng)關(guān)腳本。一旦緩沖區(qū)溢出,攻擊者可以執(zhí)行其惡意指令?!?攻擊者獲得root權(quán)限。如果Apache以root權(quán)限運(yùn)行,系統(tǒng)上一些程序的邏輯缺陷或緩沖區(qū)溢出的手段,會(huì)讓攻擊者很容易在本地獲得Linux服務(wù)器上管理員權(quán)限r(nóng)oot。在一些遠(yuǎn)程的情況下,攻擊者會(huì)利用一些以root身份執(zhí)行的有缺陷的系統(tǒng)守護(hù)進(jìn)程來取得root權(quán)限,或利用有缺陷的服務(wù)進(jìn)程漏洞來取得普通用戶權(quán)限,用以遠(yuǎn)程登錄服務(wù)器,進(jìn)而控制整個(gè)系統(tǒng)。合理的網(wǎng)絡(luò)配置能夠保護(hù)Apache服務(wù)器免遭多種攻擊。 配置一個(gè)安全Apache服務(wù)器:1、勤打補(bǔ)丁 在www.apache.org上最新的changelog中都寫著:bug fix、security bug fix的字樣。所以,Linux網(wǎng)管員要經(jīng)常關(guān)注相關(guān)網(wǎng)站的缺陷修正和升級(jí),及時(shí)升級(jí)系統(tǒng)或添加補(bǔ)丁。使用最高和最新安全版本對(duì)于加強(qiáng)Apache Web服務(wù)器的安全是至關(guān)重要的。 2、隱藏Apache的版本號(hào)通常,軟件的漏洞信息和特定版本是相關(guān)的,因此,版本號(hào)對(duì)黑客來說是最有價(jià)值的。默認(rèn)情況下,系統(tǒng)會(huì)把Apache版本系統(tǒng)模塊都顯示出來(http返回頭)。如果列舉目錄的話,會(huì)顯示域名信息(文件列表正文)去除Apache版本號(hào):修改配置文件:/etc/httpd.conf.找到關(guān)鍵字ServerSignature,將其設(shè)定為: ServerSignature Off ServerTokens Prod 然后重新啟動(dòng)Apache服務(wù)器。 3.建立一個(gè)安全的目錄結(jié)構(gòu)Apache服務(wù)器包括四個(gè)主要目錄: (1)ServerRoot:保存配置文件(conf子目錄)二進(jìn)制文件和其他服務(wù)器配置文件?! 。ǎ玻〥ocumentRoot:保存Web站點(diǎn)的內(nèi)容,包括HTML文件和圖片等?! 。?)ScripAlias:保存CGI腳本?! 。?)Customlog和Errorlog:保存訪問日志和錯(cuò)誤日志?! 〗ㄗh設(shè)定這樣一個(gè)目錄結(jié)構(gòu),以上四個(gè)主要目錄相互獨(dú)立并且不存在父子邏輯關(guān)系?! ⌒√崾荆篠erverRoot目錄應(yīng)該被配置為只能由root用戶訪問;DocumentRoot應(yīng)該能夠被管理Web站點(diǎn)內(nèi)容的用戶訪問和被Apache服務(wù)器使用Apache用戶和Apache用戶組訪問;ScriptAlias目錄應(yīng)該只能被CGI開發(fā)人員和Apache用戶訪問;只有root用戶訪問日志目錄?! ∠旅媸枪P者使用的目錄結(jié)構(gòu)快照,如圖1所示。 這樣的目錄結(jié)構(gòu)是比較安全的,因?yàn)槟夸浿g是獨(dú)立的,某個(gè)目錄的權(quán)限錯(cuò)誤不會(huì)影響其他目錄。 4、Apache使用專門的用戶和組按照最小特權(quán)原則,需要給Apache分配一個(gè)合適的權(quán)限,讓其能夠完成Web服務(wù)。小提示:最小特權(quán)原則是系統(tǒng)安全中最基本的原則之一,它限制了使用者對(duì)系統(tǒng)及數(shù)據(jù)進(jìn)行存取所需要的最小權(quán)限,既保證了用戶能夠完成所操作的任務(wù),同時(shí)也確保非法用戶或異常操作所造成的損失最小。必須保證Apache使用一個(gè)專門的用戶和用戶組,不要使用系統(tǒng)預(yù)定義的賬號(hào),比如nobody用戶和nogroup用戶組?! ∫?yàn)橹挥衦oot用戶可以運(yùn)行Apache,DocumentRoot應(yīng)該能夠被管理Web站點(diǎn)內(nèi)容的用戶訪問和Apache服務(wù)器使用Apache用戶和Apache用戶組訪問。所以,如果希望“cao”用戶在Web站點(diǎn)發(fā)布內(nèi)容,并且可以以httpd身份運(yùn)行Apache服務(wù)器,通??梢赃@樣: groupadd webteam usermod -G webteam cao chown -R httpd.webteam /www/html chmod -R 2570 /www/htdocs 只有root用戶訪問日志目錄,這個(gè)目錄的推薦權(quán)限: chown -R root.root /etc/logs chmod -R 700 /etc/logs5、Web目錄的訪問策略對(duì)于可以訪問的Web目錄,要使用相對(duì)保守的途徑進(jìn)行訪問,不要讓用戶察看任何目錄索引列表?! 。?)設(shè)定禁止使用目錄索引文件 Apache服務(wù)器在接收到用戶對(duì)一個(gè)目錄的訪問時(shí),會(huì)查找Directorylndex指令指定的目錄索引文件。默認(rèn)情況下該文件是index.html。如果該文件不存在,那么Apache會(huì)創(chuàng)建動(dòng)態(tài)列表為用戶顯示該目錄的內(nèi)容。通常這樣的設(shè)置會(huì)暴露Web站點(diǎn)結(jié)構(gòu),因此需要修改配置文件禁止顯示動(dòng)態(tài)目錄索引。修改配置文件httpd.conf: Options -Indexes FollowSymLinks Options指令通知Apache禁止使用目錄索引。FollowSymLinks表示不允許使用符號(hào)鏈接?! 。?)禁止默認(rèn)訪問 一個(gè)好的安全策略是禁止默認(rèn)訪問的存在。首先禁止默認(rèn)訪問,只對(duì)指定目錄開啟訪問權(quán)限,如果允許訪問/var/www/html目錄,使用如下設(shè)定: Order deny,allow Allow from all (3)禁止用戶重載 為了禁止用戶對(duì)目錄配置文件(.htaccess)進(jìn)行重載(修改),可以這樣設(shè)定: AllowOverride None6、Apache服務(wù)器訪問控制策略Apache的access.conf文件負(fù)責(zé)設(shè)置文件的訪問權(quán)限,可以實(shí)現(xiàn)互聯(lián)網(wǎng)域名和IP地址的訪問控制。它包含一些指令,控制允許什么用戶訪問Apache目錄。應(yīng)該把deny from all設(shè)為初始化指令,再使用allow from指令打開訪問權(quán)限。如果允許192.168.1.1到192.168.1.254的主機(jī)訪問,可以這樣設(shè)定: order deny,allow deny from all allow from pair 192.168.1.0/255.255.255.0 7、記錄所有情況 一個(gè)優(yōu)秀的Linux網(wǎng)絡(luò)管理員會(huì)密切記錄服務(wù)器日志系統(tǒng),這些日志可以記錄異常訪問的線索。Apache可以記錄所有的訪問請(qǐng)求,同樣,錯(cuò)誤的請(qǐng)求也會(huì)記錄?! ustomLog /logs/access.log common ? #記錄對(duì)Web站點(diǎn)的每個(gè)進(jìn)入請(qǐng)求# ErrorLog /logs/error.log ? ?#記錄產(chǎn)生錯(cuò)誤狀態(tài)的請(qǐng)求# 小提示:這里推薦使用一個(gè)優(yōu)秀的日志分析工具Wusage(www.boutell.com)進(jìn)行例行分析和監(jiān)視日志文件。 8、Apache服務(wù)器的密碼保護(hù).htaccess文件是Apache服務(wù)器上的一個(gè)設(shè)置文件。它是一個(gè)文本文件,可以使用文本編輯器進(jìn)行編寫。.htaccess文件提供了針對(duì)目錄改變配置的方法,即通過在一個(gè)特定的文檔目錄中放置一個(gè)包含一個(gè)或多個(gè)指令的文件(.htaccess文件),以作用于此目錄及其所有子目錄?! ?htaccess的功能包括設(shè)置網(wǎng)頁密碼、設(shè)置發(fā)生錯(cuò)誤時(shí)出現(xiàn)的文件、改變首頁的文件名(如index.html)、禁止讀取文件名、重新導(dǎo)向文件、加上MIME類別、禁止列目錄下的文件等。通過.htaccess來保護(hù)網(wǎng)站更為方便和安全,因?yàn)槔?htaccess文件實(shí)現(xiàn)密碼保護(hù)是很難破解的。9.減少CGI和SSI風(fēng)險(xiǎn)CGI腳本的漏洞已經(jīng)成為Web服務(wù)器的首要安全隱患,通常是程序編寫CGI程序中產(chǎn)生了許多的后門和漏洞。控制CGI腳本的漏洞除了在編寫時(shí)需要注意對(duì)輸人數(shù)據(jù)的合法性檢查、對(duì)系統(tǒng)調(diào)用的謹(jǐn)慎使用等因素外,首先使用CGI程序所有者的UID來運(yùn)行這些程序,是一個(gè)好方法。這些CGI程序即使存在某些漏洞,那么其危害也僅限于該UID所能夠訪問的文件當(dāng)中。也就是說,這樣只能傷害用戶的文件,而不會(huì)對(duì)整個(gè)系統(tǒng)帶來致命的影響?! ⊥ㄟ^安裝和使用suEXEC的應(yīng)用程序,可以為Apache服務(wù)器提供CGI程序的控制支持(從Apache l.3版以后,suEXEC已經(jīng)作為Apache服務(wù)器的一部分),可以把suEXEC看作一個(gè)包裝器,在Apache接到對(duì)CGI程序的調(diào)用請(qǐng)求后,它將這個(gè)調(diào)用請(qǐng)求交給suEXEC來負(fù)責(zé)完成具體的調(diào)用,并且從這里獲得返回的結(jié)果?! uEXEC能解決一些安全問題,但也會(huì)降低服務(wù)性能,因?yàn)樗荒苓\(yùn)行在CGI版本的PHP上,而CGI版本比模塊版本運(yùn)行速度慢。原因是模塊版本使用了線程,而使用CGI版本的是進(jìn)程。在不同線程之間的環(huán)境轉(zhuǎn)換和訪問公用的存儲(chǔ)區(qū)域顯然要比在不同的進(jìn)程之間要快得多。 建議在對(duì)安全性能要求比較高時(shí)使用suEXEC,為此您還要以犧牲速度為代價(jià)。另外可以嘗試另外一個(gè)軟件CGIWrap,它的安全性能高于suEXEC。官方網(wǎng)址為:ftp://ftp.cc.umr.edu/pub/cgi/cgiwrap。 減少SSI腳本的風(fēng)險(xiǎn):如果用exec等SSI命令運(yùn)行外部程序,也會(huì)存在類似CGI腳本程序的危險(xiǎn),除了內(nèi)部調(diào)試程序時(shí)都應(yīng)當(dāng)可以使用Option命令禁止使用?! ptions IncludesNOEXEC 10、Apache服務(wù)器在監(jiān)牢中運(yùn)行所謂“監(jiān)牢”是指通過chroot機(jī)制來更改某個(gè)軟件運(yùn)行時(shí)所能看到的根目錄,即將某軟件運(yùn)行限制在指定目錄中,保證該軟件只能對(duì)該目錄及其子目錄的文件有所動(dòng)作,從而保證整個(gè)服務(wù)器的安全。這樣即使被破壞或侵入,所受的損傷也不大。 將軟件chroot化的一個(gè)問題是該軟件運(yùn)行時(shí)需要的所有程序、配置文件和庫文件都必須事先安裝到chroot目錄中,通常稱這個(gè)目錄為chroot jail(chroot“監(jiān)牢”)。如果要在“監(jiān)牢”中運(yùn)行Apache,而事實(shí)上根本看不到文件系統(tǒng)中那個(gè)真正的目錄,就需要事先創(chuàng)建目錄,并將httpd復(fù)制到其中。同時(shí),httpd需要庫文件,可以使用ldd(Library Dependency Display縮寫)命令查看,ldd作用是顯示一個(gè)可執(zhí)行程序必須使用的共享庫。這意味著還需要在“監(jiān)牢”中創(chuàng)建lib目錄,并將庫文件復(fù)制到其中。手工完成這一工作是非常麻煩的,此時(shí)可以用jail軟件包來幫助簡化chroot“監(jiān)牢”建立的過程。Jail官方網(wǎng)站是:http://www.jmcresearch.com/,最新版本為1.9a。11、使用SSL加固Apache使用具有SSL(安全套接字協(xié)議層)功能的Web服務(wù)器,可以提高網(wǎng)站的安全性能。SSL協(xié)議工作在Linux TCP/IP協(xié)議和HTTP協(xié)議之間,其關(guān)系如圖2所示。 SSL使用加密方法來保護(hù)Web服務(wù)器和瀏覽器之間的信息流。SSL不僅用于加密在互聯(lián)網(wǎng)上傳遞的數(shù)據(jù)流,而且還提供雙方身份驗(yàn)證。這樣,您就可以安全地在線購物而不必?fù)?dān)心別人竊取您信用卡的信息。這種特性使得SSL適用于那些交換重要信息的地方,像電子商務(wù)和基于Web的郵件。 S SL使用公共密鑰加密技術(shù),服務(wù)器在連接結(jié)束時(shí)給客戶端發(fā)送公用密鑰用來加密信息,而加密的信息只有服務(wù)器用它自己持有的專用密鑰才能解開??蛻舳擞霉妹荑€加密數(shù)據(jù),并且發(fā)送給服務(wù)端自己的密鑰,以惟一確定自己,防止在系統(tǒng)兩端之間有人冒充服務(wù)端或客戶端進(jìn)行欺騙。加密的HTTP連接用443端口號(hào)代替80端口號(hào),以區(qū)別于普通的不加密的HTTP??蛻舳耸褂眉用蹾TTP連接時(shí)會(huì)自動(dòng)使用443端口而不是80端口,這使得服務(wù)端更容易作出相應(yīng)的響應(yīng)。SSL運(yùn)行結(jié)構(gòu)見圖3。 Apache服務(wù)器使用SSL時(shí)通常有兩種選擇,即主服務(wù)器或虛擬Web站點(diǎn)。12、Apache服務(wù)器防范DoSApache服務(wù)器對(duì)拒絕攻擊的防范主要通過軟件Apache DoS Evasive Maneuvers Module 來實(shí)現(xiàn)。它是一款mod_access的替代軟件,可以對(duì)抗DoS攻擊。該軟件可以快速拒絕來自相同地址對(duì)同一URL的重復(fù)請(qǐng)求,通過內(nèi)部一張各子進(jìn)程的哈希表查詢來實(shí)現(xiàn)。軟件下載鏈接:http://online. securityfocus.com/data/tools/dospatch.tar.gz。軟件安裝的配置可以察看Linux中文主頁http://www.linux.gov.cn/:Apache性能和安全指南,過程很簡單,限于篇幅這里就不介紹了。同時(shí)可以使用Linux系統(tǒng)強(qiáng)大的命令手段Apache服務(wù)器防范Dos攻擊。netstat -an | grep -i “服務(wù)器ip地址:80” | awk '{print $6}' | sort | uniq -c | sort -n 這個(gè)命令會(huì)自動(dòng)統(tǒng)計(jì)TCP連接各個(gè)狀態(tài)的數(shù)量,如果SYN_RECV很高的話,就不能排除有基于TCP協(xié)議的拒絕服務(wù)攻擊的可能。這樣的話,您需要打開tcp_syncookies: echo 1 > /proc/sys/net/ipv4/tcp_syncookies 如果沒有 /proc/sys/net/ipv4/tcp_syncookies,說明您的內(nèi)核不支持syncookies,需要重新編譯內(nèi)核,同時(shí)降低syn重試次數(shù)。echo “1” > /proc/sys/net/ipv4/tcp_syn_retries echo “1” > /proc/sys/net/ipv4/tcp_synack_retries 同時(shí)加大syn_backlog,以保證用戶的訪問: echo “2048” > /proc/sys/net/ipv4/tcp_max_syn_backlog 13、其他安全工具使用TCP_wrappers和AIDE可以為您的系統(tǒng)提供額外的保護(hù)。使用TCP_wrappers可以進(jìn)一部控制訪問權(quán)限。AIDE是一個(gè)數(shù)據(jù)完整性檢測工具,可以幫助系統(tǒng)管理員監(jiān)視系統(tǒng)是否被改動(dòng)過,您可以在AIDE的配置文件中編制特定的策略,監(jiān)視Web服務(wù)器的配置文件、數(shù)據(jù)和CGI文件是否被修改。實(shí)際上,大部分Web站點(diǎn)被破壞者惡意攻擊是因?yàn)閼?yīng)用程序或腳本中的漏洞。Web安全專家認(rèn)為,運(yùn)行在Web服務(wù)器上的腳本或應(yīng)用程序是最大的危險(xiǎn)因素。因?yàn)镃GI腳本通常負(fù)責(zé)產(chǎn)生動(dòng)態(tài)內(nèi)容,它們經(jīng)常導(dǎo)致大部分的損害。對(duì)于大部分Web服務(wù)器來說,首先應(yīng)該考慮如何為加強(qiáng)安全配置。編輯提示:下期將以Linux下應(yīng)用的FTP服務(wù)器—WuFTP、Vsftpd、ProFTP為例,介紹FTP服務(wù)的安全策略。 Generated by Bo-blog 2.0.2
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)
點(diǎn)擊舉報(bào)。