0x00 Apache應(yīng)用介紹
Apache是世界使用排名第一的Web服務(wù)器軟件。它可以運(yùn)行在幾乎所有廣泛使用的計(jì)算機(jī)平臺(tái)上,由于其跨平臺(tái)和安全性被廣泛使用,是最流行的Web服務(wù)器端軟件之一。它快速、可靠并且可通過(guò)簡(jiǎn)單的API擴(kuò)充,將Perl/Python等解釋器編譯到服務(wù)器中。
0x01 為什么要做安全配置
上兩期我們討論了數(shù)據(jù)庫(kù)的安全配置,web中間件同樣也存在因?yàn)榘踩渲貌缓线m導(dǎo)致的安全問(wèn)題。Apache的默認(rèn)配置中存在一些安全問(wèn)題,例如版本號(hào)信息泄露、未配置使用SSL協(xié)議等。因此安全配置Apache服務(wù)器能有效的減少安全威脅,下面將對(duì)Apache的安全配置進(jìn)行討論。
0x02 如何進(jìn)行安全配置
1.Apache用戶賬號(hào)Shell無(wú)效
apache賬號(hào)不能用作常規(guī)登錄帳戶,應(yīng)該分配一個(gè)無(wú)效或nologin shell確保帳號(hào)不能用于登錄。apache賬號(hào)shell應(yīng)為:/sbin/nologin或/dev/null。
加固方法:修改apache賬號(hào)使用 nologin shell或例如 /dev/null 的無(wú)效shell,
# chsh -s /sbin/nologin apache
2.鎖定Apache用戶賬號(hào)
Apache運(yùn)行的用戶帳號(hào)不應(yīng)該有有效的密碼,應(yīng)該被鎖定。
加固方法:使用passwd命令鎖定apache賬號(hào)
# passwd -l apache
3.配置錯(cuò)誤日志
LogLevel指令用于設(shè)置錯(cuò)誤日志的嚴(yán)重級(jí)別。ErrorLog指令設(shè)置錯(cuò)誤日志文件名稱。日志級(jí)別值為emerg,alert,crit,error,warn,notice,info和debug的標(biāo)準(zhǔn)syslog級(jí)別。推薦級(jí)別為notice,以便記錄從emerg到notice級(jí)別的所有錯(cuò)誤。core模塊建議設(shè)置為info,以便任何“notfound”請(qǐng)求包含在錯(cuò)誤日志中。
加固方法:
a.在Apache配置中添加或修改LogLevel的值,core模塊設(shè)置為info或更低,所有其他模塊設(shè)置為notice或更低。如果需要更詳細(xì)的日志,并且存儲(chǔ)和監(jiān)視進(jìn)程能夠處理額外的負(fù)載,那么也可以設(shè)置為info或debug。建議值是 notice core:info。
LogLevel notice core:info
b.如果尚未配置,則添加ErrorLog指令。 文件路徑可能是相對(duì)的或絕對(duì)的,或者日志可能被配置為發(fā)送到系統(tǒng)日志服務(wù)器。
ErrorLog “l(fā)ogs/error_log”
c.如果虛擬主機(jī)有不同的人負(fù)責(zé)網(wǎng)站,為每個(gè)配置的虛擬主機(jī)添加一個(gè)類(lèi)似ErrorLog的指令。每個(gè)負(fù)責(zé)的個(gè)人或組織都需要訪問(wèn)他們自己的網(wǎng)絡(luò)日志,并需要技能/訓(xùn)練/工具來(lái)監(jiān)控日志。
4.禁用弱SSL協(xié)議
Apache SSLProtocol指令指定允許的SSL和TLS協(xié)議。由于SSLv2和SSLv3協(xié)議已經(jīng)過(guò)時(shí)并且易受信息泄露的攻擊,所以都應(yīng)該禁用。應(yīng)只啟用TLS協(xié)議。
加固方法:在Apache配置文件中查找SSLProtocol指令;如果不存在,則添加該指令,或修改該值以匹配以下值之一。如果還可以禁用TLSv1.0協(xié)議,則首選設(shè)置“TLSv1.1 TLS1.2”。
SSLProtocol TLSv1.1 TLSv1.2 SSLProtocol TLSv1
5.不安全的SSL Renegotiation應(yīng)被限制
為了Web服務(wù)器與OpenSSL 0.9.8m或更高版本連接,在Apache 2.2.15中添加了SSLInsecureRenegotiation指令,允許不安全的重新協(xié)商為使用較早的未修補(bǔ)SSL實(shí)現(xiàn)客戶端提供向后兼容性。在提供向后兼容性的同時(shí),啟用SSLInsecureRenegotiation指令會(huì)使服務(wù)器容易遭受中間人重新協(xié)商攻擊(CVE-2009-3555)。因此,不應(yīng)啟用SSLInsecureRenegotiation指令。
加固方法:在Apache配置文件中查找SSLInsecureRenegotiation指令。如果存在,將該值修改為off。
SSLInsecureRenegotiation off
6.TimeOut應(yīng)設(shè)置為小于等于10
TimeOut指令控制Apache HTTP服務(wù)器等待輸入/輸出調(diào)用完成的最長(zhǎng)時(shí)間(以秒為單位)。建議將TimeOut指令設(shè)置為10或更小。
加固方法:修改Apache配置文件,將TimeOut設(shè)置為10秒或更小。
Timeout 10
7.KeepAlive應(yīng)設(shè)置為On
KeepAlive指令決定當(dāng)處理完用戶發(fā)起的 HTTP 請(qǐng)求后是否立即關(guān)閉 TCP 連接。
加固方法:修改Apache配置文件,將KeepAlive設(shè)置為On,以啟用KeepAlive連接。
KeepAlive On
8.MaxKeepAliveRequests應(yīng)設(shè)置為大于等于100
當(dāng)KeepAlive啟用時(shí),MaxKeepAliveRequests指令限制每個(gè)連接允許的請(qǐng)求數(shù)量。如果設(shè)置為0,則允許無(wú)限制的請(qǐng)求。建議將MaxKeepAliveRequests設(shè)置為100或更大。
加固方法:修改Apache配置文件,將MaxKeepAliveRequests設(shè)置為100或更大。
MaxKeepAliveRequests 100
9.KeepAliveTimeout應(yīng)設(shè)置為小于等于15
KeepAliveTimeout指令指定在關(guān)閉持久連接前等待下一個(gè)請(qǐng)求的秒數(shù)。
加固方法:修改Apache配置文件,將KeepAliveTimeout設(shè)置為15或更小。
KeepAliveTimeout 15
10.禁用WebDAV模塊
Apache mod_dav和mod_dav_fs模塊支持Apache的WebDAV(網(wǎng)絡(luò)分布式創(chuàng)作與版本管理)功能。 WebDAV是HTTP協(xié)議的擴(kuò)展,允許客戶端創(chuàng)建,移動(dòng)和刪除Web服務(wù)器上的文件和資源。
加固方法:
a.對(duì)于靜態(tài)模塊的源碼版本,運(yùn)行Apache 。/configure腳本時(shí)在--enable-modules=configure選項(xiàng)中不包括mod_dav和mod_dav_fs。
$ cd $DOWNLOAD/httpd $ 。/configure
b.對(duì)于動(dòng)態(tài)加載的模塊,在apache配置文件中注釋掉或刪除mod_dav和mod_dav_fs模塊的LoadModule指令。
# LoadModule dav_module modules/mod_dav.so # LoadModule dav_fs_module modules/mod_dav_fs.so
11.隱藏Apache版本號(hào)及其他敏感信息
配置Apache ServerTokens指令提供最少的信息。通過(guò)將該值設(shè)置為Prod或ProductOnly,服務(wù)器HTTP響應(yīng)頭中給出的唯一版本信息將是“Apache”,而不是提供已安裝的模塊和版本的詳細(xì)信息。禁用在服務(wù)器生成文檔(如錯(cuò)誤頁(yè)面)底部生成簽名行作為頁(yè)腳的服務(wù)器簽名。
加固方法:Apache配置文件中ServerToken應(yīng)設(shè)置為:Prod,ServerSignature應(yīng)設(shè)置為:Off
12.防止默認(rèn)Apache內(nèi)容的泄漏信息
在之前的建議中,刪除了默認(rèn)內(nèi)容,如Apache手冊(cè)和默認(rèn)CGI程序。但是,如果要進(jìn)一步限制有關(guān)Web服務(wù)器的信息泄露,例如圖標(biāo)等默認(rèn)內(nèi)容不留在Web服務(wù)器上也很重要。
加固方法:
a.默認(rèn)的源碼版本將自動(dòng)索引和圖標(biāo)配置放在extra/httpd-autoindex.conf文件中,因此可以通過(guò)在主httpd.conf文件中將include行注釋掉來(lái)禁用:
# Fancy directory listings # Include xxx/httpd-autoindex.conf
b.或者,可以將圖標(biāo)alias指令和目錄訪問(wèn)控制注釋掉,如下:
# We include the /icons/ alias for FancyIndexed directory listings. If # you do not use FancyIndexing, you may comment this out. # #Alias /icons/ “/var/www/icons/” #《Directory “/var/www/icons”》 # Options Indexes MultiViews FollowSymLinks # AllowOverride None # Order allow,deny # Allow from all #《/Directory》
13.禁用HTTP TRACE方法
使用Apache TraceEnable禁用HTTP TRACE請(qǐng)求方法。因HTTP TRACE存在跨站攻擊漏洞。
加固方法:找到例如httpd.conf的主要Apache配置文件。在server級(jí)配置中將TraceEnable設(shè)置為off。server級(jí)配置是頂級(jí)配置,不嵌套在任何其他如《Directory》或《Location》的指令中。
14.限制所有目錄覆蓋
Apache AllowOverride允許使用.htaccess文件來(lái)覆蓋大部分配置,包括身份驗(yàn)證,文檔類(lèi)型處理,自動(dòng)生成的索引,訪問(wèn)控制和選項(xiàng)。當(dāng)服務(wù)器找到一個(gè).htaccess文件(由AccessFileName指定)時(shí),它需要知道該文件中聲明的哪個(gè)指令可以覆蓋較早的訪問(wèn)信息。當(dāng)這個(gè)指令設(shè)置為None時(shí),那么.htaccess文件將被完全忽略。在這種情況下,服務(wù)器甚至不會(huì)嘗試讀取文件系統(tǒng)中的.htaccess文件。當(dāng)這個(gè)指令設(shè)置為All時(shí),在 .htaccess文件中允許任何具有.htaccess上下文的指令。
加固方法:Apache配置文件中的《Directory》中應(yīng)設(shè)置:AllowOverride None
15.刪除默認(rèn)CGI內(nèi)容test-cgi
大多數(shù)Web服務(wù)器(包括Apache安裝)都帶有不需要或不適合生產(chǎn)使用的默認(rèn)CGI內(nèi)容。這些示例程序的主要作用是展示W(wǎng)eb服務(wù)器的功能。apache安裝的一個(gè)常見(jiàn)的默認(rèn)CGI內(nèi)容是腳本test-cgi。這個(gè)腳本將打印回請(qǐng)求者的CGI環(huán)境變量,其中包括許多服務(wù)器配置細(xì)節(jié)。
加固方法:
a.通過(guò)Script,ScriptAlias,ScriptAliasMatch或ScriptInterpreterSource指令找到在Apache配置中啟用的cgi-bin文件和目錄。
b.刪除cgi-bin目錄中的printenv默認(rèn)CGI(如果已安裝)。
0x03 總結(jié)
對(duì)Apache進(jìn)行安全配置可以有效的防范一些常見(jiàn)安全問(wèn)題,按照基線標(biāo)準(zhǔn)做好安全配置能夠減少安全事件的發(fā)生。國(guó)內(nèi)常見(jiàn)的基線標(biāo)準(zhǔn)有中國(guó)信息安全等級(jí)保護(hù)、電信網(wǎng)和互聯(lián)網(wǎng)安全防護(hù)基線配置要求及檢測(cè)要求,美國(guó)CIS基線也有詳細(xì)的Apache基線標(biāo)準(zhǔn),不同的企業(yè)也可以根據(jù)自身企業(yè)業(yè)務(wù)制定符合自己企業(yè)的安全基線標(biāo)準(zhǔn)。
評(píng)論
查看更多