Web 的攻擊技術(shù)
1. 針對(duì) Web 的攻擊技術(shù)
簡(jiǎn)單的 HTTP 協(xié)議本身并不存在安全性問(wèn)題。應(yīng)用 HTTP 協(xié)議的服務(wù)器和客戶端,以及運(yùn)行在服務(wù)器上的 Web 應(yīng)用等資源才是攻擊目標(biāo)。

1.1 HTTP 不具備必要的安全功能
與最初的設(shè)計(jì)相比,現(xiàn)今幾乎所有的 Web 網(wǎng)站都會(huì)使用會(huì)話(session)管理、加密處理等安全性方面的功能,而 HTTP 協(xié)議并不具備這些功能。
整體上看,HTTP 就是一個(gè)通用的單純協(xié)議機(jī)制,因此它具備較多優(yōu)勢(shì),但是在安全性方面呈劣勢(shì)。
開(kāi)發(fā)者需自行設(shè)計(jì)并開(kāi)發(fā)認(rèn)證及會(huì)話管理功能來(lái)滿足 Web 應(yīng)用的安全,但是自行設(shè)計(jì)會(huì)出現(xiàn)各種形形色色的實(shí)現(xiàn),安全等級(jí)并不完備。
1.2 在客戶端即可篡改請(qǐng)求
在 Web 應(yīng)用中,從瀏覽器那接收到的 HTTP 請(qǐng)求的全部?jī)?nèi)容,都可以在客戶端自由的變更、篡改。所以 Web 應(yīng)用可能會(huì)接收到與預(yù)期數(shù)據(jù)不相同的內(nèi)容。
在 HTTP 請(qǐng)求報(bào)文內(nèi)加載攻擊代碼,就能發(fā)起對(duì) Web 應(yīng)用的攻擊。

1.3 針對(duì) Web 應(yīng)用的攻擊模式
對(duì) Web 應(yīng)用的攻擊模式有以下兩種。
主動(dòng)攻擊
被動(dòng)攻擊
-
以服務(wù)器為目標(biāo)的主動(dòng)攻擊
主動(dòng)攻擊(active attack)是指攻擊者通過(guò)直接訪問(wèn) Web 應(yīng)用,把攻擊代碼傳入的攻擊模式。由于該模式是直接針對(duì)服務(wù)器上的資源進(jìn)行攻擊,因此攻擊者需要能夠訪問(wèn)到那些資源。
主動(dòng)攻擊模式里具有代表性的攻擊是 SQL 注入攻擊和 OS 命令注入攻擊。
主動(dòng)攻擊.png -
以服務(wù)器為目標(biāo)的被動(dòng)攻擊
被動(dòng)攻擊(passive attack)是指利用圈套策略執(zhí)行攻擊代碼的攻擊模式。在被動(dòng)攻擊過(guò)程中,攻擊者不直接對(duì)目標(biāo) Web 應(yīng)用訪問(wèn)發(fā)起攻擊。
被動(dòng)攻擊通常的攻擊模式入如下:
攻擊者誘使用戶觸發(fā)已設(shè)置好的陷阱,而陷阱會(huì)啟動(dòng)發(fā)送已嵌入攻擊代碼的 HTTP 請(qǐng)求。
當(dāng)用戶不知不覺(jué)中招后,用戶的瀏覽器或郵件客戶端就會(huì)觸發(fā)這個(gè)請(qǐng)求。
中招后的用戶更瀏覽器會(huì)把含有攻擊代碼的 HTTP 請(qǐng)求發(fā)送給作為攻擊目標(biāo)的 Web 應(yīng)用,運(yùn)行攻擊代碼。
執(zhí)行完攻擊代碼,存在安全漏洞的 Web 應(yīng)用會(huì)稱為攻擊者的跳板,可能導(dǎo)致用戶所持有的 Cookie 等個(gè)人信息被竊取。
被動(dòng)攻擊模式中具有代表性的攻擊是跨站腳本攻擊和跨站點(diǎn)請(qǐng)求偽造。

