新聞中心
本文主要分為兩大部分,第一部分介紹了Nginx的一些常見(jiàn)安全漏洞的形成原因、利用方法,并給出了相應(yīng)的解決辦法;第二部分介紹了Nginx安全加固時(shí)需要關(guān)注的主要內(nèi)容。

將樂(lè)網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)公司,將樂(lè)網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為將樂(lè)上1000+提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的將樂(lè)做網(wǎng)站的公司定做!
Nginx(發(fā)音同engine x)是一款輕量級(jí)的Web服務(wù)器/反向代理服務(wù)器及電子郵件(IMAP/POP3)代理服務(wù)器,由俄羅斯的程序設(shè)計(jì)師Igor Sysoev所開(kāi)發(fā),可以穩(wěn)定地運(yùn)行在Linux、Windows等操作系統(tǒng)上,其特點(diǎn)是占用內(nèi)存少,并發(fā)能力強(qiáng)。
同其他軟件一樣,Nginx也出現(xiàn)過(guò)一些安全漏洞,利用這些漏洞可以對(duì)Web服務(wù)器進(jìn)行滲透攻擊。
下面我們通過(guò)實(shí)例來(lái)介紹幾個(gè)關(guān)于Nginx的安全漏洞,以及相應(yīng)的漏洞利用方法。
Nginx漏洞分析實(shí)例
Nginx文件類型錯(cuò)誤解析漏洞
在2010年的時(shí)候,國(guó)內(nèi)安全組織80Sec發(fā)現(xiàn)了一個(gè)Nginx文件類型解析漏洞,但實(shí)際上這個(gè)并非Nginx本身的漏洞,而是由于配置導(dǎo)致的安全問(wèn)題。下面我們?cè)敿?xì)分析一下這個(gè)漏洞。
漏洞分析:Nginx默認(rèn)是以CGI的方式支持PHP解析的,普遍的做法是在Nginx配置文件中通過(guò)正則匹配設(shè)置SCRIPT_FILENAME。配置文件中會(huì)有類似如下內(nèi)容,如圖1所示。
圖1
location對(duì)請(qǐng)求進(jìn)行選擇的時(shí)候會(huì)使用URI環(huán)境變量進(jìn)行選擇,其中傳遞到后端Fastcgi的關(guān)鍵變量SCRIPT_FILENAME是由Nginx生成的$fastcgi_script_name來(lái)決定的。而通過(guò)分析可以看到$fastcgi_script_name是直接由URI環(huán)境變量控制的,這里就是產(chǎn)生問(wèn)題的點(diǎn)。當(dāng)訪問(wèn)http://192.168.1.103/phpinfo.jpg/1.php這個(gè)URL時(shí),$fastcgi_script_name會(huì)被設(shè)置為“phpinfo.jpg/1.php”,然后構(gòu)造成SCRIPT_FILENAME傳遞給PHP CGI,但是PHP為什么會(huì)接受這樣的參數(shù),并將phpinfo.jpg作為PHP文件解析呢?
這就要說(shuō)到fix_pathinfo這個(gè)選項(xiàng)了,如圖2所示。
圖2
如果開(kāi)啟了這個(gè)選項(xiàng),那么就會(huì)觸發(fā)在PHP中的如下邏輯,如圖3所示。
圖3
到這里,PHP會(huì)認(rèn)為SCRIPT_FILENAME是phpinfo.jpg,而1.php是PATH_INFO,所以就會(huì)將phpinfo.jpg作為PHP文件來(lái)解析了。
漏洞危害:利用該漏洞,攻擊者可以將任意文件類型作為PHP文件解析,攻擊者通常利用該漏洞來(lái)獲取到一個(gè)WebShell。
漏洞利用:假設(shè)某一服務(wù)器存在該漏洞,攻擊者可以通過(guò)上傳一張包含PHP后門代碼的圖片來(lái)獲取WebShell,這是一種常見(jiàn)的攻擊方式,如圖4所示。
圖4
解決方案:這里介紹兩種解決方案:一、修改php.ini文件,將cgi.fix_pathinfo的值設(shè)置為0;二、在Nginx配置文件中添加以下代碼:
if ( $fastcgi_script_name ~ \..*\/.*php ) {
return 403;
}
這行代碼的意思是當(dāng)匹配到類似test.jpg/a.php的URL時(shí),將返回403錯(cuò)誤代碼,如圖5所示。
圖5
Nginx配置錯(cuò)誤而導(dǎo)致目錄遍歷漏洞
在Nginx的配置文件中如果開(kāi)啟了autoindex選項(xiàng),并采用類似下面的配置時(shí)會(huì)造成目錄遍歷漏洞,如圖6所示。
圖6
當(dāng)訪問(wèn)http://192.168.1.103/test/這個(gè)URL時(shí),正常情況應(yīng)該遍歷html/test/這個(gè)目錄,但是如果訪問(wèn)http://192.168.1.103/test../這個(gè)URL時(shí),則會(huì)遍歷上一級(jí)目錄(html/)了。
下面我們通過(guò)一個(gè)實(shí)例來(lái)演示下這個(gè)漏洞,先來(lái)看下正常訪問(wèn)時(shí)返回的頁(yè)面,如圖7所示。
圖7
現(xiàn)在我們?cè)賮?lái)看下漏洞被觸發(fā)后返回的頁(yè)面,如圖8所示。
圖8
通過(guò)圖8所示的返回結(jié)果,我們可以看到利用該漏洞我們成功遍歷到了其上一級(jí)目錄。
下面提供兩種方法來(lái)解決這個(gè)問(wèn)題,從中選擇一種即可,具體配置如下圖9所示。
圖9
現(xiàn)在我們?cè)賮?lái)驗(yàn)證下當(dāng)采用上面的代碼加固N(yùn)ginx以后,服務(wù)器是否還存在漏洞。
圖10
從圖10的返回結(jié)果可以看到漏洞沒(méi)有被觸發(fā),而是返回了404頁(yè)面,說(shuō)明漏洞被修復(fù)。
Nginx安全加固
針對(duì)Nginx的安全加固,主要從以下兩個(gè)方面考慮:一、Nginx Web Server程序本身是否安全,如是否存在安全漏洞;二、Nginx Web Server是否提供了可使用的安全功能,這部分主要是檢查Nginx的配置是否得當(dāng),是否存在由于配置失誤導(dǎo)致的安全問(wèn)題。
Nginx版本的選擇與安裝注意事項(xiàng)
在選擇Nginx版本時(shí),需要關(guān)注是否存在安全漏洞和版本的穩(wěn)定性。一般選擇最新的穩(wěn)定版本,這樣可以在穩(wěn)定性和安全之間取得一個(gè)平衡。在升級(jí)Nginx版本前建議先在測(cè)試環(huán)境中測(cè)試通過(guò)后再正式升級(jí),以避免由于兼容性帶來(lái)其他不可預(yù)知的問(wèn)題。
關(guān)于Nginx的安全漏洞可以關(guān)注Nginx官方發(fā)布的安全公告(http://nginx.org/en/security_advisories.html)或到其他一些漏洞發(fā)布平臺(tái)上查找。
在安裝Nginx時(shí)建議使用自定義安裝路徑,如果采用默認(rèn)安裝路徑,很容易被攻擊者和一些自動(dòng)化攻擊工具猜測(cè)到,為其進(jìn)行下一步的攻擊提供便利。
Nginx安全配置
1. 修改/隱藏Nginx Banner信息
攻擊者在對(duì)目標(biāo)服務(wù)器進(jìn)行滲透攻擊前,通常會(huì)有一個(gè)目標(biāo)信息收集階段,這個(gè)階段的任務(wù)就是通過(guò)各種手段獲取到目標(biāo)服務(wù)器的信息,如獲取目標(biāo)服務(wù)器的系統(tǒng)版本、Web、數(shù)據(jù)庫(kù)的類型及相關(guān)信息,這個(gè)階段獲取到的信息將直接關(guān)系到攻擊者下一步采取的攻擊手段。因此,修改/隱藏Nginx的相關(guān)信息將在一定程度上可以增大攻擊者的攻擊難度,也可以騙過(guò)一些自動(dòng)化攻擊工具。
在Linux平臺(tái)下以源碼方式安裝Nginx時(shí),可以通過(guò)修改“src/core/nginx.h”中的信息來(lái)達(dá)到隱藏或自定義Banner信息的目的。
我們先來(lái)看下nginx.h這個(gè)文件中默認(rèn)的內(nèi)容,類似圖11所示。
圖11
這時(shí)當(dāng)我們?cè)L問(wèn)Nginx服務(wù)器時(shí),Server字段會(huì)返回真實(shí)的Banner信息,如圖12所示。
圖12
現(xiàn)在我們來(lái)自定義nginx.h中關(guān)于Banner信息的內(nèi)容,可參考圖13。
圖13
修改完成后,重新編譯Nginx,然后安裝即可。安裝完成后,我們?cè)賮?lái)訪問(wèn)下該Nginx服務(wù)器,發(fā)現(xiàn)這時(shí)Server返回的內(nèi)容為自定義的Banner信息了,如圖14所示。
圖14
2. Nginx日志安全
不論在那種服務(wù)器上,日志都是一個(gè)非常重要的部分,我們需要對(duì)它嚴(yán)加保護(hù)。在Nginx上也是如此。Nginx的日志默認(rèn)存放在安裝目錄的logs目錄下,首先要修改日志的默認(rèn)保存路徑,然后設(shè)置只允許管理員有日志存放目錄的完全控制權(quán)限。
3. Nginx權(quán)限設(shè)置
Nginx權(quán)限設(shè)置分為Nginx運(yùn)行權(quán)限設(shè)置和網(wǎng)站目錄權(quán)限設(shè)置兩部分。
Nginx運(yùn)行權(quán)限是指Nginx以什么權(quán)限運(yùn)行,以管理員權(quán)限運(yùn)行是一個(gè)非常糟糕的決定。這樣的后果是攻擊者一旦攻擊成功,將直接獲取到一個(gè)高權(quán)限的WebShell。因此,我們需要設(shè)置Nginx以一個(gè)低權(quán)限的身份運(yùn)行,可通過(guò)修改“Nginx.conf”這個(gè)配置文件來(lái)實(shí)現(xiàn)。
網(wǎng)站目錄權(quán)限設(shè)置則要遵循以下原則:
a) 如果目錄有寫(xiě)入權(quán)限,一定不要分配執(zhí)行權(quán)限
b) 如果目錄有執(zhí)行權(quán)限,一定不要分配寫(xiě)入權(quán)限
c) 網(wǎng)站上傳目錄和數(shù)據(jù)庫(kù)目錄一般需要分配“寫(xiě)入”權(quán)限,但一定不要分配執(zhí)行權(quán)限
d) 其他目錄一般只分配“讀取”權(quán)限即可
分享名稱:Nginx漏洞利用與安全加固
瀏覽地址:http://fisionsoft.com.cn/article/coghjgh.html


咨詢
建站咨詢
