02.27 一文搞懂Web的攻擊技術


前言:

1、針對 Web的攻擊技術

1.1、HTTP 不具備必要的安全功能

1.2、在客戶端即可篡改請求

1.3、針對 Web 應用的攻擊模式


2、因輸出值轉義不完全引發的安全漏洞

2.1、跨站腳本攻擊(XSS和用戶Cookie攻擊)

2.2、SQL 注入攻擊

2.3、OS 命令注入攻擊

2.4、HTTP 首部注入攻擊

2.5、郵件首部注入攻擊

2.6、目錄遍歷攻擊

2.7、遠程文件包含漏洞

3、因設置或設計上的缺陷引發的安全漏洞

3.1、強制瀏覽

3.2、不正確的錯誤消息處理

3.3、開放重定向

4、因會話管理疏忽引發的安全漏洞

4.1、會話劫持

4.2、會話固定攻擊

4.3、跨站點請求偽造

5、其他安全漏洞

5.1、密碼破解

5.2、點擊劫持

5.3、DoS 攻擊

5.4、後門程序

互聯網上的攻擊大都將 Web 站點作為目標。本章講解具體有哪些攻擊 Web 站點的手段,以及攻擊會造成怎樣的影響。


1、針對 Web的攻擊技術

簡單的 HTTP 協議本身並不存在安全性問題,因此協議本身幾乎不會成為攻擊的對象。應用 HTTP 協議的服務器和客戶端,以及運行在服務器上的 Web 應用等資源才是攻擊目標。

目前,來自互聯網的攻擊大多是衝著 Web 站點來的,它們大多把Web 應用作為攻擊目標。本章主要針對 Web 應用的攻擊技術進行講解。


一文搞懂Web的攻擊技術

1.1 HTTP 不具備必要的安全功能

  • 從整體上看,HTTP 就是一個通用的單純協議機制。因此它具備較多優勢,但是在安全性方面則呈劣勢。
  • 就拿遠程登錄時會用到的 SSH 協議來說,SSH 具備協議級別的認證及會話管理等功能,HTTP 協議則沒有。另外在架設 SSH 服務方面,任何人都可以輕易地創建安全等級高的服務,而 HTTP 即使已架設好服務器,但若想提供服務器基礎上的 Web 應用,很多情況下都需要重新開發。
  • 因此,開發者需要自行設計並開發認證及會話管理功能來滿足 Web應用的安全。而自行設計就意味著會出現各種形形色色的實現。結果,安全等級並不完備,可仍在運作的 Web 應用背後卻隱藏著各種容易被攻擊者濫用的安全漏洞的 Bug。

1.2 在客戶端即可篡改請求

  • 在 Web 應用中,從瀏覽器那接收到的 HTTP 請求的全部內容,都可以在客戶端自由地變更、篡改。所以 Web 應用可能會接收到與預期數據不相同的內容。
  • 在 HTTP 請求報文內加載攻擊代碼,就能發起對 Web 應用的攻擊。
  • 通過 URL 查詢字段或表單、HTTP 首部、Cookie 等途徑把攻擊代碼傳入,若這時 Web 應用存在安全漏洞,那內部信息就會遭到竊取,或被攻擊者拿到管理權限。
一文搞懂Web的攻擊技術

1.3 針對 Web 應用的攻擊模式

對 Web 應用的攻擊模式有以下兩種。

  • 主動攻擊
  • 被動攻擊

a. 以服務器為目標的主動攻擊

  • 主動攻擊(active attack)是指攻擊者通過直接訪問 Web 應用,把攻擊代碼傳入的攻擊模式。由於該模式是直接針對服務器上的資源進行攻擊,因此攻擊者需要能夠訪問到那些資源。
  • 主動攻擊模式裡具有代表性的攻擊是 SQL 注入攻擊和 OS 命令注入攻擊。


一文搞懂Web的攻擊技術

b. 以服務器為目標的被動攻擊

  • 被動攻擊(passive attack)是指利用圈套策略執行攻擊代碼的攻擊模式。在被動攻擊過程中,攻擊者不直接對目標 Web 應用訪問發起攻擊。
  • 被動攻擊模式中具有代表性的攻擊是跨站腳本攻擊和跨站點請求偽造。


一文搞懂Web的攻擊技術

被動攻擊通常的攻擊模式如下所示。

步驟 1: 攻擊者誘使用戶觸發已設置好的陷阱,而陷阱會啟動發送已嵌入攻擊代碼的 HTTP 請求。

