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