Web服務器攻擊常利用Web服務器軟件和配置中的漏洞,針對這些漏洞最佳做法是遵循一些方法搭建並運行Web服務器,本文詳解了Web服務器保護的一些方法。
Web安全分為兩大類:
· Web服務器的安全性(Web服務器本身安全和軟件配置)。
· Web應用程序的安全性(在Web服務器上運行的Java、 ActiveX、PHP、ASP代碼的安全)。
Web服務器面臨的攻擊
Web服務器攻擊利用Web服務器軟件和配置中常見的漏洞。這些漏洞包括:
· 緩沖區溢出
· 文件目錄遍歷
· 腳本權限
· 文件目錄浏覽
· Web服務器軟件默認安裝的示例代碼
· Web服務器上運行的其他軟件中的漏洞,例如SQL數據庫軟件
讓我們對上訴漏洞依個進行深入地探討。
1.緩沖區溢出
緩沖區溢出允許惡意代碼注入到應用程序,它損壞應用程序的堆棧——內存中存儲應用程序代碼的一個地方——並用不同的代碼代替原始代碼的一部分來實現攻擊者的目的,例如運行特洛伊木馬程序或遠程控制應用程序。以下是緩沖區溢出漏洞的一個簡單示例代碼,使用C語言編寫:
char aTmp[100];
scanf("%s",aTmp);
在第一行中,程序員聲明一個長度為100的數組aTmp。在第二行中,scanf方法從控制台讀取數據存到aTmp數組。代碼不會檢查%s 變量是否能夠容納輸入數據的大小。因為程序員編碼過程不對輸入字符串的大小進行檢查,如果給定的輸入超過100個字符,就會造成緩沖區溢出。一個精心構造構的輸入中可能包含匯編代碼,這部分匯編代碼能夠獲得源程序一樣的運行權限。
2.目錄遍歷
目錄遍歷是指訪問到了不是原先設想或允許的目錄(或文件夾)。例如,微軟IIS Web站點的默認文件夾為C:\inetpub,攻擊者可使用的目錄遍歷漏洞,在該文件夾之外去讀取他們本不該訪問的文件。詳細來說,假如有一個網址為“www.bad.com”的網站,其服務器代碼中包含目錄遍歷漏洞。攻擊者通過輸入以下URL就可以利用該漏洞:
http://www.bad.com/../autoexec.bat
URL中的“.../”告訴服務器上溯一個目錄,也就是“C:\”目錄(Web 服務器可以將斜槓轉換為反斜槓)。所以如果IIS服務器默認目錄為“c:\inetpub”,那麼該URL會轉到“C:\”目錄,攻擊者將能夠看到“c:\autoexec.bat”文件。除非將服務器配置好了避免目錄遍歷,不然所有目錄可能都是可訪問的。這種情況下,Web服務器將顯示“autoexec.bat”文件的內容,或者攻擊者選擇的任何其他文件。
值得注意的是:我們已經使用 IIS 作為示例;但是,此漏洞的利用不是針對IIS服務器的,在其他的Web 服務器上也有目錄遍歷漏洞。
3.腳本權限
為了運行通用網關接口(CGI)、Perl或者其他服務端應用程序,管理員必須授予對服務器端應用程序所在的目錄以可執行權限。一些管理員給錯誤位置授予此權限(通常是因為他們不明白這麼做會帶來的問題)。讓我們看看下面的示例,探討如果管理員將此權限授予C盤下的所有目錄將發生什麼。
http://www.bad.com/../winnt/system32/cmd.exe%20%2fc%20dir
首先我們來破譯這神秘的URL。某些字符如空格和斜槓,不能出現在URL中,因為URL是限於7 -bit編碼的ASCII碼。然而,某些情況下還是會使用到這些字符。可行的辦法是使用其十六進制的字符來表示,或者使用類似ASCII的base 16編碼。Base 16 使用字母a、b、c、d、e 和f來表示大於9的數字。舉例來說,字母a表示十六進制中的數字10,f表示15,並使用10表示數字16。所以,在前面的示例:
· 空格使用ASCII編碼表示為十進制的32,使用十六進制則為20,因此變成%20。
· 斜槓(/)使用ASCII編碼表示為十進制的47,使用十六進制則為2f,因此變成%2f。
經Web服務器解析後,就成為下面的URL:
../winnt/system32/cmd.exe /c dir
這是要執行“cmd.exe”並告訴它執行“dir”命令。“cmd.exe”是位於“C:\winnt\system32”
文件夾中的命令外殼。“Dir”命令列出當前目錄中的所有文件,並將結果返回給用戶。當然,這是只是一個簡單的例子,攻擊者可以執行更復雜的命令以達到刪除、運行或修改Web服務器上數據的目的。
圖1是IIS目錄權限的配置的截屏。最佳做法是只給包含需要執行的服務端應用的文件夾設置可執行的權限,而不是包含可被攻擊者利用的軟件的文件夾,例如包含“cmd.exe”或者其他內置的操作系統命令。
圖1 IIS腳本權限控制台的屏幕截圖