老王是如何用TA的「身份證」,掏空TA的銀行儲蓄的?

聽說,老王最近手頭緊,萌生了歪念頭,要對好友的銀行賬戶 “下黑手”。只見三下五除二,好友的銀行賬戶上的 “全部家當” 被一掃而空,全數歸到老王的囊中。



老王是怎麼做到的?原來有一次,老友剛在電腦上登陸完網銀查詢賬戶餘額,老王就藉機以借錢為由,發給老友 “偽造” 的網銀頁面,誘騙好友點擊。而實際上這是一條帶有修改用戶密碼命令的惡意鏈接,銀行驗證通過了來自老友本地的 Cookie,密碼修改成功,轉賬就顯得順利成章了。


老王如此 “高手段”,其實是用了 CSRF(Cross-site Request Forgery),中文簡稱跨站請求偽造。簡單來說,CSRF 是通過第三方網站偽裝成正常用戶登錄目標網站,並以正常用戶的身份對用戶賬號進行操作,以達到目的。作為 WEB 端常見的攻擊方式,需要引起安全人員的重視,否則危害難以預料。


咱們來好好地理一理,CSRF 攻擊原理和防護策略。


CSRF 攻擊流程分析


結合一個修改用戶賬號密碼的實例進行分析。下圖是 CSRF 攻擊原理流程:

老王是如何用TA的“身份证”,掏空TA的银行储蓄的?

1、正常用戶在自己本地瀏覽器上訪問 WEB A 服務,並且輸入了自己的賬號密碼(如圖一),此時瀏覽器會提示是否保存賬號密碼,如果用戶點擊保存,就會在本地生成有關賬號信息的 cookie,這樣下次無需登錄即可訪問網站,這一招大大地便利了用戶操作,提高了用戶體驗。可是,這種便利反哺了 CSRF 攻擊,對全球 WEB 造成了極大的損失。


老王是如何用TA的“身份证”,掏空TA的银行储蓄的?

(圖一) 登陸頁面


Cookie 根據存放的位置可以分為兩種,Session Cookie(內存 Cookie) 和 Third-party Cookie(硬盤 Cookie)。內存 Cookie 在進程結束後即瀏覽器關閉後就會失效,而硬盤 Cookie 則需要用戶手動清除才會消失。


2、WEB A 服務器接受到正常用戶的請求,對賬號和密碼進行驗證通過,用戶登錄成功。


老王是如何用TA的“身份证”,掏空TA的银行储蓄的?

(圖二) 用戶登錄成功頁面


以上兩步,是用戶的正常操作,也是大家訪問並登錄網站的基本操作。通過上面的操作,生成了用戶賬號信息的 Cookie。


3.而就在此時,黑客可以通過在第三方網站 WEB B 設置一個指向 WEB A 的並帶有惡意命令的超鏈接,並將它隱藏在按鈕、表單等控件上。再通過社交工程學的方式引誘用戶點擊,而這個鏈接帶有的命令是可以修改用戶密碼。


老王是如何用TA的“身份证”,掏空TA的银行储蓄的?

(圖三) 用戶看到的 “正常” 按鈕


老王是如何用TA的“身份证”,掏空TA的银行储蓄的?

(圖四)按鈕隱藏下的修改密碼的命令


4、若用戶在並不知道該超鏈接的情況下對按鈕或表單進行了點擊,則用戶瀏覽器會帶著 Cookie 再次發出對 WEB A 的操作請求。若用戶之前登陸的 WEB A 未被關閉,則瀏覽器會攜帶 session Cookie。若 WEB A 已被關閉,則瀏覽器會攜帶 Third-party Cookie 發出請求,但某些瀏覽器會禁止表單,按鈕等標籤發送第三方 Cookie,如 IE,從而導致 CSRF 失敗。

5、WEB A 對此次請求進行驗證,由於 Cookie 無誤,所以請求操作被通過。此時密碼已經被修改,用戶無法登陸。如圖


老王是如何用TA的“身份证”,掏空TA的银行储蓄的?

(圖五) 用戶用原密碼登錄失敗


總結


一次 CSRF 攻擊成功實施,至少需要 4 個條件:


1. 被害用戶已經進行過 WEB 身份認證,並留有 Cookie


2. 新提交的請求無需重新進行身份認證或確認機制


3. 攻擊者瞭解 WEB 請求的參數構造


4. 通過社交工程學誘使用戶觸發攻擊的指令



CSRF 的 “兄弟”SSRF


說到 CSRF,就不得不提 SSRF,一種非常相似的攻擊方法。簡單介紹一下:


SSRF(Server-Side Request Forgery),被稱為服務器端偽造攻擊。如果把 CSRF 理解成客戶端偽造請求攻擊,其是利用用戶本地的 Cookie 騙過服務器端的驗證達到目的。而 SSRF 則是利用服務器天然能夠訪問內部網絡的特點,進行攻擊。


由此可以得出,SSRF 的受害對象主要是一些服務器所連接的一些內網設備,如內網的應用程序,通過 file 協議獲得內部網絡的資料等。SSRF 攻擊常見於一些允許以 URL 作為參數,且未對 URL 進行過濾的服務器。如下圖


老王是如何用TA的“身份证”,掏空TA的银行储蓄的?


該識圖網站允許以圖片 URL 作為參數傳入圖片,假如該網站服務器和它的內網相連,且缺少對傳入 URL 的過濾,那麼就可以以其內網網址為參數傳入,得到其內網網址上的內容。


老王是如何用TA的“身份证”,掏空TA的银行储蓄的?


如上圖。若 URL 是正常的第三方服務器,則 URL 會過濾通過。若 URL 是帶有命令操作的服務器端 A,且繞過了服務器端 A 的過濾,則服務器端 A 會執行 URL 帶有的命令,並將結果返回會客戶端,由此一次 SSRF 攻擊成功。


總結


一次成功的 SSRF 需要 2 個條件:


1. 攻擊者知道服務器端的內網地址


2. 服務器端未對請求 URL 進行過濾或過濾不完全


從以上我們可以得出,該漏洞產生的原因是由於服務端對資源進行請求的時候對 URL 的驗證出現了紕漏,所以我們的防護策略主要是圍繞 URL 的過濾。


1. 將 URL 進行解析轉化成 IP,並使用正則表達式表示內網網址,並以此進行 URL 過濾。


2. 建立 URL 白名單,只允許白名單上內容通過過濾。


3. 建立內網 IP 黑名單,阻止對該 IP 的請求。


4. 對返回內容進行過濾,減少敏感內容暴露。


5. 禁止不需要的協議,只允許 http 和 https 協議的請求,減少 file 等協議的問題。


分享到:


相關文章: