鄔凌敏 江西省國防科工辦 南昌市 330046
基于Web應(yīng)用系統(tǒng)攻擊和漏洞測試技術(shù)研究
鄔凌敏 江西省國防科工辦 南昌市 330046
隨著WEB 應(yīng)用程序在更廣泛范圍的使用及WEB 工程概念的提出,Web 安全的測試就成為一項重要的工作。而Internet 和Web 媒體的不可預(yù)見性使得測試變得困難,必須為測試復(fù)雜的基于Web 的系統(tǒng)研究新的方法和技術(shù)。文章在分析WEB 系統(tǒng)的部署環(huán)境、應(yīng)用程序、數(shù)據(jù)庫和系統(tǒng)容錯等方面存在安全漏洞的基礎(chǔ)上,對Web 安全測試的要點和方法進行了探討。實踐表明,提高Web應(yīng)用系統(tǒng)的安全性具有現(xiàn)實意義,可以減少因Web應(yīng)用漏洞而對網(wǎng)絡(luò)系統(tǒng)帶來的安全問題。
Web 應(yīng)用系統(tǒng) 軟件安全 測試技術(shù)
隨著互聯(lián)網(wǎng)和電子商務(wù)的廣泛應(yīng)用,基于web的應(yīng)用系統(tǒng)(以下簡稱web應(yīng)用系統(tǒng))得到了越來越廣泛的使用。除了傳統(tǒng)的應(yīng)用如新聞網(wǎng)站、電子郵件等等外,目前越來越多的關(guān)鍵性任務(wù)也使用web應(yīng)用系統(tǒng)來完成,例如網(wǎng)上銀行、網(wǎng)上證券、網(wǎng)上購物等涉及到金錢交易的應(yīng)用,以及政府部門使用互聯(lián)網(wǎng)來開展電子政務(wù)等等。這些關(guān)鍵性的應(yīng)用對軟件安全的要求越來越高,如果由于軟件不安全造成信息泄露或系統(tǒng)破壞,將會帶來巨大的損失。因此,確保web應(yīng)用系統(tǒng)的安全是非常重要的。不幸的是,由于web應(yīng)用系統(tǒng)及其應(yīng)用環(huán)境的開放性。Web應(yīng)用系統(tǒng)基于http協(xié)議開發(fā),而這種協(xié)議是無狀態(tài)的,web應(yīng)用系統(tǒng)需要自己記錄軟件狀態(tài)信息并在客戶端與服務(wù)器之間來回傳送,這就導(dǎo)致軟件的內(nèi)部信息容易被篡改而出現(xiàn)安全問題。同時,由于web應(yīng)用軟件的客戶機端是開放的,任何用戶都可以訪問并使用因此,它很容易受到惡意用戶的攻擊。
因此,web應(yīng)用系統(tǒng)在部署和使用前,需要進行廣泛的測試,以確保其在復(fù)雜的應(yīng)用環(huán)境中能正常運行而不至于導(dǎo)致安全問題。特別是對于電子政務(wù)系統(tǒng)、銀行證券等金融系統(tǒng)和網(wǎng)上交易等電子商務(wù)系統(tǒng)而言,在WEB 系統(tǒng)部署前進行充分的安全性測試是非常必要的。
目前,在典型的IWS 16標準中,主要分為4種類型的行為:收集信息攻擊、獲取訪問權(quán)限攻擊、拒絕服務(wù)攻擊和逃避檢測攻擊。針對Web應(yīng)用系統(tǒng)軟件.進行攻擊的方法和技術(shù)主要有以下幾種:
1)COOKIE假冒
精心修改COOKIE數(shù)據(jù)并進行用戶假冒。
2)認證逃避
攻擊者利用不安全的證書和身份來逃避管理。
3)非法輸入
在動態(tài)網(wǎng)頁的輸人中使用各種非法數(shù)據(jù),獲取服務(wù)器敏感信息。
4)緩沖區(qū)溢出
攻擊者利用超出緩沖區(qū)大小的請求和構(gòu)造的二進制代碼讓服務(wù)器執(zhí)行溢出堆棧中的惡意指令。
5)強制訪問
訪問未授權(quán)的網(wǎng)頁。
6)隱藏變量修改
對網(wǎng)頁中的隱藏變量進行修改,欺騙服務(wù)器程序。
7)拒絕服務(wù)攻擊
構(gòu)造大量的非法請求。使WEB服務(wù)器不能進行正常用戶的訪問。
8)跨站腳本攻擊
提交非法腳本.趁其他用戶瀏覽時盜取其賬號等信息。
9)SQL注入
構(gòu)造SQL代碼讓服務(wù)器執(zhí)行,獲取敏感信息,并獲得相應(yīng)的權(quán)限。攻擊者在普通用戶輸入中插人數(shù)據(jù)庫查詢指令。在大多數(shù)情況下,這是因為輸入檢驗不嚴格以及在錯誤的代碼層中編碼造成的,攻擊者由此可以對數(shù)據(jù)庫進行查詢、刪除和修改等操作:在特定的情況下,甚至還可以執(zhí)行系統(tǒng)指令。
2.1 Web 應(yīng)用程序部署環(huán)境測試
用來架構(gòu)Web網(wǎng)站的UNIX、LINUX、WINDOWS 等服務(wù)器端操作系統(tǒng)和服務(wù)器軟件都可能存在漏洞,這些漏洞都會對Web應(yīng)用程序造成安全威脅。因此,在部署Web應(yīng)用程序前,應(yīng)對Web應(yīng)用程序的部署環(huán)境進行嚴格的測試,檢查一切已知的漏洞,發(fā)現(xiàn)新的漏洞,將應(yīng)用程序環(huán)境帶來的安全威脅降底到最低程度。
2.2 應(yīng)用程序測試
應(yīng)用程序中存在的漏洞是影響Web安全的主要方面,程序員編寫的軟件都可能有漏洞,有些漏洞可能要經(jīng)過許多年后才會被發(fā)現(xiàn)。特別是不斷新加的功能,這些改動,都會帶來安全方面的問題。因此,應(yīng)用程序測試要伴隨著系統(tǒng)開發(fā)、部署和運行的全過程。
1)SQL 注入漏洞
微軟技術(shù)中心從兩個方面對SQL注入攻擊進行了描述:一是腳本注入式的攻擊;二是惡意用戶輸入用來影響被執(zhí)行的SQL腳本。SQL注入就其本質(zhì)而言,是利用SQL語法,對應(yīng)用程序中的漏洞的攻擊。當攻擊者能夠操縱數(shù)據(jù),在應(yīng)用程序中插入一些SQL語句時,SQL注入攻擊就發(fā)生了。理論上,這種攻擊對于所有基于SQL語言標準的數(shù)據(jù)庫軟件都是有效的,包括MS SQL Server,Oracle,DB2,Sybase,MySQL等。特別是現(xiàn)在一些AQL注入攻擊工具的出現(xiàn),使得Web應(yīng)用更易遭到SQL注入攻擊。原始的手工測試不適用于大型Web應(yīng)用程序,可使用N-Stealth、WebInspect、Wikto WebScarab、Nikto等工具進行掃描,測試系統(tǒng)是否存在SQL注入的安全漏洞。為防止SQL注入,程序員編寫代碼時,要對客戶端和服務(wù)端進行兩級檢查。檢查數(shù)據(jù)類型、數(shù)據(jù)長度和敏感字符的合法性??蛻舳藱z查可減少網(wǎng)絡(luò)流量,降低服務(wù)器負荷,將一般誤操作、低等級攻擊與高等級攻擊行為區(qū)分開來。對于繞開客戶端檢查的攻擊,提交的數(shù)據(jù)被直接發(fā)往服務(wù)端,服務(wù)端檢查到的提交異?;究梢哉J定為惡意攻擊行為所致,就應(yīng)中止提交信息的處理,進行攻擊備案,并對客戶端給出出錯或警告提示。另外,在構(gòu)造查詢時,應(yīng)根據(jù)用戶輸入的內(nèi)容設(shè)置參數(shù)值來創(chuàng)建參數(shù)化查詢,從而避免SQL注入及由此帶來的安全問題。
2)表單漏洞測試
表單提交的數(shù)據(jù)的驗證和服務(wù)端數(shù)據(jù)接收的方法直接影響到Web 的安全。隨著大量的支持參數(shù)的“模糊化”(“fuzzing”)、腐朽(corruption)、以及野蠻強制增長工具的出現(xiàn),使用非校驗輸入進行攻擊造成的安全問題越來越多。因此,表單漏洞測試是Web安全所必需的。
3)Cookie驗證漏洞測試
如果系統(tǒng)使用了cookie,就要對cookie 的使用情況進行檢測。檢查Cookies 在生存期內(nèi)能否正常工作而且對這些信息是否加密,是否按預(yù)定的時間進行保存,是否存在cookie 可被偽造提交的問題,刷新對Cookie 有什么影響及過期處理等。
4)用戶身份驗證測試
用戶身份驗證測試主要檢查無效的用戶名和密碼能否登錄,密碼是否對大小寫敏感,是否有驗證次數(shù)的限制,是否存在不驗證而直接進入Web 應(yīng)用系統(tǒng)的問題,是否存在不登錄就可查看非會員頁面和權(quán)限問題,客戶端提交的密碼是否加密,服務(wù)端驗證密碼是否使用了MD5。用戶身份驗證測試一般使用手工和測試工具相結(jié)法的方法,若在測試中發(fā)現(xiàn)問題,應(yīng)及時修改代碼,使用加密碼算法對密碼加密,采用Session 對象進行登錄驗證。
5)文件操作漏洞測試
若系統(tǒng)有上傳文件的功能,測試系統(tǒng)是否允許上傳腳本文件、可執(zhí)行文件等有可能給系統(tǒng)帶來危害的文件。若有下載功能,可供下載的文件是否與系統(tǒng)的程序分別存放,是否存在數(shù)據(jù)庫文件、包含文件和頁面文件下載的可能。文件操作漏洞測試一般使用手工測試的方法,若發(fā)現(xiàn)問題,應(yīng)及時修改代碼并將可供下載的文件重新部署。
6)Session 測試
Session測試主要檢查Web應(yīng)用系統(tǒng)是否有超時的限制,也就是檢查用戶登錄后在一定時間內(nèi)沒有點擊任何頁面,是否需要重新登錄才能正常使用,檢查超時后能否自動退出,退出之后,瀏覽器回退按鈕是否可以回到登錄頁面。Session測試一般使用手工測試和工具測試相結(jié)合的方法,若發(fā)現(xiàn)問題,應(yīng)及時修改代碼。
7)跨網(wǎng)站腳本(XSS)漏洞測試
對于呈增長趨勢的跨站腳本(XSS)攻擊,可使用內(nèi)嵌檢測的方式進行處理。使用WebInspect工具識別所有的假造參數(shù),使用DevInspect工具通過特定代碼關(guān)聯(lián)在頁面上發(fā)現(xiàn)安全缺陷,對于顯示代碼,采用CSE HTML Validator工具進行測試。若在檢測中發(fā)現(xiàn)系統(tǒng)存在跨站腳本(XSS)漏洞,使用輸出數(shù)據(jù)編碼也就是將任何數(shù)據(jù)返回給用戶前均采用HTML編碼,可以有效防止跨站點腳本攻擊。因為通過HTML編碼,可將大多數(shù)腳本命令自動轉(zhuǎn)換為無害文本。
8)命令注射漏洞測試
命令注射漏洞測試主要檢查所有調(diào)用外部資源(例如system、exec、fork,或者所有的發(fā)出請求的語法)的源代碼,查找那些來自于HTTP請求的輸入可能發(fā)起調(diào)用的所有地方。使用相同功能的專門的庫函數(shù)來代替shell命令和一些系統(tǒng)調(diào)用,可以抵御命令注射的攻擊,另外一種避免命令注射的保護措施就是確保Web應(yīng)用程序只是根據(jù)它所要執(zhí)行某個功能時所需的最小權(quán)限來實現(xiàn)這個功能。如果必須使用外部命令的話,任何被插入命令的用戶信息必須仔細地審查,設(shè)立一定的機制來處理可能出現(xiàn)的錯誤、超時、或者在調(diào)用過程中出現(xiàn)的阻塞。
2.3 數(shù)據(jù)庫問題測試
在Web應(yīng)用中,數(shù)據(jù)庫起著重要的作用,數(shù)據(jù)庫為Web應(yīng)用系統(tǒng)的管理、運行、查詢和實現(xiàn)用戶對數(shù)據(jù)存儲的請求等提供空間。因此,Web應(yīng)用系統(tǒng)中數(shù)據(jù)庫安全測試是一個重要的方面。與數(shù)據(jù)庫相關(guān)的應(yīng)用級漏洞如SQL注入和跨站點腳本攻擊等問題前面已提及,在此只討論數(shù)據(jù)庫本身及數(shù)據(jù)庫使用方面的漏洞。
1)數(shù)據(jù)庫名稱和存放位置安全檢測
一個常規(guī)的數(shù)據(jù)庫名稱,并且存放在與Web應(yīng)用程序文件相同或相關(guān)的位置,很容易被下載。若在程序代碼中包含有數(shù)據(jù)庫名稱和數(shù)據(jù)庫文件絕對位置,一旦代碼丟失,同樣存在暴庫的危險。因此,在部署數(shù)據(jù)庫和編寫相關(guān)的代碼時,要避免問題的發(fā)生。
2)數(shù)據(jù)庫本身的安全檢測
對數(shù)據(jù)庫本身的安全檢測主要檢查數(shù)據(jù)庫是否配置了不同的存取權(quán)限,所有操作是否都可以審計追蹤,敏感數(shù)據(jù)是否加密等。為了保證數(shù)據(jù)庫的安全,不同權(quán)限的用戶定義不同的視圖,以限制用戶的訪問范圍;不同的敏感數(shù)據(jù)采取不同的加密算法,重要的數(shù)據(jù)分開存儲。
3)數(shù)據(jù)使用時的一致性和完整性測試
Web應(yīng)用系統(tǒng)中,使用數(shù)據(jù)庫時,可能發(fā)生數(shù)據(jù)的一致性和完整性錯誤,因此,要檢測系統(tǒng)中是否有事務(wù)管理和故障恢復(fù)功能,確認事務(wù)數(shù)據(jù)是否正確保存,檢測系統(tǒng)是否有定期數(shù)據(jù)備份功能。
2.4 容錯測試
正常操作時,Web應(yīng)用程序也總會有錯誤出現(xiàn),如內(nèi)存溢出、空指針異常、系統(tǒng)調(diào)用失敗、數(shù)據(jù)庫不可用、網(wǎng)絡(luò)超時等。不當?shù)某鲥e處理可能給網(wǎng)站帶來各種各樣的安全問題,因此,要對Web應(yīng)用程序的錯誤處理進行測試,以保證為用戶提供一份有意義的出錯信息,為網(wǎng)站維護人員提供診斷信息,而不是為攻擊者提供有用的信息。
1)容錯方案及方案一致性測試
出錯處理應(yīng)該在整個網(wǎng)站中保持一致性,并且每一個出錯處理片斷都應(yīng)該是一個整體設(shè)計方案中的一部分。通過代碼檢查,測試系統(tǒng)差錯處理方案是否合理,方案是否可以處理所有可能發(fā)生的錯誤,方案中是否存在泄漏設(shè)計細節(jié)的問題,是否存在不同的差錯處理方案。
2)接口容錯測試
檢測瀏覽器與服務(wù)器的接口是否正確,中斷用戶到服務(wù)器的網(wǎng)絡(luò)連接時,系統(tǒng)是否能夠正確處理數(shù)據(jù);對于有外部接口的Web系統(tǒng),如網(wǎng)上商店可能要實時驗證信用卡數(shù)據(jù)以減少欺詐行為的發(fā)生,中斷Web服務(wù)器到信用卡驗證服務(wù)器的連接,檢測系統(tǒng)是否能夠正確處理這些錯誤,是否對信用卡進行收費。另外,還要測試系統(tǒng)是否能夠處理外部服務(wù)器返回的所有可能的消息。
3)壓力測試
壓力測試是實際破壞一個Web應(yīng)用系統(tǒng),也就是測試Web應(yīng)用系統(tǒng)會不會崩潰,在什么情況下會崩潰。黑客常常提供錯誤的數(shù)據(jù)負載,直到Web應(yīng)用系統(tǒng)崩潰,接著當系統(tǒng)重新啟動時獲得存取權(quán)。壓力測試的區(qū)域包括表單、登錄和其他信息傳輸頁面,可以采用ab(Apache 的測試工具)和OpenSTA(開發(fā)系統(tǒng)測試架構(gòu))等相應(yīng)的工具進行自動化測試。
目前,黑客攻擊已成為一個很嚴重的網(wǎng)絡(luò)問題。盡管防火墻和補丁管理已逐漸走向規(guī)范化,各類網(wǎng)絡(luò)安全防護設(shè)施比以往更完善,但是,對攻擊應(yīng)用層面的防護能力卻較弱。目前有75%的黑客襲擊事件都發(fā)生在應(yīng)用程序方面。本文從Web攻擊分析到漏洞防范,進行了較詳細的探討,希望對從事WEB應(yīng)用程序安全研究的人員或者網(wǎng)絡(luò)管理員有一定的借鑒作用。
[l] 屈曄,張吳.Bugscam 自動化靜態(tài)漏洞檢測的分析.信息安全與通信保密。
[2] 張吳,網(wǎng)絡(luò)與信息安全測試原型系統(tǒng)的關(guān)鍵技術(shù)研究.電子產(chǎn)品可靠性與環(huán)境試驗。
[3] 張吳,屈曄.網(wǎng)絡(luò)信息安全黑客攻擊技術(shù)研究。
[4] 施寅生,鄧世偉,谷天陽. web服務(wù)安全性測試技術(shù)研究, 計算機工程與科學(xué)。
[5] 殷正國,針對SQL 注射攻擊的一種集成防御策略[D].南京: 南京理工大學(xué)。
[6] 徐鑫濤,淺析SQL 注入攻擊.中國科技信息。
[7] 胡忠望,劉衛(wèi)東.Cookie 應(yīng)用與個人信息安全研究.計算機應(yīng)用與軟件。
[8] NSFOCUS,2007 年5 月之十大安全漏洞.網(wǎng)絡(luò)安全技術(shù)與應(yīng)用。
[9] 孫志崗,李扎,王宇穎.網(wǎng)絡(luò)應(yīng)用軟件健壯性測試方法研究.計算機工程與科學(xué)。
[10] Simson Garfinkel,Gene Spaford,Web安全與電子商務(wù).何健輝,劉樣亞,馮延暉,譯.北京:中國電力出版社。
1009-0940(2015)-4-030-04