利用被動(dòng)攻擊,可發(fā)起對(duì)原本從互聯(lián)網(wǎng)上無(wú)法直接訪問(wèn)的企業(yè)內(nèi)網(wǎng)等網(wǎng)絡(luò)的攻擊。

2. 因輸出值轉(zhuǎn)義不完全引發(fā)的安全漏洞
實(shí)施 Web 應(yīng)用的安全對(duì)策可大致分為以下兩部分:
客戶端的驗(yàn)證
-
Web 應(yīng)用端(服務(wù)器端)的驗(yàn)證
輸入值驗(yàn)證
輸出值轉(zhuǎn)義

多數(shù)情況下采用 JavaScript 在客戶端驗(yàn)證數(shù)據(jù)。保留客戶端驗(yàn)證數(shù)據(jù)只是為了盡早的辨識(shí)輸入錯(cuò)誤,起到提供 UI 的作用。
輸入值驗(yàn)證通常是指檢查是否是符合系統(tǒng)業(yè)務(wù)邏輯的數(shù)值或檢查字符編碼等預(yù)防對(duì)策。
針對(duì)輸出做值轉(zhuǎn)義處理是一項(xiàng)至關(guān)重要的安全策略。當(dāng)輸出值轉(zhuǎn)義不完全時(shí),會(huì)因觸發(fā)攻擊者傳入的攻擊代碼,而給輸出對(duì)象帶來(lái)?yè)p害。
2.1 跨站腳本攻擊
跨站腳本攻擊(Cross-Site Scripting,XSS)是指通過(guò)存在安全漏洞的 Web 網(wǎng)站注冊(cè)用戶的瀏覽器內(nèi)運(yùn)行非法的 HTML 標(biāo)簽或者 JavaScript 進(jìn)行的一種攻擊。
跨站腳本攻擊有可能造成以下影響。
利用虛假輸入表單騙取用戶個(gè)人信息
利用腳本竊取用戶的 Cookie 值,被害者在不知情的情況下,幫助攻擊者發(fā)送惡意請(qǐng)求
顯示偽造的文章或圖片
XSS 是攻擊者利用預(yù)先設(shè)置的陷阱觸發(fā)的被動(dòng)攻擊。
跨站腳本攻擊屬于被動(dòng)攻擊模式,因此攻擊者會(huì)事先布置 好用于攻擊的陷阱。
2.2 SQL 注入攻擊
會(huì)執(zhí)行非法 SQL 的 SQL 注入攻擊。
SQL 注入(SQL Injection) 是指針對(duì) Web 應(yīng)用使用的數(shù)據(jù)庫(kù),通過(guò)運(yùn)行非法的 SQL 而產(chǎn)生的攻擊。可能會(huì)導(dǎo)致個(gè)人信息及機(jī)密信息的泄漏。
SQL 注入攻擊可能會(huì)造成以下等影響。
非法查看或篡改數(shù)據(jù)庫(kù)內(nèi)的數(shù)據(jù)
規(guī)避認(rèn)證
執(zhí)行和數(shù)據(jù)庫(kù)服務(wù)器業(yè)務(wù)關(guān)聯(lián)的程序
SQL 注入是攻擊者將 SQL 語(yǔ)句改變成開(kāi)發(fā)者意想不到的形式以達(dá)到破壞結(jié)構(gòu)的攻擊。
2.3 OS 命令注入攻擊
OS 命令注入攻擊(OS Command Injection)是指通過(guò) Web 應(yīng)用,執(zhí)行非法的操作系統(tǒng)命令達(dá)到攻擊的目的。只要在能調(diào)用 Shell 函數(shù)的地方就有存在被攻擊的風(fēng)險(xiǎn)。
通過(guò) OS 注入攻擊可執(zhí)行 OS 上安裝著的各種程序。
2.4 HTTP 首部注入攻擊
HTTP 首部注入攻擊(HTTP Header Injection)是指攻擊者通過(guò)在響應(yīng)首部字段內(nèi)插入換行,添加任意響應(yīng)首部或主體的一種攻擊。屬于被動(dòng)攻擊模式。
向首部主體內(nèi)添加內(nèi)容的攻擊稱為 HTTP 響應(yīng)截?cái)喙簦℉TTP Response Splitting Attack)。
HTTP 首部注入攻擊可能會(huì)造成以下一些影響。
設(shè)置任何 Cookie 信息
重定向至任意 URL
顯示任意的主體(HTTP 響應(yīng)截?cái)喙簦?/p>
濫用 HTTP/1.1 中匯集多響應(yīng)返回功能,會(huì)導(dǎo)致緩存服務(wù)器對(duì)任意內(nèi)容進(jìn)行緩存操作。這種攻擊稱為緩存污染。
2.5 郵件首部注入攻擊
郵件首部注入(Mail Header Injection)是指 Web 應(yīng)用中的郵件發(fā)送功能,攻擊者通過(guò)向郵件首部 TO 或 Subject 內(nèi)任意添加非法內(nèi)容發(fā)起的攻擊。利用存在安全漏洞的 Web 網(wǎng)站,可對(duì)任意郵件地址發(fā)送廣告郵件或病毒郵件。
2.6 目錄遍歷攻擊
目錄遍歷(Directory Traversal)攻擊是指對(duì)本無(wú)意公開(kāi)的文件目錄,通過(guò)非法截?cái)嗥淠夸浡窂胶?,達(dá)成訪問(wèn)的目的的一種攻擊。這種攻擊有時(shí)也稱為路徑遍歷(Path Traversal)攻擊。
2.7 遠(yuǎn)程文件包含漏洞
遠(yuǎn)程文件包含漏洞(Remote File Inclusion)是指當(dāng)部分腳本內(nèi)容需要從其他文件讀入時(shí),攻擊者利用指定外部服務(wù)器的 URL 充當(dāng)依賴文件,讓腳本讀取之后,就可運(yùn)行任意腳本的一種攻擊。
3. 因設(shè)置或設(shè)計(jì)上的缺陷引發(fā)的安全漏洞
因設(shè)置或設(shè)計(jì)上的缺陷引發(fā)的安全漏洞是指,錯(cuò)誤設(shè)置 Web 服務(wù)器,或是由設(shè)計(jì)上的一些問(wèn)題引起的安全漏洞。
3.1 強(qiáng)制瀏覽
強(qiáng)制瀏覽(Forced Browsing)安全漏洞是指,從安置在 Web 服務(wù)器的公開(kāi)目錄下的文件中,瀏覽那些原本非自愿公開(kāi)的文件。
強(qiáng)制瀏覽可能會(huì)造成以下一些影響。
泄漏顧客的個(gè)人信息等重要情報(bào)
泄漏原本需要具有訪問(wèn)權(quán)限的用戶才可以查閱的內(nèi)容
泄漏未連到外界的文件
3.2 不正確的錯(cuò)誤消息處理
不正確的錯(cuò)誤消息處理(Error Handling Vulnerability)的安全漏洞是指,Web 應(yīng)用的錯(cuò)誤信息包含對(duì)攻擊者有用的信息。與 Web 應(yīng)用有關(guān)的主要錯(cuò)誤信息如下所示。
Web 應(yīng)用拋出的錯(cuò)誤信息
數(shù)據(jù)庫(kù)等系統(tǒng)拋出的錯(cuò)誤信息
系統(tǒng)拋出的錯(cuò)誤主要集中在以下幾個(gè)方面。
PHP 或 ASP 等腳本錯(cuò)誤
數(shù)據(jù)庫(kù)或中間件的錯(cuò)誤
Web 服務(wù)器的錯(cuò)誤
各系統(tǒng)應(yīng)對(duì)詳細(xì)的錯(cuò)誤消息進(jìn)行抑制設(shè)定,或使用自定義用戶消息,以避免某些錯(cuò)誤消息給攻擊者以啟發(fā)。
3.3 開(kāi)放重定向
開(kāi)放重定向(Open Redirect)是一種對(duì)指定的任意 URL 作重定向跳轉(zhuǎn)的功能。
可信度高的 Web 網(wǎng)站如果開(kāi)放重定向功能,則很有可能被攻擊者選中并用來(lái)作為釣魚(yú)攻擊的跳板。
4. 因會(huì)話管理疏忽引發(fā)的安全漏洞
會(huì)話管理就是用來(lái)管理用戶狀態(tài)的必備功能,但是如果在會(huì)話管理上有所疏忽,就會(huì)導(dǎo)致用戶的認(rèn)證狀態(tài)被竊取等后果。
4.1 會(huì)話劫持
會(huì)話劫持(Session Hijack)是指攻擊者通過(guò)某種手段拿到了用戶的會(huì)話 ID,并非法使用此會(huì)話 ID 偽裝成用戶,達(dá)到攻擊的目的。

