一、概述

CSRF(Cross-site Request Forgery:跨站請求偽造),利用受害者尚未失效的身份信息(cookie/會話),創建惡意的web頁面產生偽造請求,在受害者不知情的情況下,向服務器發送請求完成非法操作(增刪改查用戶信息或業務數據、轉賬、改密、評論、點關注、點贊等),對用戶和企業的數據安全造成了非常嚴重的威脅。本文從攻擊者的攻擊手法進行研究,站在攻擊者的角度研究CSRF攻擊,并同步給出了有效的阻擊方法,正所謂未知攻,焉知防。

CSRF攻擊原理如圖1所示。

圖1 漏洞原理圖

解讀:

1>User訪問存在CSRF漏洞的站點A

2>User登錄成功,在用戶瀏覽器中產生A的Cookie

3>User未登出網站A ,攻擊者設法 (點擊鏈接、xss方式) 讓受害者訪問自己的站點B

4>受害者中招訪問了攻擊者構造的站點B

5>攻擊者帶著User的Cookie發送偽造的請求給站點A(實現非法操作)

6>站點A檢測到為User的Cookie信息便執行了請求

7>攻擊者達到目的,一次CSRF攻擊完成。

針對CSRF,一般的防護做法是在后端添加“Referer”和“token”限制。如圖2、圖3所示。

圖2  添加Referer

圖3 添加Token

以上兩種傳統的防御方法雖然能夠在一定程度上防范CSRF攻擊,但攻擊者仍然有辦法來繞過這些限制,對用戶和企業的數據安全造成了非常嚴重的威脅。

二、CSRF的Bypass思路

CSRF Token Tracker 可以自動獲取Csrf-token,對于一些有Csrf 限制的請求,它可以繞過該限制。實戰攻防演

示如下:

1>安裝CSRF Token Tracker

圖4  Extender BApp Store-CSRF Token Tracker

自動獲取Csrf-token,如圖5、圖6。

圖5

圖6 同步token

修改成功,如圖7。

圖7  修改密碼成功

圖8 請求包中的TOKEN自動更新可在Logger中查看

Note: 這種方法是最簡單的,然而在如下場景并不適用。

②Define宏

1>現狀:

CSRF Token Tracker 在有些情況下也無法自動更新獲取CSRF-token。

圖9 Response:無效的CSRF token

2>Bypass思路:

配置過程:

圖10

圖11  選擇獲取token的請求

圖12 Response不再返回無效CsrfToken

三、阻擊方法

除去以上token校驗存在威脅的情況,還存在:

①token-置空令牌

原因:應用程序僅在token應用程序不為空的情況下檢查token

Bypass:刪除請求中的token令牌即可

②token-僅靜態驗證

原因:token令牌由靜態和動態兩部分組成,程序僅驗證靜態部分

Bypass: 刪除動態部分,僅用靜態部分繞過

③token-令牌易構造

原因:生成的token令牌過于簡單有規律可循

Bypass:研究令牌的生成方式,構造令牌進行繞過

因此想要徹底阻擊CSRF威脅需要使用雙因子認證,缺點是用戶體驗不友好,所以在一些關鍵敏感操作上建議使用雙因子認證來保護用戶和企業的數據安全。