天天看點

看看有哪些 Web 攻擊技術.

一、前言

HTTP 協定具有無狀态、不連接配接、盡最大努力的特點,對于 Web 網站的攻擊基本也是針對 HTTP 協定的這些特點進行的。比如無狀态的特點,就要求開發者需要自行設計開發"認證"和"會話管理"功能來滿足 Web 應用的安全,而形形色色的自行實作,也為使用者會話劫持、SQL 注入等攻擊埋下了風險;而不連接配接的特點表示用戶端可以肆意的修改 HTTP 的請求内容,而服務端可能會接收到與預期資料不相同的内容。

Web 漏洞中,邏輯漏洞占比最大,邏輯漏洞是指由于程式邏輯不嚴或邏輯太複雜,導緻一些邏輯不能夠正常處理或處理錯誤,一般出現在支付金額、越權通路、資訊查詢、登陸認證等地方。邏輯漏洞很大的一部分原因是因為對代碼的不夠認真和對客戶的過于信任,比如傳回資料中包含使用者敏感資訊、登入認證存在撞庫風險等

看看有哪些 Web 攻擊技術.

技術漏洞攻擊指的是使用者通過一定的技術手段,利用攻擊代碼達到自己非法擷取資訊、身份僞裝等目的。技術漏洞攻擊可以分為主動攻擊和被動攻擊。

主動攻擊(active attack)是指攻擊者通過直接通路 Web 應用,把攻擊代碼植入的攻擊模式。具有代表性的攻擊是 SQL 注入攻擊和 OS 指令注入攻擊。

被動攻擊(passive attack)是指利用圈套政策執行攻擊代碼的攻擊模式,比如利用釣魚網站誘使使用者點選等。具有代表性的攻擊是跨站腳本攻擊(XSS)和跨站點請求僞造(CSRF)。

二、主動攻擊

1. SQL 注入

SQL注入(SQL Injection) 是指針對 Web 應用使用的資料庫,通過運作非法的 SQL 而産生的攻擊。簡單點來說,就是通過表單輸入的内容,誘使伺服器拼接成一個非法的 SQL。比如有一個正常的 SQL 語句如下:

SELECT * FROM user WHERE name='張三' and password = '123456'
           

正常情況下,使用者輸入使用者名“張三”和密碼“123456”(正常來說,密碼要 MD5 加密處理)完成認證過程。

假設使用者名輸入的使用者名是“張三'--”,我們來看看 SQL 會變成啥樣?SQL 語句中的 -- 之後全視為注釋,使用者就成功繞過了認證。

SELECT * FROM user WHERE name='張三'--' and password = '666666'
           

常見的預防 SQL 注入的手段就是 SQL 語句預編譯處理。

2. OS 指令注入攻擊

OS 指令注入攻擊(OS Command Injection)是指通過 Web 應用,執行非法的作業系統指令達到攻擊的目的。OS 指令注入攻擊可以向 Shell 發送指令,讓 Windows 或 Linux 作業系統的指令行啟動程式。也就是說,通過 OS 注入攻擊可執行 OS 上安裝着的各種程式。

OS 指令注入和 SQL 注入類似,SQL 注入僞造的是非法 SQL,OS 指令注入僞造的是非法 shell 指令。

常見的預防 OS 注入的手段是對 shell 執行的符号進行轉碼替換(比如 &&、&、| 等)。

3. Dos 攻擊

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

Dos 攻擊簡單點了解就是發送大量的合法請求,造成伺服器資源過載耗盡,進而使伺服器停止服務。(由于伺服器很難分辨何為正常請求,何為攻擊請求,是以很難防止 DoS 攻擊。)

為了形成足夠強大的流量,攻擊者往往沒有足夠的經濟實力購買機器,而是利用中病毒、木馬的機器組織流量攻擊。這些中病毒的機器,我們俗稱“殭屍電腦”。頂級的黑客往往控制着大量的殭屍電腦,一聲令下,殭屍電腦就開始瘋狂向目标發送網絡封包,直到打垮目标。因為殭屍電腦是分散在世界各地的,是以這種攻擊我們也稱為分布式拒絕服務攻擊(Distributed Denial-of-Service Attack, DDoS)。

DDoS 的種類有很多,手段也很複雜。

  • 直接不停發送 Ping 消息的,利用底層的 ICMP 協定,稱為ICMP 攻擊;
  • 走 UPD 協定的,稱為 UDP 洪水(UDP Flood);
  • 不停利用 TCP 協定發送 SYN 消息的,也叫 SYN 攻擊;
  • 模拟使用者行為,不停發帖、浏覽文章、浏覽網頁、加購物車等,稱為挑戰黑洞攻擊(Challenge Collapsar)。

當遇到 DDoS 攻擊的時候,如果有所準備,就可以做到有備無患。比如說購買了防火牆,防火牆會根據特征識别出攻擊行為,讓系統不會因為 DDoS 而過載造成崩潰。當然如果是純粹的流量攻擊,僅僅靠防火牆是不夠的。通常一些大型網際網路公司會進行異地災備,遇到 DDoS 可以考慮切換流量,也能起到一定作用。另外 CDN 在解決 DDoS 時往往也有很好的效果,畢竟 CDN 是大量緩存節點,DDoS 攻擊 CDN 的時候用不上力。