具備認(rèn)證功能的 Web 應(yīng)用,使用會(huì)話 ID 的會(huì)話管理機(jī)制,作為認(rèn)證管理狀態(tài)的主流方式。會(huì)話 ID 中記錄客戶端的 Cookie 等消息,服務(wù)器會(huì)將會(huì)話 ID 與認(rèn)證狀態(tài)進(jìn)行一對(duì)一匹配管理。
攻擊者可能會(huì)獲得會(huì)話 ID 的幾種途徑如下所示。
通過(guò)非正規(guī)的生成方法推測(cè)會(huì)話 ID
通過(guò)竊聽(tīng)或 XSS 攻擊盜取會(huì)話 ID
通過(guò)會(huì)話固定攻擊(Session Fixation)強(qiáng)行獲取會(huì)話 ID
4.2 會(huì)話固定攻擊
對(duì)以竊取目標(biāo)會(huì)話 ID 為主動(dòng)攻擊收到的會(huì)話劫持而言,會(huì)話固定攻擊(Session Fixation)攻擊會(huì)強(qiáng)制用戶使用攻擊者指定的會(huì)話 ID,屬于被動(dòng)攻擊。
4.3 跨站點(diǎn)請(qǐng)求偽造
跨站點(diǎn)請(qǐng)求偽造(Cross-Site Request Forgeries,CSRF)攻擊是指攻擊者通過(guò)設(shè)置好的陷阱,強(qiáng)制對(duì)已完成認(rèn)證的用戶進(jìn)行非預(yù)期的個(gè)人信息或設(shè)定信息等某些狀態(tài)更新,屬于被動(dòng)攻擊。
跨站點(diǎn)請(qǐng)求偽造有可能會(huì)造成以下等影響。
- 利用已通過(guò)認(rèn)證的用戶權(quán)限更新設(shè)定信息等
- 利用已通過(guò)認(rèn)證的用戶權(quán)限購(gòu)買商品
- 利用已通過(guò)認(rèn)證的用戶權(quán)限在留言板上發(fā)表評(píng)論
5. 其他安全漏洞
5.1 密碼破解
密碼破解(Password Cracking)即算出密碼,突破認(rèn)證。
密碼破解有以下兩種手段。
通過(guò)網(wǎng)絡(luò)的密碼試錯(cuò)
對(duì)已加密密碼的破解(指攻擊者入侵系統(tǒng),已獲得加密或散列處理的密碼數(shù)據(jù)的情況)
除去突破認(rèn)證的攻擊手段,還有 SQL 注入攻擊逃避認(rèn)證,跨站腳本攻擊竊取密碼信息等方法。
通過(guò)網(wǎng)絡(luò)進(jìn)行密碼試錯(cuò)
對(duì) Web 應(yīng)用提供的認(rèn)證功能,通過(guò)網(wǎng)絡(luò)嘗試候選密碼進(jìn)行的一種攻擊。主要有以下兩種方式。
-
窮舉法
窮舉法(Brute-force Attack,又稱暴力破解法)是指對(duì)所有密鑰集合構(gòu)成的密鑰空間(Keyspace)進(jìn)行窮舉。用所有可行的候選密碼對(duì)目標(biāo)的密碼系統(tǒng)試錯(cuò),用以圖片驗(yàn)證的一種攻擊。
-
字典攻擊
字典攻擊是指利用事先收集好的候選密碼(經(jīng)過(guò)各種組合方式后存入字典),枚舉字典中的密碼,嘗試通過(guò)認(rèn)證的一種攻擊手段。

