CWE-352: CSRF漏洞有幾種常見型別?

zktq2021發表於2021-08-16

一、什麼是CSRF漏洞?

CSRF跨站請求偽造,主要表現為:攻擊者盜用了你的身份,以你的名義傳送惡意請求,對伺服器來說這個請求是完全合法的,但是卻完成了攻擊者所期望的一個操作,例如以你的名義傳送郵件或訊息,盜取你的賬號,新增系統管理員,甚至於購買商品、虛擬貨幣轉賬等。

CSRF現狀:CSRF這種攻擊方式在2000年已經被國外的安全人員提出,但在國內,直到06年才開始被關注,08年,國內外的多個大型社群和互動網站分別爆出CSRF漏洞,如:NYTimes.com、Metafilter(一個大型的BLOG網站),YouTube和百度。而現在,網際網路上的許多站點仍對此毫無防備,以至於安全業界稱CSRF為“沉睡的巨人”。

二、CSRF漏洞是如何攻擊的?

(1)受害者登入AA.com,並保留了登入憑證(Cookie)

(2)攻擊者引誘受害者訪問了BB.com

(3)BB.com 向 AA.com 傳送了一個請求:a.com/act=xx。瀏覽器會預設攜帶AA.com的Cookie

(4)AA.com接收到請求後,對請求進行驗證,並確認是受害者的憑證,誤以為是受害者自己傳送的請求

(5)AA.com以受害者的名義執行了act=xx

(6)攻擊完成,攻擊者在受害者不知情的情況下,冒充受害者,讓AA.com執行了自己定義的操作

三、幾種常見的CSRF:

(1)GET型別的CSRF

這類攻擊非常簡單,只需要一個HTTP請求:

<img src=””>

(2)POST型別的CSRF

這種型別的 CSRF 利用起來通常使用的是一個自動提交的表單,如:

<form action=" method=POST>

<input type="hidden" name="account" value="airing" />

<input type="hidden" name="amount" value="10000" />

<input type="hidden" name="for" value="hacker" /></form>

<script> document.forms[0].submit(); </script>

訪問該頁面後,表單會自動提交,相當於模擬使用者完成了一次 POST 操作。可見這種型別的 CSRF 與第一種一樣,都是模擬請求,所以後端介面也不能將安全寄託在僅允許 POST 請求上。

(3)連結型別的 CSRF

連結型別的CSRF並不常見,比起其他兩種使用者開啟頁面就中招的情況,這種型別需要使用者點選連結才會觸發,但本質上與前兩種一樣。這種型別通常是在論壇釋出的圖片中嵌入惡意連結,或者以廣告的形式誘導使用者中招,攻擊者通常會以比較誇張的詞語誘騙使用者點選,例如:

<a href=" taget="_blank"> <a/>

由於之前使用者登入了信任的網站A,並且儲存登入狀態,只要使用者主動訪問這個頁面,則表示攻擊成功。

四、如何防禦CSRF?

(1)驗證HTTP Referer欄位

Referer是HTTP頭中的一個欄位,記錄了 HTTP 請求的來源地址。這種方法的顯而易見的好處就是簡單易行,網站的普通開發人員不需要操心 CSRF 的漏洞,只需要在最後給所有安全敏感的請求統一增加一個攔截器來檢查Referer 的值就可以。特別是對於當前現有的系統,不需要改變系統的任何已有程式碼和邏輯,沒有風險,非常便捷。

然而,這種方法並非萬無一失。Referer 的值是由瀏覽器提供的,雖然 HTTP 協議上有明確的要求,但是每個瀏覽器對於 Referer 的具體實現可能有差別,並不能保證瀏覽器自身沒有安全漏洞。

(2)請求中新增token並驗證

token就是服務端返回給客戶端類似sessionid那樣一長串的類值(長是為了防暴力猜解)。 CSRF依賴於瀏覽器訪問連結時自動對應網站的cookie帶上,token不放cookie(一般form表單加個hidden屬性的input標籤來存放) CSRF就沒法獲取token,這樣我們就可以透過檢測傳送過來的資料包中是否有正確的token值來決定是否響應請求。

這種方法要比檢查 Referer 要安全一些,token 可以在使用者登陸後產生並放於 session 之中,然後在每次請求時把 token 從 session 中拿出,與請求中的 token 進行比對,但這種方法的難點在於如何把 token 以引數的形式加入請求。對於 GET 請求,token 將附在請求地址之後,這樣 URL 就變成 。 而對於 POST 請求來說,要在 form 的最後加上 ,這樣就可以把 token 以引數的形式加入請求了。另外還有一個問題就是怎麼保障token本身的儲存安全,不要被駭客截獲。

五、如何檢測出CSRF漏洞?

使用Wukong(悟空)軟體程式碼安全漏洞檢測修復工具,掃描網站原始碼,可以發現CSRF漏洞的注入點,如下圖所示:

“CSRF跨站偽造攻擊漏洞”在CWE中被編號為CWE-352: Cross-Site Request Forgery (CSRF)


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70000012/viewspace-2787110/,如需轉載,請註明出處,否則將追究法律責任。

相關文章