Dos 攻擊還可通過攻擊安全漏洞使服務停止。

三、被動攻擊

1. XSS 攻擊

跨站腳本攻擊(Cross-Site Scripting, XSS)是指通過在使用者的浏覽器内運作非法的 HTML 标簽或 JavaScript 向存在安全漏洞的 Web 網站進行的一種攻擊。攻擊者編寫腳本設下陷阱,使用者在自己的浏覽器上運作時,一不小心就會受到被動攻擊。

常見的 XSS 攻擊比如虛假輸入表單騙取使用者個人資訊、竊取使用者 Cookie 發送惡意請求 等。

常見的預防 XSS 攻擊的手段比如對 HTML 标簽、JavaScript 進行轉義處理、禁止 JavaScript 讀取 Cookie 等。

目前随着前端技術的發展,使用前端架構,比如 React 或 Vue 開發的頁面已經杜絕了被 XSS 的可能。但是有時候如果工作出現某些疏漏,還是會導緻 XSS 的發生。是以正确的做法是上線前拜托安全部門的同學協助進行一些針對 XSS 漏洞的掃描。

2. CSRF 攻擊

跨站點請求僞造(Cross-Site Request Forgeries,CSRF)攻擊是指攻擊者通過設定好的陷阱,強制對已完成認證的使用者進行非預期的個人資訊或設定資訊等某些狀态更新。

看看有哪些 Web 攻擊技術.

常見的預防 CSRF 攻擊的手段比如:驗證 Referer + POST 送出、增加 token 認證等。

3. HTTP 首部注入攻擊

HTTP 首部注入攻擊(HTTP Header Injection)是指攻擊者通過在響應首部字段内插入換行,添加任意響應首部或主體的一種攻擊。比如重定向至任意的 URL、替換掉要傳回的主體内容等。

比如存在某個需要重定向的頁面,本來的 header 資訊是這個樣子的:

Location: http://example.com/?cat=101
           

因為重定向需要帶回參數,攻擊者就誘使使用者在參數中加入攻擊代碼 —— 加入或替換任意的 header 資訊。(下面這個 Location 可能不會生效,不同的浏覽器對重複的 header 字段有不同的處理方式)

Location: http://example.com/?cat=101(%0D%0A:換行符)
Location: http://xxx.com
           

常見的預防 header 注入攻擊的方式就是添加 SSL/TLS 認證,也就是啟用 HTTPS。

4. 會話劫持攻擊

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

常見的預防會話劫持的手段比如:将會話 ID 和使用者裝置資訊綁定在一起,當使用者在其他裝置上使用該會話 ID 時,就會提示被盜用風險,要求使用者重新登入。

5. 中間人攻擊

中間人攻擊指的是:一些不法分子利用僞基站,比如找一個人多的地方,用自己的僞基站裝置僞裝成基站,向使用者提供網絡。一些離不法分子較近的人,手機可能會連接配接上僞基站。連接配接上後,不法分子的僞基站就成了你上網的代理,可以進行很多非法操作。是以,從這個角度看,中間人黑進你附近的網絡,成為你上網的“代理”,并不是非常難的一件事情。不懂技術的犯罪分子,通過購買僞基站裝置,就可以充當中間人。

在遇到中間人攻擊時,網際網路的信用體系、作業系統、浏覽器等就會幫你把好最後一關。

四、我們能做什麼?

  1. 輸入值驗證。檢查數值是否符合系統業務邏輯或檢查字元編碼,永遠不要相信使用者的輸入,注意不要依賴用戶端驗證,用戶端驗證的目的隻是為了盡早的辨識輸入錯誤,起到提高 UI 體驗的作用(用戶端驗證可被修改繞過)。
  2. 輸出值轉義。比如對 HTML 标簽、JavaScript 進行轉義處理再輸出,避免存在攻擊代碼。
  3. Web 應用不直接抛出異常,或謹慎輸出錯誤提示,防止被攻擊者利用。
  4. 敏感字段,比如密碼,進行加 salt 加密處理,防止被暴力破解(比如常見的 彩虹表)。
  5. 簽名認證,防止資料被篡改。用戶端設定簽名,服務端校驗簽名是否正确。
  6. 禁止開放重定向(Open Redirect)功能,防止被攻擊者選中并用來作為釣魚攻擊的跳闆。
  7. 涉及到登入口的地方,增加圖形驗證碼,防止爆破機器人。
  8. 上線前将一些測試接口或後門程式删除,避免被攻擊者利用。
  9. 不要将公司代碼傳到公共倉庫。

最後,網絡安全是高壓線,工作中不容忽視,需要你加倍小心,謹慎處理。這裡我囑咐你兩件事情:第一,技術崗位其實很容易違法,違法行為堅決不要做;第二,上線前要進行安全掃描,養成習慣。