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