Web安全漏洞可以分為兩類:一類包括平臺的安全漏洞,另一類是應(yīng)用自身的安全漏洞。
1.1.1 Web平臺的安全漏洞
Web平臺自身的安全漏洞——許多Web應(yīng)用程序共享的部分,例如Linux、Windows、Apaehe和oraele等。它們扮演著以下角色:
n Web服務(wù)器 這一部分為用戶瀏覽器提供Web頁面。最常用的例子就是Apache和IIS。每種Web服務(wù)器都有一系列安全漏洞。
n 應(yīng)用服務(wù)器 這一部分包括用戶操作、解釋、提供數(shù)據(jù)。應(yīng)用服務(wù)器可以是Web服務(wù)器的一部分,例如PHP和Apache、ASP.NET和IIS。另一方面,應(yīng)用服務(wù)器可以是物理上獨立的服務(wù)器,例如Tomcat Servlet引擎。每種Web應(yīng)用服務(wù)器同樣有一系列安全漏洞。
n 數(shù)據(jù)庫 這一部分存儲應(yīng)用所需的全部數(shù)據(jù)。盡管用戶能夠與Web和應(yīng)用服務(wù)器交互,但他們通常不能直接訪問數(shù)據(jù)庫服務(wù)器。大多數(shù)情況下,應(yīng)用務(wù)器代理用戶和數(shù)據(jù)庫之間的數(shù)據(jù),并格式化數(shù)據(jù)使之能夠正確存儲。每種數(shù)據(jù)庫服務(wù)器也都有一系列安全漏洞。
Web應(yīng)用自身的安全漏洞,即Web站點中的編程錯誤引起的暴露用戶的詳細息、允許惡意用戶執(zhí)行任意的數(shù)據(jù)庫查詢,甚至允許通過遠程命令行訪問服務(wù)。
1.1.2 web應(yīng)用程序漏洞
基于Web的應(yīng)用程序漏洞是錯綜復(fù)雜的,常見的Web應(yīng)用程序漏洞有以下大類。
Ø 跨站點腳本攻擊
XSS又叫CSS (Cross Site Script) ,跨站腳本攻擊。它指的是惡意攻擊者往Web頁面里插入惡意html代碼,當(dāng)用戶瀏覽該頁之時,嵌入其中Web里面的html代碼會被執(zhí)行,從而達到惡意用戶的特殊目的。
Web頁面經(jīng)常在應(yīng)用程序的某個地方對用戶的輸入進行回顯。一般在預(yù)先設(shè)計好的某個特定域中輸入純文本才能被回顯,但是HTML并不僅僅支持純文本,還可以包含多種客戶端的腳本代碼,以此來完成許多操作,諸如驗證表單數(shù)據(jù),或者提供動態(tài)的用戶界面元素。
Ø SQL Injection攻擊
SQL命令就是攻擊者把SQL命令插入到Web表單的輸入域或頁面請求的查詢字符串,欺騙服務(wù)器執(zhí)行惡意的SQL命令。在某些表單中,用戶輸入的內(nèi)容直接用來構(gòu)造(或者影響)動態(tài)SQL命令,或作為存儲過程的輸入?yún)?shù),這類表單特別容易受到SQL注入式攻擊。
SQL命令即為應(yīng)用系統(tǒng)前端Web和后端數(shù)據(jù)庫之間的接口,使得數(shù)據(jù)可以傳遞至Web應(yīng)用程序,也可以從其中發(fā)送出來。很多Web站點都會利用用戶輸入的參數(shù)動態(tài)的生成SQL查詢要求,攻擊通過在URL、表格域,或者其他的輸入域中輸入自已的SQL命令,以此改變查詢屬性騙過應(yīng)用程序,從而可以對數(shù)據(jù)庫進行不受限制的訪問。
Ø 物理路徑泄露漏洞
物理路徑泄露,即攻擊者可能利用此漏洞得到的信息對系統(tǒng)進行進一步的攻擊,提供Web、FTP、SMTP等公共服務(wù)器都可能出現(xiàn)物理路徑泄露的問題。
物理路徑泄露屬于低風(fēng)險等級缺陷,它的危害一般被描述為“攻擊者可以利用此漏洞得到信息,來對系統(tǒng)進一步地攻擊”。導(dǎo)致Web服務(wù)器路徑泄露的原因有很多,可能是Web平臺本身、腳本語言解釋器、引擎插件、組件、輔助程序等一些原因錯誤導(dǎo)致的。很多時候Web服務(wù)器路徑泄露漏洞是由于Web服務(wù)器處理用戶請求出錯導(dǎo)致的,如通過提交一個超長的請求,或者是某個精心構(gòu)造的特殊請求,或者是請求一個Web服務(wù)器上不存在的文件。這些請求都有一個共同特點,那就是被請求的文件肯定屬于CGI腳本,而不是靜態(tài)HTML頁面。比如,提交一個不存在的CGI文件請求,或者提交一個沒有輸出的CGI文件的請求,請求返回結(jié)果將會把網(wǎng)站本身所在的物理路徑給暴露出來。
另一種類型的Web服務(wù)器路徑泄露漏洞是由于Web服務(wù)器的某些顯示環(huán)境變量的程序錯誤輸出了Web服務(wù)器的物理路徑。
同時,在Web應(yīng)用網(wǎng)站開發(fā)過程中,程序員沒有合理應(yīng)用編程語言提供的出錯處理函數(shù)。例如Perl中的“die”函數(shù),如果沒有在錯誤信息后面加上“\n”的話,就很可能會導(dǎo)致物理路徑泄露。
Ø 源代碼泄露漏洞
源代碼泄露漏洞的產(chǎn)生是由于輸入驗證錯誤引起的。
以IIS為例,IIS是通過文件擴展名來決定將一個文件內(nèi)容直接顯示出來還是作為腳本執(zhí)行的。對于ASP文件,如果請求中的擴展名是“.asp”那么IIS可以正確處理。如果將擴展名后面加一個“%81”,IIS將不認為這是一個ASP文件,也就不會執(zhí)行。但是文件系統(tǒng)會忽略文件名后的“%81”,可以正確找到文件。例如請求URL為:http://www.megamoneycorp.com/getreport.asp?item=Q1-2005.htm,則可以構(gòu)造URL:http://www.megamoneycorp.com/getreport.asp?item=getreport.asp,以顯示源代碼。
Ø 目錄遍歷漏洞
目錄遍歷攻擊指的是惡意用戶找到受限文件的位置并且瀏覽或者執(zhí)行它們。
Web服務(wù)器程序(包括Web應(yīng)用程序)就是向用戶提供包含動態(tài)或者靜態(tài)頁面,這些頁面都存儲在Web服務(wù)器中。Web服務(wù)器和Web應(yīng)用程序的作用就是對這些頁面進行處理并將其發(fā)送到客戶機上,同時將正在訪問的用戶限制在表示Web內(nèi)容的文件中,而且還需要阻止攻擊者瀏覽和執(zhí)行Web服務(wù)器上的任何其它文件。目錄遍歷主要使用猜測文件是否存在的方法進行。
Ø 執(zhí)行任意命令
執(zhí)行任意命令即執(zhí)行任意操作系統(tǒng)命令,主要包括兩種情況:一是通過遍歷目錄,如二次解碼和UNICODE解碼漏洞,來執(zhí)行系統(tǒng)命令;另外一種就是Web服務(wù)器把用戶提交的請求作為SSI指令解析,因此導(dǎo)致執(zhí)行任意命令。
在Web發(fā)展的早期,程序員利用C語言或者Perl語言編寫Web應(yīng)用程序,存放于Unix服務(wù)器上。這個理念就是編寫短小的應(yīng)用程序,并且將他們連接起來,完成更復(fù)雜的功能。在安全方面,當(dāng)數(shù)據(jù)被傳送到一個不同環(huán)境的其他組件中時,會對Web服務(wù)器造成很大的安全漏洞,使得攻擊變得異常的容易。這種攻擊背后的思想就是運行自已輸入的命令,而不是按照開發(fā)人員預(yù)期的那樣,執(zhí)行某個指定的程序。
攻擊這種漏洞的目標是發(fā)送到服務(wù)器上的操作系統(tǒng)命令或者可執(zhí)行程序的用戶輸入。這些輸入域的一部分會常出現(xiàn)在應(yīng)用程序的參數(shù)中,這些參數(shù)可能是頁面中包含的一些被引用的文件,也可能是其他程序的參數(shù)。
Ø 緩沖區(qū)溢出漏洞
緩沖區(qū)溢出攻擊是指在擾亂具有某些特權(quán)運行的程序的功能的前提下,使得攻擊者取得程序的控制權(quán),如果該程序具有足夠的權(quán)限,那么整個主機就被控制了。一般而言,攻擊者攻擊root程序,然后執(zhí)行類似“exec(sh)”的執(zhí)行代碼來獲得root的shell,但不一直是這樣的。為了達到這個目的,攻擊者必須達到如下的兩個目標:(1)在程序的地址空間里安排適當(dāng)?shù)拇a。 (2)通過適當(dāng)?shù)爻跏蓟拇嫫骱痛鎯ζ鳎尦绦蛱D(zhuǎn)到我們安排的地址空間執(zhí)行。由于這類攻擊使任何人都有可能取得主機的控制權(quán),所以它代表了一類極其嚴重的安全威脅。
緩沖區(qū)溢出是針對Web應(yīng)用最嚴重的一種攻擊,當(dāng)程序無法檢查正在處理的數(shù)據(jù)輸入量時就有可能發(fā)生緩沖區(qū)溢出問題,如果輸入的數(shù)據(jù)量超過了程序為其分配的內(nèi)存空間的大小,它就會侵占其他程序堆棧的內(nèi)存空間,這些內(nèi)存中原有的其他數(shù)據(jù)就會被覆蓋。大多數(shù)情況下,這些被覆蓋的數(shù)據(jù)會導(dǎo)致軟件崩潰。
Ø 拒絕服務(wù)攻擊
服務(wù)拒絕攻擊企圖通過使你的服務(wù)計算機崩潰或把它壓跨來阻止你提供服務(wù)Q929230,服務(wù)拒絕攻擊是最容易實施的攻擊行為,主要包括:死亡之ping (ping of death)、淚滴(teardrop)、SYN洪水(SYN flood)、Land攻擊、Smurf攻擊、 Fraggle攻擊、 電子郵件炸彈、畸形消息攻擊等。
拒絕服務(wù)攻擊思想是,代碼的執(zhí)行總是需要時間的,每次調(diào)用函數(shù),或者是由Web服務(wù)器或者是由應(yīng)用程序或者是由數(shù)據(jù)庫,函數(shù)執(zhí)行的過程中總要耗費一定的處理器周期。如果執(zhí)行過程需要很長的時間,并且操作系統(tǒng)無法將其切換到其他的程序上,服務(wù)器就會被束縛在為一個請求進行服務(wù)的過程中。
Ø CGI漏洞攻擊
CGI 是 Common Gateway Interface 的縮寫,是服務(wù)器端和用戶溝通的程序,使得外部程序能生成HTML、圖像或者其他內(nèi)容,而服務(wù)器處理的方式與那些非外部程序生成的HTML、圖像或其他內(nèi)容的處理方式是相同的。
CGI程序是交互性的,它允許用戶把自已的數(shù)據(jù)按照一定的格式發(fā)送給服務(wù)器,然后由服務(wù)器對其進行解釋,之后再把解釋的結(jié)果傳給用戶,如果用戶提交了一些非正常的數(shù)據(jù),那么服務(wù)器在解釋這些數(shù)據(jù)時可能會繞過IIS對文件名所作的安全檢查,在某些條件下,攻擊者可以執(zhí)行任意系統(tǒng)命令。
Ø 被破壞的認證和會話管理
被破壞的認證和會話管理(Broken Authentieation and Session Mangement):授權(quán)和會話管理包括處理用戶授權(quán)和管理激活態(tài)的會話的所有方面。
授權(quán)是這個過程的關(guān)鍵方面,但是即使是固有的授權(quán)驗證也有可能遭到含有漏洞的信任管理功能破壞。這些固有的授權(quán)驗證包含修改密碼、忘記密碼、記住密碼、賬號更新和其它更新功能。在網(wǎng)絡(luò)中,通常的用戶授權(quán)包括userID和密碼的使用。功能更為強大的授權(quán)方法包括基于密碼標記或者統(tǒng)計的軟件和硬件,但是這種機制對于大多數(shù)的網(wǎng)絡(luò)應(yīng)用程序而言是一筆無法負擔(dān)的開銷。大多數(shù)的賬戶和會話管理漏洞可能導(dǎo)致對于用戶或者系統(tǒng)管理員賬號的破壞。開發(fā)團隊通常會低估設(shè)計這些保障網(wǎng)站信任授權(quán)和會話管理方案的復(fù)雜性,網(wǎng)絡(luò)應(yīng)用程序必須建立會話來跟蹤每個用戶的請求數(shù)據(jù)流。HTTP并不提供這方面的能力,所以網(wǎng)絡(luò)應(yīng)用程序必須自己創(chuàng)建它們。
Ø 不當(dāng)異常處理
不當(dāng)異常處理(Improper Error Handling)可能給網(wǎng)站帶來各種各樣的安全問題。最常見的問題就是向用戶顯示內(nèi)部出錯信息,如果這些出錯信息不加選擇都展現(xiàn)到用戶面前,那么就可能公開了本不應(yīng)該公開的細節(jié)。這些細節(jié)可能為攻擊者提供網(wǎng)站潛在漏洞的重要線索,并且這類信息也會干擾到正常用戶。
在正常操作時,Web應(yīng)用程序也會生成一些出錯情況,內(nèi)存不夠、空指針異常、系統(tǒng)調(diào)用失敗、數(shù)據(jù)庫不存在、網(wǎng)絡(luò)超時等。這些錯誤必須被一個即定的嚴密方案正確地處理,從而為用戶提供一份有意義的出錯信息,為Web應(yīng)用維護人員提供診斷信息,而不是為攻擊者提供有用的信息。有時即使出錯信息不能提供過多的細節(jié),出錯信息的差異也會把該Web應(yīng)用是如何工作的這樣重要的信息暴露出來:并且暴露了那些出錯信息背后的隱含意義。例如,當(dāng)一個用戶試圖訪問一份他無權(quán)訪問的文件時,通常出錯信息會給出如下提示“訪問被拒絕”,這種區(qū)別可能會暴露這個文件是否存在,或者這個Web應(yīng)用的目錄結(jié)構(gòu)。
Ø 不安全的存儲
大多數(shù)Web應(yīng)用程序都需要存儲敏感的信息,它們或者將信息存儲到數(shù)據(jù)庫中,或者將信息存儲到文件系統(tǒng)的某個位置上。通常,人們使用加密技術(shù)來保護這些敏感的信息,雖然加密技術(shù)已經(jīng)很容易使用,但是開發(fā)人員還是常常在將加密技術(shù)和應(yīng)用程序相結(jié)合的時候出錯。開發(fā)人員可能過高地估計了加密技術(shù)所帶來的安全度,并且他們不會像留意網(wǎng)站中其它部分的安全那樣注意存儲部分的安全。經(jīng)常出錯的幾個地方包括:
n 未對關(guān)鍵數(shù)據(jù)進行加密;
n 密鑰、證書和密碼的不安全存放;
n 在內(nèi)存中不恰當(dāng)?shù)乇4骊P(guān)鍵信息;
n 不當(dāng)?shù)碾S機資源;
n 不當(dāng)?shù)乃惴ㄟx擇;
n 一種新開發(fā)的加密算法;
n 當(dāng)密鑰更改或者其它必備的維護過程發(fā)生時,無法提供最新的技術(shù)支持。
Ø 不安全的配置管理
Web應(yīng)用程序服務(wù)器的配置對于Web應(yīng)用程序的安全起到了關(guān)鍵作用。許多應(yīng)用程序服務(wù)器提供了Web應(yīng)用程序能夠使用的服務(wù),例如數(shù)據(jù)存儲、目錄服務(wù)、郵件、信息處理等等,沒有合理配置的服務(wù)器很可能導(dǎo)致各種安全問題。
一般說來,網(wǎng)絡(luò)開發(fā)小組和網(wǎng)站管理小組的工作是各自獨立的,Web應(yīng)用程序的安全要求兩者共同努力,并且需要其中的成員都能夠保障系統(tǒng)Web應(yīng)用程序的安全。許多服務(wù)器的配置問題妨礙了安全性,它們包括:
n 服務(wù)器軟件漏洞或者錯誤的配置允許列出目錄和進行目錄遍歷;
n 沒必要的缺省、備份或者例子文件;
n 服務(wù)器軟件未打補丁的漏洞;
n 不當(dāng)?shù)奈募湍夸浽L問權(quán)限;
n 沒有必要的服務(wù),包括內(nèi)容管理和遠程管理;
n 使用缺省密碼和賬號;
n 被激活的、可以被訪問的管理或者調(diào)試功能;
n 使用缺省證書;
n 通過外部系統(tǒng)的不正確授權(quán);
n 錯誤配置的SSL證書和加密設(shè)置。
上述問題一旦被檢測出來,可能會被很快攻克并且造成網(wǎng)站的巨大破壞,得逞的攻擊也能給網(wǎng)站的備份系統(tǒng)(包括數(shù)據(jù)庫和其它相關(guān)的網(wǎng)站)造成很大損害。
Ø 競爭條件
競爭條件是指,當(dāng)由于事件次序異常而造成對同一資源的競爭,從而導(dǎo)致程序無法正常運行時,就會出現(xiàn)“競爭條件”。該漏洞通常為設(shè)計問題,典型的有Ptrace漏洞、廣泛存在的文件操作時序競爭。
競爭條件無需介入同一程序的兩個部分之間的競爭;如果一個外部的攻擊者可以通過意想不到的方式干擾程序,那么就會出現(xiàn)很多安全問題。條件競爭主要針對一些管理服務(wù)器而言,這類服務(wù)器一般是以system或root身份運行的。當(dāng)它們需要使用一些臨時文件,而在對這些文件進行寫操作之前,卻沒有對文件的屬性進行檢查,一般可能導(dǎo)致重要系統(tǒng)文件被重寫,甚至獲得系統(tǒng)控制權(quán)。
Ø 未驗證的輸入
Web應(yīng)用程序一般是根據(jù)HTTP請求中用戶的輸入決定如何響應(yīng),攻擊者能夠利用HTTP請求中的任何一部分,包括URL、請求字符串(Qurey String)、cookie頭部、表單項,隱含參數(shù)傳遞代碼來發(fā)動攻擊。
一些網(wǎng)站使用過濾器過濾掉惡意輸入,但是對于輸入信息存在著各種各樣的編碼方式,幾乎所有的HTTP輸入都可以被表示成多種形式,使用編碼技術(shù)可以繞過Web應(yīng)用程序的驗證與過濾機制,而且對這種攻擊難以防范。很多網(wǎng)絡(luò)應(yīng)用程序只在使用了客戶端機制來驗證輸入。但是,客戶端的驗證機制可以簡單的繞過去,這就造成了網(wǎng)絡(luò)應(yīng)用程序直接面對那些惡意的輸入?yún)?shù)而毫無防備。攻擊者可以使用簡單的工具例如telnet來生成他們的HTTP請求,他們可以很不在意那些開發(fā)人員在客戶端預(yù)先設(shè)置好安全機制。
Ø 錯誤的訪問控制
錯誤的訪問控制(Broken Access Control),訪問控制有時也被稱為授權(quán),是指一個網(wǎng)絡(luò)應(yīng)用程序如何將一些對于某些內(nèi)容和功能的訪問權(quán)利賦予某些用戶而不是其它用戶。這種驗證通常在授權(quán)之后執(zhí)行,并且管理那些己經(jīng)授權(quán)了的用戶允許進行的什么操作。
第二章 進行Web漏洞掃描的必要性
據(jù)Gartner統(tǒng)計,近些年所發(fā)生的黑客攻擊等惡意網(wǎng)絡(luò)行為的75%以上為利用Web服務(wù)的漏洞的攻擊,而現(xiàn)有的諸多安全產(chǎn)品對其未能做到有效的防護。作為防火墻、IPS等安全產(chǎn)品的必要補充,Web應(yīng)用防火墻專門針對Web服務(wù)及相關(guān)應(yīng)用提供有效的防護