對(duì)已加密密碼的破解

從加密過(guò)的數(shù)據(jù)中導(dǎo)出明文通常有以下幾種方法
-
通過(guò)窮舉法·字典攻擊進(jìn)行類推
針對(duì)密碼使用散列函數(shù)進(jìn)行加密處理的情況,采用和窮舉法或字典攻擊相同的手法,嘗試調(diào)用相同的散列函數(shù)加密候選密碼,然后把計(jì)算出的散列值與目標(biāo)散列值進(jìn)行匹配,類推出密碼。
通過(guò)窮舉法·字典攻擊進(jìn)行類推.png
-
彩虹表
彩虹表(Rainbow Table)是由明文密碼及與之對(duì)應(yīng)的散列值構(gòu)成的一張數(shù)據(jù)庫(kù)表,是一種通過(guò)事先制作龐大的彩虹表,可在窮舉法·字典攻擊等實(shí)際破解過(guò)程中縮短消耗時(shí)間的技巧。從彩虹表內(nèi)搜索散列值就可以推導(dǎo)出對(duì)應(yīng)的明文密碼。
彩虹表.png -
拿到密鑰
使用共享密鑰加密方式對(duì)密碼數(shù)據(jù)進(jìn)行加密處理的情況下,如果通過(guò)某種手段拿到加密使用的密鑰,也就可以對(duì)密碼數(shù)據(jù)解密了。
-
加密算法的漏洞
考慮到加密算法本身可能存在的漏洞,利用該漏洞嘗試解密也是一種可行的方法。
5.2 點(diǎn)擊劫持
點(diǎn)擊劫持(Clickjacking)是指利用透明的按鈕或鏈接做成陷阱,覆蓋在 Web 頁(yè)面之上。然后誘使用戶在不知情的情況下,點(diǎn)擊那個(gè)鏈接訪問(wèn)內(nèi)容的一種攻擊手段。這種行為又稱界面?zhèn)窝b (UI Redressing)。

