廈門SEO_廈門網(wǎng)站建設(shè)長春網(wǎng)站關(guān)鍵詞排名
摘 要
隨著Web2.0、社交網(wǎng)絡(luò)、微博等一系列新型的互聯(lián)網(wǎng)產(chǎn)品的誕生,基于Web環(huán)境的互聯(lián)網(wǎng)應(yīng)用越來越廣泛,企業(yè)信息化的過程中各種應(yīng)用都架設(shè)在Web平臺上。Web應(yīng)用的迅速發(fā)展也引起黑客們的強(qiáng)烈關(guān)注,接踵而至的就是Web安全威脅的凸顯,黑客利用Web應(yīng)用程序的漏洞得到Web服務(wù)器的控制權(quán)限,輕則篡改網(wǎng)頁內(nèi)容,重則竊取重要內(nèi)部數(shù)據(jù),更為嚴(yán)重的則是在網(wǎng)頁中植入惡意代碼,使得網(wǎng)站訪問者受到侵害[1]。
針對上述問題,本文在分析了Web應(yīng)用安全漏洞的基本原理及其產(chǎn)生原因的基礎(chǔ)上,介紹了漏洞掃描方法及現(xiàn)有的漏洞掃描器掃描關(guān)鍵技術(shù),針對現(xiàn)有Web應(yīng)用安全漏洞掃描工具的不足,提出了一種高效的基于優(yōu)化爬蟲的Web應(yīng)用漏洞掃描機(jī)制?;诒疚奶岢龅穆┒磼呙铏C(jī)制,為典型的Web漏洞XSS漏洞及SQL注入漏洞設(shè)計(jì)了掃描方法,并實(shí)現(xiàn)了SQL注入漏洞和XSS漏洞的掃描。設(shè)計(jì)實(shí)現(xiàn)了一款基于SAAS模式的可用性高,可擴(kuò)展性高,性能良好的Web應(yīng)用安全漏洞掃描器。本文主要工作如下:
1.分析各種不同的 Web 應(yīng)用程序漏洞的特性以及 Web 應(yīng)用漏洞的掃描技術(shù)。
尤其詳細(xì)剖析了漏洞出現(xiàn)次數(shù)最多的 SQL 注入漏洞,XSS 漏洞,信息泄漏漏洞,包括產(chǎn)生原因,攻擊方式,檢測方法和防御方法等等。
-
研究網(wǎng)絡(luò)爬蟲技術(shù),設(shè)計(jì)了一種基于廣度優(yōu)先策略的優(yōu)化網(wǎng)絡(luò)爬蟲算法,使得它它不僅能夠抓取網(wǎng)頁,還能對網(wǎng)頁進(jìn)行解析,并且有效去重。運(yùn)用正則表達(dá)式的方法,提取出網(wǎng)站的所有的可輸入域,其中還要對網(wǎng)址進(jìn)行 URL 標(biāo)準(zhǔn)格式化,URL 過濾,URL參數(shù)變換,增強(qiáng)了系統(tǒng)的性能。
-
設(shè)計(jì)出 Web 應(yīng)用漏洞掃描器;實(shí)現(xiàn)了對 SQL 注入漏洞,XSS 漏洞和目錄遍歷漏洞的掃描功能,采用漏洞信息庫,作為
基于Web應(yīng)用安全漏洞掃描器的掃描結(jié)果,表明該掃描方法能夠有效的掃描SQL注入和XSS漏洞,同時(shí)也驗(yàn)證了本文設(shè)計(jì)的Web應(yīng)用漏洞掃描機(jī)制的有效性和可行性。
關(guān)鍵詞:Web應(yīng)用安全,安全漏洞,漏洞掃描,SQL注入,XSS漏洞
Abstract
With the birth of a series of new Internet products such as Web2.0, social networks, and Weibo, Internet applications based on the Web environment have become more and more extensive, and various applications in the process of enterprise informatization have been set up on the Web platform. The rapid development of Web applications has also caused hackers to pay close attention. The following is the highlight of Web security threats. Hackers use Web application vulnerabilities to gain control of Web servers, falsify Web content, and steal important internal data. The more serious is the implantation of malicious code on web pages that infringe website visitors.
Web application penetration testing technology is an extremely effective active defense technology developed under the security environment at home and abroad in recent years. Through penetration testing, Web security vulnerabilities can be discovered as early as possible and operators can be alerted to prevent them from being repaired.The Web application security vulnerability scanner is an important tool in the Web application penetration testing process. It can effectively assist the tester through automation or a combination of manual and automated methods to reduce the workload of the tester. Web application vulnerability scanners complement intrusion detection systems and firewalls, which together form the security defenses of Web systems. The design of Web application vulnerability scanner can help people to conduct self-check on the website system, find problems and prevent hackers from intruding. It can also be used as a tool for penetration testing with professional security personnel to save labor costs. Therefore, the study of vulnerability scanning technology is extremely important.
This paper elaborates the basic principles and causes of Web application security vulnerabilities, introduces vulnerability detection methods and existing key scanner detection technologies, and proposes a solution to the weaknesses of existing Web application security vulnerability detection tools. An efficient web application vulnerability detection mechanism based on optimized crawler and feature recognition. Based on the vulnerability detection mechanism proposed in this paper, a detection method is designed for typical Web vulnerability XSS vulnerability and SQL injection vulnerability, and the detection of SQL injection vulnerability and XSS vulnerability is implemented. Design and implement a vulnerability scanner based on SAAS model with high availability, high scalability and good performance for Web application security.
The detection result based on Web application security vulnerability scanner shows that this detection method can effectively detect SQL injection and XSS vulnerabilities. It also verifies the validity and feasibility of the Web application vulnerability detection mechanism proposed in this paper.
Keyword: Web Application Security,Security Vulnerabilitiy, Vulnerability Scan, SQL Injection, XSS Vulnerability
表格索引
表 2.1 OWASP Top 107
表 2.2 掃描器三大指標(biāo)與準(zhǔn)確率對比表11
表 3.1 常見HTTP請求方法24
表 3.2 常見HTTP狀態(tài)碼24
表 3.3 常見字符集及定義方式26
表 4.1 本文設(shè)計(jì)漏洞掃描器與其他兩款掃描器掃描結(jié)果對比表38
插圖索引
圖 2.1 網(wǎng)絡(luò)爬蟲流程圖6
圖 3.1 Web應(yīng)用安全漏洞掃描器系統(tǒng)架構(gòu)圖14
圖 3.2 Web應(yīng)用安全漏洞掃描器功能架構(gòu)圖15
圖 3.3 優(yōu)化網(wǎng)絡(luò)爬蟲流程圖17
圖 3.4 SQL注入漏洞掃描流程圖18
圖 3.5 XSS漏洞掃描流程圖20
圖 3.6 任務(wù)調(diào)度流程圖21
圖 3.7 TCP-Connect掃描截圖22
圖 3.8 TCP-SYN掃描截圖23
圖 3.9 UDP掃描截圖23
圖 3.10 爬蟲模塊類圖25
圖 3.11 SQL注入漏洞掃描類圖27
圖 3.12 XSS漏洞掃描類圖29
圖 3.13 任務(wù)調(diào)度模塊類圖30
圖 4.1 Web應(yīng)用安全漏洞掃描器部署圖33
圖 4.2 SQL注入漏洞測試環(huán)境34
圖 4.3 XSS漏洞測試環(huán)境34
圖 4.4 掃描結(jié)果35
圖 4.5 漏洞分布情況展示36
圖 4.6 添加新任務(wù)36
圖 4.7 掃描隊(duì)列37
圖 4.8 登錄界面37
圖 4.9 漏洞報(bào)告38
目 錄
摘 要I
AbstractIII
表格索引V
插圖索引VII
第一章 緒論1
1.1 選題背景及意義1
1.2 國內(nèi)外現(xiàn)狀分析2
1.3 論文工作內(nèi)容3
1.4 論文組織結(jié)構(gòu)3
第二章 Web應(yīng)用安全漏洞掃描技術(shù)概述5
2.1 網(wǎng)絡(luò)爬蟲與Web應(yīng)用程序基礎(chǔ)5
2.1.1 基本概念5
2.1.2 爬取策略5
2.1.3 爬蟲在漏洞掃描中的作用6
2.1.4 HTTP 協(xié)議模型7
2.1.5 Web 應(yīng)用體系結(jié)構(gòu)7
2.2 安全漏洞8
2.2.1 基本概念8
2.2.2 漏洞類型9
2.2.3 漏洞檢測技術(shù)12
2.2.4 Web 應(yīng)用漏洞產(chǎn)生的原因14
2.2.5 Web 應(yīng)用漏洞的分布15
2.2.6 Web 應(yīng)用漏洞的風(fēng)險(xiǎn)評估15
2.3 國內(nèi)外漏洞掃描器研究分析16
2.3.1 分析目的16
2.3.2 影響準(zhǔn)確率的三個(gè)因素16
2.3.3 對比總結(jié)17
2.4 Web 應(yīng)用漏洞分析及其檢測方法18
2.4.1 SQL 注入漏洞18
2.4.2 XSS 漏洞19
2.4.3 目錄遍歷漏洞22
2.5 網(wǎng)絡(luò)爬蟲在掃描器中的應(yīng)用23
2.5.1 聚焦爬蟲概念23
2.5.2 聚焦爬蟲技術(shù)分析23
2.6 本章小結(jié)24
第三章 Web應(yīng)用安全漏洞掃描器分析設(shè)計(jì)與實(shí)現(xiàn)25
3.1 Web應(yīng)用安全漏洞掃描器需求分析25
3.1.1 功能需求25
3.1.2 非功能需求27
3.2 Web應(yīng)用安全漏洞掃描器系統(tǒng)應(yīng)用架構(gòu)設(shè)計(jì)28
3.3 Web應(yīng)用安全漏洞掃描器系統(tǒng)功能設(shè)計(jì)29
3.3.1 網(wǎng)絡(luò)爬蟲模塊的優(yōu)化及設(shè)計(jì)29
3.3.2 SQL注入掃描模塊的設(shè)計(jì)32
3.3.3 XSS漏洞掃描模塊的設(shè)計(jì)33
3.3.4 任務(wù)調(diào)度模塊的設(shè)計(jì)35
3.3.5 可用性檢測模塊的設(shè)計(jì)35
3.3.6 插件機(jī)制的設(shè)計(jì)39
3.3.6 數(shù)據(jù)庫的設(shè)計(jì)41
3.4 Web應(yīng)用安全漏洞掃描器系統(tǒng)功能實(shí)現(xiàn)42
3.4.1 爬蟲模塊的實(shí)現(xiàn)42
3.4.2 SQL注入漏洞掃描的實(shí)現(xiàn)45
3.4.3 XSS漏洞掃描的實(shí)現(xiàn)47
3.3.4 任務(wù)調(diào)度模塊的實(shí)現(xiàn)48
3.3.5 可用性檢測模塊的實(shí)現(xiàn)50
3.5 本章小結(jié)50
第四章 Web應(yīng)用安全漏洞掃描器測試及分析51
4.1 測試環(huán)境51
4.1.1 掃描器部署環(huán)境51
4.1.2 漏洞測試環(huán)境51
4.2 測試過程53
4.2.1 功能測試53
4.2.2 非功能測試55
4.3 測試結(jié)果分析56
4.4 本章小結(jié)56
第五章 結(jié)束語59
5.1 論文工作總結(jié)59
5.2 后續(xù)工作展望59
致 謝61
參考文獻(xiàn)63
第一章 緒論
近年來,Web應(yīng)用程序因其特有的優(yōu)點(diǎn)在數(shù)量和重要性方面都得到了快速發(fā)展,給人們的生活和工作各方面都帶來了極大的便利,但是同時(shí)Web應(yīng)用程序也因其自身特點(diǎn)而引起了攻擊者的強(qiáng)烈關(guān)注,Web應(yīng)用安全漏洞的數(shù)量和應(yīng)用也逐漸增大,安全威脅日益凸顯。
1.1 選題背景及意義
Web 應(yīng)用程序(Web Application)是指任意基于Web 運(yùn)行,同時(shí)用戶交互頁面停留在 Web 瀏覽器中的應(yīng)用程序,由于 Web 應(yīng)用程序以其便捷,美觀和功能強(qiáng)大的特點(diǎn)廣泛地博得了用戶的青睞。在 Web1.0 時(shí)代,網(wǎng)站通過一種單向的信息發(fā)布方式和用戶打交道,首先它會把所有資源存放到服務(wù)器上,然后通過 Web 應(yīng)用程序或其他網(wǎng)絡(luò)通信渠道發(fā)布,用戶會通過 Web 應(yīng)用程序獲取相應(yīng)的資源和信息。然而在 2004 年以后,Web2.0 應(yīng)用的問世悄然改變了這種單向的信息傳遞方式,用戶不僅可以瀏覽 Web 頁面的內(nèi)容更可以向服務(wù)器提交信息修改網(wǎng)頁的內(nèi)容,這樣這些加強(qiáng)發(fā)布者和用戶交互性的特性讓用戶可以成為網(wǎng)頁內(nèi)容的創(chuàng)造者。這些新技術(shù)提供給用戶電子商務(wù)、博客、社交網(wǎng)絡(luò)服務(wù)、即時(shí)通信、搜索等服務(wù),極大地豐富了人們的生活與工作[4-5]。
信息共享與保證安全往往是一對矛盾,在一個(gè)自由的網(wǎng)絡(luò)環(huán)境中,大量的流動信息為一些不法之徒提供了攻擊目標(biāo)。而且由于形式多樣性、終端分布廣、互聯(lián)開放的計(jì)算機(jī)網(wǎng)絡(luò)為攻擊者提供了便利,其中大量攻擊者利用 Web 應(yīng)用程序的漏洞的惡意攻擊,給運(yùn)營商和用戶帶來很大的威脅和損失[6]。因此為保障 Web應(yīng)用程序安全及時(shí)發(fā)現(xiàn)漏洞并修補(bǔ)漏洞成為一項(xiàng)很重要的事情。Web 漏洞掃描技術(shù)是模仿攻擊者的行為去掃描Web應(yīng)用程序的是否安全。它可以準(zhǔn)確地發(fā)現(xiàn)Web應(yīng)用程序中潛在的漏洞,而這也對于保障網(wǎng)絡(luò)安全也越來越重要。
由于 Web 應(yīng)用程序的安全問題越來越突出,如何嚴(yán)謹(jǐn)?shù)脑u價(jià)安全的 Web應(yīng)用程序,并且加強(qiáng) Web 應(yīng)用程序的管理有了更大的需求。入侵者可以利用廣泛潛在的漏洞入侵 Web 應(yīng)用系統(tǒng),破壞網(wǎng)絡(luò)安全環(huán)境。而通過安全評估可以使人們更充分的了解漏洞所帶來的危害,將風(fēng)險(xiǎn)降到最低。Web 漏洞掃描技術(shù)是站在惡意攻擊者的角度去審視系統(tǒng)的安全性,能將其中潛在的風(fēng)險(xiǎn)扼殺在搖籃中,因此是一種比較有效的主動防御技術(shù)。通過對 Web 漏洞的形成和攻擊原理的研究,可以早日定位 Web 應(yīng)用程序中存在的各種漏洞。在對目標(biāo)站點(diǎn)進(jìn)行掃描前,需要先設(shè)置目標(biāo)站點(diǎn)的 URL 以及各種運(yùn)行時(shí)參數(shù),而后啟動掃描器,一旦發(fā)現(xiàn)某些Web頁面包含特定的漏洞,掃描器會將該漏洞的詳細(xì)信息保存下來,并呈現(xiàn)在報(bào)表中,最后自動形成對目標(biāo)站點(diǎn)的掃描報(bào)告[7]。這樣可以讓網(wǎng)站管理員和網(wǎng)站開發(fā)人員通過掃描特定的站點(diǎn)和相關(guān) Web 網(wǎng)頁后知曉自己 Web 頁面的潛在威脅。能夠盡早幫助開發(fā)者發(fā)現(xiàn)問題,在網(wǎng)站發(fā)布前,就將所掃描到的漏洞全部修復(fù),這樣可以大大減少由于 Web 應(yīng)用程序漏洞而造成的損失和破壞。顯然,對 Web 漏洞掃描器的研究具有重要的理論意義和實(shí)用價(jià)值。
1.2 國內(nèi)外現(xiàn)狀分析
當(dāng)前,世界各國信息化都處在快速發(fā)展的階段,信息技術(shù)的應(yīng)用促進(jìn)了全球資源的優(yōu)化配置和發(fā)展模式的創(chuàng)新,互聯(lián)網(wǎng)對政治、經(jīng)濟(jì)、社會和文化的影響更加深刻,信息化滲透到國民生活的各個(gè)領(lǐng)域,圍繞信息獲取、利用和控制的國際競爭日趨激烈,保障信息安全成為各國的重要議題[8]。
國外政府高度重視對漏洞資源的管控,通過建立完善的國家漏洞管理體系,將漏洞資源納入國家管控機(jī)制。2006年,美國政府在ICAT Metabase(http://icat.nist.org)的基礎(chǔ)上建立了美國國家漏洞庫(National Vulnerability Database,NVD),由國土安全部(Department of Homeland Security,DHS)研究部署并提供建設(shè)資金,由美國國家標(biāo)準(zhǔn)與技術(shù)研究院(National Institute of Standards and Technology,NIST)負(fù)責(zé)技術(shù)開發(fā)和運(yùn)維管理。2015年5月,美國商務(wù)部工業(yè)與安全局公布了“瓦森納協(xié)定”的一份補(bǔ)充協(xié)定,把黑客技術(shù)放入全球武器貿(mào)易條約出口限制的范圍內(nèi),限制零日漏洞及其相關(guān)產(chǎn)品流出美國。
中國政府也同樣高度重視網(wǎng)絡(luò)和信息安全問題,重視對信息安全漏洞的管控。2007年,中國信息安全測評中心負(fù)責(zé)建設(shè)運(yùn)維國家級漏洞資源管理平臺“國家信息安全漏洞庫”(China National Vulnerability Database of Information Security,CNNVD)。2009年10月18日,國家信息安全漏洞庫網(wǎng)站正式上線運(yùn)行,對外提供漏洞分析、通報(bào)服務(wù)。經(jīng)過多年發(fā)展建設(shè),CNNVD通過社會提交、協(xié)作共享、網(wǎng)絡(luò)搜集以及技術(shù)掃描等方式,已積累信息技術(shù)產(chǎn)品漏洞8萬余條,信息系統(tǒng)相關(guān)漏洞4萬余條,相關(guān)補(bǔ)丁和修復(fù)措施2萬余條,初步形成了信息安全漏洞的資源匯聚和處置管理能力。
根據(jù)CNNVD統(tǒng)計(jì),截至2015年12月31日,CNNVD收錄漏洞總量已達(dá)80300個(gè),其中2015年新增漏洞7754個(gè),與2014年漏洞新增的8623個(gè)相比有所下降,降幅為10.08%。從漏洞類型來看,2015年緩沖區(qū)溢出類的漏洞占比最大,達(dá)到14.03%。從危害級別來看,2015年新增危急漏洞608個(gè)、高危漏洞1782個(gè)、中危漏洞4588個(gè)、低危漏洞776個(gè),其中6659個(gè)漏洞已發(fā)布修復(fù)補(bǔ)丁,整體修復(fù)率為85.88%,四種危害級別漏洞對應(yīng)修復(fù)率分別為91.28%、92.48%、82.52%以及86.34%。
為應(yīng)對層出不窮的漏洞事件,Web 應(yīng)用安全問題逐漸引起了主要組織的關(guān)注。全球開源組織 OWASP 積極搜集目前 Web 應(yīng)用最常見的攻擊事件,成立“Web 應(yīng)用十大安全隱患”項(xiàng)目,對各類攻擊類型進(jìn)行概率統(tǒng)計(jì),以提升企業(yè)機(jī)構(gòu)的安全意識。CNCERT/CC(國家計(jì)算機(jī)網(wǎng)絡(luò)應(yīng)急技術(shù)處理協(xié)調(diào)中心)針對安全服務(wù)和技術(shù)支持匯總發(fā)布各項(xiàng)互聯(lián)網(wǎng)權(quán)威信息。另外許多國際標(biāo)準(zhǔn)組織也在應(yīng)對互聯(lián)網(wǎng)威脅做出相應(yīng)的防范措施。其中W3C(WWW 聯(lián)盟)和IETF(Internet Engineering Task Force 互聯(lián)網(wǎng)工程任務(wù)組)推出的 XML 數(shù)字簽名、簽名規(guī)范。另外 W3C 提出 SOAP 消息加密簽名方案,對預(yù)防信息泄露起到了一定的作用。
許多黑客和安全廠商也陸續(xù)推出面向不同漏洞的安全掃描工具:Nessus、Nmap、WebScarab、Acunetix Wvs(Web Vul Scanner)、W3af(Web Application Attack And Audit Framework)、APPScan、WebInspect 等。其中多為商業(yè)軟件如 Wvs 、AppScan、WebInspect 等,無開放的源碼,且昂貴費(fèi)用,一般中小型企業(yè)無法承擔(dān)。
1.3 論文工作內(nèi)容
本文主要研究基于B/S架構(gòu)的Web應(yīng)用安全漏洞掃描器的設(shè)計(jì)與實(shí)現(xiàn),分析與研究Web應(yīng)用安全漏洞掃描器及其關(guān)鍵技術(shù),設(shè)計(jì)并實(shí)現(xiàn)一個(gè)可用性高,可擴(kuò)展性高,性能良好的Web應(yīng)用安全漏洞掃描器。在整個(gè)過程中主要完成以下工作:
-
分析Web應(yīng)用安全漏洞掃描器的業(yè)務(wù)需求。在分析項(xiàng)目建設(shè)需求的基礎(chǔ)上,分析了系統(tǒng)功能與性能需求。
-
分析各種不同的Web應(yīng)用安全漏洞的特性以及Web應(yīng)用安全漏洞的掃描技術(shù)。尤其詳細(xì)剖析漏洞出現(xiàn)次數(shù)最多的SQL注入漏洞,XSS漏洞 ,包括產(chǎn)生原因,攻擊方式,掃描方法和防御方法等。
-
研究網(wǎng)絡(luò)爬蟲技術(shù),設(shè)計(jì)一種基于廣度優(yōu)先策略的優(yōu)化網(wǎng)絡(luò)爬蟲算法,能夠抓取網(wǎng)頁,并進(jìn)行有效去重,再對網(wǎng)頁進(jìn)行解析,以期增強(qiáng)爬蟲的性能。
-
設(shè)計(jì)Web應(yīng)用安全漏洞掃描器系統(tǒng)的架構(gòu)和功能模塊。在需求分析的基礎(chǔ)上,設(shè)計(jì)了系統(tǒng)應(yīng)用架構(gòu),并進(jìn)行模塊化分解。
-
漏洞掃描使用事件驅(qū)動的方式,根據(jù)爆發(fā)的新型漏洞,不停充實(shí)漏洞信息庫,做為匹配掃描的基礎(chǔ),增強(qiáng)了系統(tǒng)的可擴(kuò)展性。
-
使用Python語言實(shí)現(xiàn)Web應(yīng)用安全漏洞掃描器的各個(gè)模塊,實(shí)現(xiàn)對SQL注入、XSS漏洞的掃描功能。
-
設(shè)計(jì)UI交互界面,使用戶可直接通過瀏覽器登錄使用,增強(qiáng)系統(tǒng)的可用性,UI界面可顯示漏洞掃描報(bào)告及漏洞細(xì)節(jié)等內(nèi)容。
-
對Web應(yīng)用安全漏洞掃描器以特有的漏洞平臺作為基準(zhǔn)測試樣本,進(jìn)行測試驗(yàn)證。
1.4 論文組織結(jié)構(gòu)
本文分六章,論文的結(jié)構(gòu)安排如下:
第一章:緒論。這一部分首先通過選題背景表明了Web應(yīng)用漏洞掃描工具研究的必要性,其次通過對國內(nèi)外研究現(xiàn)狀的分析得出現(xiàn)有Web應(yīng)用漏洞掃描工具存在的不足,然后得出本文的研究目的與內(nèi)容,最后給出論文的組織結(jié)構(gòu)。
第二章:Web應(yīng)用安全漏洞掃描技術(shù)概述。列舉并簡要描述了Web應(yīng)用體系結(jié)構(gòu)及其對應(yīng)安全威脅,對Web應(yīng)用安全漏洞掃描器開發(fā)過程中涉及到的網(wǎng)絡(luò)爬蟲、漏洞理論和相關(guān)技術(shù)進(jìn)行概述,其中包括網(wǎng)絡(luò)爬蟲技術(shù)、SQL注入漏洞、XSS漏洞的原理、危害及漏洞掃描過程中使用的關(guān)鍵技術(shù)等。
第三章:Web應(yīng)用安全漏洞掃描器的分析、設(shè)計(jì)與實(shí)現(xiàn)。對Web應(yīng)用安全漏洞掃描器進(jìn)行需求分析,分析對掃描器的功能需求、非功能性需求進(jìn)行分析;提出了一個(gè)基于優(yōu)化爬蟲策略的Web應(yīng)用漏洞掃描模型,綜合運(yùn)用現(xiàn)有的Web應(yīng)用漏洞掃描技術(shù),把各個(gè)模塊很好地集成到此漏洞掃描模型中。對典型的Web應(yīng)用安全漏洞(SQL注入、XSS漏洞)進(jìn)行深入研究,針對現(xiàn)有Web漏洞掃描方法的不足,提出了針對SQL注入與XSS漏洞的掃描方法?;诖寺┒磼呙枘P?針對漏洞及其掃描技術(shù)更新快的特點(diǎn),設(shè)計(jì)了一個(gè)插件式的漏洞掃描系統(tǒng),并實(shí)現(xiàn)SQL注入、XSS漏洞的自動化掃描,最后與現(xiàn)有的掃描工具迸行對比分析,證明該掃描模型與掃描系統(tǒng)的可行性與高效性。
第四章:Web應(yīng)用安全漏洞掃描器的測試及分析。闡述系統(tǒng)運(yùn)行和部署環(huán)境,漏洞測試環(huán)境并介紹系統(tǒng)測試過程,針對測試結(jié)果進(jìn)行分析給出結(jié)論。
第五章:結(jié)束語。對本論文進(jìn)行總結(jié)與分析,并指出本文設(shè)計(jì)的漏洞掃描系統(tǒng)存在的不足與下一步的研究方向。
第二章 Web應(yīng)用安全漏洞掃描技術(shù)概述
本章是對Web應(yīng)用安全漏洞掃描相關(guān)技術(shù)的概述。主要包括網(wǎng)絡(luò)爬蟲、安全漏洞、漏洞掃描器的相關(guān)介紹。本章從網(wǎng)絡(luò)爬蟲出發(fā),介紹了網(wǎng)絡(luò)爬蟲的原理及策略及Web應(yīng)用漏洞的原理、成因及危害和防護(hù)等,并對Web應(yīng)用安全漏洞掃描關(guān)鍵技術(shù)進(jìn)行概述。
2.1 網(wǎng)絡(luò)爬蟲與Web應(yīng)用程序基礎(chǔ)
2.1.1 基本概念
網(wǎng)絡(luò)爬蟲是搜索引擎的重要組成部分,它會按照一定的規(guī)則從萬維網(wǎng)上自動提取信息。爬蟲會從某些精心挑選的種子URL開始對網(wǎng)頁進(jìn)行爬取,將從種子網(wǎng)頁中獲取到的URL添加到待爬取URL隊(duì)列中,然后從待爬取URL隊(duì)列中順序取出URL,重復(fù)上述過程,直到待爬取隊(duì)列為空或者滿足停止條件才結(jié)束[9]。
2.1.2 爬取策略
-
廣度優(yōu)先遍歷策略 廣度優(yōu)先又稱為寬度優(yōu)先,是一種設(shè)計(jì)和實(shí)現(xiàn)相對簡單的算法,它的基本思想為了覆蓋盡量多的頁面,在完成當(dāng)前頁面的遍歷后,才根據(jù)等待隊(duì)列的出隊(duì)進(jìn)行下一個(gè)頁面的遍歷,相當(dāng)于樹的層次遍歷。廣度優(yōu)先對屬于一種盲目搜尋法,它會沒有選擇性地抓取很多沒有用的鏈接,導(dǎo)致爬蟲的效率不是很高。為了覆蓋大部分網(wǎng)頁一些搜索引擎會采取寬度優(yōu)先策略。
-
深度優(yōu)先遍歷策略 深度優(yōu)先是從起始頁面開始,沿著一條路徑一直跟蹤下去,直到向前再也沒有沒被訪問過的頁面就往回退,回退時(shí)發(fā)現(xiàn)有未被訪問到的相鄰頁面,便將該頁面作為新的起始頁面,重復(fù)以上的過程,直到所有頁面都被訪問過為止。它的優(yōu)點(diǎn)是能挖掘整個(gè) Web 站點(diǎn)或嵌套的所有資源,產(chǎn)生的不利結(jié)果可能是過程中過深的深度影響抓取命中率和效率,也容易陷入一條路徑再也出不來。所以如今大都不使用深度優(yōu)先策略。
-
最佳優(yōu)先遍歷策略 最佳優(yōu)先策略是指根據(jù)自己的需求制定出特定的算法,然后按照此算法基礎(chǔ)上進(jìn)行爬蟲,所以大體上是廣度優(yōu)先策略的優(yōu)化策略。最佳優(yōu)先對初始鏈接解析后,不是把該網(wǎng)頁所有的鏈接都放等待隊(duì)列中,而是根據(jù)此前制定的網(wǎng)頁分析算法解析鏈接,預(yù)測該鏈接是否是自己想要的,并將符合要求的鏈接放入到等待隊(duì)列中,然后循環(huán)這一過程,直到滿足停止條件結(jié)束。這種策略能夠很好的過濾對自己“無用的”鏈接,相對提高爬蟲的效率,但也可能忽略掉很多相關(guān)鏈接。 因此制定高效的網(wǎng)頁分析算法對爬蟲的結(jié)果起著至關(guān)重要的作用。 2.1.3 爬蟲在漏洞掃描中的作用 網(wǎng)絡(luò)爬蟲是 Web 安全漏洞掃描工具的核心組成部分,漏洞掃描工具通過網(wǎng)絡(luò)爬蟲模塊來搜集目標(biāo)站點(diǎn)的 URL 樹,從中可以分析得到后續(xù)各個(gè)攻擊模塊的漏洞檢測點(diǎn),所以網(wǎng)絡(luò)爬蟲搜集到的站點(diǎn) URL 的完整性,直接影響到漏洞掃描工具的檢測覆蓋率。Web 安全漏洞掃描工具中的網(wǎng)絡(luò)爬蟲工作原理是基于優(yōu)化的廣度優(yōu)先策略對目標(biāo)站點(diǎn)網(wǎng)頁進(jìn)行抓取 [11-12]。站點(diǎn)的 URL構(gòu)成一棵 URL 樹,網(wǎng)絡(luò)爬蟲中的 URL 過濾模塊,對抓取過程中的 URL 按如下策略進(jìn)行過濾:站外URL、非首地址 URL 子樹的 URL、重復(fù)的 URL、同類型重復(fù)出現(xiàn)的 URL。通過照上述策略進(jìn)行 URL 過濾后,可以在保證抓取覆蓋率基本不變的情況下,極大的減少 HTTP 請求個(gè)數(shù),能夠大幅度提高系統(tǒng)的掃描效率。同時(shí)限定初始化 URL子樹的抓取策略,可以方便對大型站點(diǎn)進(jìn)行拆分分析,提高工作效率[10]。網(wǎng)絡(luò)爬蟲的工作流程,如圖2.1所示:
添加圖片注釋,不超過 140 字(可選)
圖 2.1 網(wǎng)絡(luò)爬蟲流程圖 2.1.4 HTTP 協(xié)議模型 HTTP協(xié)議是用于客戶端和Web服務(wù)器之間的請求和響應(yīng)的通信協(xié)議。當(dāng)前協(xié)議版本是HTTP 1.1。HTTP協(xié)議在網(wǎng)絡(luò)系統(tǒng)協(xié)議中的應(yīng)用層協(xié)議中,主要由HTTP請求組成。和HTTP響應(yīng)。它是典型的B / S模型(客戶端服務(wù)器模型).HTTP是無狀態(tài)協(xié)議.HTTP協(xié)議總是發(fā)起客戶端的請求,服務(wù)器在處理請求后返回響應(yīng),服務(wù)器只能被動地接受請求。
-
首先,用戶輸入U(xiǎn)RL,瀏覽器解析URL,提取所用協(xié)議的版本,URL的域名以及獲取目標(biāo)的路徑,可能還有一些參數(shù)。
2)瀏覽器使用在第一步中解析的信息構(gòu)造HTTP請求,并將請求發(fā)送到服務(wù)器。
3)服務(wù)器收到請求后,會處理請求,也可能會重定向。服務(wù)器在處理請求后生成響應(yīng)。
4)服務(wù)器將響應(yīng)作為HTML文檔發(fā)送到瀏覽器。瀏覽器解析HTTP響應(yīng)頭以確定返回代碼是否成功返回所需的網(wǎng)頁,并且瀏覽器呈現(xiàn)HTML文檔。
最早的WWW服務(wù)包含靜態(tài)文件,包括HTML頁面,音頻,圖像,文檔等。服務(wù)器正在等待客戶端的請求。當(dāng)收到請求時(shí),服務(wù)器處理請求,找到用戶請求的靜態(tài)文件,并將文件發(fā)送到客戶端。今天的Web服務(wù)器主要提供動態(tài)生成的內(nèi)容。動態(tài)內(nèi)容由服務(wù)器上的腳本生成。Web應(yīng)用程序處理用戶提交的各種輸入,然后根據(jù)用戶的輸入生成動態(tài)內(nèi)容,然后將內(nèi)容返回給用戶。用戶在訪問服務(wù)器生成的動態(tài)內(nèi)容時(shí)經(jīng)常提交各種自定義參數(shù).HTTP通過以下方式提交數(shù)據(jù)具有查詢字符串和POST方法的URL。漏洞掃描主要是使用各種漏洞原則來構(gòu)建可以檢測漏洞的HTTP請求。
2.1.5 Web 應(yīng)用體系結(jié)構(gòu)
本文研究的Web應(yīng)用漏洞掃描器用于評測Web應(yīng)用的安全性,并且本掃描器也是以Web應(yīng)用的形式存在,所以有必須要先了解一下Web應(yīng)用的相關(guān)知識。Web應(yīng)用通常就是我們所說的網(wǎng)站,通常包含文字、圖片,視頻、音頻,CSS文件,Javascript文件等靜態(tài)文件,還包括一些根據(jù)用戶不同的請求動態(tài)生成的不同的動態(tài)頁面。搜索引擎就是一個(gè)典型的Web用,它根據(jù)用戶提交的關(guān)鍵字動態(tài)生成不同的頁面。一個(gè)常見的Web應(yīng)用程序都是基于模型-視圖-控制器(MVC)設(shè)計(jì),通常由表示層,應(yīng)用層,數(shù)據(jù)層組成,如圖2-1 所示。
添加圖片注釋,不超過 140 字(可選)
圖2.2 常見的Web應(yīng)用架構(gòu)
表示層:表示層直接與用戶進(jìn)行交互,獲取用戶的輸入,驗(yàn)證輸入的合法性,并傳遞給處在服務(wù)器端的應(yīng)用層,應(yīng)用層將處理的結(jié)果返回給表示層,客戶端瀏覽器以HTML的形式顯示處理的結(jié)果。
應(yīng)用層:應(yīng)用層通常也被成為業(yè)務(wù)層,它是表示層和數(shù)據(jù)層的橋梁,位于Web服務(wù)器端,他處理用戶提交上來的請求,控制將用戶的請求發(fā)送給每一層的業(yè)務(wù)邏輯,另外還調(diào)用數(shù)據(jù)層的接口,獲取數(shù)據(jù)庫的數(shù)據(jù),產(chǎn)生HTTP的響應(yīng)。
數(shù)據(jù)層:數(shù)據(jù)層Web應(yīng)用程序與數(shù)據(jù)庫的交互,連接和訪問數(shù)據(jù)庫,通過SQL語句向用戶提交數(shù)據(jù)處理請求,查詢,更新,刪除,修改相關(guān)數(shù)據(jù),并將數(shù)據(jù)處理結(jié)果返回給Web應(yīng)用服務(wù)器,再由Web應(yīng)用服務(wù)器返回給客戶端。
2.2 安全漏洞
2.2.1 基本概念
關(guān)于漏洞(Vulnerability)的概念目前還沒有統(tǒng)一的解釋。在 RFC28281 對漏洞的有如下定義:A flaw or weakness in a system's design, implementation, or operation and management that could be exploited to violate the system’s security policy.即攻擊者可以利用安全漏洞突破系統(tǒng)的安全機(jī)制繼而可以訪問到未經(jīng)授權(quán)的數(shù)據(jù)[13]。
漏洞通常指軟件設(shè)計(jì)和實(shí)現(xiàn)中的缺陷。漏洞通常分為系統(tǒng)層漏洞和應(yīng)用層漏洞。前者主要指系統(tǒng)軟件和通信協(xié)議中的漏洞。系統(tǒng)軟件具有操作系統(tǒng),數(shù)據(jù)庫服務(wù)器和Web服務(wù)器.Web應(yīng)用程序漏洞通常被認(rèn)為是由各種編程語言(PHP,JSP,Python等)開發(fā)的Web應(yīng)用程序/ Web服務(wù)中的安全漏洞。如果這些發(fā)現(xiàn)安全漏洞,它們可能被利用來攻擊Web應(yīng)用程序,篡改網(wǎng)頁信息,竊取數(shù)據(jù)庫信息,甚至可能授權(quán)訪問服務(wù)器。通常包括SQL注入漏洞,XSS漏洞,信息泄露漏洞,跨站點(diǎn)請求漏洞,命令注入漏洞等。
本文所研究的主要是Web應(yīng)用程序漏洞,通常是指網(wǎng)站程序上的漏洞,其Web應(yīng)用程序的漏洞主要表現(xiàn)如下:1)系統(tǒng)存在安全方面的脆弱性;2)非法用戶得以獲得訪問權(quán);3)合法用戶未經(jīng)授權(quán)提高訪問權(quán)限;4)系統(tǒng)易受來自各方面的攻擊。
2.2.2 漏洞類型
Web應(yīng)用程序漏洞通常分為兩種類型:客戶端漏洞和服務(wù)器端漏洞。例如,SQL注入攻擊是對數(shù)據(jù)庫的攻擊。它們出現(xiàn)在Web應(yīng)用程序的服務(wù)器端,是服務(wù)器端漏洞。XSS攻擊通?;趈avascript腳本的存在形式,通常發(fā)生在瀏覽器端并且是客戶端漏洞。根據(jù)漏洞的應(yīng)用點(diǎn)和使用的檢測方法,漏洞可以命名為不同的類型,但是沒有標(biāo)準(zhǔn)的統(tǒng)一漏洞分類方法。為了研究最重要項(xiàng)目確定的十種應(yīng)用漏洞,詳細(xì)闡述了一些重要的漏洞及其漏洞特征。
A1-注入
注入漏洞,例如SQL注入。當(dāng)不受信任的數(shù)據(jù)作為命令或查詢的一部分發(fā)送到解釋器時(shí),會發(fā)生這些漏洞。發(fā)送惡意數(shù)據(jù)的攻擊者可能會欺騙解釋器執(zhí)行未安排的命令或在未正確授權(quán)時(shí)訪問數(shù)據(jù)。
A2-失效的身份認(rèn)證和會話管理
與身份驗(yàn)證和會話管理相關(guān)的管理器功能通常無法正確實(shí)施,這會導(dǎo)致攻擊者破壞密碼,密鑰,會話令牌或其他漏洞以冒充其他用戶。
A3-跨站腳本(XSS)
當(dāng)應(yīng)用程序接收到不受信任的數(shù)據(jù)并將其發(fā)送到Web瀏覽器而沒有正確的驗(yàn)證和轉(zhuǎn)義時(shí),這將導(dǎo)致跨站點(diǎn)腳本攻擊(XSS),允許攻擊者在受害者的瀏覽器上執(zhí)行腳本,劫持用戶會話,從而危及站點(diǎn),并將用戶重定向到惡意站點(diǎn)。
A4-不安全的直接對象引用
當(dāng)開發(fā)人員公開對內(nèi)部實(shí)現(xiàn)對象(例如文件,目錄或數(shù)據(jù)庫配置鍵)的引用時(shí),會生成不安全的直接對象引用。在沒有訪問控制檢測或其他保護(hù)的情況下,攻擊者操縱這些引用以訪問未經(jīng)授權(quán)的數(shù)。
A5-安全配置錯誤
良好的安全性要求應(yīng)用程序,框架,應(yīng)用程序服務(wù)器,Web服務(wù)器,數(shù)據(jù)庫服務(wù)器的安全配置。由于許多設(shè)置的默認(rèn)值不安全,因此必須實(shí)現(xiàn)和維護(hù)這些設(shè)置。
A6-敏感信息泄漏
許多Web應(yīng)用程序無法正確保護(hù)敏感數(shù)據(jù),例如信息卡和憑據(jù)。攻擊者可能竊取或篡改這些受到弱保護(hù)的數(shù)據(jù),以防止信用卡欺詐和身份盜用。敏感信息需要額外的保護(hù),例如傳輸過程中的存儲或加密。
A7-訪問控制缺失
大多數(shù)Web應(yīng)用程序在UI中看到該功能之前驗(yàn)證對功能級別的訪問。但是,當(dāng)訪問每個(gè)功能時(shí),應(yīng)用程序需要在服務(wù)器端執(zhí)行相同的訪問控制檢查。如果請求未經(jīng)驗(yàn)證,則攻擊者可以欺騙請求在未經(jīng)適當(dāng)授權(quán)的情況下訪問該功能。
A8-跨站請求偽造
跨站點(diǎn)請求偽造攻擊強(qiáng)制登錄用戶成為瀏覽器,向弱勢Web應(yīng)用程序發(fā)送虛假HTTP請求(包括用戶的會話cookie和其他身份驗(yàn)證信息)。這允許攻擊者強(qiáng)制用戶的瀏覽器向易受攻擊的應(yīng)用程序發(fā)送請求,該應(yīng)用程序認(rèn)為該應(yīng)用程序是來自用戶的合法請求。
A9-使用含有已知漏洞的組件
組件,比如:庫文件,框架和其他軟件模塊,幾乎總是以全部的權(quán)限運(yùn)行。如果利用易受攻擊的組件,此類攻擊可能導(dǎo)致更嚴(yán)重的數(shù)據(jù)丟失或服務(wù)器接管。使用具有已知漏洞的組件的應(yīng)用程序可能會破壞應(yīng)用程序并可能發(fā)生一系列可能的攻擊和影響。
A10-未驗(yàn)證的重定向和轉(zhuǎn)發(fā)
Web應(yīng)用程序通常會將用戶重定向并轉(zhuǎn)發(fā)到其他網(wǎng)站,并使用不受信任的數(shù)據(jù)來確定目標(biāo)頁面。如果未經(jīng)過正確驗(yàn)證,攻擊者可以將受害者重定向到網(wǎng)絡(luò)釣魚或惡意網(wǎng)站,或使用轉(zhuǎn)發(fā)來訪問未經(jīng)授權(quán)的頁面。
著名的開源項(xiàng)目組織OWASP(Open Web Application Security Project,開放式Web應(yīng)用程序安全項(xiàng)目),它提供有關(guān)計(jì)算機(jī)和互聯(lián)網(wǎng)應(yīng)用程序的公正、實(shí)際、有成本效益的信息。其目的是協(xié)助個(gè)人、企業(yè)和機(jī)構(gòu)來發(fā)現(xiàn)和使用可信賴軟件。OWASP的成員包括全世界公司、教育機(jī)構(gòu)和專業(yè)人員等,該組織致為于Web應(yīng)用安全研究,包括規(guī)范Web安全的方法論、發(fā)布安全文檔和指導(dǎo)性手冊。OWASP最著名的是被廣泛采納的OWASP Top 10(10項(xiàng)最嚴(yán)重的Web應(yīng)用程序安全風(fēng)險(xiǎn))。2017年版本中,10項(xiàng)最嚴(yán)重的Web應(yīng)用程序安全風(fēng)險(xiǎn)如表2.1所示:
表 2.1 OWASP Top 10
A1 | 注入 |
---|---|
A2 | 失效的身份認(rèn)證和會話管理 |
A3 | XSS(跨站腳本) |
A4 | 失效的訪問控制 |
A5 | 安全配置錯誤 |
A6 | 敏感信息泄露 |
A7 | 攻擊檢測與防范不足 |
A8 | 跨站請求偽造 |
A9 | 使用含有已知漏洞的組件 |
A10 | 未受保護(hù)的APIs |
在以上10大類型Web應(yīng)用程序安全風(fēng)險(xiǎn)中,我們重點(diǎn)關(guān)注Web應(yīng)用程序安全漏洞,如SQL注入、XSS漏洞。其基本原理概述如下。
-
SQL注入
SQL 注入攻擊源于英文“SQL Injection Attack”,所謂 SQL 注入攻擊,就是利用 SQL注入技術(shù)來實(shí)施的網(wǎng)絡(luò)攻擊。SQL是一種結(jié)構(gòu)化查詢語言,是用于操作數(shù)據(jù)庫的命令集。它是一種功能齊全的數(shù)據(jù)庫語言。所謂的注入是將命令插入到表單的輸入域名或頁面請求的查詢字符串中。由于服務(wù)器沒有嚴(yán)格驗(yàn)證其有效性,服務(wù)器最終將執(zhí)行惡意命令。目前,應(yīng)用程序的十大攻擊方法位居榜首。
原理:SQL注入是指通過把SQL命令插入到Web交互頁面(例如表單遞交或頁面請求或輸入域名)的查詢字符串,以達(dá)到欺騙服務(wù)器執(zhí)行惡意的SQL命令,它的應(yīng)用違背了“數(shù)據(jù)與代碼分離原則“,它有兩個(gè)條件:一是用戶能夠控制數(shù)據(jù)的輸入;而是代碼拼湊了用戶輸入的數(shù)據(jù),把數(shù)據(jù)當(dāng)作代碼執(zhí)行[14]。
開發(fā)人員在系統(tǒng)開發(fā)過程中通常會引入注入漏洞。因?yàn)殚_發(fā)人員沒有專業(yè)的安全編程培訓(xùn),缺乏安全相關(guān)的知識和開發(fā)經(jīng)驗(yàn),導(dǎo)致編寫代碼時(shí)考慮不充分,沒有嚴(yán)格的用戶驗(yàn)證 -提交數(shù)據(jù)并直接構(gòu)造數(shù)據(jù)庫查詢語句,從而引入注入漏洞。不同于網(wǎng)絡(luò)級攻擊,注入攻擊利用應(yīng)用程序的開放端口,防火墻等設(shè)備無法檢測到,因此具有較高的隱藏特性。如果管理員不檢查分析數(shù)據(jù)庫日志,基本上不會發(fā)現(xiàn)注入攻擊。
其分類如下:
1)繞過Web應(yīng)用的用戶驗(yàn)證
在這類攻擊中,攻擊者在用戶輸入?yún)^(qū)輸入數(shù)據(jù)信息,這些數(shù)據(jù)信息將會用于動態(tài)構(gòu)造SQL査詢語句中的where條件部分。
2)盲注攻擊
攻擊者通過輸入注入信息然后提交到服務(wù)器來檢測Web應(yīng)用是否存在SQL注入漏洞,當(dāng)提交的信息動態(tài)組裝成一個(gè)SQL語句時(shí),如果是一個(gè)不合理的語句,服務(wù)器向客戶端返回一個(gè)錯誤代碼,攻擊者可以通過反復(fù)探測然后在返回?cái)?shù)據(jù)中獲得有效信息,甚至可以修改數(shù)據(jù)庫內(nèi)包括身份認(rèn)證信息等信息。
3)使用UNION聯(lián)合查詢
攻擊者可以使用這種方式從數(shù)據(jù)庫的表中獲得額外的數(shù)據(jù)信息,例如:在用戶名中鍵入類似于"UNION SELECT <注入語句>"的輸入信息后,則運(yùn)行時(shí)自動組裝 SQL 査詢語句Query="select * from users where id= " UNION select * where account = 10 and password="";正常的 SQL 語句由于 id 和 password 均為空的,所以返回的數(shù)據(jù)也是空的,但此時(shí)由于加入了 UNION 方法進(jìn)行注入,數(shù)據(jù)庫服務(wù)器會從表 users 中返回 account= 10時(shí)的所有值[15]。
-
XSS漏洞
跨站腳本攻擊,英文全名Cross Site Scripting,為了與網(wǎng)頁中的層疊樣式表(Cascading Style Sheets, CSS) 區(qū)分,故人們就在安全領(lǐng)域叫做XSS。XSS英文全稱為跨站腳本攻擊,它指的是惡意攻擊者在頁面中插入惡意代碼或腳本。當(dāng)用戶瀏覽網(wǎng)頁時(shí),將執(zhí)行頁面中嵌入的代碼以實(shí)現(xiàn)攻擊者的特殊目的。攻擊者可以通過攻擊執(zhí)行許多惡意操作,例如竊取,傳播郵件間諜病毒,更改應(yīng)用程序帳戶設(shè)置,由于攻擊功能強(qiáng)大,場景復(fù)雜,因此被列為應(yīng)用安全領(lǐng)域的頭號敵人。
XSS攻擊根據(jù)效果的不同可以分為以下幾類:
(1)反射型XSS
反射型,也稱為“非持久性”,簡單地“反映”用戶輸入到瀏覽器的數(shù)據(jù)。因此,只有誘使用戶點(diǎn)擊惡意鏈接才能成功攻擊。
(2)存儲型
存儲類型,通常也稱為“持久”,“存儲”用戶輸入的數(shù)據(jù)到服務(wù)器,這是非常穩(wěn)定的。
(3)DOM Based XSS
DOM Based XSS是通過修改頁面的節(jié)點(diǎn)形成的,從效果上來說應(yīng)該屬于反射型。由于是由發(fā)現(xiàn)的安全專家專門提出的類型,處于歷史原因的考慮,就將其單獨(dú)劃分出來。
原理:XSS攻擊,通常是指黑客通過“HTML注入”篡改了頁面,插入了惡意的腳本,從而在用戶瀏覽網(wǎng)頁時(shí)控制用戶瀏覽器的一種攻擊。攻擊者首先確認(rèn)有風(fēng)險(xiǎn)的注入點(diǎn),然后把精心構(gòu)造的惡意數(shù)據(jù)發(fā)送到服務(wù)器,用戶向服務(wù)器發(fā)送請求,然后經(jīng)由瀏覽器解釋在用戶端執(zhí)行,這樣便會產(chǎn)生危害[16]。
分類如下:
1)反射性XSS
反射型XSS只是簡單地把用戶輸入的數(shù)據(jù)“反射”給瀏覽器。也就是說,黑客往往需要誘使用戶“點(diǎn)擊”一個(gè)惡意鏈接,才能攻擊成功。
2)存儲性XSS
存儲性XSS會把用戶輸入的數(shù)據(jù)“存儲”在服務(wù)器段。這種XSS具有很強(qiáng)的穩(wěn)定性。
3)DOM Based XSS
實(shí)際上這種類型的XSS并非按照“數(shù)據(jù)是否保存在服務(wù)器端”來劃分。它是通過修改頁面的DOM節(jié)點(diǎn)形成的 XSS,所以稱之為DOM Based XSS。
2.2.3 漏洞檢測技術(shù)
漏洞檢測技術(shù)分為很多種,只有將幾種檢測技術(shù)結(jié)合起來,才可以在效率和質(zhì)量中得到平衡[17]。漏洞掃描是通過模擬黑客的攻擊方法來發(fā)現(xiàn)目標(biāo)的安全漏洞。通常,網(wǎng)絡(luò)漏洞掃描系統(tǒng)由三部分組成。
1.發(fā)送數(shù)據(jù)包機(jī)制
漏洞掃描是主動檢測漏洞的行為。它需要根據(jù)漏洞的簽名構(gòu)建數(shù)據(jù)包并將其發(fā)送到檢測目標(biāo)。
2.接收數(shù)據(jù)包機(jī)制
通常,目標(biāo)響應(yīng)的數(shù)據(jù)包是漏洞評估的原始數(shù)據(jù)??焖贉?zhǔn)備接收數(shù)據(jù)包是漏洞掃描的基本保證要素。
漏洞簽名數(shù)據(jù)庫是漏洞掃描中最重要的部分。發(fā)送機(jī)制需要根據(jù)特征碼發(fā)送探測數(shù)據(jù)包,收到數(shù)據(jù)包后,還需要根據(jù)特征碼進(jìn)行判斷。是網(wǎng)絡(luò)漏洞掃描器應(yīng)該有一個(gè)漏洞庫,包括每個(gè)漏洞的簽名。網(wǎng)絡(luò)漏洞掃描基本上是網(wǎng)絡(luò)數(shù)據(jù)包的操作,所以檢測數(shù)據(jù)包的有效性和收到后判斷的準(zhǔn)確性響應(yīng)數(shù)據(jù)包可以降低誤報(bào)率。
一般,漏洞掃描分為三個(gè)階段:
(1)發(fā)現(xiàn)目標(biāo)網(wǎng)絡(luò)或主機(jī)。
(2)收集目標(biāo)信息,包括服務(wù)器的類型及版本等。
(3)分析收到的數(shù)據(jù)信息,確定系統(tǒng)是否存在安全漏洞。
根據(jù)分類標(biāo)準(zhǔn),漏洞掃描技術(shù)可以有不同的分類:根據(jù)掃描方法可分為主動掃描和被動掃描;它可以通過掃描對象分為基于主機(jī)的掃描和基于網(wǎng)絡(luò)的掃描;掃描策略用于將點(diǎn)數(shù)分為逐個(gè)檢測掃描和規(guī)則驅(qū)動掃描。
a)主動掃描和被動掃描
主動掃描是通過向目標(biāo)或主機(jī)網(wǎng)絡(luò)發(fā)送特殊數(shù)據(jù)包并收集響應(yīng)包來完成的,其優(yōu)點(diǎn)在于能夠快速準(zhǔn)確地獲取信息,其缺點(diǎn)是難以關(guān)閉掃描路徑并且易于查找,并且難以執(zhí)行主動掃描通過防火墻是相當(dāng)高的。
b) 基于主機(jī)的掃描和基于網(wǎng)絡(luò)的掃描
從內(nèi)部用戶的角度檢測操作系統(tǒng)中的漏洞是基于主機(jī)的掃描,主要用于檢測用戶配置中的漏洞?;谥鳈C(jī)的漏洞掃描程序可以通過安裝服務(wù)訪問所有文件和進(jìn)程來掃描更多漏洞或目標(biāo)系統(tǒng)上的代理。優(yōu)點(diǎn)是它可以直接獲取目標(biāo)主機(jī)的底層細(xì)節(jié);缺點(diǎn)是只有在目標(biāo)主機(jī)受到控制時(shí)才能實(shí)施漏洞掃描。
從外部攻擊者的角度掃描到目標(biāo)網(wǎng)絡(luò)或主機(jī)是基于網(wǎng)絡(luò)的掃描,其中主要用戶在網(wǎng)絡(luò)協(xié)議或服務(wù)中查找漏洞?;诰W(wǎng)絡(luò)的掃描能夠及時(shí)獲得網(wǎng)絡(luò)信息。它通過向目標(biāo)服務(wù)器發(fā)送構(gòu)建的網(wǎng)絡(luò)數(shù)據(jù)包來確定是否存在特定漏洞。它的優(yōu)點(diǎn)是價(jià)格低,易于集中管理和維護(hù);缺點(diǎn)是它無法通過防火墻,并且檢測到的漏洞不夠全面。
通過監(jiān)聽網(wǎng)絡(luò)數(shù)據(jù)包完成被動掃描。與主動掃描相比,檢測被動掃描基本上是不可能的,由于被動掃描不需要發(fā)送網(wǎng)絡(luò)數(shù)據(jù)包,因此不受防火墻的影響。主要缺點(diǎn)是掃描速度快速度慢,準(zhǔn)確性差。
c) 逐一探測掃描和規(guī)則驅(qū)動掃描
探測檢測是通過調(diào)用插件檢測程序來檢測漏洞的存在。檢測程序有兩個(gè)來源:(1)使用安全站點(diǎn)發(fā)布的漏洞檢測程序;(2)改進(jìn)漏洞簽名結(jié)構(gòu)發(fā)送數(shù)據(jù)包。原理是模擬黑客的入侵過程,但在一定程度上限制,以防止目標(biāo)主機(jī)的侵權(quán)。掃描檢測一個(gè)一個(gè)是基于每個(gè)漏洞的個(gè)體特征,因此掃描的準(zhǔn)確性相對較高;缺點(diǎn)是難以控制檢測程度。
探測檢測是通過調(diào)用插件檢測程序來檢測漏洞的存在。檢測程序有兩個(gè)來源:(1)使用安全站點(diǎn)發(fā)布的漏洞檢測程序;(2)改進(jìn)漏洞簽名結(jié)構(gòu)發(fā)送數(shù)據(jù)包。原理是模擬黑客的入侵過程,但在一定程度上限制,以防止目標(biāo)主機(jī)的侵權(quán)。掃描檢測一個(gè)一個(gè)是基于每個(gè)漏洞的個(gè)體特征,因此掃描的準(zhǔn)確性相對較高;缺點(diǎn)是難以控制檢測程度。
-
人工分析 針對被分析的目標(biāo),手工構(gòu)造特殊的輸入變量,查看輸出結(jié)果從而獲得漏洞的分析技術(shù)。它多適用于程序中含有人機(jī)交互界面,其中 Web 漏洞檢測多試用這種方法。
-
Fuzzing 技術(shù) Fuzzing 技術(shù)是自動注入缺陷的測試技術(shù),它使用被測目標(biāo)程序的必要數(shù)據(jù)的輸入,查看程序是否正常為標(biāo)志,判斷程序是否有潛在的危險(xiǎn)。它一般以邊界值、文件頭尾構(gòu)造基本的輸入條件。
-
靜態(tài)分析技術(shù) 這主要是對系統(tǒng)的源代碼進(jìn)行分析,屬于白盒測試技術(shù)。它包括上下文搜索、靜態(tài)字符串搜索等。在理論上可以探測出系統(tǒng)的漏洞,但是隨著不斷擴(kuò)大的詞典將造成誤報(bào)率搞。檢測的結(jié)果集大的局限。
-
動態(tài)分析技術(shù) 它是通過使用調(diào)試器工具來進(jìn)行動態(tài)分析的,需要在調(diào)試器中運(yùn)行程序,查看程序的運(yùn)行狀態(tài)以發(fā)現(xiàn)漏洞,通過構(gòu)造特殊數(shù)據(jù)分析數(shù)據(jù)流發(fā)現(xiàn)漏洞。 2.2.4 Web 應(yīng)用漏洞產(chǎn)生的原因 Web 應(yīng)用程序中的漏洞主要是由于下列幾個(gè)原因:
-
輸入驗(yàn)證錯誤:由于相當(dāng)多的程序員缺乏良好的安全意識,他們在編寫Web應(yīng)用程序時(shí)經(jīng)常使用用戶輸入的數(shù)據(jù)作為可信數(shù)據(jù),并且不嚴(yán)格審查用戶的輸入數(shù)據(jù)。這使得許多Web應(yīng)用程序包含潛在的安全漏洞。攻擊者可以提交敏感的XML響應(yīng)消息或攻擊腳本,以獲取基于HTTP響應(yīng)的敏感信息甚至操縱后端數(shù)據(jù)庫.Web應(yīng)用程序開發(fā)測試人員沒有提供輸入安全過濾機(jī)制。這些錯誤可能導(dǎo)致SQL注入漏洞和XSS漏洞,信息泄漏和其他問題。我相信用戶提交的輸入,無需輸入驗(yàn)證,是導(dǎo)致Web應(yīng)用程序漏洞的最大原因。
-
授權(quán)錯誤: Web應(yīng)用程序的訪問控制機(jī)制不足,不具有訪問權(quán)限的用戶被授予權(quán)限,訪問控制機(jī)制用于提高非管理員的權(quán)限。
-
異常處理錯誤: Web應(yīng)用程序通常需要異常處理。如果異常處理不謹(jǐn)慎,默認(rèn)情況下給出的信息通常會泄漏服務(wù)器信息,例如服務(wù)器,數(shù)據(jù)庫的版本號和其他配置信息。
-
配置錯誤:管理員沒有很好地配置各種軟件,沒有升級易受攻擊的軟件,沒有修補(bǔ),配置選項(xiàng)不正確。
-
代碼錯誤:程序員未正確使用接口或使用包含邏輯漏洞的有缺陷的功能,接口或應(yīng)用程序。
2.2.5 Web 應(yīng)用漏洞的分布
Web 應(yīng)用漏洞多種多樣,但是他們多占的比例不同,威脅程度不一樣,有些
添加圖片注釋,不超過 140 字(可選)
圖2.3 web應(yīng)用漏洞分布圖
漏洞更常見,漏洞更危險(xiǎn)。Web應(yīng)用程序漏洞的具體分布如圖2-3所示。
由于注入漏洞,XSS漏洞和傳遞遍歷漏洞是最易受攻擊的數(shù)量和最具威脅的漏洞類型,如圖2-4所示,這三個(gè)漏洞也是它用于掃描。本節(jié)詳細(xì)介紹了典型的漏洞SQL注入漏洞,XSS漏洞,目錄遍歷漏洞的原理以及如何檢測它。
2.2.6 Web 應(yīng)用漏洞的風(fēng)險(xiǎn)評估
應(yīng)用程序中的漏洞可以以不同方式觸發(fā)。每種觸發(fā)方法都代表一種風(fēng)險(xiǎn)。導(dǎo)致這些漏洞的風(fēng)險(xiǎn)是不同的,并且由于沒有損害而造成的損害完全破壞整個(gè)企業(yè)。為了評估這些漏洞帶來的風(fēng)險(xiǎn),需要結(jié)合許多其他因素來確定它們的影響,主要是攻擊方法,漏洞數(shù)量,安全檢測,技術(shù)影響和業(yè)務(wù)影響。表2-1顯示了每個(gè)因素的風(fēng)險(xiǎn)級別。只有當(dāng)這些因素協(xié)同工作時(shí),我們才能全面評估Web應(yīng)用程序面臨的風(fēng)險(xiǎn)。漏洞越常見,檢測漏洞越困難,業(yè)務(wù)越脆弱,攻擊越簡單,風(fēng)險(xiǎn)越高。
表2.2 漏洞風(fēng)險(xiǎn)評估因素
威脅 | 攻擊方式 | 漏洞普遍性 | 漏洞可檢測性 | 技術(shù)影響 | 業(yè)務(wù)影響 |
---|---|---|---|---|---|
應(yīng)用描述 | 容易 | 容易 | 廣泛 | 嚴(yán)重 | 業(yè)務(wù)描述 |
平均 | 平均 | 常見 | 中等 | ||
困難 | 困難 | 少見 | 小 |
2.3 國內(nèi)外漏洞掃描器研究分析
2.3.1 分析目的
在2.2節(jié)中,我們已經(jīng)了解到Web安全風(fēng)險(xiǎn)所帶來的諸多問題,Web漏洞掃描器正因其掃描漏洞的簡便快捷而得到了廣泛的使用。越來越多的企業(yè)使用商業(yè)Web漏洞掃描器定期掃描公司網(wǎng)站,及時(shí)修補(bǔ)漏洞,以防范安全風(fēng)險(xiǎn)。國內(nèi)外的幵源社區(qū)中也經(jīng)常有人發(fā)布各種版本的開源漏洞掃描器。然而,不同的掃描器在檢測性能方面也存在一定的差異。本文中,我首先從影響掃描器準(zhǔn)確率的三個(gè)方面對國內(nèi)外的6種主流掃描器進(jìn)行了比較分析。從而得出對準(zhǔn)確率影響最大的因素,對其進(jìn)行研究改進(jìn)[18]。
2.3.2 影響準(zhǔn)確率的三個(gè)因素
影響漏洞掃描器準(zhǔn)確率的三個(gè)因素分別為輸入?yún)?shù)覆蓋率、爬取能力、認(rèn)證覆蓋率。
-
輸入?yún)?shù)覆蓋率 輸入?yún)?shù)覆蓋率是指在瀏覽器和服務(wù)器之間傳輸復(fù)雜輸入的時(shí)候,應(yīng)用程序所支持的子協(xié)議和傳輸方式。如果掃描器不能支持應(yīng)用程序傳輸所使用的子協(xié)議的話,那它肯定不能用給定的參數(shù)來檢測到漏洞。根據(jù)62款國際上流行的商業(yè)和開源掃描器對于輸入?yún)?shù)覆蓋率的比較結(jié)果[19],可以得知,Web應(yīng)用掃描器對于輸入?yún)?shù)覆蓋率的支持通常包含如下四個(gè)方面: HTTP Query String Parameters (GET):輸入?yún)?shù)通過 URL 發(fā)送。 HTTP Body Parameters (POSTO:輸入?yún)?shù)通過 HTTP body 發(fā)送。 HTTP Cookie Parameters:輸入?yún)?shù)通過 HTTP cookie 發(fā)送。 HTTP Headers: HTTP提交應(yīng)用程序使用的頭。
-
爬取能力 爬取能力是掃描器獲取頁面的能力。如果掃描器的攻擊引擎比較差的話,它也許會遺漏一個(gè)漏洞,但是如果它的爬取引擎比較差的話,那它就不可能獲取到頁面,也必然不可能得到該頁面中存在的漏洞了。我采用WIVET來對掃描器的爬取能力進(jìn)行評估。WIVET是用來分析Web鏈接爬取能力的一種工具,它可以自動的爬取到各種應(yīng)用類型,比如 Html、Ajax、Flash、Applet、Silverlight. WSDL、REST。大致步驟如下[20],WIVET中含有54個(gè)測試案例,將WIVET部署到服務(wù)器上,然后分別用掃描器對其進(jìn)行掃描,最終會根據(jù)測試案例的通過率生成一個(gè)結(jié)果報(bào)表。從結(jié)果報(bào)表中,我們可以很清晰的看出各掃描器爬取能力的異同。
-
認(rèn)證覆蓋率 未經(jīng)認(rèn)證的漏洞掃描器只能獲取到系統(tǒng)的基本信息,包括操作系統(tǒng)、開放的網(wǎng)絡(luò)端口、端口所監(jiān)聽的服務(wù)等。然而,如果可以提供認(rèn)證掃描功能的話,掃描器就可以登陸到即將掃描的系統(tǒng),并且獲取到該應(yīng)用的詳細(xì)信息,比如配置參數(shù)、安全補(bǔ)丁等。認(rèn)證后的掃描器所獲取的信息更加全面,并且誤報(bào)率更低。通過調(diào)研,本文中我們選取了 16種掃描器通常具備的認(rèn)證能力進(jìn)行了對比。這些認(rèn)證項(xiàng)大致包括:Custom Cookie、Custom Header、BASIC、DIGEST、NTLM、Kerberos、FORM、PROXY、GZIP、SSL、Logout Detection、Logout Exclusion 等。其中 Custom Cookie 和 Custom Header 是指在測試中所使用的 cookie 和 header; BASIC,DIGEST, NTLM, Kerberos和FORM是相應(yīng)的認(rèn)證方法;PROXY代表了輸出協(xié)議支持;GZIP,DEFLATE表示相應(yīng)的壓縮支持;SSL指SSUTLS加密支持;CERT指的是客戶端認(rèn)證;Logout Detection表示對自動檢測無效會話的支持。經(jīng)過統(tǒng)計(jì),分別得出各掃描器的認(rèn)證覆蓋率,以進(jìn)一步分析。 2.3.3 對比總結(jié) 表2-2中,我將上一節(jié)提到的影響掃描器準(zhǔn)確率的三個(gè)特性的具體指標(biāo)羅列出來,并將這三個(gè)指標(biāo)與掃描器準(zhǔn)確率進(jìn)行了對比。從表中,我們可以直觀的了解到這三個(gè)特性如何影響掃描器的準(zhǔn)確率??梢园l(fā)現(xiàn),其實(shí)掃描器準(zhǔn)確率的變化趨勢和掃描器的爬取能力的變化趨勢是很相似的。當(dāng)然,掃描器的準(zhǔn)確率和輸入?yún)?shù)覆蓋率以及認(rèn)證能力也是有一定聯(lián)系的。正如上一節(jié)所說,認(rèn)證覆蓋率越高,掃描器獲取的信息會更加的全面,誤報(bào)率也會降低。而輸入?yún)?shù)覆蓋率的高低也會對準(zhǔn)確率造成一定的影響。 表 2.2 掃描器三大指標(biāo)與準(zhǔn)確率對比表
排名 | 掃描器 | 輸入?yún)?shù)覆蓋率 | 爬取能力 | 認(rèn)證覆蓋率 | 掃描器準(zhǔn)確率 |
---|---|---|---|---|---|
1 | WVS | 100% | 91% | 94% | 92.8% |
2 | Nessus | 100% | 84% | 100% | 78.9% |
3 | Appscan | 100% | 83% | 94% | 78.4% |
4 | JSKY | 50% | 53% | 75% | 57.4% |
5 | RSASWEB | 50% | 61% | 38% | 51.5% |
6 | MatriXay | 50% | 43% | 25% | 36.1% |
2.4 Web 應(yīng)用漏洞分析及其檢測方法 2.4.1 SQL 注入漏洞 (1)SQL 漏洞概述 幾乎每個(gè)Web應(yīng)用程序都使用數(shù)據(jù)庫來保存各種操作所需的信息.SQL注入是應(yīng)用程序和數(shù)據(jù)庫層之間發(fā)生的安全漏洞。在Web程序代碼中,用戶提交的參數(shù)不會直接過濾到SQL語句,導(dǎo)致參數(shù)中的特殊字符打破SQL語句的原始邏輯。該漏洞可被利用來執(zhí)行任意SQL語句。這些注入的SQL語句將由數(shù)據(jù)庫服務(wù)器作為普通SQL指令運(yùn)行,這可能導(dǎo)致偏離用戶的意圖,這可能導(dǎo)致數(shù)據(jù)庫信息泄露。在嚴(yán)重的情況下,數(shù)據(jù)庫服務(wù)器的管理員可能被盜。權(quán)限。當(dāng)攻擊者獲得管理權(quán)限時(shí),他可以隨意操縱數(shù)據(jù)庫和系統(tǒng)。 (2)SQL 漏洞的檢測方式 Web漏洞的使用是多樣化的。普通的消防HTTP / HTTPS是完全開放的。傳統(tǒng)的IDS不起作用。可以通過構(gòu)造GET或POST請求來檢測SQL注入漏洞。在某些情況下,可以通過blind檢測??紤]以下SQL語句:從t_user中選擇*其中username = $ username和password = $ passwd。類似的查詢通常用于Web應(yīng)用程序以驗(yàn)證用戶。如果查詢返回一個(gè)值,憑證的用戶名存在于數(shù)據(jù)庫中,用戶可以登錄系統(tǒng)。否則它將訪問拒絕。輸入字段的值通常以用戶的形式從Web表單獲取。假設(shè)我們插入以下的用戶名和密碼值是:$username = '100' or '100' = '100,$passwd = 100' or '100' = '100。于是SQL 查詢語句變成了:select * from user where username='100'or '100' = '100' and password='100' or '100' ='100'。構(gòu)造GET請求,并發(fā)送到服務(wù)器,假設(shè)向服務(wù)器http://www.example.com提交HTTP請求,那么我們構(gòu)造的GET請求就是http://www.example.com/index.php? username=100 or'100='100&passwd =100'or'100=' 100。經(jīng)過簡單分析,我們注意到因?yàn)闂l件是真的(或100=100),該查詢返回一個(gè)值(或一組值)。這樣,系統(tǒng)在不知道用戶名和密碼情況下也驗(yàn)證了該用戶。這就說明存在著數(shù)字型的SQL漏洞。 除了這個(gè)數(shù)字SQL漏洞之外,您還可以使用UNION運(yùn)算符偽造查詢。為了讓測試人員有意參與偽造查詢,我們在SQL注入中使用UNION運(yùn)算符來獲取原始查詢。這些假查詢的結(jié)果被添加到原始查詢的結(jié)果中,并且測試者可以獲得其他格式的字段值。例如,服務(wù)器執(zhí)行的查詢?nèi)缦?#xff1a;select name,email,age from users where id=$id。設(shè)置id值:$id1 union all select creditcardnumber 1 1,,from creditcartable 。得到以下查詢:select name,email,age from users where id=$id=1 union all select creditcardnumber,1,1 from creditcartable。這將和所有信用卡用戶一起加入原始查詢結(jié)果中。繞開使用 DISTINCT 關(guān)鍵詞的查詢必須使用關(guān)鍵字ALL。另外,我們注意到除了信用卡帳戶外,我們還選擇了其他兩個(gè)值。這兩個(gè)值也是必要的。因?yàn)闉榱吮苊庹Z法錯誤,這兩個(gè)查詢必須具有相同數(shù)量的參數(shù)。通過添加Union查詢,我們查詢了數(shù)據(jù)庫中的敏感信息,表明存在SQL注入漏洞。 (3)SQL 注入漏洞的防御措施 SQL注入漏洞可能導(dǎo)致攻擊者直接探測數(shù)據(jù)庫,因此他們可以直接操縱數(shù)據(jù)庫中的數(shù)據(jù),導(dǎo)致非常有害,輕微泄漏的數(shù)據(jù),然后失去系統(tǒng)的管理員權(quán)限。因此,非常有必要加強(qiáng)預(yù)防。其中主要的防御措施有:
-
. 輸入檢查,SQL注入漏洞主要來自用戶的輸入,所以檢查所有用戶輸入,包括長度,類型,或根據(jù)業(yè)務(wù)需要定義一些規(guī)則,不僅在客戶端檢查,還要在服務(wù)器端檢查,拒絕userInvalid數(shù)據(jù)條目。
-
.字符過濾,數(shù)據(jù)庫中,有些字符有著特殊的含義,比如單引號,%,”\”,通配符等等,必須對這些特殊字符進(jìn)行過濾,以防用戶提交特殊字符改變原有應(yīng)用程序的邏輯。
3).預(yù)編譯
SQL語句通常用于代碼中以動態(tài)組合SQL語句,因此容易出現(xiàn)問題。有些語言提供了一個(gè)安全的,強(qiáng)類型的參數(shù)化查詢API,可以正確處理用戶輸入?;蛘?#xff0c;可以使用不受SQL注入影響的對象關(guān)系映射。對象關(guān)系映射解決了面向?qū)ο蠛完P(guān)系之間不匹配的問題。數(shù)據(jù)庫,可以自動將程序中的對象自動化到關(guān)系數(shù)據(jù)庫,避免直接使用SQL語句。
4). 存儲過程,存儲過程可以通過參數(shù)類型判斷來阻止SQL注入。
5). 正確的數(shù)據(jù)庫配置,根據(jù)不同數(shù)據(jù)庫的特點(diǎn),確保數(shù)據(jù)庫的良好配置可以降低SQL注入的風(fēng)險(xiǎn)。
2.4.2 XSS 漏洞
(1)XSS 漏洞概述
跨站點(diǎn)腳本是Web應(yīng)用程序的安全漏洞。它通常是指使用特殊方法通過利用Web開發(fā)中留下的安全漏洞將惡意Javascript代碼注入到Web頁面中。用戶無意中加載并執(zhí)行攻擊者構(gòu)建的惡意javascript代碼。當(dāng)攻擊成功時(shí),攻擊者可能會收到(但不限于)更高的權(quán)限,例如執(zhí)行以下操作:掛馬,網(wǎng)絡(luò)釣魚,獲取私人網(wǎng)絡(luò)內(nèi)容劫持用戶網(wǎng)絡(luò)行為,竊取會話和cookie等。大量網(wǎng)站遭到XSS漏洞攻擊或發(fā)現(xiàn)此類漏洞,如Twitter,Facebook,My Space,新浪微博和百度貼吧。近年來從云運(yùn)漏洞平臺披露的信息表明,XSS攻擊非常普遍,非常有害。
(2)XSS 漏洞分類
XSS 漏洞有三類:反射型XSS(也叫非持久型XSS 漏洞)、存儲型XSS 和DOM型 XSS。
a. 反射型XSS
這個(gè)漏洞的注入過程就像一次反射,故稱之為反射型 XSS,以下舉例說明 http://www.foo.com/xss/reflect1.php 的代碼如下:
<?php
echo $_GET[‘x’];
?>
輸入 x的值未經(jīng)過任何過濾就直接輸出,可以提交:
http://www.foo.com/xss/reflect1.php?x=<script>alert(“xss”)</script>
服務(wù)端解析時(shí),echo 就會完整的輸出<script>alert(“xss”)</script>到響應(yīng)體中,然后瀏覽器解析執(zhí)行出發(fā)javascript惡意腳本。
b. 存儲型XSS
存儲XSS已經(jīng)成為一種永久性的XSS,它更有害。它與反射XSS漏洞的不同之處在于它提交的XSS代碼存儲在服務(wù)器中,但它存儲在數(shù)據(jù)庫或文件系統(tǒng)中。當(dāng)其他用戶請求帶有這個(gè)注入的XSS代碼的網(wǎng)頁時(shí),它將下載并且執(zhí)行它。最典型的例子是留言板XSS。用戶將包含XSS代碼的消息提交給數(shù)據(jù)庫。當(dāng)目標(biāo)用戶查看留言板時(shí),將從數(shù)據(jù)庫中查詢并顯示這些消息的內(nèi)容。瀏覽器找到XSS代碼并將其視為更好的HTML和javascript代碼解析和執(zhí)行,因此觸發(fā)了XSS攻擊。存儲XSS攻擊非常隱蔽,通過手動查詢很難找到。此時(shí),自動Web應(yīng)用程序漏洞掃描程序非常有用。
c. DOM型XSS
DOM XSS與Reflective XSS和Storage XSS之間的區(qū)別在于DOS XSS XSS代碼不需要直接參與服務(wù)器的分析響應(yīng).XSS觸發(fā)器依賴于瀏覽器端的DOM分析。舉例如下:
<script>
eval(location.hash.substr(1);
</script>
這就是一個(gè)DOM XSS 漏洞,觸發(fā)方式為提交請求
Http://www.foo.com/xssme.html#alert(1)
這個(gè)url#后面的內(nèi)容不會被發(fā)送到服務(wù)端,僅僅是在客戶段被接受并解析執(zhí)行。在 javascript 中有很多這種輸入點(diǎn)可以注入惡意腳本。
(3)XSS 漏洞檢測方式
檢測XSS漏洞的基本方法是使用以下特殊攻擊字符串作為輸入數(shù)據(jù),獲取查詢字符串的URL和網(wǎng)頁中表單的輸入字段信息,構(gòu)造HTTP請求,將信息發(fā)送到服務(wù)器,并且服務(wù)器將aRespond返回給響應(yīng)。如果響應(yīng)中存在注入字符串,則表示存在XSS漏洞。如果提交了帖子請求,則需要再次將請求發(fā)送到表單中action屬性的值。如果返回的響應(yīng)包含注入字符串,則表示存在XSS漏洞。
值得注意的是,對于具有多個(gè)輸入字段的表單,您可以為注入檢測選擇多個(gè)不同的測試字符串,這也可以識別網(wǎng)頁中的哪個(gè)輸入點(diǎn)具有XSS漏洞。如果服務(wù)器應(yīng)用程序?qū)斎霐?shù)據(jù)執(zhí)行一些簡單的過濾,您還可以通過多種方式對測試字符串進(jìn)行編碼,例如URL編碼,HTML實(shí)體編碼,大小寫轉(zhuǎn)換等。
(4)XSS 漏洞的防范措施
跨站點(diǎn)腳本攻擊更加微妙,更難以抵御其他網(wǎng)絡(luò)攻擊,并且沒有一刀切的解決方案。在用戶和Web應(yīng)用程序之間的交互過程中會產(chǎn)生XSS漏洞,Web應(yīng)用程序本身和客戶端用戶。主要關(guān)注的是Web應(yīng)用程序的編程,但用戶的良好習(xí)慣也可以避免XSS攻擊。所以我們分兩個(gè)方面入手防御跨站腳本攻擊,程序開發(fā)者在編程過程中要進(jìn)行輸入驗(yàn)證,用戶在瀏覽時(shí)網(wǎng)頁時(shí)也應(yīng)采取相應(yīng)安全措施,程序開發(fā)過程中應(yīng)該采取的措施:
-
.過濾用戶提交數(shù)據(jù)中的代碼 這種方法的實(shí)施過程比較復(fù)雜,不僅僅需要考慮<script>…</script>標(biāo)簽,各種可能的 XSS 攻擊載體都要考慮進(jìn)來。這種方法風(fēng)險(xiǎn)很大。如果過濾不合適,可能會導(dǎo)致XSS攻擊并過濾掉非法部分的數(shù)據(jù)。無法將所有非法輸入過濾到黑名單中。最好只接受合法數(shù)據(jù)。
-
.對用戶輸入的數(shù)據(jù)或基于用戶輸入數(shù)據(jù)而生成的輸出數(shù)據(jù)進(jìn)行編碼。 一般來說,編碼是一種非常簡單有效的防范XSS腳本的方法,因?yàn)樗恍枰獏^(qū)分合法和非法字符。缺點(diǎn)是所有不受信任的數(shù)據(jù)編碼都浪費(fèi)系統(tǒng)資源,這可能會影響Web服務(wù)器的性能。
-
.對表單輸入域輸入字符的長度進(jìn)行限制 對于一些可能收到攻擊的表單輸入域,可以限制其輸入字符的長度
-
.禁止上傳Flash文件 使用Flash文件很難防止跨站點(diǎn)腳本攻擊。如果您不確定上傳的Flash文件是否安全,則只是禁止用戶上傳Flash文件以完全阻止Flash跨站點(diǎn)攻擊。
-
.檢查
Cookie信息許多Web應(yīng)用程序使用cookie來管理通信狀態(tài)并存儲與用戶相關(guān)的信息。開發(fā)人員必須在將cookie信息插入HTML文檔之前對其進(jìn)行嚴(yán)格檢查和過濾。
用戶的應(yīng)對措施:
-
. 小心點(diǎn)擊不受信任的鏈接,只需點(diǎn)擊一些可信賴的連接。有關(guān)網(wǎng)站,有時(shí)XSS攻擊會在您打開電子郵件,閱讀留言板,打開附件和閱讀論壇時(shí)無意中發(fā)生。
-
. 提高瀏覽器的安全級別,即使您將瀏覽器更新到最新版本,將瀏覽器的安全級別設(shè)置為高,并禁用一些不需要運(yùn)行的腳本。
-
.同時(shí)要在不同的Web應(yīng)用程序中使用不同的用戶名和密碼。
2.4.3 目錄遍歷漏洞
(1)目錄遍歷漏洞概述
目錄遍歷漏洞是指用戶可以訪問某些受限訪問目錄并在服務(wù)器根目錄之外執(zhí)行命令。目錄遍歷漏洞是一種信息泄露漏洞,有時(shí)也稱為包含漏洞的非授權(quán)文件。目錄遍歷漏洞的主要原因是程序沒有過濾用戶提交的非法輸入,驗(yàn)證用戶的合法輸入,這樣黑客就可以通過URL遍歷用戶的文件系統(tǒng)獲取一些敏感信息。下面舉個(gè)例子說明:
譬如有鏈接為:http://www.example.com/getfile.php?test=dervul.html。
瀏覽器根據(jù)此URL向動態(tài)頁面getfile.php發(fā)送HTTP請求到Web服務(wù)器,并查詢字符串參數(shù)test,其值為dervul.html。Web服務(wù)器收到瀏覽器的請求后,將在服務(wù)器端進(jìn)行處理。getfile.php腳本文件將從服務(wù)器的文件系統(tǒng)發(fā)送到客戶端的瀏覽器,這是一個(gè)惡意用戶.getfile.php腳本的參數(shù),可以從文件系統(tǒng)獲取敏感文件并編譯以下URL:http://example.com/getfile.php?test=../../../../../etc/password。那么,這就能夠從文件系統(tǒng)中獲取 password 文件并返回給用戶。用戶可以知道服務(wù)器的所有用戶名和密碼。如果使用MD5加密密碼,也可以通過彩虹表找到用戶的密碼。服務(wù)器的信息被泄露。
(2)目錄遍歷漏洞檢測方法
目錄遍歷漏洞檢測使用基于黑盒子的方法。首先,應(yīng)該清楚與路徑遍歷漏洞相關(guān)的所有明顯的配置方面。應(yīng)徹底測試文件上載和下載的所有功能。然后為上傳的參數(shù)添加一些常用文件信息。這些文件信息通常無處不在。提交HTTP請求,然后檢查響應(yīng)中是否有任何文件信息。如果包含,則表示存在目錄遍歷漏洞。
3)目錄遍歷漏洞的防范措施
防止目錄遍歷的最有效方法是控制服務(wù)器上的文件和目錄權(quán)限,避免將用戶提交的數(shù)據(jù)傳遞到任何文件系統(tǒng)API。大多數(shù)目錄或文件權(quán)限未正確配置,并且Web應(yīng)用程序讀取文件主要取決于系統(tǒng)本身的API。在參數(shù)傳遞的過程中,如果沒有嚴(yán)格的控制,就會有超出的功率。出現(xiàn)。在這種情況下,Web應(yīng)用程序可以采取以下防御措施,最好是組合使用。
-
. 處理用戶提交的文件名時(shí),應(yīng)用程序必須檢查文件名是否包含路徑遍歷序列(使用反斜杠或斜杠)或空字節(jié)。不要嘗試對文件名執(zhí)行任何清理直接停止處理請求。
-
. Web服務(wù)器中的所有文件都放在Web的根目錄中,并且將忽略任何已回溯的額外請求。
-
. 應(yīng)用程序僅訪問允許的文件類型,建立訪問白名單,并拒絕訪問其他文件類型的任何請求。
2.5 網(wǎng)絡(luò)爬蟲在掃描器中的應(yīng)用
Web爬蟲,也稱為Web蜘蛛或Web機(jī)器人,是Internet上自動下載WWW服務(wù)網(wǎng)頁的程序。傳統(tǒng)的Web爬蟲從種子URL開始,獲取種子URL的頁面,然后不斷提取新的從當(dāng)前網(wǎng)頁到要爬網(wǎng)的隊(duì)列的URL,并停止下載網(wǎng)頁,直到滿足系統(tǒng)的某個(gè)條件。
隨著Web安全領(lǐng)域的發(fā)展,安全工作者越來越多地使用Web爬蟲技術(shù)來利用Web應(yīng)用程序中的漏洞,這極大地促進(jìn)了安全行業(yè).XSS(跨站點(diǎn)腳本)漏洞和SQL注入漏洞,信息泄露漏洞占了一個(gè)大量的Web應(yīng)用程序漏洞,所有這些漏洞都可以通過改進(jìn)的Web爬蟲自動掃描.Web爬蟲技術(shù)在Web應(yīng)用程序漏洞掃描程序中的應(yīng)用可以增強(qiáng)系統(tǒng)的自動化并提高系統(tǒng)的效率。
2.5.1 聚焦爬蟲概念
專注于Web爬蟲(也稱為主題爬蟲)與傳統(tǒng)的Web爬蟲不同。聚焦爬蟲不關(guān)心它們是否可以完全覆蓋網(wǎng)站的所有頁面。相反,關(guān)注特定主題或數(shù)據(jù)。例如,本文中實(shí)現(xiàn)的聚焦網(wǎng)絡(luò)爬蟲只提取網(wǎng)頁中存在的輸入點(diǎn),以及它對不相關(guān)的靜態(tài)文件等進(jìn)行URL過濾。焦點(diǎn)網(wǎng)絡(luò)爬蟲由三部分組成(1)爬行目標(biāo)的描述或定義(2)網(wǎng)頁分析算法(3)URL的搜索策略。
2.5.2 聚焦爬蟲技術(shù)分析
關(guān)注Web爬網(wǎng)程序主要關(guān)注三個(gè)問題:爬網(wǎng)抓取網(wǎng)頁目標(biāo)描述,分析抓取爬網(wǎng)網(wǎng)頁的算法以及選擇網(wǎng)頁搜索策略。抓取目標(biāo)描述定義了抓取工具需要注意的主題。網(wǎng)頁分析算法是網(wǎng)絡(luò)爬蟲爬行行為的關(guān)鍵。
-
抓取目標(biāo)描述 漏洞掃描程序查找頁面的輸入點(diǎn),包括要查詢的字符串和表單,因此爬網(wǎng)程序爬網(wǎng)目標(biāo)是重點(diǎn)關(guān)注的爬網(wǎng)網(wǎng)頁的輸入點(diǎn)。這決定了網(wǎng)頁的分析算法。
-
網(wǎng)頁分析算法 網(wǎng)絡(luò)分析算法可以基于網(wǎng)絡(luò)拓?fù)?#xff0c;基于網(wǎng)絡(luò)內(nèi)容,基于用戶訪問分為三類。此漏洞掃描程序使用的網(wǎng)頁分析算法是基于網(wǎng)頁內(nèi)容的算法。它主要解析網(wǎng)頁內(nèi)容,通過正則表達(dá)式提取所有URL,標(biāo)準(zhǔn)化不合格的URL。丟棄URL,過濾異地鏈接等URL。也可以解析URL查詢字符串以獲取有關(guān)主機(jī)的信息。
-
網(wǎng)頁遍歷算法
Web爬蟲爬行的遍歷算法主要分為深度優(yōu)先遍歷算法,廣度優(yōu)先遍歷算法和最佳優(yōu)先遍歷算法。
1)深度優(yōu)先遍歷算法.Depth-first遍歷從初始種子URL開始,任意選擇要提取的URL,然后提取頁面中的所有URL,并隨意選擇一個(gè)然后提取,以便在URL之后對URL進(jìn)行爬網(wǎng)直到URL被跟蹤。所有現(xiàn)有的URL都被處理,然后跳轉(zhuǎn)到初始URL的下一頁。這種爬行策略的優(yōu)點(diǎn)是它使爬蟲設(shè)計(jì)變得簡單,但它會導(dǎo)致低值的過度爬行值較低的頁面,可能導(dǎo)致爬蟲陷入問題。
2)廣度優(yōu)先遍歷算法。廣度優(yōu)先遍歷算法是指從初始種子開始獲取的過程,并且在獲取當(dāng)前級別的所有URL之后,輸入下一級別URL的爬行。此策略是主要用于專注于爬蟲。它認(rèn)為頁面越接近原始種子URL,與主題相關(guān)的概率就越大,并且它可以覆蓋盡可能多的與主題相關(guān)的頁面。
3)最優(yōu)先的遍歷算法。最優(yōu)先的遍歷策略根據(jù)一定的規(guī)則分析網(wǎng)頁的特征,預(yù)測被抓取的網(wǎng)頁與目標(biāo)網(wǎng)頁之間的相似性,或主題相關(guān)性,然后篩選出最佳評估的鏈接或者用于抓取的一批鏈接。它的核心思想是僅抓取被網(wǎng)絡(luò)分析算法評估為“有價(jià)值”的網(wǎng)頁。但是,這種遍歷策略可能會導(dǎo)致在抓取過程中忽略一定數(shù)量的相關(guān)網(wǎng)頁因此,它是一種局部最優(yōu)爬行算法。在許多實(shí)際應(yīng)用中,有必要改進(jìn)應(yīng)用的細(xì)節(jié),以提高捕獲的準(zhǔn)確性,掌握最佳的局部優(yōu)勢。
此漏洞掃描程序的爬蟲只對網(wǎng)站的輸入點(diǎn)感興趣,并且可以捕獲主頁的輸入點(diǎn),因此適合使用廣度優(yōu)先遍歷算法來實(shí)現(xiàn)網(wǎng)站爬蟲。
綜上,我們認(rèn)為,影響掃描器準(zhǔn)確率的最重要的因素是掃描器的爬取能力,兼顧認(rèn)證能力。因此,在文章接下來的部分,我將著重對掃描器的爬取算法進(jìn)行研究,并提出改進(jìn)的方法,同時(shí)擴(kuò)展掃描器的認(rèn)證覆蓋率,以此來提高掃描器的準(zhǔn)確率。
2.6 本章小結(jié)
本章首先對掃描器的爬蟲技術(shù)進(jìn)行了探討,包括現(xiàn)有頁面爬取策略及其優(yōu)缺點(diǎn),重點(diǎn)描述了分布式爬蟲及其常見模型;其次對Web應(yīng)用程序安全風(fēng)險(xiǎn)及主要的Web應(yīng)用安全漏洞進(jìn)行了介紹,其中重點(diǎn)闡述了SQL注入漏洞和XSS漏洞的產(chǎn)生原因、攻擊方式及防御方式等;最后從輸入?yún)?shù)覆蓋率、爬取能力、認(rèn)證覆蓋率三個(gè)方面對國內(nèi)外的漏洞掃描器進(jìn)行比較分析,用實(shí)際數(shù)據(jù)得出對掃描器掃描效率影響最大的因素是掃描器的爬取能力和對身份認(rèn)證的支持。總體來說,本章的內(nèi)容為下一章設(shè)計(jì)Web應(yīng)用安全漏洞掃描器奠定了基礎(chǔ)。
第三章 Web應(yīng)用安全漏洞掃描器分析設(shè)計(jì)與實(shí)現(xiàn)
本章首先對Web應(yīng)用安全漏洞掃描器系統(tǒng)的需求進(jìn)行分析,以便后續(xù)系統(tǒng)設(shè)計(jì)工作的展開。本系統(tǒng)是為用戶提供一個(gè)方便使用、漏洞定位準(zhǔn)確、檢測效率高效的Web應(yīng)用安全漏洞檢測工具;其次是根據(jù)需求分析,對掃描器的整體架構(gòu)與功能模塊的進(jìn)行設(shè)計(jì)與實(shí)現(xiàn)。Web應(yīng)用安全漏洞掃描器設(shè)計(jì)是基于對上章所述的主要技術(shù)和需求分析的基礎(chǔ)上,研究Web應(yīng)用安全漏洞掃描器如何實(shí)現(xiàn)所需功能和性能。掃描器設(shè)計(jì)的過程包括系統(tǒng)架構(gòu)設(shè)計(jì)、功能模塊設(shè)計(jì)。掃描器實(shí)現(xiàn)的過程是按照模塊功能采用相對應(yīng)的技術(shù)和編碼實(shí)現(xiàn)。
3.1 Web應(yīng)用安全漏洞掃描器需求分析
目前,互聯(lián)網(wǎng)產(chǎn)業(yè)迅猛發(fā)展,中國域名的網(wǎng)站就已經(jīng)突破290萬,但是除了一些大型互聯(lián)網(wǎng)公司的網(wǎng)站得到了有效的安全保護(hù)之外,大部分的小網(wǎng)站都存在一些漏洞,很容易遭受攻擊。尤其是受到SQL注入攻擊,XSS攻擊,這也是目前受到攻擊次數(shù)最多的兩類漏洞。因?yàn)閃eb 應(yīng)用程序的設(shè)計(jì)有著很多種技術(shù)方案, 比如 Java 平臺,ASP.NET平臺,PHP/Python平臺,為了實(shí)現(xiàn)掃描的通用性,本漏洞掃描器采用黑盒測試的技術(shù)對目標(biāo)網(wǎng)絡(luò)網(wǎng)絡(luò)進(jìn)行安全性測試,它可以忽略網(wǎng)絡(luò)平臺的特性,不審查網(wǎng)頁的源碼就能發(fā)掘多個(gè)平臺的 Web 應(yīng)用漏洞。
由本文2.2節(jié)可知,Web應(yīng)用漏洞類型非常多,其中SQL注入漏洞,XSS漏洞的漏洞數(shù)所占比例比較高,比較有代表性,SQL注入漏洞屬于服務(wù)器端漏洞,XSS屬于客戶端漏洞。由于精力有限,無法實(shí)現(xiàn)對所有的漏洞的掃描,本漏洞掃描器將實(shí)現(xiàn)對這兩大類漏洞的掃描。最重要的是,本漏洞掃描器設(shè)計(jì)了一種可擴(kuò)展機(jī)制使得新的Web應(yīng)用漏洞可以很好的以插件的形式增添進(jìn)本漏洞掃描器中。
針對Web應(yīng)用安全日益嚴(yán)峻的形勢,分析各種Web應(yīng)用漏洞的原理,建立Web應(yīng)用漏洞掃描模型,利用滲透測試技術(shù)對Web應(yīng)用進(jìn)行安全測試,并通過分析結(jié)果對網(wǎng)絡(luò)進(jìn)行挖掘。安全測試。應(yīng)用程序中存在一個(gè)漏洞。實(shí)現(xiàn)基于B / S,用戶友好,可執(zhí)行,系統(tǒng)執(zhí)行,自動化的Web應(yīng)用程序漏洞掃描程序。
3.1.1 功能需求
為了實(shí)現(xiàn)一個(gè)能自動化掃描 SQL 注入漏洞,XSS 漏洞的掃描器,首先必須對掃描目標(biāo)進(jìn)行解析,網(wǎng)絡(luò)爬蟲能夠從遠(yuǎn)程以 HTTP 請求的方式獲取服務(wù)器端 Web 應(yīng)用的信息,然后通過解析程序提取出可輸入點(diǎn)(包含帶查詢字 符串的網(wǎng)址和表單),將之存入到數(shù)據(jù)庫或文件中。接著對這些可輸入點(diǎn)以輪詢的方式發(fā)送測試字符串到掃描目標(biāo),根據(jù) HTTP 響應(yīng)獲取反饋信息,判斷是否具有漏洞,最后生成漏洞分析報(bào)告。
目前,互聯(lián)網(wǎng)產(chǎn)業(yè)發(fā)展迅速。中國域名網(wǎng)站已超過290萬。但是,除了一些大型互聯(lián)網(wǎng)公司網(wǎng)站的有效安全保護(hù)外,大多數(shù)小網(wǎng)站都存在漏洞,易受攻擊。特別是受到SQL注入攻擊和XSS攻擊。這也是受到攻擊最多的兩類漏洞。因?yàn)閃eb應(yīng)用程序設(shè)計(jì)有各種技術(shù)解決方案,如Java平臺,ASP.NET平臺,PHP / Python平臺,以實(shí)現(xiàn)掃描的普遍性這個(gè)漏洞掃描器使用黑盒測試技術(shù)來保護(hù)目標(biāo)網(wǎng)絡(luò)網(wǎng)絡(luò)。測試時(shí),它可以忽略網(wǎng)絡(luò)平臺的特性,可以在不查看網(wǎng)頁源代碼的情況下探索多個(gè)平臺的Web應(yīng)用漏洞。實(shí)現(xiàn)漏洞掃描儀具有重要的現(xiàn)實(shí)意義。
為了實(shí)現(xiàn)可以自動掃描SQL注入漏洞,XSS漏洞和目錄遍歷漏洞的掃描程序,必須首先解析掃描目標(biāo)。Web爬蟲可以從遠(yuǎn)程HTTP請求獲取服務(wù)器端Web應(yīng)用程序的信息,然后通過解析程序。提取輸入點(diǎn)(包括帶有查詢字符串的URL和表單)并將其保存到數(shù)據(jù)庫或文件中。然后為這些輸入點(diǎn)以輪詢方式將測試字符串發(fā)送到掃描目標(biāo),根據(jù)HTTP響應(yīng)獲取反饋信息,確定是否存在漏洞,最后生成漏洞分析報(bào)告。
基于以上分析,系統(tǒng)采用模塊化設(shè)計(jì)思想,分為三大模塊:網(wǎng)絡(luò)爬蟲模塊,漏洞掃描模塊和報(bào)告生成模塊。漏洞掃描模塊包含每個(gè)漏洞的掃描插件。
1)網(wǎng)絡(luò)爬蟲模塊
通過對整個(gè)目標(biāo)Web應(yīng)用程序站點(diǎn)的廣度優(yōu)先遍歷,獲取每個(gè)網(wǎng)頁的HTML源代碼,并對網(wǎng)頁的HTML源代碼進(jìn)行有效的標(biāo)簽分析,并在其中存在標(biāo)簽類型和標(biāo)簽數(shù)據(jù)。可以成為安全測試目標(biāo)的頁面同時(shí)被提取。該信息存儲在數(shù)據(jù)庫中,供后續(xù)漏洞掃描模塊執(zhí)行目標(biāo)安全測試。特定HTTP請求的發(fā)送由線程池完成。它同時(shí)執(zhí)行并且非常有效。它可以在解析其他頁面時(shí)解析一些頁面。爬蟲模塊的性能和準(zhǔn)確性是漏洞掃描模塊的基礎(chǔ)。只有使爬蟲模塊強(qiáng)大而強(qiáng)大,我們才能確保整個(gè)掃描儀的效率和全面性。漏洞掃描的準(zhǔn)確性,可以降低誤報(bào)率。
2)漏洞掃描模塊
滲透測試多年來一直是網(wǎng)絡(luò)安全的常用測試技術(shù),通常被稱為黑盒測試。滲透測試遠(yuǎn)程檢測正在運(yùn)行的應(yīng)用程序并發(fā)現(xiàn)安全漏洞而不了解內(nèi)部應(yīng)用程序本身。集中滲透測試(即,嘗試?yán)孟惹皽y試中發(fā)現(xiàn)的已知漏洞檢測方法,可用于檢測特定的安全漏洞,例如SQL注入漏洞,XSS漏洞以及部署在網(wǎng)站源代碼中的文件。上載漏洞等。對Web應(yīng)用程序發(fā)出的請求是HTTP請求。Web應(yīng)用程序處理完請求后,它將返回HTTP響應(yīng)。根據(jù)響應(yīng)的內(nèi)容,我們確定是否存在響應(yīng)漏洞。例如,當(dāng)檢測到XSS漏洞時(shí),我們會查找包含\\ u003c的HTTP響應(yīng)腳本\\ u003ealert('XSS')\\ u003c / script \\ u003e字符串(如果有)表示該URL包含XSS漏洞,如果沒有,它表明沒有XSS漏洞。漏洞分析模塊使用正則表達(dá)式來實(shí)現(xiàn)比普通字符串查找更高的效率。
3)報(bào)告生成模塊
在收到滲透率測試的結(jié)果后,您需要分析結(jié)果以確定是否存在漏洞,某種類型的漏洞,測試漏洞需要多長時(shí)間,并仔細(xì)分析攻擊結(jié)果然后生成格式??勺x報(bào)告。使系統(tǒng)管理員可以輕松了解Web應(yīng)用程序面臨的風(fēng)險(xiǎn)。根據(jù)漏洞分析掃描結(jié)果,生成可讀的HTML文檔。由于漏洞掃描的結(jié)果以XML文檔的形式存儲,因此最終通過解析XML文檔生成XML文檔,所包含的信息包括漏洞信息,漏洞數(shù)量,漏洞問題URL,漏洞預(yù)防措施,如果這些漏洞被修復(fù)等,HTML報(bào)告可以很好地滿足目標(biāo)受眾對自己網(wǎng)站漏洞的理解。
基于上面的分析,系統(tǒng)采用模塊化的設(shè)計(jì)思想主要分為三個(gè)大模塊,網(wǎng)絡(luò)爬蟲模塊, 漏洞掃描模塊,任務(wù)調(diào)度模塊。
漏洞掃描功能模塊:該功能模塊包含了各個(gè)漏洞的掃描插件。主要功能首要是實(shí)現(xiàn)對Web應(yīng)用漏洞如典型的SQL注入漏洞、XSS漏洞進(jìn)行檢測,找出Web應(yīng)用程序的脆弱性。
網(wǎng)絡(luò)爬蟲功能模塊:該功能模塊是為了實(shí)現(xiàn)待檢測URL的網(wǎng)頁爬取,從中可以分析得到后續(xù)各個(gè)攻擊模塊的漏洞檢測點(diǎn),以便對Web應(yīng)用程序進(jìn)行全面的檢測。
任務(wù)調(diào)度功能模塊:本系統(tǒng)還實(shí)現(xiàn)了對檢測任務(wù)的調(diào)度功能,該功能可實(shí)現(xiàn)任務(wù)調(diào)度,根據(jù)用戶配置信息進(jìn)行自動化分配調(diào)度,提升檢測效率。
另外,系統(tǒng)還實(shí)現(xiàn)了端口掃描、站點(diǎn)信息獲取的功能,實(shí)現(xiàn)對Web應(yīng)用程序的可用性檢測。
3.1.2 非功能需求
-
自動化掃描 漏洞掃描器的網(wǎng)絡(luò)爬蟲抓取目標(biāo)網(wǎng)絡(luò)的數(shù)據(jù),構(gòu)建 HTTP 請求,分析 HTTP 響應(yīng),漏洞掃描,生成報(bào)告功能都是在后臺完成,自動化的對目標(biāo)網(wǎng)絡(luò)進(jìn)行安全性測試,用戶只要提交網(wǎng)址和用戶選項(xiàng)之后就不需要再進(jìn)行控制和操作。
-
易用性 本系統(tǒng)的開發(fā)應(yīng)該要便于用戶使用,實(shí)現(xiàn)基于B/S架構(gòu)的Web應(yīng)用安全漏洞掃描器,用戶只需要通過瀏覽器端添加掃描任務(wù),就可以開啟漏洞自動化掃描,并可通過儀表盤查看掃描結(jié)果,掃描結(jié)果包含漏洞類型、漏洞定位、影響參數(shù)等內(nèi)容。
-
可擴(kuò)展性
隨著Web應(yīng)用的不斷發(fā)展,實(shí)際Web應(yīng)用程序環(huán)境中存在的Web應(yīng)用安全漏洞的類型很多,本系統(tǒng)只是針對其中兩種主流漏洞進(jìn)行檢測,為了方便在后續(xù)新型安全漏洞爆發(fā)時(shí),系統(tǒng)檢測功能的添加,系統(tǒng)的設(shè)計(jì)應(yīng)具備可擴(kuò)展性。在后續(xù)添加漏洞檢測功能的時(shí)候,只需要將檢測功能以插件形式添加到漏洞檢測模塊便可使用,避免改動系統(tǒng)的其它模塊。
3.2 Web應(yīng)用安全漏洞掃描器系統(tǒng)應(yīng)用架構(gòu)設(shè)計(jì)
Web應(yīng)用安全漏洞掃描器是基于B/S架構(gòu),使用Web管理方式,用戶使用瀏覽器通過SSL加密通道和系統(tǒng)進(jìn)行交互,方便用戶管理。系統(tǒng)采用模塊化設(shè)計(jì),整個(gè)系統(tǒng)可分為:用交互層、數(shù)據(jù)庫、調(diào)度層和檢測引擎四層架構(gòu)體系。而交互層可以拆分為UI展示層和數(shù)據(jù)處理層兩部分,整個(gè)系統(tǒng)的系統(tǒng)架構(gòu)圖如圖3.1所示。
添加圖片注釋,不超過 140 字(可選)
圖 3.1 Web應(yīng)用安全漏洞掃描器系統(tǒng)架構(gòu)圖
交互層:主要分為UI展示層和數(shù)據(jù)處理層2部分,其中UI展示層直接與用戶進(jìn)行交互,數(shù)據(jù)處理層對用戶來說是透明的。
UI展示層主要是與用戶交互,用戶操作請求通過該層向后端傳遞,并且接收后端傳遞數(shù)據(jù),通過繪制圖表、掃描報(bào)告等方式展現(xiàn)給用戶。
數(shù)據(jù)處理層主要是接收用戶前端傳遞數(shù)據(jù)進(jìn)行各類邏輯處理,并且操作數(shù)據(jù)庫進(jìn)行存儲、查詢、修改、刪除等操作。
數(shù)據(jù)層:主要包括存儲用戶資料、檢測數(shù)據(jù)、配置的數(shù)據(jù)庫等,以及一些系統(tǒng)配置文件。
集群調(diào)度層:負(fù)責(zé)調(diào)度檢測引擎對用戶下達(dá)的任務(wù)進(jìn)行自動化檢測,并且在檢測結(jié)束后處理檢測結(jié)果匯總至數(shù)據(jù)層。
檢測引擎層:主要分為檢測能力和數(shù)據(jù)挖掘兩部分。監(jiān)測能力主要是針對不同檢測內(nèi)容的插件庫。對常見的代碼層漏洞如SQL注入、XSS漏洞等具備強(qiáng)大的監(jiān)測能力,并可通過插件進(jìn)行漏洞掃描性能擴(kuò)展。數(shù)據(jù)挖掘則是能過優(yōu)化網(wǎng)絡(luò)爬蟲的方式,挖掘網(wǎng)頁數(shù)據(jù),尋找監(jiān)測點(diǎn)。
3.3 Web應(yīng)用安全漏洞掃描器系統(tǒng)功能設(shè)計(jì)
Web應(yīng)用安全漏洞掃描器系統(tǒng)采用模塊化設(shè)計(jì),整個(gè)系統(tǒng)功能可分為:基礎(chǔ)數(shù)據(jù)挖掘模塊、監(jiān)測能力模塊、集群調(diào)度模塊、UI交互界面。功能設(shè)計(jì)架構(gòu)圖如圖3.2所示。
添加圖片注釋,不超過 140 字(可選)
圖 3.2 Web應(yīng)用安全漏洞掃描器功能架構(gòu)圖
主要功能模塊設(shè)計(jì)包括網(wǎng)絡(luò)爬蟲模塊、漏洞檢測模塊(包括SQL注入漏洞、XSS漏洞及可擴(kuò)展的其他漏洞插件)、任務(wù)調(diào)度模塊、可用性檢測模塊等。
同時(shí)為了滿足本文3.1所述的非功能需求,設(shè)計(jì)了友好的UI交互界面,方便用戶下達(dá)任務(wù)和查看漏洞掃描結(jié)果。以及可擴(kuò)展的插件式漏洞庫。如上圖3.2所示。
3.3.1 網(wǎng)絡(luò)爬蟲模塊的優(yōu)化及設(shè)計(jì)
在2.1節(jié)中,我們對漏洞檢測系統(tǒng)中的網(wǎng)絡(luò)爬蟲技術(shù)進(jìn)行了研究,對比其在搜索引擎中應(yīng)該側(cè)重的目標(biāo)以及爬蟲策略進(jìn)行了詳細(xì)介紹。
如圖2.1所示的一般網(wǎng)絡(luò)爬蟲的工作流程,爬蟲首先獲取到一個(gè)初始URL鏈接,然后從該鏈接URL開始網(wǎng)站信息爬取并解析該URL對應(yīng)的網(wǎng)頁內(nèi)容,通過網(wǎng)頁解析找出該頁面所包含的所有URL鏈接,將這些新的URL鏈接放入鏈接隊(duì)列,直到此頁面沒有剩余URL鏈接,然后提取已經(jīng)爬取到URL鏈接進(jìn)行下一次爬取,重復(fù)以上步驟,直到爬蟲爬取完所有網(wǎng)頁或達(dá)到爬取深度預(yù)設(shè)值。傳統(tǒng)的網(wǎng)絡(luò)爬蟲會依次遍歷網(wǎng)站的所有頁面,對每個(gè)頁面都會調(diào)用爬蟲爬取其鏈接URL及指向內(nèi)容。這樣會導(dǎo)致爬取大量重復(fù)無用的鏈接,而且有可能進(jìn)入死循環(huán),爬蟲效率極其低下,而一個(gè)快速的爬蟲是一個(gè)高效漏洞掃描器的基礎(chǔ)。本文從下幾個(gè)方面對網(wǎng)絡(luò)爬蟲進(jìn)行優(yōu)化:
-
針對效率低下以及可能進(jìn)入死循環(huán)的問題進(jìn)行優(yōu)化。為了提高網(wǎng)絡(luò)爬蟲網(wǎng)頁爬取的速率,我們使用多線程來處理網(wǎng)頁抓取過程中的傳輸過程。由2.1節(jié),我們知道網(wǎng)頁抓取策略包含有深度優(yōu)先策略、廣度優(yōu)先策略和最佳優(yōu)先策略等,由于在多線程處理過程中無法確定哪個(gè)線程處理的任務(wù)先完成,所這種環(huán)境下采取廣度優(yōu)先策略更適合。而且相比較之下,使用廣度優(yōu)先策略進(jìn)行網(wǎng)站爬取時(shí)更容易控制爬取的深度??梢圆捎靡粋€(gè)公共數(shù)據(jù)隊(duì)列來控制鏈接URL被訪問的先后順序,保證上一層次的URL鏈接先于下一層,確保網(wǎng)絡(luò)爬蟲按照深度優(yōu)先順序進(jìn)行網(wǎng)站爬取,而不會進(jìn)入死循環(huán)。
-
針對可能爬取重復(fù)無用鏈接的問題進(jìn)行優(yōu)化。在對鏈接URL進(jìn)行重復(fù)無用的判斷的時(shí)候,不止要考慮到完全重復(fù)的URL,還要考慮到滿足URL重寫規(guī)則的鏈接以及參數(shù)重復(fù)的鏈接,送些URL鏈接在進(jìn)行漏洞檢測的時(shí)候都屬于重復(fù)無用的鏈接。之所對參數(shù)重復(fù)的鏈接不進(jìn)行網(wǎng)頁信息爬取,是因?yàn)閷τ趨?shù)重復(fù)鏈接URL對應(yīng)的網(wǎng)頁結(jié)構(gòu)一般不會有變化,也不會導(dǎo)致新的Web應(yīng)用漏洞,所以對于這種類型的鏈接,只需要抓取一個(gè)作為代表就可了。
優(yōu)化后的網(wǎng)絡(luò)爬蟲設(shè)計(jì)如下:
添加圖片注釋,不超過 140 字(可選)
圖 3.3 優(yōu)化網(wǎng)絡(luò)爬蟲流程圖
根據(jù)上文提出的爬蟲優(yōu)化策略,對傳統(tǒng)網(wǎng)絡(luò)爬蟲進(jìn)行優(yōu)化,優(yōu)化后的爬蟲流程圖如圖3.3所示。
1)判斷鏈接隊(duì)列urls中是否存在未被檢測的新鏈接(待測目標(biāo)網(wǎng)站的根URL放入其中),若存在,則進(jìn)入下一步,否則網(wǎng)絡(luò)爬蟲結(jié)束;
2)通過對urls隊(duì)列查重、通過url標(biāo)準(zhǔn)、url偽協(xié)議判斷規(guī)則進(jìn)行url鏈接判重,若重復(fù),則直接丟棄,返回第一步,否則,將其加入urls_uniq隊(duì)列中并進(jìn)入下一步;
3)對該鏈接url進(jìn)行頁面請求,若該鏈接有效,請求成功,那么對其進(jìn)行進(jìn)行頁面解析,否則返回第一步;
4)通過頁面解析之后判斷是否存在新鏈接,若是,則將其加入鏈接隊(duì)列,否則,返回第一步。
3.3.2 SQL注入掃描模塊的設(shè)計(jì)
SQL注入漏洞掃描模塊的目標(biāo)是能夠通過遠(yuǎn)程訪問的方式對目標(biāo)網(wǎng)站進(jìn)行SQL注入漏澗的檢查,發(fā)現(xiàn)其中有漏洞的頁面;在檢測結(jié)果證實(shí)目標(biāo)網(wǎng)站存在漏洞時(shí),在不危害到網(wǎng)站安全性和可用性的前提下,獲取漏洞驗(yàn)證結(jié)果,證明其危害性[21]。SQL注入漏洞掃描流程如圖3.4所示。
添加圖片注釋,不超過 140 字(可選)
圖 3.4 SQL注入漏洞掃描流程圖
SQL注入檢測模塊向爬蟲傳遞的參數(shù)插入測試代碼,嘗試根據(jù)頁面響應(yīng)判斷注入是否存在或者繼續(xù)嘗試其他的測試代碼。
當(dāng)確認(rèn)SQL注入存在時(shí)則進(jìn)入下一步驗(yàn)證階段,否則當(dāng)所有payload測試完畢后退出檢測。
根據(jù)目標(biāo)數(shù)據(jù)庫類型使用不同的攻擊Payload獲取目標(biāo)網(wǎng)站的數(shù)據(jù)庫信息,例如數(shù)據(jù)庫名稱、表結(jié)構(gòu)、數(shù)據(jù)庫用戶名及密碼信息,對于某些權(quán)限較大的數(shù)據(jù)庫用戶(例如:root、sa、sys用戶)甚至能執(zhí)行提權(quán)后執(zhí)行任意命令。
SQL注入普通模式是基于盲注檢測的頁面相似度算法,對有漏洞的參數(shù)進(jìn)行檢測的,具體流程說明:
檢測開始,檢測模塊會先對頁面請求2次,判斷頁面是否有動態(tài)變化部分。若有動態(tài)變化,則會設(shè)置基準(zhǔn)HTML(影響后續(xù)檢測對比算法)。
檢測參數(shù)是否動態(tài)可變,嘗試輸入其他值,查看頁面響應(yīng)判斷參數(shù)是否可變。若參數(shù)不可變則直接退出檢測。
嘗試注入特殊符號使數(shù)據(jù)庫報(bào)錯,根據(jù)后臺規(guī)則依照報(bào)錯信息對數(shù)據(jù)庫類型/版本進(jìn)行識別。若識別成功,則根據(jù)數(shù)據(jù)庫版本加載特定payload,可提高檢測效率。
嘗試多種payload進(jìn)行匹配,例如:
整數(shù)型:and 1=1及and 1=2
字符串型:and 'a'='a及and 'a'='b
搜索型:%' and 'a'='a' and '%'='
以上為示例,非實(shí)際測試代碼。
若匹配均不成功,則根據(jù)用戶配置選擇是否使用專家模式進(jìn)行掃描。匹配成功則開始進(jìn)行邏輯判斷檢測。
首先進(jìn)行邏輯為真的請求判斷(and 1=1),將響應(yīng)頁面與原頁面進(jìn)行對比,若對比結(jié)果不同則直接結(jié)束檢測。
而后進(jìn)行邏輯為假的請求判斷(and 1=2),將響應(yīng)頁面與原頁面進(jìn)行對比,若對比結(jié)果相同則直接結(jié)束檢測。
再一次進(jìn)行邏輯為真的請求判斷(增加檢測準(zhǔn)確度),將響應(yīng)頁面與原頁面進(jìn)行對比,若對比結(jié)果不同則直接結(jié)束檢測。
確認(rèn)漏洞存在后會根據(jù)用戶配置加載獲取數(shù)據(jù)庫信息模塊,對漏洞進(jìn)行驗(yàn)證利用,嘗試獲取數(shù)據(jù)庫敏感信息。
所有請求在遇到網(wǎng)絡(luò)超時(shí)情況下會重復(fù)發(fā)送至多3次,若仍未結(jié)果則直結(jié)束檢測。
3.3.3 XSS漏洞掃描模塊的設(shè)計(jì)
XSS漏洞掃描模塊是一個(gè)遠(yuǎn)程檢測模塊,只能從遠(yuǎn)程的WEB訪問中檢測和發(fā)現(xiàn)WEB應(yīng)用中可能存在的XSS漏洞。為此,該模塊設(shè)計(jì)成接收網(wǎng)頁爬蟲提取的頁面注入點(diǎn)信息,生成測試向量,通過URL進(jìn)行遠(yuǎn)程WEB訪問,實(shí)施XSS攻擊,在所有可能的數(shù)據(jù)點(diǎn)加入測試代碼,接收服務(wù)器響應(yīng)頁面,從服務(wù)器的響應(yīng)中分析是否存在XSS漏洞,最后輸出XSS漏洞檢測報(bào)告[22]。如圖3.5所示,一個(gè)完整的XSS漏洞檢測流程是:
添加圖片注釋,不超過 140 字(可選)
圖 3.5 XSS漏洞掃描流程圖
檢測流程:
目標(biāo)URL,如:http://www.test.com/t.php?news=china&id=1,參數(shù)為news=china&id=1,根據(jù)參數(shù)生成隨機(jī)的定位字符串(字母組合),最終為news=chinaazxsdb& id=1adwsdss;
發(fā)送GET/POST或Headers請求,得到頁面資源(HTML內(nèi)容);
如果頁面請求錯誤,則重新針對特定參數(shù)進(jìn)行定位;
定位隨機(jī)串在頁面資源的DOM結(jié)構(gòu)位置,比如在<script></script>內(nèi)、在<input>標(biāo)簽屬性內(nèi)等;
根據(jù)定位到的位置生成特定的攻擊代碼,提高攻擊的準(zhǔn)確度,并能減少不相關(guān)的攻擊請求;
根據(jù)特定的攻擊代碼再次生成“XSS攻擊載體”;
發(fā)送GET/POST或Headers請求,得到XSS攻擊后的頁面資源(HTML內(nèi)容);
XSS分析引擎判斷是否存在攻擊代碼,存在則認(rèn)為有XSS漏洞;
如果不存在,則判斷是否需要變形攻擊代碼,再次生成“XSS攻擊載體”。
3.3.4 任務(wù)調(diào)度模塊的設(shè)計(jì)
掃描器系統(tǒng)能夠根據(jù)用戶在UI界面中設(shè)置的配置信息自動對目標(biāo)網(wǎng)站進(jìn)行檢測,同時(shí)根據(jù)檢測站點(diǎn)和優(yōu)先級進(jìn)行任務(wù)隊(duì)列分配和自動化站點(diǎn)監(jiān)測和任務(wù)狀態(tài)處理。流程設(shè)計(jì)如圖3.6所示。
添加圖片注釋,不超過 140 字(可選)
圖 3.6 任務(wù)調(diào)度流程圖
用戶通過UI下達(dá)一個(gè)添加一個(gè)檢測任務(wù),即向數(shù)據(jù)庫添加一個(gè)virtual_group。
前臺程序經(jīng)過處理生成多個(gè)group對應(yīng)不同的監(jiān)測模塊,并存入數(shù)據(jù)庫。
任務(wù)分發(fā)進(jìn)程taskd輪詢數(shù)據(jù)庫,并從SQLite數(shù)據(jù)庫中獲取group信息。根據(jù)這些group的預(yù)約檢測時(shí)間、檢測優(yōu)先級及檢測周期判斷目標(biāo)網(wǎng)站任務(wù)此時(shí)是否需要調(diào)度,達(dá)到檢測周期后會生成task(單次檢測任務(wù)實(shí)例),并拆分成site(單個(gè)站點(diǎn)檢測實(shí)例)存入Redis隊(duì)列之中。
任務(wù)接收進(jìn)程jobd定期從Redis中獲取site,創(chuàng)建Worker子進(jìn)程,并根據(jù)任務(wù)的開啟的檢測模塊、爬蟲爬行深度等配置信息,調(diào)度相應(yīng)的檢測模塊進(jìn)行掃描。
3.3.5 可用性檢測模塊的設(shè)計(jì)
-
端口掃描
端口掃描可以探測出目標(biāo)主機(jī)開放的端口,現(xiàn)在越來越多的 Web 站點(diǎn)更改了默認(rèn)的 80 端口,使得對 Web 站點(diǎn)入侵的難度進(jìn)一步加大,端口掃描技術(shù)在發(fā)現(xiàn)可能的 Web 端口 中起了較大的作用。
端口是就像是一條通信管道,當(dāng)然也有可能會成為黑客的入侵通道。在 TCP/IP 參考 模型中,其中傳輸層用 16 位端口號來標(biāo)識某個(gè)端口,并且端口號只具有本地意義,不 同的主機(jī)、服務(wù)器均可使用相同的端口。熟知一些常用端口號,在安全測試以及安全防 御過程中極其重要,在針對 Web 站點(diǎn)的攻擊過程中,Web 站點(diǎn)安全性可能較好,但是由 于服務(wù)器開啟了其它不必要的服務(wù)或端口,黑客可能會以此為突破點(diǎn)進(jìn)行滲透,在安全 檢查時(shí)要關(guān)閉無關(guān)端口或服務(wù)。
使用端口掃描技術(shù),在掃描端口的過程中可能會發(fā)現(xiàn)目標(biāo)系統(tǒng)更多有價(jià)值的信息, 利用這些信息可進(jìn)一步推斷出目標(biāo)系統(tǒng)可能存在的安全風(fēng)險(xiǎn),并及時(shí)進(jìn)行修補(bǔ)。常見的端口掃描技術(shù)有 TCP Connect 掃描、TCP SYN 掃描、UDP 掃描等。
-
TCP Connect 掃描 TCP Connect 掃描是建立在三次握手基礎(chǔ)之上的。三次握手是指客戶端首先會發(fā)送SYN 數(shù)據(jù)包給服務(wù)器端,然后服務(wù)器端返回 SYN 和 ACK 數(shù)據(jù)包,最后客戶端再發(fā)送 ACK 數(shù)據(jù)包,與此同時(shí)客戶端可以發(fā)送數(shù)據(jù)到服務(wù)器端。TCP Connect 掃描探測過程是在三 次握手的第二個(gè)階段,當(dāng)服務(wù)器端返回 SYN 和 ACK 數(shù)據(jù)包時(shí),即可判斷端口是開放的, 如果未返回 SYN 和 ACK 數(shù)據(jù)包,則此端口有可能是關(guān)閉的。在 Nmap 掃描工具中,可以 通過添加-sT 的選項(xiàng)來進(jìn)行 TCP Connect 掃描。利用 TCP Connect 掃描方式某站點(diǎn),掃描截圖如圖3.7所示:
添加圖片注釋,不超過 140 字(可選)
圖 3.7 TCP-Connect掃描截圖 TCP Connect 掃描最大的優(yōu)點(diǎn)就是掃描準(zhǔn)確,但是會在目標(biāo)系統(tǒng)日志里留下大量掃描記錄,容易被管理員發(fā)現(xiàn),掃描過程也容易會被防火墻、入侵檢查系統(tǒng)等安全設(shè)備阻斷。
-
TCP SYN 掃描 TCP SYN 掃描不使用完整的 TCP 連接,沒有完整的三次握手。TCP SYN 掃描又稱半連接掃描,掃描過程如下:首先客服端會向目標(biāo)主機(jī)的某個(gè)端口發(fā)送 SYN 數(shù)據(jù)包,當(dāng)服務(wù) 器端收到后,會向客服端發(fā)送 SYN 和 ACK 數(shù)據(jù)包,這時(shí)客戶端不發(fā)送 ACK 應(yīng)答數(shù)據(jù)包而 是發(fā)送 RET 連接重置數(shù)據(jù)包。如果端口未開啟,目標(biāo)主機(jī)直接返回 RST 連接重置數(shù)據(jù)包 結(jié)束會話。由于沒有完成三次握手的過程,客戶端與服務(wù)器端無法建立正常的 TCP 連接。 在 Nmap 掃描工具中,可以通過添加-sS 的選項(xiàng)來進(jìn)行 TCP SYN 掃描,利用 TCP SYN 掃描 方式掃描某站點(diǎn),掃描截圖如圖3.8所示:
添加圖片注釋,不超過 140 字(可選)
圖 3.8 TCP-SYN掃描截圖 TCP SYN 掃描的優(yōu)點(diǎn)在于掃描要比 TCP Connect()掃描隱蔽,可能逃脫安全設(shè)備的阻斷,發(fā)現(xiàn)更多隱蔽端口信息。
-
UDP 掃描
UDP 掃描通常與 ICMP 協(xié)議相結(jié)合進(jìn)行,它發(fā)送沒有攜帶任何數(shù)據(jù)的 UDP 數(shù)據(jù)包到服務(wù)器端,如果服務(wù)器端返回 ICMP 端口不可達(dá)時(shí),則表示目標(biāo)端口是關(guān)閉的;如果某服 務(wù)響應(yīng)一個(gè) UDP 報(bào)文,則表明該端口是開放的。在 Nmap 掃描工具中,可以通過添加-sU 的選項(xiàng)來進(jìn)行 UDP 掃描,利用 UDP 掃描方式掃描某站點(diǎn),掃描截圖如圖3.9所示:
添加圖片注釋,不超過 140 字(可選)
圖 3.9 UDP掃描截圖
-
性能監(jiān)控 客戶端瀏覽器通過 HTTP 請求來向 Web 服務(wù)器請求訪問資源,HTTP 請求通常是由三部分組成,分別是請求行、請求頭、請求內(nèi)容。常見的 HTTP 請求方法如表3.1所示: 表 3.1 常見HTTP請求方法
方法 | 說明 |
---|---|
GET方法 | 請求頁面并返回消息 |
POST方法 | 提交表單數(shù)據(jù) |
HEAD方法 | 獲取頁面請求頭 |
OPTIONS方法 | 查詢可以使用的方法 |
PUT方法 | 修改內(nèi)容,屬于危險(xiǎn)方法 |
DELETE方法 | 刪除內(nèi)容,屬于危險(xiǎn)方法 |
服務(wù)器端在處理完發(fā)送過來的消息后會進(jìn)行響應(yīng),HTTP 響應(yīng)消息也是由三部分組成,分別是狀態(tài)碼、消息頭、返回內(nèi)容,常見的 HTTP 狀態(tài)碼下表 3.2所示。 表 3.2 常見HTTP狀態(tài)碼
狀態(tài)碼 | 說明 |
---|---|
200 | 請求成功 |
202 | 需進(jìn)一步處理 |
301 | 永久移動 |
302 | 臨時(shí)移動 |
400 | 請求包含錯誤 |
401 | 未授權(quán)訪問 |
403 | 禁止訪問 |
404 | 頁面未找到 |
500 | 服務(wù)器內(nèi)部錯誤 |
502 | 網(wǎng)關(guān)錯誤 |
可用性檢測模塊通過HTTP(S)請求、域名解析、Ping等方式分析響應(yīng)時(shí)間,及時(shí)發(fā)現(xiàn)出現(xiàn)鏈路異常、訪問延遲、解析錯誤等情況,判斷Web應(yīng)用的可用性狀況。 3.3.6 插件機(jī)制的設(shè)計(jì) 有許多類型的Web應(yīng)用程序漏洞。為了確保各種新的Web應(yīng)用程序漏洞可以集成到系統(tǒng)中,系統(tǒng)有一些可擴(kuò)展性設(shè)計(jì)??紤]到每個(gè)漏洞的掃描原理具有相同的實(shí)現(xiàn)過程,如圖3.6所示。等效于客戶端發(fā)送和接收HTTP消息時(shí),所使用的測試腳本對于不同的掃描漏洞模塊是不同的,并且根據(jù)漏洞的特征,結(jié)果會有所不同。 圖3.6 通用漏洞攻擊測試流程圖 具體過程是構(gòu)造HTTP請求,發(fā)送HTTP請求消息,接受HTTP響應(yīng)消息,分析響應(yīng),并保存結(jié)果。為了抽象這個(gè)攻擊過程,你可以使用類繼承機(jī)制來規(guī)定每個(gè)接口的接口。掃描模塊,以便所有掃描模塊類繼承自父類。每個(gè)掃描模塊之間的類關(guān)系如圖3.7所示。 這種強(qiáng)制約束機(jī)制增強(qiáng)了掃描程序的可伸縮性。漏洞掃描程序還采用動態(tài)編程語言實(shí)現(xiàn),根據(jù)用戶的需要動態(tài)加載所需的插件。只要這些新的漏洞掃描插件根據(jù)以下內(nèi)容編寫插件即可。在父類的接口中,它們被放入插件庫中。如果用戶選擇某個(gè)漏洞掃描,漏洞掃描程序?qū)⒆詣訏呙璨寮觳討B(tài)將漏洞的掃描插件加載到掃描中。 圖3.7 攻擊模塊類繼承圖 每個(gè)漏洞都有兩種攻擊:提交get請求并提交post請求,分別是攻擊GET()和攻擊POST()接口的責(zé)任。如果有新的漏洞,可以直接編寫漏洞掃描插件根據(jù)規(guī)范,繼承Attack類并實(shí)現(xiàn)attatck GET()和攻擊POST()接口,然后將文件添加到插件庫.XSSAtack類實(shí)現(xiàn)掃描XSS漏洞,SQLAttack類實(shí)現(xiàn)SQL漏洞檢測,并且DIRAttack類實(shí)現(xiàn)掃描目錄遍歷漏洞。 3.3.6 數(shù)據(jù)庫的設(shè)計(jì) 數(shù)據(jù)庫位于系統(tǒng)的數(shù)據(jù)層,為結(jié)果數(shù)據(jù)提供統(tǒng)一管理,如用戶,漏洞描述信息和Web爬蟲爬行。數(shù)據(jù)庫系統(tǒng)可以比文件系統(tǒng)更好地管理數(shù)據(jù)性能。我的SQL目前在Internet上。最流行的開源數(shù)據(jù)庫,可以很好地連接后端程序,Linux,apache,Pyhon / PHP構(gòu)成了Internet上最流行的架構(gòu)LAMP。系統(tǒng)可以使用數(shù)據(jù)庫添加,刪除,更改,檢查,排序和統(tǒng)計(jì)數(shù)據(jù)。數(shù)據(jù)庫中只有三個(gè)表,用于存儲URL的表t_url和網(wǎng)頁中的字符串參數(shù),表描述表t_漏洞的漏洞描述和管理用戶的表t_users。 (1)用戶表,表名定義為t_user,該表記錄用戶的登錄驗(yàn)證信息,包括用戶名、密碼、權(quán)限、創(chuàng)建時(shí)間,具體如表3.1 所示。 表3-1t_user表的字段
列名 | 類型 | 是否為空 | 默認(rèn)值 | 主鍵 | 描述 |
---|---|---|---|---|---|
Id | Int(11) | 否 | 無 | 是 | 自增字段 |
Name | VARCHAR(32) | 否 | 無 | 否 | 用戶名 |
Password | VARCHAR(32) | 否 | 無 | 否 | 用戶名密碼 |
Type | VARCHAR(32) | 否 | 無 | 否 | 用戶類型 |
Time | Date | 否 | 無 | 否 | 用戶創(chuàng)建時(shí)間 |
(2)漏洞描述,表名定義為t_vulnerability,該表記錄漏洞的名稱,類型,描述,優(yōu)先級,發(fā)現(xiàn)這個(gè)漏洞的數(shù)量,解決這個(gè)漏洞的方法法等等信息,具體如表3.2所示。 表 3-2 t_vulnerability 表的字段
列名 | 類型 | 是否為空 | 默認(rèn)值 | 主鍵 | 描述 |
---|---|---|---|---|---|
Id | Text | 否 | 無 | 是 | 漏洞類型 |
Name | Text | 否 | 無 | 否 | 漏洞名稱 |
desription | Text | 否 | 無 | 否 | 漏洞描述 |
priority | Text | 否 | 無 | 否 | 漏洞優(yōu)先級 |
Num | Int(11) | 否 | 無 | 否 | 漏洞數(shù)量 |
Solution | Text | 否 | 無 | 否 | 漏洞防御解決方案 |
2)網(wǎng)絡(luò)爬蟲的結(jié)果網(wǎng)址記錄,表名定義為t_url,該表記錄網(wǎng)址,提交網(wǎng)址的方法是 GET還是POST方法,網(wǎng)址后面的查詢字符串參數(shù),具體如表3-3所示。 表 3-3 t_url 表的字段
列名 | 類型 | 是否為空 | 默認(rèn)值 | 主鍵 | 描述 |
---|---|---|---|---|---|
Id | Int(11) | 否 | 無 | 是 | 自增字段 |
url | Text | 否 | 無 | 否 | 網(wǎng)址 |
method | Text | 否 | 無 | 否 | 請求方法 |
Type | Text | 否 | 無 | 否 | 網(wǎng)址類型 |
attack_str | Text | 否 | 無 | 否 | 測試字符串 |
3.4 Web應(yīng)用安全漏洞掃描器系統(tǒng)功能實(shí)現(xiàn) 3.4.1 爬蟲模塊的實(shí)現(xiàn) 爬蟲模塊的實(shí)現(xiàn),使用的編程開發(fā)語言為Python,爬蟲模塊的類關(guān)系如圖3.10所示。
添加圖片注釋,不超過 140 字(可選)
圖 3.10 爬蟲模塊類圖 本模塊主要應(yīng)用以下四個(gè)核心技術(shù):
-
urllib 本模塊利用Python中的urllib庫獲取網(wǎng)頁內(nèi)容,以便html及PhantomJS Render進(jìn)行解析。urllib是Python自帶的一個(gè)抓取網(wǎng)頁信息一個(gè)接口,它最主要的方法是 urlopen(),是基于python的open()方法的。下面是主要說明: urllib.urlopen('網(wǎng)址'):這里傳入urlopen()的參數(shù)有特別說要求,要遵循一些網(wǎng)絡(luò)協(xié)議,比如 http,ftp,也就是說,在網(wǎng)址的開頭必須要有http://這樣的說明。故可使用url.lower().startswitch()函數(shù)來進(jìn)行標(biāo)準(zhǔn)url的判斷。 例如:url.lower().startswith("http://") or url.startswith("https://")。 read方法的是獲取相對應(yīng)的網(wǎng)址的網(wǎng)頁內(nèi)容。 例如:data=urllib.urlopen('http://www.baidu.com').read()。
-
urlparse 通過 Python 所帶的 urlparse 模塊,其中的 urlparse 方法可以將 URl 分解,并返回元組 (scheme, netloc, path, parameters, query, fragment),這樣可以判斷 netloc 剔除不同域名的 url。 例如: result=urlparse.urlparse(http://localhost/core/ui/templates/login.html)ParseResult=(scheme=’http’,netloc=’localhost’,path=’core/ui/templates/login.html’,parameters=’’, query=’’, fragment=’’)
-
PhantomJS Render 傳統(tǒng)網(wǎng)絡(luò)爬蟲都有一個(gè)共性,就是只能爬取單純的html代碼,如果頁面是JS渲染的,而進(jìn)行人工分析后臺請求,手動去摸索JS渲染的一些結(jié)果,是不現(xiàn)實(shí)的,所以,我們需要有一些好用的工具來幫助我們像瀏覽器一樣渲染JS處理的頁面。PhantomJS是一個(gè)無界面的,可腳本編程的WebKit瀏覽器引擎。它原生支持多種web 標(biāo)準(zhǔn):DOM 操作,CSS選擇器,JSON,Canvas 以及SVG。 本文主要使用PhantomJS Render的Web server模塊的兩個(gè)對象,request和response。主要說明如下: request: method:http請求的方法,get、post等 url: 包含http請求URL和get請求的query string(如果有的話) httpVersion:當(dāng)前采用的http協(xié)議的版本 headers:所有http請求頭部信息,以鍵值對的形式提供 post:請求主體,僅對post和put方法的請求有效 postRaw:如果Content-type為 'application/x-www-form-urlencoded'(表單上傳的默認(rèn)值)時(shí),post的原始信息會暫存在此屬性中。 response: headers:以鍵值對的形式保存所有的HTTP請求頭部的信息,在第一次調(diào)用 write()方法前一定要設(shè)置。 setHeader(name, value):設(shè)置或添加特定的頭部信息 header(name):獲取特定的頭部信息 statusCode:設(shè)置HTTP狀態(tài)碼 setEncoding(encoding): 標(biāo)明傳給 write()的數(shù)據(jù)需要轉(zhuǎn)換成什么格式,默認(rèn)為UTF-8。如果數(shù)據(jù)為二進(jìn)制字符串,則設(shè)置為“binary” write(data):向response中發(fā)送數(shù)據(jù)塊,可以多次調(diào)用 writeHead(statusCode, headers):向response中發(fā)送響應(yīng)頭部。 statusCode是一個(gè)3位數(shù)字,表示HTTP狀態(tài)碼(如404)。后一個(gè)參數(shù)代碼響應(yīng)頭部 close():關(guān)閉HTTP連接 closeGracefully():功能與 close()一樣,不過更安全可靠,它能保證響應(yīng)頭部先發(fā)送,并自動在響應(yīng)最后加上 response.write("")
-
正則匹配技術(shù)[23]
本模塊使用的匹配技術(shù)主要是正則表達(dá)式技術(shù),它是一種可以用于模式匹配和替換的強(qiáng)有力的工具,可以用它來提取符合要求的 URL。如表3.3所示是一些最常見的字符集及其定義的方式。
表 3.3 常見字符集及定義方式
^ | 行首匹配 |
---|---|
? | 0或1個(gè) |
* | 0或多個(gè) |
+ | 1或多個(gè) |
\ | 將下一個(gè)字符標(biāo)記為一個(gè)特殊字符、或一個(gè)原義字符、或一個(gè)向后引用、或一個(gè)八進(jìn)制轉(zhuǎn)義符。例如,'\n' 匹配一個(gè)換行符,'\\' 匹配 "\",而 "\(" 則匹配 "(" |
$ | 匹配輸入字符串的結(jié)束位置。如果設(shè)置了RegExp 對象的 Multiline 屬性,$ 也匹配 '\n' 或 '\r' 之前的位 |
. | 除 "\n" 之外的任何單個(gè)字符,要匹配包括 '\n' 在內(nèi)的任何字符,請使用象 '[.\n]' 的模式 |
\s | 空白符 制表符 |
\S | 非空白符 |
\w | 匹配包括下劃線的任何單詞字符,等價(jià)于 [A-Z a-z 0-9_] |
\W | 匹配任何非單詞字符,等價(jià)于 [^A-Z a-z 0-9_] |
() | 提取匹配的字符串。表達(dá)式中有幾個(gè)()就有幾個(gè)相應(yīng)的匹配字符串,(\s*)表示連續(xù)空格的字符串 |
[] | 定義匹配的字符范圍。比如 [a-zA-Z0-9] 表示相應(yīng)位置的字符要匹配英文字符和數(shù)字。[\s*]表示空格或者*號 |
{} | 一般用來表示匹配的長度,比如 \s{3} 表示匹配三個(gè)空格,\s{1,3}表示匹配一到三個(gè)空格 |
3.4.2 SQL注入漏洞掃描的實(shí)現(xiàn)
SQL注入漏洞掃描模塊的實(shí)現(xiàn),使用的編程開發(fā)語言為Python,SQL注入漏洞掃描模塊的類圖如圖3.11所示。
添加圖片注釋,不超過 140 字(可選)
圖 3.11 SQL注入漏洞掃描類圖
SQL注入漏洞檢測的原理,通過構(gòu)造SQL注入檢測變量,實(shí)現(xiàn)對目標(biāo)網(wǎng)站上是否存在SQL注入漏洞的檢測。要完成對于一個(gè)網(wǎng)站的漏洞檢測任務(wù),涉及下兩個(gè)關(guān)鍵技術(shù);
-
注入代碼動態(tài)生成技術(shù)。根據(jù)SQL注入攻擊的各種可能的語法變形方式化及程序員可能的對用戶輸入數(shù)據(jù)的過濾處理方式,我們需要精、構(gòu)造多個(gè)SQL注入漏澗檢測單元;
-
注入代碼的響應(yīng)分析技術(shù)。主要分析注入代碼出現(xiàn)的位置,根據(jù)注入代碼出現(xiàn)的位置,確定注入代碼是否可形成攻擊能力。前面我們介紹到,有經(jīng)驗(yàn)的程序員或者數(shù)據(jù)庫管理人員會利用一個(gè)通用錯誤界面來代替數(shù)據(jù)庫錯誤,因此SQL注入漏桐檢測單元包含多條精也、構(gòu)造的請求數(shù)據(jù),利用這些請求數(shù)據(jù)向服務(wù)器發(fā)送請求,接收服務(wù)器的應(yīng)答信息,然后利用一個(gè)交叉驗(yàn)證函數(shù)對返回的多個(gè)應(yīng)答信息進(jìn)行比較分析,W此來判斷服務(wù)器是否存在SQL注入漏洞。
因此SQL注入漏洞掃描模塊可以分為兩個(gè)子模塊:SQL注入漏洞掃描單元構(gòu)造子模塊和SQL注入漏洞檢測子模塊,下面分別介紹下兩個(gè)子模塊的主要原理與實(shí)現(xiàn)。
-
單元構(gòu)造子模塊 針對不同的輸入?yún)?shù),構(gòu)造不同的漏洞掃描單元。 整形參數(shù) 當(dāng)輸入的參數(shù)是整形的時(shí)候,如 ID、年齡、個(gè)數(shù)等,若是查詢操作,可以猜測 SQL 語句大致如下: Select * from table where 字段名=輸入的值 例如有 http://www.example.com/test.php?id=1 那么構(gòu)造三個(gè)請求的步驟如下: http://www.example.com/test.php?id=1’,將這個(gè)請求提交到服務(wù)器,會生成SQL 查詢語句 select * from table where id=1’,那么 test.php 會出現(xiàn)運(yùn)行異常,因?yàn)檎Z句中出現(xiàn)了不該出現(xiàn)的單引號分隔符。 http://www.example.com/test.php?id=1 and 1=1,頁面運(yùn)行正常,而且運(yùn)行結(jié)果與http://www.example.com/test.php?id=1 一致。 http://www.example.com/test.php?id=1 and 1=2 , 運(yùn) 行 出 現(xiàn) 異 常 或 者 和http://www.example.com/test.php?id=1 運(yùn)行結(jié)果不一致。 如果以上三個(gè)步驟全部滿足,則說明一定存在 SQL 注入漏洞。 字符型參數(shù) 當(dāng)輸入的字符串是字符串類型時(shí),SQL 語句可能如下: Select * from table where 字段名=‘輸入的值’ 例如有 http://www.example.com/test.php?name=username,那么構(gòu)造三個(gè)請求的步驟如下: http://www.example.com/test.php?name=username’,這個(gè)請求提交到服務(wù)器, 會生成 SQL 查詢語句 select * from table where id=1’,那么 test.php 會出現(xiàn)運(yùn)行 異常,因?yàn)檎Z句中出現(xiàn)了不該出現(xiàn)的單引號分隔符。 http://www.example.com/test.php?name=username’ and name=’name’,頁面運(yùn)行正常,而且運(yùn)行結(jié)果與 http://www.example.com/test.php?name=name 一致。 http://www.example.com/test.php? name=username and name=norname,運(yùn)行結(jié)果出現(xiàn) 異?;蛘吆?http://www.example.com/test.php? name=usernameand 運(yùn)行結(jié)果相 比較不一致。 如果以上三個(gè)步驟全部滿足,則說明一定存在 SQL 注入漏洞。
-
漏洞檢測子模塊
在利用檢測單元進(jìn)行檢測時(shí),檢測單元里面的SQL注入語句將一一添加在正常的訪問語句后面,然后發(fā)送到服務(wù)器并接受返回值。將構(gòu)造出的請求提交給服務(wù)器并對結(jié)果進(jìn)行分析,如果服務(wù)器返回“500”錯誤,且 SQL注入漏洞檢測模塊,可滿足多種數(shù)據(jù)庫的檢測,如MySQL、PostgreSQL、Microsoft SQL Server、Microsoft Access、Oracle、IBM DB2、SQLite、Sybase等。
如果HTTP響應(yīng)狀態(tài)碼是200,那么還要繼續(xù)判斷這個(gè)頁面是否與正常返回的 頁面一致,所以繼續(xù)發(fā)送一個(gè)正常的請求,運(yùn)用哈希算法比較正常返回的頁面與 發(fā)送攻擊字符串的頁面內(nèi)容是否一致,如果一致則說明不存在 SQL 注入漏洞漏洞, 如果不一致,則說明數(shù)據(jù)庫的信息存在,存在 SQL 注入漏洞。
3.4.3 XSS漏洞掃描的實(shí)現(xiàn)
XSS漏洞掃描模塊的實(shí)現(xiàn),使用的編程開發(fā)語言為Python,XSS漏洞掃描模塊的類圖如圖3.12所示。
添加圖片注釋,不超過 140 字(可選)
圖 3.12 XSS漏洞掃描類圖
XSS漏洞檢測子系統(tǒng)主要是發(fā)現(xiàn)一個(gè)頁面是否存在XSS漏洞,主要完成功能如下:
1)根據(jù)爬蟲獵取的表單參數(shù),定位到要處理的表單;
2)生成各種不同的payload測試代碼,為了考慮提高測試的準(zhǔn)確性和高效性,還需要采取一些了網(wǎng)頁編碼混淆技術(shù),例如改變大小寫字母,URL 編碼,base64 編碼,增加分隔符,單引號,雙引號等,將測試代碼進(jìn)行混淆編碼。
3)將生成各種不同的測試代碼進(jìn)行注入并提交,舉一個(gè)例子說明如何構(gòu)造能夠掃描 XSS 漏洞的URL請求,譬如有一個(gè) GET 請求,它的URL 是 http://www.example.com/xss.php?file=article我們采用字符串”<script>alert('XSS')</script>”作為測試代碼,那么構(gòu)造請求 URL 就為 http://www.example.com/xss.php?file=<script>alert('XSS')</script>。如果有一個(gè) post 請求,則將每一個(gè)輸入域的值換成測試字符串,注意所有輸入域的測試字符串不能一樣,這樣找不出那個(gè)輸入域可能會有漏洞。findXSS 里面封裝了構(gòu)建請求和發(fā)送請求。
4)分析添加XSS代碼后的響應(yīng)頁面,以確定是否成功注入測試代碼,將構(gòu)造出的 HTTP請求提交給服務(wù)器后,服務(wù)器處理請求返回一個(gè) HTTP 響 應(yīng)。首先對 HTTP 響應(yīng)頭進(jìn)行分析,如果 HTTP 響應(yīng)狀態(tài)碼是“500”錯誤,那么 很有可能存在XSS 漏洞;如果 HTTP 響應(yīng)狀態(tài)嗎是“200”,那么具體情況還得具體分析。HTTP 響應(yīng)狀態(tài)碼是“200”,說明服務(wù)端可以順利地處理 HTTP 請求,并且產(chǎn)生響應(yīng)返回。對于這樣的頁面,要檢測很多種響應(yīng)的測試字符串的形式,服務(wù)器端很可能對用戶的輸入進(jìn)行了轉(zhuǎn)義。檢測的方法就是判斷提交的測試字符串的各種形式是否在頁面中存在,如果存在則說明 XSS 漏洞,還可以再次對服務(wù)器發(fā)出正常請求,并且正常請求的響應(yīng)和構(gòu)造出來的請求的響應(yīng)進(jìn)行哈希值計(jì)算。如果哈希值一致則說明不存在 XSS 漏洞,否則存在 XSS 漏洞。
3.3.4 任務(wù)調(diào)度模塊的實(shí)現(xiàn)
根據(jù)本文3.3.4節(jié)對任務(wù)調(diào)度模塊的設(shè)計(jì),任務(wù)調(diào)度模塊共有如下功能:
1)維護(hù)了用戶下達(dá)的漏洞掃描任務(wù)的所有信息,比如掃描任務(wù)的名稱、起止時(shí)間 、 所用掃描策略以及漏洞掃描報(bào)告等;
2)提供了將用戶下達(dá)的漏洞掃描任務(wù)切分成合適的粒度的子掃描任務(wù)的方法 ,這些子掃描任務(wù)將被分配給漏洞掃描器執(zhí)行,這一切分動作對用戶透明;
3)維護(hù)了子掃描任務(wù)的所有相關(guān)信息,為調(diào)度系統(tǒng)的其他模塊提供了操作子掃描任務(wù)的接口;
4)提供接口供用戶端操作總掃描任務(wù),比如對漏洞掃描任務(wù)的增刪改查等。
任務(wù)調(diào)度模塊的類圖如圖3.13所示。
添加圖片注釋,不超過 140 字(可選)
圖 3.13 任務(wù)調(diào)度模塊類圖
-
掃描任務(wù)的分類 在本文3.3.4節(jié)已經(jīng)介紹過,一個(gè)漏洞掃描任務(wù)分為兩類,一類是用戶直接操作的漏洞掃描任務(wù)Task;另一類是漏洞掃描器執(zhí)行的任務(wù)SubTask; 其中Task根據(jù)完成進(jìn)度分為兩類: 已完成的總掃描任務(wù); 未完成的總掃描任務(wù)。 SubTask根據(jù)是否被分配及掃描進(jìn)度分為三類: 已完成的子掃描任務(wù); 已分配未完成的子掃描任務(wù); 未分配未完成的子掃描任務(wù)。
-
各類屬性介紹 下面給出本模塊中三三個(gè)實(shí)現(xiàn)類TaskManager、Task 和SubTask 的屬性介紹3。TaskManager 類中維護(hù)了兩個(gè)列表: List<Task> completedTasks: 所有已完成總掃描任務(wù)的集合。 List<Task> uncompletedTasks: 所有未完成總掃描任務(wù)的集合。Task 中維護(hù)了的信息為: List<SubTask > unDispatchedTaskList :未分配子掃描任務(wù)列表 List<SubTask> beingTackledTaskList: 正在執(zhí)行子掃表任務(wù)列表 List<SubTask> completedTaskList :已完成子掃描任務(wù)列表 String taskID: 任務(wù)ID String taskName: 任務(wù)名稱 String targetFrom: 任務(wù)起始 IPStringtargetTo: 任務(wù)終止 IP double status: 任務(wù)執(zhí)行進(jìn)度 booleanhigher: 若為真,則代表較高優(yōu)先級的漏洞掃描任務(wù) SubTask 中記錄了子掃描任務(wù)的具體信息: String taskID: 任務(wù)ID String taskName: 任務(wù)名稱 String targetFrom: 任務(wù)起始 IPString targetTo: 任務(wù)終止 IPdouble status: 任務(wù)執(zhí)行進(jìn)度 double isRunning: 該任務(wù)是否正在執(zhí)行 Scannerscanner: 當(dāng)前執(zhí)行該掃描任務(wù)的漏洞掃描器實(shí)例
-
SubTask 狀態(tài)遷移 當(dāng)某個(gè)子掃描任務(wù)被實(shí)例化之后,處于未分配狀態(tài),并等待被調(diào)度模塊分配給某個(gè)漏洞掃描器執(zhí)行。被某個(gè)漏洞掃描器執(zhí)行的子掃描任務(wù)在初始分配時(shí)處于“已分配、未完成”狀態(tài)。需要說明的是,處于這個(gè)狀態(tài)的子掃描任務(wù)只是被分配給了某個(gè)漏洞掃描器執(zhí)行,這個(gè)漏洞掃描器內(nèi)部同樣有一套自身的調(diào)度機(jī)制,也就是說, 處于該狀態(tài)的子掃描任務(wù)只是能夠被漏洞掃描器進(jìn)行調(diào)度執(zhí)行,而不能保證時(shí)刻處于被執(zhí)行狀態(tài)。這個(gè)任務(wù)具體的狀態(tài)有4種,分別為: 等待調(diào)度狀態(tài)、正被執(zhí)行狀態(tài)、暫停狀態(tài)和已完成狀態(tài)。“已分配、未完成”狀態(tài)的兩個(gè)后繼狀態(tài)分別是“已完成”狀態(tài)和終止?fàn)顟B(tài)。當(dāng)某個(gè)漏洞掃描任務(wù)在漏洞掃描器中成功執(zhí)行完成之后,將轉(zhuǎn)移到“已完成”狀態(tài)。 3.3.5 可用性檢測模塊的實(shí)現(xiàn) 可用性檢測模塊的實(shí)現(xiàn),主要借助已有的端口掃描和站點(diǎn)可用性探測工具,將其腳本集成到本文所述的安全漏洞掃描器中,實(shí)現(xiàn)站點(diǎn)信息獲取及站點(diǎn)可用性檢測的功能。 3.5 本章小結(jié) 本章針對傳統(tǒng)的對網(wǎng)站的每個(gè)URL進(jìn)行每種漏洞類型的遍歷檢測這種效率低下、耗時(shí)過長的漏洞檢測機(jī)制,提出了基于優(yōu)化爬蟲策略的漏洞掃描器架構(gòu)。網(wǎng)絡(luò)爬蟲在鏈接判重和遍歷策略兩個(gè)方面進(jìn)行優(yōu)化,避免了大量重復(fù)無用的爬蟲鏈接,并提高了爬蟲的效率;結(jié)合改進(jìn)的網(wǎng)絡(luò)爬蟲技術(shù)、SQL注入漏洞檢測方法、XSS注入漏洞檢測方法,介紹了 Web 應(yīng)用安全漏洞掃描器各部分的詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)。 本章分析了Web應(yīng)用程序漏洞掃描程序的要求,并給出了系統(tǒng)的設(shè)計(jì)目標(biāo)和所需的功能模塊。包括漏洞掃描程序體系結(jié)構(gòu)的整體描述。漏洞掃描程序包括網(wǎng)絡(luò)爬網(wǎng)程序模塊,漏洞掃描模塊,用戶界面模塊和報(bào)告生成模塊。漏洞掃描模塊需要檢測多個(gè)漏洞。SQL注入漏洞檢測,XSS漏洞檢測,目錄遍歷漏洞檢測。詳細(xì)描述了每個(gè)功能模塊的設(shè)計(jì)。 第四章 Web應(yīng)用安全漏洞掃描器測試及分析 Web應(yīng)用安全漏洞掃描器測試是在真實(shí)運(yùn)行環(huán)境中,采用測試用例測試掃描器所定義的功能和質(zhì)量屬性是否滿足要求。測試的內(nèi)容包括測試環(huán)境、測試用例、測試過程和測試結(jié)果分析等。 4.1 測試環(huán)境 4.1.1 掃描器部署環(huán)境 Web應(yīng)用安全漏洞掃描器測試部署環(huán)境基于ubuntu系統(tǒng),采用Python語言進(jìn)行開發(fā)。其物理分布和網(wǎng)絡(luò)環(huán)境如圖4.1部署圖所示。
添加圖片注釋,不超過 140 字(可選)
圖 4.1 Web應(yīng)用安全漏洞掃描器部署圖 Web應(yīng)用安全漏洞掃描器部署方式簡單,只需將掃描器接入到用戶網(wǎng)絡(luò)并確保掃描器與被檢測目標(biāo)間網(wǎng)絡(luò)可達(dá),在使用過程中,用戶通過瀏覽器訪問掃描器即可下達(dá)掃描指令和查看掃描結(jié)果。 4.1.2 漏洞測試環(huán)境 為了驗(yàn)證本掃描器是否滿足本文的測試目的,本文選取了公司內(nèi)部自己搭建的Web應(yīng)用安全漏洞測試環(huán)境-Evn,作為Web應(yīng)用程序掃描器的評估工具。Evn是一個(gè)包含Web應(yīng)用程序漏洞的平臺,目的是幫助測試Web應(yīng)用漏洞掃描器的功能、質(zhì)量和準(zhǔn)確性。Evn收集了很多獨(dú)特的包含漏洞的Web頁面,用于測試Web應(yīng)用程序掃描器的多種特性。 由于本文主要研究的是SQL注入和XSS漏洞,所以將Evn部署在系統(tǒng)中后,對數(shù)據(jù)庫中的漏洞數(shù)目進(jìn)行了一些調(diào)整。現(xiàn)有的漏洞數(shù)目為:SQL注入漏洞24個(gè)cases; XSS 漏洞13個(gè) cases。 Evn測試環(huán)境截圖如下圖4.2、4.3所示:
添加圖片注釋,不超過 140 字(可選)
圖 4.2 SQL注入漏洞測試環(huán)境
添加圖片注釋,不超過 140 字(可選)
圖 4.3 XSS漏洞測試環(huán)境 4.2 測試過程 4.2.1 功能測試
-
爬蟲功能、SQL注入及XSS漏洞檢測功能、可用性檢測功能測試 通過搭建的漏洞測試環(huán)境Evn,進(jìn)行網(wǎng)絡(luò)爬蟲、SQL注入漏洞及XSS漏洞檢測、可用性檢測的功能測試。其測試結(jié)果如圖4.4所示。
添加圖片注釋,不超過 140 字(可選)
圖 4.4 掃描結(jié)果 由于掃描器的自動化檢測功能,對于用戶來說是透明的,我們可通過掃描結(jié)果來判斷功能是否實(shí)現(xiàn)。 從圖4.4可以看出,本文設(shè)計(jì)的Web應(yīng)用安全漏洞掃描器,掃描出SQL注入漏洞19個(gè),XSS漏洞10個(gè)。同時(shí)記錄掃描時(shí)間為4min53s。 通過UI交互界面的儀表盤,用戶可直觀看出漏洞掃描結(jié)果,如圖4.5所示。
添加圖片注釋,不超過 140 字(可選)
圖 4.5 漏洞分布情況展示
-
任務(wù)調(diào)度功能
登錄進(jìn)入后,添加新任務(wù),界面如圖4.6所示。
添加圖片注釋,不超過 140 字(可選)
圖 4.6 添加新任務(wù)
添加XSS漏洞及SQL注入漏洞的掃描任務(wù),查看掃描隊(duì)列,界面如圖4.7所示。
添加圖片注釋,不超過 140 字(可選)
圖 4.7 掃描隊(duì)列
4.2.2 非功能測試
Web應(yīng)用安全漏洞掃描器是基于B/S架構(gòu)設(shè)計(jì)實(shí)現(xiàn)的,通過友好的UI交互界面,可直接登錄使用,登錄界面如圖4.8所示。
添加圖片注釋,不超過 140 字(可選)
圖 4.8 登錄界面
掃描完成后,會生成漏洞報(bào)告,界面截圖如圖4.9所示。
添加圖片注釋,不超過 140 字(可選)
圖 4.9 漏洞報(bào)告
4.3 測試結(jié)果分析
上一節(jié)主要列出的是基于優(yōu)化爬蟲策略的漏洞掃描器掃描結(jié)果。為了證明其性能的改進(jìn),還需對其掃描結(jié)果與其他掃描器的掃描情況進(jìn)行比較。我們主要從兩個(gè)方面進(jìn)行比較:一個(gè)是掃描器的掃描速率;另一個(gè)是掃描器對漏洞掃描的覆蓋率。
表 4.1 本文設(shè)計(jì)漏洞掃描器與其他兩款掃描器掃描結(jié)果對比表
指標(biāo)項(xiàng)/掃描器 | 本文設(shè)計(jì)漏洞掃描器 | WVS | AppScan |
---|---|---|---|
掃描時(shí)間 | 4min53s | 8min24s | 10min5s |
SQL注入漏洞數(shù)(個(gè)) | 19 | 12 | 8 |
XSS漏洞數(shù)(個(gè)) | 10 | 7 | 6 |
表4.1中,我將本文設(shè)計(jì)的Web應(yīng)用安全漏洞掃描器與其他兩款掃描器掃描結(jié)果進(jìn)行對比,驗(yàn)證了本方設(shè)計(jì) 的Web應(yīng)用安全漏洞掃描器在掃描速率及漏洞覆蓋率方面性能更優(yōu)。
4.4 本章小結(jié)
本章的主要工作是完成Web應(yīng)用安全漏洞掃描器的功能性及非功能性測試,在介紹系統(tǒng)部署環(huán)境、漏洞測試環(huán)境的基礎(chǔ)上,使用本文設(shè)計(jì)實(shí)現(xiàn)的Web應(yīng)用安全漏洞掃描器對主流的Web應(yīng)用安全漏洞XSS漏洞及SQL注入漏洞進(jìn)行測試,并選取了兩款業(yè)內(nèi)常用的Web應(yīng)用安全漏洞掃描器來進(jìn)行對比測試,驗(yàn)證系統(tǒng)的可用性,高效性和結(jié)果全面性。
本章介紹了 Web應(yīng)用漏洞掃描器各個(gè)模塊的具體實(shí)現(xiàn)過程,首先介紹了掃描器
的用戶界面模塊,然后介紹了網(wǎng)絡(luò)爬蟲模塊的實(shí)現(xiàn)過程,包括提取所有 URL,URL
標(biāo)準(zhǔn)格式化,URL過濾,URL參數(shù)變換等過程。它能提高漏洞掃描器的性能,接著
介紹了三個(gè)典型的web應(yīng)用漏洞的掃描模塊的實(shí)現(xiàn)。最后介紹了如何生成一份格
式良好的安全漏洞報(bào)告。
第五章 結(jié)束語
本章是本人對論文工作的總結(jié)。在給出論文工作結(jié)論的基礎(chǔ)上,分條目介紹論文主要完成的工作,并對Web應(yīng)用安全漏洞掃描器進(jìn)行客觀評價(jià)和分析,提出后續(xù)改進(jìn)的建議。
5.1 論文工作總結(jié)
隨著互聯(lián)網(wǎng)技術(shù)的不斷發(fā)展, 安全漏洞的攻擊也愈演愈烈,大量的針對于網(wǎng)絡(luò)設(shè)備或者服務(wù)器的攻擊開始逐漸轉(zhuǎn)移到Web應(yīng)用上來,Web應(yīng)用安全漸漸成為了一種主要的網(wǎng)絡(luò)安全問題。與此同時(shí),網(wǎng)絡(luò)安全技術(shù)也在快速成熟,用戶的安全意識也在不斷增強(qiáng)。越來越多的用戶特別是企業(yè)用戶開始使用漏洞掃描器給系統(tǒng)進(jìn)行安全掃描。商業(yè)版、家庭版及開源的漏洞掃描器層出不窮。因此,如何提高Web應(yīng)用漏洞掃描程序的掃描速率及掃描覆蓋率成為了一個(gè)熱門的課題,對Web漏洞掃描器進(jìn)行分析和改進(jìn)也具有很大的現(xiàn)實(shí)意義。
本文設(shè)計(jì)并實(shí)現(xiàn)了Web應(yīng)用安全漏洞掃描器,以優(yōu)化爬蟲技術(shù)作為切入點(diǎn),主要從以下幾個(gè)方面進(jìn)行研究:
1、對目前的Web應(yīng)用安全狀況進(jìn)行了全面的分析,確定對Web漏洞掃描器的研究具有重要的理論意義和實(shí)用價(jià)值。
2、詳細(xì)介紹了網(wǎng)絡(luò)爬蟲的基本概念、爬取策略及其在漏洞掃描中的作用;同時(shí)對漏洞的基本概念、產(chǎn)生原因、漏洞類型、漏洞檢測技術(shù)等進(jìn)行詳細(xì)的闡述,特別是SQL注入漏洞和XSS漏洞。
3、通過對國內(nèi)外漏洞掃描器三個(gè)方面的量化對比,總結(jié)出為提升掃描器效率而亟需改進(jìn)的地方。
4、設(shè)計(jì)了優(yōu)化爬蟲策略,SQL注入和XSS漏洞的檢測機(jī)制,在此基礎(chǔ)上設(shè)計(jì)并實(shí)現(xiàn)了基于插件式擴(kuò)展的Web應(yīng)用安全漏洞掃描器。
5、通過對所設(shè)計(jì)的Web應(yīng)用安全漏洞掃描器性能的測試對比,證明了掃描器的可用性、高效性及掃描結(jié)果的全面性。
5.2 后續(xù)工作展望
?
參考文獻(xiàn)
[1] 王偉軍, 孫晶. Web2. 0 的研究與應(yīng)用綜述[J]. 情報(bào)科學(xué), 2008, 25(12): 1907-1913.
[2]趙鑫,朱東來,楊宏. 高效移動互聯(lián)網(wǎng)網(wǎng)站安全監(jiān)測方法研究與實(shí)現(xiàn)[A]. 中國通信學(xué)會無線及移動通信委員會.2013全國無線及移動通信學(xué)術(shù)大會論文集(上)[C].中國通信學(xué)會無線及移動通信委員會:,2013:3.
[3]王璇. 基于網(wǎng)絡(luò)漏洞的掃描器的研究與應(yīng)用[D].吉林大學(xué),2012.
[4]丁妮. Web應(yīng)用安全研究[D].南京信息工程大學(xué),2007.
[5]劉明明. Web應(yīng)用漏洞掃描器的設(shè)計(jì)與實(shí)現(xiàn)[D].電子科技大學(xué),2014.
[6]楊興春, 牟劍平. 政府門戶網(wǎng)站安全現(xiàn)狀, 原因及其對策研究[J]. 網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2010 (9): 32-34.
[7]尹虹. Web 應(yīng)用程序漏洞主動掃描器的研究與實(shí)現(xiàn)[D]. 國防科技大學(xué), 2005.
[8]付堂歡. 基于網(wǎng)絡(luò)的web應(yīng)用漏洞掃描系統(tǒng)的分析與設(shè)計(jì)[D].北京郵電大學(xué),2013.
[9]孫群,漆正東.Web聊天室探測系統(tǒng)的網(wǎng)頁獲取和改進(jìn)研究[J].計(jì)算機(jī)光盤軟件與應(yīng)用,2012, 3: 118.
[10]張燁青. Web應(yīng)用安全漏洞掃描器爬蟲技術(shù)的改進(jìn)與實(shí)現(xiàn)[D].北京郵電大學(xué),2014.
[11] 俞小怡,常艷,許捍衛(wèi).Web 應(yīng)用中的攻擊防御技術(shù)的研究與實(shí)現(xiàn)[J].計(jì)算機(jī)安全,2008(6):47-51.
[12] 趙亭,陸余良等.基于表單爬蟲的 Web 漏洞探測[J].計(jì)算機(jī)工程,2008,34(9):186-188,215.
[13]黃從韜. 面向Web服務(wù)安全的漏洞掃描器的設(shè)計(jì)與實(shí)現(xiàn)[D].中南大學(xué),2012.
[14]郭俸明. 漏洞掃描工具原理與實(shí)現(xiàn)[D].中國地質(zhì)大學(xué)(北京),2008.
[15]尹虹. Web應(yīng)用程序漏洞主動掃描器的研究與實(shí)現(xiàn)[D].國防科學(xué)技術(shù)大學(xué),2005.
[16]閆美鳳. 策略驅(qū)動的可擴(kuò)展網(wǎng)絡(luò)漏洞掃描研究[D].太原理工大學(xué),2006.
[17]蔣宇. 面向 Web 安全的漏洞檢測系統(tǒng)的研究與實(shí)現(xiàn) [D]. 吉林大學(xué), 2011.
[18]陳濤.基于網(wǎng)絡(luò)的漏洞掃描器設(shè)計(jì)與實(shí)現(xiàn)[J].電腦知識與技術(shù),2008(11):235-236.
[19]劉欣萍.企業(yè)網(wǎng)絡(luò)信息安全問題及策略[J].電子商務(wù),2013,2: 024.
[20]楊新英. 基于網(wǎng)絡(luò)爬蟲的Web應(yīng)用程序漏洞掃描器的研究與實(shí)現(xiàn)[D].電子科技大學(xué),2010.
[21]劉莉. 網(wǎng)絡(luò)漏洞掃描器的設(shè)計(jì)與實(shí)現(xiàn)[D].西安電子科技大學(xué),2007.
[22]李鵬,楊獻(xiàn)榮,許麗華.網(wǎng)絡(luò)漏洞掃描器的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程,2003(08):116-117+142.
[23]胡軍偉, 秦奕青, 張偉. 正則表達(dá)式在 Web 信息抽取中的應(yīng)用[J]. 北京信息科技大學(xué)學(xué)報(bào): 自然科學(xué)版, 2012, 26(6): 86-89.