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