Apache服務(wù)器安全配置

該文也是參考了網(wǎng)上好幾篇文章自己親自動(dòng)手又做了一遍,親自實(shí)現(xiàn)的時(shí)候也是遇到各種各樣的坑,總結(jié)了以下這些內(nèi)容,收獲很多。
提醒:在修改完配置文件之后一定要重啟服務(wù)!?。?!

0x00 思維導(dǎo)圖

Apache-security-config-0.png

0x01 錯(cuò)誤詳情頁(yè)banner隱藏

黑客在滲透的過(guò)程中,收集服務(wù)器的信息是至關(guān)重要的,這對(duì)于他在后期漏洞的利用上有很大的幫助。

錯(cuò)誤詳情頁(yè)

測(cè)試方法:

在訪問(wèn)站點(diǎn)時(shí),隨便訪問(wèn)一個(gè)不存在的頁(yè)面,如果站點(diǎn)沒(méi)做404重定向的話,就會(huì)泄露一些敏感信息。詳情如下圖:

Apache-security-config-1.png

查看響應(yīng)頭信息:

$curl -I  http://114.115.214.203/zk/shell.php
HTTP/1.1 200 OK
Date: Tue, 05 Dec 2017 07:47:46 GMT
Server: Apache/2.4.7 (Ubuntu)         #中間件版本及操作系統(tǒng)
X-Powered-By: PHP/5.5.9-1ubuntu4.22   # 顯示服務(wù)端腳本語(yǔ)言及版本號(hào)
Content-Type: text/html; charset=UTF-8

修復(fù)方法:

1)修改配置文件:/etc/apache2/apache2.conf或者/etc/httpd/conf/httpd.conf隱藏中間件信息。修改或者添加以下配置:
ServerTokens Prod
ServerSignature Off
2)修改配置文件:/etc/php5/apache2/php.ini第367行隱藏PHP信息,將expose_php = On修改為Off
 376 expose_php =  Off
3)保存退出之后,重啟apache服務(wù)。
root@ubuntu:~# service apache2 restart
 * Restarting web server apache2                                         [ OK ]
4)再次訪問(wèn)不存在的頁(yè)面,已經(jīng)沒(méi)有banner信息了。
Apache-security-config-2.jpg
$curl -I  http://114.115.214.203/zk/shell.php
HTTP/1.1 200 OK
Date: Tue, 05 Dec 2017 07:51:41 GMT
Server: Apache
Content-Type: text/html; charset=UTF-8

0x02 重定向404頁(yè)面

什么是404頁(yè)面

當(dāng)用戶請(qǐng)求一個(gè)網(wǎng)站不存在的資源的時(shí)候服務(wù)器會(huì)返回一個(gè)404的錯(cuò)誤頁(yè)面。如下圖所示:

Apache-security-config-3.png

為什么要自定義404頁(yè)面

1)通過(guò)上圖可以看出,默認(rèn)的404頁(yè)面是非常不友好的。當(dāng)一個(gè)用戶訪問(wèn)到一些不存在的頁(yè)面或者錯(cuò)誤的鏈接時(shí),如果我們沒(méi)有制作一個(gè)頁(yè)面去引導(dǎo)用戶訪問(wèn)該站點(diǎn)的其它頁(yè)面時(shí),會(huì)損失大量的用戶。
2)自定義404頁(yè)面會(huì)告訴百度、谷歌、bing等搜索引擎的爬蟲(chóng),這條記錄本站已經(jīng)刪除,請(qǐng)搜索放棄收錄,利于seo優(yōu)化。

加固步驟

1) 在網(wǎng)站根目錄新建一個(gè).htaccess文件

ErrorDocument 404 /404.html

2) 在同目錄下新建404.html,文件名與上一步指定的文件名相同。
<!DOCTYPE html>
<html>
<head>
    <title>404頁(yè)面</title>
</head>
<body>
Hello,This is 404 page!!
</body>
</html>
3) 此時(shí)我們自定義的頁(yè)面已經(jīng)生效,如下圖所示:
Apache-security-config-4.png

真實(shí)的404頁(yè)面是需要設(shè)計(jì)的,沒(méi)有這樣簡(jiǎn)陋。符合網(wǎng)站自身的設(shè)計(jì)風(fēng)格,最好能加入網(wǎng)站導(dǎo)航和底部。