步驟 2: 當用戶不知不覺中招之後,用戶的瀏覽器或郵件客戶端就會觸發這個陷阱。

步驟 3: 中招後的用戶瀏覽器會把含有攻擊代碼的 HTTP 請求發送給作為攻擊目標的 Web 應用,運行攻擊代碼。

步驟 4: 執行完攻擊代碼,存在安全漏洞的 Web 應用會成為攻擊者的跳板,可能導致用戶所持的Cookie 等個人信息被竊取,登錄狀態中的用戶權限遭惡意濫用等後果。


c. 利用用戶的身份攻擊企業內部網絡

  • 利用被動攻擊,可發起對原本從互聯網上無法直接訪問的企業內網等網絡的攻擊。只要用戶踏入攻擊者預先設好的陷阱,在用戶能夠訪問到的網絡範圍內,即使是企業內網也同樣會受到攻擊。
  • 很多企業內網依然可以連接到互聯網上,訪問 Web 網站,或接收互聯網發來的郵件。這樣就可能給攻擊者以可乘之機,誘導用戶觸發陷阱後對企業內網發動攻擊。
一文搞懂Web的攻擊技術

2、因輸出值轉義不完全引發的安全漏洞

實施 Web 應用的安全對策可大致分為以下兩部分。

  • 客戶端的驗證
  • Web 應用端(服務器端)的驗證: 輸入值驗證 or 輸出值轉義
一文搞懂Web的攻擊技術

多數情況下采用 JavaScript 在客戶端驗證數據。可是在客戶端允許篡改數據或關閉 JavaScript,不適合將 JavaScript 驗證作為安全的防範對策。保留客戶端驗證只是為了儘早地辨識輸入錯誤,起到提高 UI體驗的作用。

Web 應用端的輸入值驗證按 Web 應用內的處理則有可能被誤認為是具有攻擊性意義的代碼。輸入值驗證通常是指檢查是否是符合系統業務邏輯的數值或檢查字符編碼等預防對策。

從數據庫或文件系統、HTML、郵件等輸出 Web 應用處理的數據之際,針對輸出做值轉義處理是一項至關重要的安全策略。當輸出值轉義不完全時,會因觸發攻擊者傳入的攻擊代碼,而給輸出對象帶來損害。

2.1 跨站腳本攻擊

跨站腳本攻擊的相關概念和知識:

  • 跨站腳本攻擊(Cross-Site Scripting,XSS)是指通過存在安全漏洞的Web 網站註冊用戶的瀏覽器內運行非法的 HTML 標籤或 JavaScript 進行的一種攻擊。
  • 動態創建的 HTML 部分有可能隱藏著安全漏洞。
  • 就這樣,攻擊者編寫腳本設下陷阱,用戶在自己的瀏覽器上運行時,一不小心就會受到被動攻擊。

跨站腳本攻擊有可能造成以下影響:

  • 利用虛假輸入表單騙取用戶個人信息。
  • 利用腳本竊取用戶的 Cookie 值,被害者在不知情的情況下,幫助攻擊者發送惡意請求。
  • 顯示偽造的文章或圖片。
  • 對用戶 Cookie 的竊取攻擊

2.2 SQL 注入攻擊

會執行非法 SQL 的 SQL 注入攻擊:

  • SQL 注入(SQL Injection)是指針對 Web 應用使用的數據庫,通過運行非法的 SQL 而產生的攻擊。該安全隱患有可能引發極大的威脅,有時會直接導致個人信息及機密信息的洩露。
  • Web 應用通常都會用到數據庫,當需要對數據庫表內的數據進行檢索或添加、刪除等操作時,會使用 SQL 語句連接數據庫進行特定的操作。如果在調用 SQL 語句的方式上存在疏漏,就有可能執行被惡意注入(Injection)非法 SQL 語句。

SQL 注入攻擊有可能會造成以下等影響。

  • 非法查看或篡改數據庫內的數據
  • 規避認證
  • 執行和數據庫服務器業務關聯的程序等

何為 SQL:

  • SQL 是用來操作關係型數據庫管理系統(Relational DataBase Management System,RDBMS)的數據庫語言,可進行操作數據或定義數據等。
  • RDBMS 中有名的數據庫有 Oracle Database、Microsoft SQL Server、IBM DB2、MySQL 和 PostgreSQL 等。這些數據庫系統都可以把 SQL 作為數據庫語言使用。
  • 使用數據庫的 Web 應用,通過某種方法將 SQL 語句傳給RDBMS,再把 RDBMS 返回的結果靈活地使用在 Web 應用中。

