企業(yè)級(jí)Apache服務(wù)器安全防護(hù)要點(diǎn)剖析(1) |
發(fā)布時(shí)間: 2012/5/28 7:44:35 |
Apache一直是世界上使用率排名前三的Web服務(wù)器軟件。企業(yè)使用其構(gòu)建Web應(yīng)用,從很大程度上都需要對(duì)其安全性進(jìn)行綜合考慮,以保證能夠應(yīng)對(duì)拒絕服務(wù)攻擊、流量竊聽(tīng)、數(shù)據(jù)泄漏等網(wǎng)絡(luò)威脅,從而保證企業(yè)門(mén)戶(hù)網(wǎng)站的安全。 除了使用業(yè)界流行的防火墻、IDS/IPS(入侵檢測(cè)系統(tǒng)/入侵防御系統(tǒng))、WAF(Web應(yīng)用防火墻)、UTM(統(tǒng)一威脅管理)等外部安全設(shè)備對(duì) Apache服務(wù)進(jìn)行安全防護(hù)外,作為一種優(yōu)秀的開(kāi)源服務(wù)器軟件,Apache本身就具有很多優(yōu)秀的特性可以為服務(wù)器管理員提供安全配置,以防范各種網(wǎng)絡(luò)攻擊。因此,充分、高效地挖掘Apache服務(wù)器的自身安全能力也是企業(yè)安全工作者一個(gè)必備的技能;诖,本文將從4個(gè)方面詳細(xì)剖析Apache服務(wù)器的安全防護(hù)要點(diǎn)。 策略一:服務(wù)器端安全設(shè)置 1.限制root用戶(hù)運(yùn)行Apache服務(wù)器 一般情況下,在Linux下啟動(dòng)Apache服務(wù)器的進(jìn)程httpd需要root權(quán)限。由于root權(quán)限太大,存在許多潛在的安全威脅。一些管理員為了安全起見(jiàn),認(rèn)為httpd服務(wù)器不可能沒(méi)有安全漏洞,因而更愿意使用普通用戶(hù)的權(quán)限來(lái)啟動(dòng)服務(wù)器。http.conf主配置文件里面有如下兩個(gè)配置是 Apache的安全保證,Apache在啟動(dòng)后,就將其本身設(shè)置為這兩個(gè)選項(xiàng)設(shè)置的用戶(hù)和組權(quán)限進(jìn)行運(yùn)行,降低了服務(wù)器的危險(xiǎn)性。 Userapache Groupapache 需要特別指出的是:以上兩個(gè)配置在主配置文件里面是默認(rèn)選項(xiàng),當(dāng)采用root用戶(hù)身份運(yùn)行httpd進(jìn)程后,系統(tǒng)將自動(dòng)將該進(jìn)程的用戶(hù)組和權(quán)限改為apache,這樣,httpd進(jìn)程的權(quán)限就被限制在apache用戶(hù)和組范圍內(nèi),因而保證了安全。 2.向客戶(hù)端隱藏Apache服務(wù)器的相關(guān)信息 Apache服務(wù)器的版本號(hào)可作為黑客入侵的重要信息被利用,通常他們?cè)讷@得版本號(hào)后,通過(guò)網(wǎng)上搜索針對(duì)該版本服務(wù)器的漏洞,從而使用相應(yīng)的技術(shù)和工具有針對(duì)性的入侵,這也是滲透測(cè)試的一個(gè)關(guān)鍵步驟。因此,為了避免一些不必要的麻煩和安全隱患,可以通過(guò)主配置文件httpd.conf下的如下兩個(gè)選項(xiàng)進(jìn)行: (1)ServerTokens:該選項(xiàng)用于控制服務(wù)器是否響應(yīng)來(lái)自客戶(hù)端的請(qǐng)求,向客戶(hù)端輸出服務(wù)器系統(tǒng)類(lèi)型或者相應(yīng)的內(nèi)置模塊等重要信息。RedHatEnterpriseLinux5操作系統(tǒng)在主配置文件中提供全局默認(rèn)控制閾值為OS,即 ServerTokensOS。它們將向客戶(hù)端公開(kāi)操作系統(tǒng)信息和相關(guān)敏感信息,所以保證安全情況下需要在該選項(xiàng)后使用“ProductOnly”,即 ServerTokensProductOnly。 (2)ServerSignature:該選項(xiàng)控制由系統(tǒng)生成的頁(yè)面(錯(cuò)誤信息等)。默認(rèn)情況下為off,即 ServerSignatureoff,該情況下不輸出任何頁(yè)面信息。另一情況為on,即ServerSignatureon,該情況下輸出一行關(guān)于版本號(hào)等相關(guān)信息。安全情況下應(yīng)該將其狀態(tài)設(shè)為off。 圖1和圖2為安全設(shè)定這兩個(gè)選項(xiàng)前后正常情況下和錯(cuò)誤情況下的輸出頁(yè)面(通過(guò)Rhel5中的MozillaFirefox瀏覽器訪問(wèn)Rhel5中的 Apache服務(wù)器)的詳細(xì)對(duì)比?梢郧宄吹剑踩O(shè)定選項(xiàng)后,可以充分地向客戶(hù)端用戶(hù)隱藏Linux操作系統(tǒng)信息和Apache服務(wù)器版本信息。 圖1錯(cuò)誤情況下未設(shè)定安全選項(xiàng)前示意 圖2操作情況下使用安全設(shè)定后的對(duì)比 3.設(shè)置虛擬目錄和目錄權(quán)限 要從主目錄以外的其他目錄中進(jìn)行發(fā)布,就必須創(chuàng)建虛擬目錄。虛擬目錄是一個(gè)位于Apache的主目錄外的目錄,它不包含在Apache的主目錄中,但在訪問(wèn)Web站點(diǎn)的用戶(hù)看來(lái),它與主目錄中的子目錄是一樣的。每個(gè)虛擬目錄都有一個(gè)別名,用戶(hù)Web瀏覽器中可以通過(guò)此別名來(lái)訪問(wèn)虛擬目錄,如 http://服務(wù)器IP地址/別名/文件名,就可以訪問(wèn)虛擬目錄下面的任何文件了。 使用Alias選項(xiàng)可以創(chuàng)建虛擬目錄。在主配置文件中,Apache默認(rèn)已經(jīng)創(chuàng)建了兩個(gè)虛擬目錄。這兩條語(yǔ)句分別建立了“/icons/”和“ /manual”兩個(gè)虛擬目錄,它們對(duì)應(yīng)的物理路徑分別是“/var/www/icons/”和“/var/www/manual”。在主配置文件中,用戶(hù)可以看到如下配置語(yǔ)句: Alias/icons/"/var/www/icons/" Alias/manual"/var/www/manual" 在實(shí)際使用過(guò)程中,用戶(hù)可以自己創(chuàng)建虛擬目錄。比如,創(chuàng)建名為/user的虛擬目錄,它所對(duì)應(yīng)的路徑為上面幾個(gè)例子中常用的/var/www/html/rhel5: Alias/test"/var/www/html/rhel5" 如果需要對(duì)其進(jìn)行權(quán)限設(shè)置,可以加入如下語(yǔ)句: <Directory“/var/www/html/rhel5”> AllowOverrideNone OptionsIndexes Orderallow,deny Allowfromall </Directory> 設(shè)置該虛擬目錄和目錄權(quán)限后,可以使用客戶(hù)端瀏覽器進(jìn)行測(cè)試驗(yàn)證,采用別名對(duì)該目錄中的文件進(jìn)行訪問(wèn),瀏覽結(jié)果如圖3所示。 圖3使用虛擬目錄的測(cè)試結(jié)果 策略二:限制Apache服務(wù)的運(yùn)行環(huán)境 Apache服務(wù)器需要綁定到80端口上來(lái)監(jiān)聽(tīng)請(qǐng)求,而root是唯一有這種權(quán)限的用戶(hù),隨著攻擊手段和強(qiáng)度的增加,服務(wù)器受到相當(dāng)大的威脅,一旦緩沖區(qū)溢出漏洞被利用,就可以控制整個(gè)系統(tǒng)。為了進(jìn)一步提高系統(tǒng)安全性,Linux內(nèi)核引入chroot機(jī)制,chroot是內(nèi)核中的一個(gè)系統(tǒng)調(diào)用,軟件可以通過(guò)調(diào)用函數(shù)庫(kù)的chroot函數(shù),來(lái)更改某個(gè)進(jìn)程所能見(jiàn)到的根目錄。 chroot機(jī)制是將某軟件運(yùn)行限制在指定目錄中,保證該軟件只能對(duì)該目錄及其子目錄的文件有所動(dòng)作,從而保證整個(gè)服務(wù)器的安全。在這種情況下,即使出現(xiàn)黑客或者不法用戶(hù)通過(guò)該軟件破壞或侵入系統(tǒng),Linux系統(tǒng)所受的損壞也僅限于該設(shè)定的根目錄,而不會(huì)影響到系統(tǒng)的其他部分。 將軟件chroot化的一個(gè)問(wèn)題是該軟件運(yùn)行時(shí)需要的所有程序、配置文件和庫(kù)文件都必須事先安裝到chroot目錄中,通常稱(chēng)這個(gè)目錄為 chroot“監(jiān)牢”。如果在“監(jiān)牢”中運(yùn)行httpd,那么用戶(hù)根本看不到Linux文件系統(tǒng)中那個(gè)真正的目錄,從而保證了Linux系統(tǒng)的安全。 在使用該技術(shù)的時(shí)候,一般情況下需要事先創(chuàng)建目錄,并將守護(hù)進(jìn)程的可執(zhí)行文件httpd復(fù)制到其中。同時(shí),由于httpd需要幾個(gè)庫(kù)文件,所以需要把httpd程序依賴(lài)的幾個(gè)lib文件同時(shí)也拷貝到同一個(gè)目錄下,因此手工完成這一工作是非常麻煩的。幸運(yùn)的是,用戶(hù)可以通過(guò)使用開(kāi)源的jail軟件包來(lái)幫助簡(jiǎn)化chroot“監(jiān)牢”建立的過(guò)程,具體步驟如下所示: Jail官方網(wǎng)站是http://www.jmcresearch.com/projects/。首先將其下載,然后執(zhí)行如下命令進(jìn)行源代碼包的編譯和安裝: #tarxzvfjail_1.9a.tar.gz #cdjail/src #make jail軟件包提供了幾個(gè)Perl腳本作為其核心命令,包括mkjailenv、addjailuser和addjailsw,他們位于解壓后的目錄jail/bin中。這幾個(gè)命令的基本用途如下所示: mkjailenv:用于創(chuàng)建chroot“監(jiān)牢”目錄,并且從真實(shí)文件系統(tǒng)中拷貝基本的軟件環(huán)境。 addjailsw:用于從真實(shí)文件系統(tǒng)中拷貝二進(jìn)制可執(zhí)行文件及其相關(guān)的其它文件(包括庫(kù)文件、輔助性文件和設(shè)備文件)到該“監(jiān)牢”中。 addjailuser:創(chuàng)建新的chroot“監(jiān)牢”用戶(hù)。 采用jail創(chuàng)建監(jiān)牢的步驟如下所示; (1)首先需要停止目前運(yùn)行的httpd服務(wù),然后建立chroot目錄,命令如下所示。該命令將chroot目錄建立在路徑/root/chroot/httpd下: #servicehttpdstop #mkjailenv/root/chroot/httpd kjailenv AcomponentofJail(version1.9forlinux) http://www.gsyc.inf.uc3m.es/~assman/jail/ JuanM.Casillas<assman@gsyc.inf.uc3m.es> Makingchrootedenvironmentinto/root/chroot/httpd Doingpreinstall() Doingspecial_devices() Doinggen_template_password() Doingpostinstall() Done. (2)為“監(jiān)牢”添加httpd程序,命令如下: #./addjailsw/root/chroot/httpd/-P/usr/sbin/httpd addjailsw AcomponentofJail(version1.9forlinux) http://www.gsyc.inf.uc3m.es/~assman/jail/ JuanM.Casillas<assman@gsyc.inf.uc3m.es> Guessing/usr/sbin/httpdargs(0) Warning:can'tcreate/proc/mountsfromthe/procfilesystem Done. 在上述過(guò)程中,用戶(hù)不需要在意那些警告信息,因?yàn)閖ail會(huì)調(diào)用ldd檢查httpd用到的庫(kù)文件。而幾乎所有基于共享庫(kù)的二進(jìn)制可執(zhí)行文件都需要上述的幾個(gè)庫(kù)文件。 (3)然后,將httpd的相關(guān)文件拷貝到“監(jiān)牢”的相關(guān)目錄中,命令如下所示: #mkdir-p/root/chroot/httpd/etc #cp–a/etc/httpd/root/chroot/httpd/etc/ 。。。。。。 添加后的目錄結(jié)構(gòu)如下所示: #ll 總計(jì)56 drwxr-xr-x2rootroot409603-2313:44dev drwxr-xr-x3rootroot409603-2313:46etc drwxr-xr-x2rootroot409603-2313:46lib drwxr-xr-x2rootroot409603-2313:46selinux drwsrwxrwx2rootroot409603-2313:46tmp drwxr-xr-x4rootroot409603-2313:46usr drwxr-xr-x3rootroot409603-2313:46var (4)重新啟動(dòng)httpd,并使用ps命令檢查httpd進(jìn)程,發(fā)現(xiàn)該進(jìn)程已經(jīng)運(yùn)行在監(jiān)牢中,如下所示: #ps-aux|grephttpd Warning:badsyntax,perhapsabogus'-'?See/usr/share/doc/procps-3.2.7/FAQ root35460.60.338281712pts/2S13:570:00/usr/sbin/nss_pcacheoff/etc/httpd/alias root355014.23.64938817788?Rsl13:570:00/root/chroot/httpd/httpd apache35590.21.4493886888?S13:570:00/root/chroot/httpd/httpd apache35600.21.4493886888?S13:570:00/root/chroot/httpd/httpd apache35610.21.4493886888?S13:570:00/root/chroot/httpd/httpd apache35620.21.4493886888?S13:570:00/root/chroot/httpd/httpd apache35630.21.4493886888?S13:570:00/root/chroot/httpd/httpd apache35640.21.4493886888?S13:570:00/root/chroot/httpd/httpd apache35650.21.4493886888?S13:570:00/root/chroot/httpd/httpd apache35660.21.4493886888?S13:570:00/root/chroot/httpd/httpd root35680.00.14124668pts/2R+13:570:00grephttpd 本文出自:億恩科技【1tcdy.com】 服務(wù)器租用/服務(wù)器托管中國(guó)五強(qiáng)!虛擬主機(jī)域名注冊(cè)頂級(jí)提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM] |