注意事項(xiàng)

1、不要將404錯(cuò)誤直接轉(zhuǎn)向到網(wǎng)站首頁(yè),這將導(dǎo)致首頁(yè)不被收錄;
2、/404.html 前面不要帶主域名,否則返回的狀態(tài)碼是302或200狀態(tài)碼;
3、自定義的404頁(yè)面必須是大于512B,如果小于這個(gè)大小,瀏覽器就不會(huì)執(zhí)行;

0x03 列目錄問(wèn)題

什么是列目錄

當(dāng)Web服務(wù)器配置不當(dāng)?shù)臅r(shí)候,如果當(dāng)前目錄不存在默認(rèn)文件(比如index.html),Apache會(huì)列出當(dāng)前目錄下所有文件,造成敏感信息泄露。如下圖所示:

Apache-security-config-5.png

修復(fù)方法

修改配置文件/etc/apache2/apache2.conf或者/etc/httpd/conf/httpd.conf
164 <Directory /var/www/>   #這邊必須是網(wǎng)站根路徑
165     Options Indexes FollowSymLinks
166     AllowOverride All
167     Require all granted
168 </Directory>

Options Indexes FollowSymLinks
這里的indexes 是指在目錄中要存在index文件,如果不存在把文件列出來(lái),如果存在index文件可以直接顯示index文件,因此每個(gè)目錄都必須存在index文件,如果不存在有可能此目錄把文件全部列出來(lái)。

刪除Indexes這個(gè)參數(shù),然后重啟apache服務(wù)。service apache2 restart
164 <Directory /var/www/>   #這邊必須是網(wǎng)站根路徑
165     Options FollowSymLinks
166     AllowOverride All
167     Require all granted
168 </Directory>
再次訪問(wèn)就出現(xiàn)403 Forbidden頁(yè)面
Apache-security-config-6.png

0x04 文件權(quán)限問(wèn)題

控制文件權(quán)限的意義

現(xiàn)在大部分站點(diǎn)都存在文件上傳,比如說(shuō)頭像上傳,附件上傳等等。如果在代碼層對(duì)上傳的文件限制的不夠嚴(yán)格,很容易被上傳Webshell。一旦被上傳Webshell對(duì)服務(wù)器造成十分大的威脅。如下圖所示:

[圖片上傳中...(Apache-security-config-7.png-bc7db5-1512700791341-0)]

加固方法

如果我們對(duì)存放上傳文件的目錄限制腳本執(zhí)行的權(quán)限的話,上傳的腳本文件就無(wú)法執(zhí)行,在一定程度上能夠減輕黑客攻擊造成的危害,并且還不影響正常的業(yè)務(wù),上穿的圖片不需要執(zhí)行權(quán)限,也能正常打開(kāi)。

修改配置文件/etc/apache2/apache2.conf或者/etc/httpd/conf/httpd.conf

170 <Directory /var/www/html/zk/> #這里文件夾設(shè)置想要限制的 
171     php_flag engine off
172 </Directory>

此時(shí)上傳的小馬已經(jīng)無(wú)法執(zhí)行

Apache-security-config-8.png

Apache-security-config-9.png

0x05 服務(wù)器運(yùn)行權(quán)限問(wèn)題

查看Apache的進(jìn)程:lsof -i:80

root@ubuntu:~# lsof -i:80
COMMAND   PID     USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
apache2 11302     root    4u  IPv6 28205389      0t0  TCP *:http (LISTEN)
apache2 11304 www-data    4u  IPv6 28205389      0t0  TCP *:http (LISTEN)
apache2 11305 www-data    4u  IPv6 28205389      0t0  TCP *:http (LISTEN)
apache2 11306 www-data    4u  IPv6 28205389      0t0  TCP *:http (LISTEN)
apache2 11307 www-data    4u  IPv6 28205389      0t0  TCP *:http (LISTEN)
apache2 11308 www-data    4u  IPv6 28205389      0t0  TCP *:http (LISTEN)
apache2 13248 www-data    4u  IPv6 28205389      0t0  TCP *:http (LISTEN)
apache2 14885 www-data    4u  IPv6 28205389      0t0  TCP *:http (LISTEN)

或者ps aux|grep apache|grep -v grep