5.3 Dos 攻擊
DoS 攻擊(Denial of Service attack)是一種讓運(yùn)行中的服務(wù)呈停止?fàn)顟B(tài)的攻擊。有時(shí)也叫做服務(wù)停止攻擊或拒絕服務(wù)攻擊。DoS 攻擊的對(duì)象不僅限于 Web 網(wǎng)站,還包括網(wǎng)絡(luò)設(shè)備及服務(wù)器等。
主要有以下兩種方式實(shí)現(xiàn) DoS 攻擊。
集中利用訪問(wèn)請(qǐng)求造成資源過(guò)載,資源用盡的同時(shí),實(shí)際上服務(wù)也就呈現(xiàn)停止?fàn)顟B(tài)
通過(guò)攻擊安全漏洞是服務(wù)停止

多臺(tái)計(jì)算機(jī)發(fā)起的 DoS 攻擊稱為 DDoS 攻擊(Distuibuted Denial of Service attack)。DDoS 攻擊通常利用那些感染病毒的計(jì)算機(jī)作為攻擊者的攻擊跳板。
5.4 后門程序
后門程序(Backdoor)是指開(kāi)發(fā)設(shè)置的隱藏入口,可不按正常步驟使用受限功能,利用后門程序就能夠使用原本受限制的功能。
通常的后門程序可分為以下 3 種類型。
開(kāi)發(fā)者為了自身利益植入的后門程序
攻擊者通過(guò)某種方法設(shè)置的后門程序
完結(jié)。