SQL 注入攻擊的原理:

  • SQL 注入是攻擊者將 SQL 語句改變成開發者意想不到的形式以達到破壞結構的攻擊。
  • 實際發生 SQL 注入攻擊時,很有可能會導致用戶信息或結算內容等其他數據表的非法瀏覽及篡改,從而使用戶遭受不同程度的損失。

2.3、OS 命令注入攻擊

OS 命令注入攻擊的相關概念:

  • OS 命令注入攻擊(OS Command Injection)是指通過 Web 應用,執行非法的操作系統命令達到攻擊的目的。只要在能調用 Shell 函數的地方就有存在被攻擊的風險。
  • 可以從 Web 應用中通過 Shell 來調用操作系統命令。倘若調用 Shell 時存在疏漏,就可以執行插入的非法 OS 命令。
  • OS 命令注入攻擊可以向 Shell 發送命令,讓 Windows 或 Linux 操作系統的命令行啟動程序。也就是說,通過 OS 注入攻擊可執行 OS 上安裝著的各種程序。

2.4、HTTP 首部注入攻擊

HTTP 首部注入攻擊的相關概念:

  • HTTP 首部注入攻擊(HTTP Header Injection)是指攻擊者通過在響應首部字段內插入換行,添加任意響應首部或主體的一種攻擊。屬於被動攻擊模式。
  • 向首部主體內添加內容的攻擊稱為 HTTP 響應截斷攻擊(HTTP Response Splitting Attack)。

HTTP 首部注入攻擊有可能會造成以下一些影響。

  • 設置任何 Cookie 信息
  • 重定向至任意 URL
  • 顯示任意的主體(HTTP 響應截斷攻擊)

2.5、郵件首部注入攻擊

郵件首部注入(Mail Header Injection)是指 Web 應用中的郵件發送功能,攻擊者通過向郵件首部 To 或 Subject 內任意添加非法內容發起的攻擊。利用存在安全漏洞的 Web 網站,可對任意郵件地址發送廣告郵件或病毒郵件。

2.6、目錄遍歷攻擊

目錄遍歷攻擊的相關概念:

  • 目錄遍歷(Directory Traversal)攻擊是指對本無意公開的文件目錄,通過非法截斷其目錄路徑後,達成訪問目的的一種攻擊。這種攻擊有時也稱為路徑遍歷(Path Traversal)攻擊。
  • 通過 Web 應用對文件處理操作時,在由外部指定文件名的處理存在疏漏的情況下,用戶可使用 .../ 等相對路徑定位到 /etc/passed 等絕對路徑上,因此服務器上任意的文件或文件目錄皆有可能被訪問到。這樣一來,就有可能非法瀏覽、篡改或刪除 Web 服務器上的文件。
  • 固然存在輸出值轉義的問題,但更應該關閉指定對任意文件名的訪問權限。

2.7、遠程文件包含漏洞

遠程文件包含漏洞(Remote File Inclusion)是指當部分腳本內容需要從其他文件讀入時,攻擊者利用指定外部服務器的 URL 充當依賴文件,讓腳本讀取之後,就可運行任意腳本的一種攻擊。

這主要是 PHP 存在的安全漏洞,對 PHP 的 include 或 require 來說,這是一種可通過設定,指定外部服務器的 URL 作為文件名的功能。


3、因設置或設計上的缺陷引發的安全漏洞

因設置或設計上的缺陷引發的安全漏洞是指,錯誤設置 Web 服務器,或是由設計上的一些問題引起的安全漏洞。

3.1、強制瀏覽

強制瀏覽(Forced Browsing)安全漏洞是指,從安置在 Web 服務器的公開目錄下的文件中,瀏覽那些原本非自願公開的文件。

強制瀏覽有可能會造成以下一些影響。

  • 洩露顧客的個人信息等重要情報
  • 洩露原本需要具有訪問權限的用戶才可查閱的信息內容
  • 洩露未外連到外界的文件

3.2、不正確的錯誤消息處理

不正確的錯誤消息處理(Error Handling Vulnerability)的安全漏洞是指,Web 應用的錯誤信息內包含對攻擊者有用的信息。

與 Web 應用有關的主要錯誤信息如下所示。

  • Web 應用拋出的錯誤消息
  • 數據庫等系統拋出的錯誤消息