root@ubuntu:~# ps -aux | grep apache |grep -v grep
root      11302  0.0  0.2  71104  2340 ?        Ss   Dec04   0:03 /usr/sbin/apache2 -k start
www-data  11304  0.0  0.2  71176  2252 ?        S    Dec04   0:00 /usr/sbin/apache2 -k start
www-data  11305  0.0  0.2  71176  2256 ?        S    Dec04   0:00 /usr/sbin/apache2 -k start
www-data  11306  0.0  0.2  71200  2284 ?        S    Dec04   0:00 /usr/sbin/apache2 -k start
www-data  11307  0.0  0.2  71184  2252 ?        S    Dec04   0:00 /usr/sbin/apache2 -k start
www-data  11308  0.0  0.2  71176  2276 ?        S    Dec04   0:00 /usr/sbin/apache2 -k start
www-data  13248  0.0  0.2  71176  2352 ?        S    Dec04   0:00 /usr/sbin/apache2 -k start
www-data  14885  0.0  0.2  71176  2368 ?        S    Dec04   0:00 /usr/sbin/apache2 -k start

第一行是Apache的主進(jìn)程,是以root運(yùn)行的。因?yàn)锳pache的Web開(kāi)放的端口是80或者443,小于1024的端口需要有root權(quán)限,因此主進(jìn)程必須是root.從第二行開(kāi)始為Apache的子進(jìn)程。用戶為www-data,是Ubuntu中運(yùn)行服務(wù)的默認(rèn)用戶,權(quán)限較低。

如果用戶為www-data用戶的話,此時(shí)就算黑客拿到一個(gè)webshell,權(quán)限也是比較底的。如下圖所示:


Apache-security-config-10.png

如果管理配置不當(dāng)(默認(rèn)安裝為www-data),這里是高權(quán)限用戶的話,需要更高為低權(quán)限用戶。
配置文件路徑為:/var/apache2/envvars文件中16、17行進(jìn)行配置:

 15 # /etc/init.d/apache2, /etc/logrotate.d/apache2, etc.
 16 export APACHE_RUN_USER=www-data
 17 export APACHE_RUN_GROUP=www-data

0x06 Apache日志文件格式

Apache會(huì)生成兩個(gè)主要的日志文件,一個(gè)是Web訪問(wèn)日志access.log,一個(gè)是記錄服務(wù)器運(yùn)行時(shí)出錯(cuò)的日志error.log。

配置文件/etc/apache2/apache2.conf或者/etc/httpd/conf/httpd.conf中定義了日志格式

212 LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
213 LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
214 LogFormat "%h %l %u %t \"%r\" %>s %O" common
215 LogFormat "%{Referer}i -> %U" referer
216 LogFormat "%{User-agent}i" agent
217
218
219 CustomLog ${APACHE_LOG_DIR}/access.log common

212行是虛擬主機(jī)的日志格式
213行是組合日志格式
213行是通用的日志格式
219行自定義設(shè)置日志使用那個(gè)格式的日志

/var/log/apache2/access.log日志格式如下:

111.196.209.199 - - [05/Dec/2017:22:40:02 +0800] "GET /zk/shell.php HTTP/1.1" 304 164 "http://114.115.214.203/zk/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36"

遠(yuǎn)端主機(jī):111.196.209.199
遠(yuǎn)端登錄名:-
遠(yuǎn)程用戶名:-
訪問(wèn)時(shí)間:[05/Dec/2017:22:40:02 +0800]
HTTP請(qǐng)求:GET /zk/shell.php HTTP/1.1
HTTP狀態(tài)碼:304
發(fā)送的字節(jié)數(shù):164
Referer:http://114.115.214.203/zk/
User-Agent:"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36"

/var/log/apache2/error.log日志格式如下:

[Tue Dec 05 22:39:10.798632 2017] [core:notice] [pid 2970] AH00094: Command line: '/usr/sbin/apache2'

[日期和時(shí)間]   [錯(cuò)誤等級(jí)]   錯(cuò)誤消息
在服務(wù)器受到入侵之后,我們可以觀察訪問(wèn)日志來(lái)溯源。當(dāng)然如果access.log文件被刪除清空之后就會(huì)變的非常麻煩,因此很多大型企業(yè)都設(shè)置的日志服務(wù)器同步日志文件到其它服務(wù)器,這樣黑客想要徹底清除痕跡還需要搞定日志服務(wù)器。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容