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

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

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

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

CSRF攻擊流程分析

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

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

(圖一)登陸頁面

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

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

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

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

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

(圖三)用戶看到的「正常」按鈕

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

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

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

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

總結

一次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進行過濾的伺服器。如下圖

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

如上圖。若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等協議的問題。


推薦閱讀:
相关文章