Web 應用不必在用戶的瀏覽畫面上展現詳細的錯誤消息。對攻擊者來說,詳細的錯誤消息有可能給他們下一次攻擊以提示。

系統拋出的錯誤主要集中在以下幾個方面。

  • PHP 或 ASP 等腳本錯誤
  • 數據庫或中間件的錯誤
  • Web 服務器的錯誤

各系統應對詳細的錯誤消息進行抑制設定,或使用自定義錯誤消息,以避免某些錯誤信息給攻擊者以啟發。

3.3、開放重定向

開放重定向(Open Redirect)是一種對指定的任意 URL 作重定向跳轉的功能。而於此功能相關聯的安全漏洞是指,假如指定的重定向 URL到某個具有惡意的 Web 網站,那麼用戶就會被誘導至那個 Web 網站。


4、因會話管理疏忽引發的安全漏洞

會話管理是用來管理用戶狀態的必備功能,但是如果在會話管理上有所疏忽,就會導致用戶的認證狀態被竊取等後果。

4.1、會話劫持

會話劫持(Session Hijack)是指攻擊者通過某種手段拿到了用戶的會話 ID,並非法使用此會話 ID 偽裝成用戶,達到攻擊的目的。

具備認證功能的 Web 應用,使用會話 ID 的會話管理機制,作為管理認證狀態的主流方式。會話 ID 中記錄客戶端的 Cookie 等信息,服務器端將會話 ID 與認證狀態進行一對一匹配管理。

下面列舉了幾種攻擊者可獲得會話 ID 的途徑。

  • 通過非正規的生成方法推測會話 ID
  • 通過竊聽或 XSS 攻擊盜取會話 ID
  • 通過會話固定攻擊(Session Fixation)強行獲取會話 ID

4.2、會話固定攻擊

對以竊取目標會話 ID 為主動攻擊手段的會話劫持而言,會話固定攻擊(Session Fixation)攻擊會強制用戶使用攻擊者指定的會話 ID,屬於被動攻擊。

4.3、 跨站點請求偽造

跨站點請求偽造(Cross-Site Request Forgeries,CSRF)攻擊是指攻擊者通過設置好的陷阱,強制對已完成認證的用戶進行非預期的個人信息或設定信息等某些狀態更新,屬於被動攻擊。

跨站點請求偽造有可能會造成以下等影響。

  • 利用已通過認證的用戶權限更新設定信息等
  • 利用已通過認證的用戶權限購買商品
  • 利用已通過認證的用戶權限在留言板上發表言論


5、其他安全漏洞

5.1、密碼破解

密碼破解攻擊(Password Cracking)即算出密碼,突破認證。攻擊不僅限於 Web 應用,還包括其他的系統(如 FTP 或 SSH 等),本節將會講解對具備認證功能的 Web 應用進行的密碼破解。

密碼破解有以下兩種手段。

  • 通過網絡的密碼試錯
  • 對已加密密碼的破解(指攻擊者入侵系統,已獲得加密或散列處理的密碼數據的情況)

除去突破認證的攻擊手段,還有 SQL 注入攻擊逃避認證,跨站腳本攻擊竊取密碼信息等方法。

通過網絡進行密碼試錯

對 Web 應用提供的認證功能,通過網絡嘗試候選密碼進行的一種攻擊。主要有以下兩種方式。

  • 窮舉法
  • 字典攻擊

窮舉法

窮舉法(Brute-force Attack,又稱暴力破解法)是指對所有密鑰集合構成的密鑰空間(Keyspace)進行窮舉。即,用所有可行的候選密碼對目標的密碼系統試錯,用以突破驗證的一種攻擊。

窮舉法舉例:

比如銀行採用的個人識別碼是由“4 位數字”組成的密碼,那麼就要從 0000~9999 中的全部數字逐個進行嘗試。這樣一來,必定在候選的密碼集合中存在一個正確的密碼,可通過認證。

因為窮舉法會嘗試所有的候選密碼,所以是一種必然能夠破解密碼的攻擊。但是,當密鑰空間很龐大時,解密可能需要花費數年,甚至千年的時間,因此從現實角度考量,攻擊是失敗的。


字典攻擊

字典攻擊是指利用事先收集好的候選密碼(經過各種組合方式後存入字典),枚舉字典中的密碼,嘗試通過認證的一種攻擊手法。

與窮舉法相比,由於需要嘗試的候選密碼較少,意味著攻擊耗費的時間比較短。但是,如果字典中沒有正確的密碼,那就無法破解成功。因此攻擊的成敗取決於字典的內容。


一文搞懂Web的攻擊技術

利用別處洩露的 ID·密碼進行攻擊

字典攻擊中有一種利用其他 Web 網站已洩露的 ID 及密碼列表進行的攻擊。很多用戶習慣隨意地在多個 Web 網站使用同一套 ID 及密碼,因此攻擊會有相當高的成功幾率 1 。


對已加密密碼的破解

Web 應用在保存密碼時,一般不會直接以明文的方式保存,通過散列函數做散列處理或加 salt 的手段對要保存的密碼本身加密。

那即使攻擊者使用某些手段竊取密碼數據,如果想要真正使用這些密碼,則必須先通過解碼等手段,把加密處理的密碼還原成明文形式。


從加密過的數據中導出明文通常有以下幾種方法。

  • 通過窮舉法·字典攻擊進行類推
  • 彩虹表
  • 拿到密鑰


彩虹表

彩虹表(Rainbow Table)是由明文密碼及與之對應的散列值構成的一張數據庫表,是一種通過事先製作龐大的彩虹表,可在窮舉法 • 字典攻擊等實際破解過程中縮短消耗時間的技巧。從彩虹表內搜索散列值就可以推導出對應的明文密碼。

為了提高攻擊成功率,擁有一張海量數據的彩虹表就成了必不可少的條件。例如在 Free Rainbow Tables 網站上(http://www.freerainbowtables.com/en/tables2/)公佈的一張由大小寫字母及數字全排列的 1~8 位字符串對應的 MD5 散列值構成的彩虹表,其大小約為 1050 吉字節。


拿到密鑰

使用共享密鑰加密方式對密碼數據進行加密處理的情況下,如果能通過某種手段拿到加密使用的密鑰,也就可以對密碼數據解密了。


加密算法的漏洞

考慮到加密算法本身可能存在的漏洞,利用該漏洞嘗試解密也是一種可行的方法。但是要找到那些已廣泛使用的加密算法的漏洞,又談何容易,因此困難極大,不易成功。

而 Web 應用開發者獨立實現的加密算法,想必尚未經過充分的驗證,還是很有可能存在漏洞的。


5.2、點擊劫持

點擊劫持(Clickjacking)是指利用透明的按鈕或鏈接做成陷阱,覆蓋在 Web 頁面之上。然後誘使用戶在不知情的情況下,點擊那個鏈接訪問內容的一種攻擊手段。這種行為又稱為界面偽裝(UI

Redressing)。

已設置陷阱的 Web 頁面,表面上內容並無不妥,但早已埋入想讓用戶點擊的鏈接。當用戶點擊到透明的按鈕時,實際上是點擊了已指定透明屬性元素的 iframe 頁面。


5.3、DoS 攻擊

DoS 攻擊(Denial of Service attack)是一種讓運行中的服務呈停止狀態的攻擊。有時也叫做服務停止攻擊或拒絕服務攻擊。DoS 攻擊的對象不僅限於 Web 網站,還包括網絡設備及服務器等。

主要有以下兩種 DoS 攻擊方式。

  • 集中利用訪問請求造成資源過載,資源用盡的同時,實際上服務也就呈停止狀態。
  • 通過攻擊安全漏洞使服務停止。

其中,集中利用訪問請求的 DoS 攻擊,單純來講就是發送大量的合法請求。服務器很難分辨何為正常請求,何為攻擊請求,因此很難防止 DoS 攻擊。

一文搞懂Web的攻擊技術

多臺計算機發起的 DoS 攻擊稱為 DDoS 攻擊(Distributed Denial of Service attack)。DDoS 攻擊通常利用那些感染病毒的計算機作為攻擊者的攻擊跳板。


5.4、後門程序

後門程序(Backdoor)是指開發設置的隱藏入口,可不按正常步驟使用受限功能。利用後門程序就能夠使用原本受限制的功能。

通常的後門程序分為以下 3 種類型。

  • 開發階段作為 Debug 調用的後門程序
  • 開發者為了自身利益植入的後門程序
  • 攻擊者通過某種方法設置的後門程序

可通過監視進程和通信的狀態發現被植入的後門程序。但設定在 Web 應用中的後門程序,由於和正常使用時區別不大,通常很難發現。


分享到:


相關文章: