1. 程式人生 > >WEB攻擊之 CSRF 攻擊及防禦策略

WEB攻擊之 CSRF 攻擊及防禦策略

介紹

  1. 是一種挾制使用者在當前已登入的Web應用程式上執行非本意的操作的攻擊方法。
    1. 釋義: 跨站請求攻擊,簡單地說,是攻擊者通過一些技術手段欺騙使用者的瀏覽器去訪問一個自己曾經認證過的網站並執行一些操作(如發郵件,發訊息,甚至財產操作如轉賬和購買商品)。由於瀏覽器曾經認證過,所以被訪問的網站會認為是真正的使用者操作而去執行。這利用了web中使用者身份驗證的一個漏洞:簡單的身份驗證只能保證請求發自某個使用者的瀏覽器,卻不能保證請求本身是使用者自願發出的。
  2. 特點: 跟跨網站指令碼(XSS)相比,XSS 利用的是使用者對指定網站的信任,CSRF 利用的是網站對使用者網頁瀏覽器的信任。
    1. 釋義: 不獲取使用者的資訊,不獲取使用者的賬戶控制權,欺騙使用者瀏覽器,以使用者的名義執行操作。
    2. 開啟莫名的網站,載入莫名的內容。
  3. 區別: 跟跨網站指令碼(XSS)相比,XSS 利用的是使用者對指定網站的信任,CSRF 利用的是網站對使用者網頁瀏覽器的信任。

攻擊特點

  1. 傳送請求。
    1. get
    2. post
    3. 常常跨域,或本域則更危險
      1. CSRF 攻擊通常是由其他域發起的請求,所以可以通過限制 發起域 來防範大多數的 CSRF 攻擊。
      2. 本域下有容易被利用的功能,比如可以發圖和連結的論壇和評論區,攻擊可以直接在本域下進行,而且這種攻擊更加危險。
  2. 考慮物件:
    1. 將內容載入你使用者的瀏覽器並迫使他們向你的網站提交請求的任何人。你的使用者所訪問的任何網站或者HTML 源(feed)都可以這樣做。
    2. 攻擊者建立偽造HTTP請求並通過圖片標籤、跨站指令碼或許多其他技術誘使受害使用者提交這些請求。如果該受害使用者已經經過身份認證,那麼攻擊就能成功。
  3. 方式
    1. 圖片
    2. 連結
    3. 表單提交

攻擊結果

  1. 攻擊者能欺騙受害使用者完成該受害者所允許的任意狀態改變的操作,比如:更新帳號細節,完成購物,登出甚至登入等操作 。

案例

  1. 2007 年的Gmail 曾被黑客利用 CSRF 攻擊。

攻擊預防

  1. 將持久化的授權方法(例如cookie或者HTTP授權)切換為瞬時的授權方法(在每個form中提供隱藏field),這將幫助網站防止這些攻擊。一種類似的方式是在form中包含祕密資訊、使用者指定的代號作為cookie之外的驗證。
  2. 雙提交”cookie。此方法只工作於Ajax請求,但它能夠作為無需改變大量form的全域性修正方法。如果某個授權的cookie在form post之前正被JavaScript程式碼讀取,那麼限制跨域規則將被應用。如果伺服器需要在Post請求體或者URL中包含授權cookie的請求,那麼這個請求必須來自於受信任的域,因為其它域是不能從信任域讀取cookie的。
  3. 檢查Referer欄位:HTTP頭中有一個Referer欄位,這個欄位用以標明請求來源於哪個地址。在處理敏感資料請求時,通常來說,Referer欄位應和請求的地址位於同一域名下。
  4. 檢查 Origin Header 欄位值。
  5. 新增校驗token:由於CSRF的本質在於攻擊者欺騙使用者去訪問自己設定的地址,所以如果要求在訪問敏感資料請求時,要求使用者瀏覽器提供不儲存在cookie中,並且攻擊者無法偽造的資料作為校驗,那麼攻擊者就無法再執行CSRF攻擊。這種資料通常是窗體中的一個數據項。伺服器將其生成並附加在窗體中,其內容是一個偽隨機數。當客戶端通過窗體提交請求時,這個偽隨機數也一併提交上去以供校驗。正常的訪問時,客戶端瀏覽器能夠正確得到並傳回這個偽隨機數,而通過CSRF傳來的欺騙性攻擊中,攻擊者無從事先得知這個偽隨機數的值,服務端就會因為校驗token的值為空或者錯誤,拒絕這個可疑請求。
  6. 防止CSRF攻擊的辦法已經有上面的預防措施。為了從源頭上解決這個問題,Google起草了一份草案來改進HTTP協議,那就是為Set-Cookie響應頭新增Samesite屬性,它用來標明這個 Cookie是個“同站 Cookie”,同站Cookie只能作為第一方Cookie,不能作為第三方Cookie。

攻擊檢測

  1. 通過滲透測試或程式碼分析檢測到。
  2. 通過 CSRFTester 進行檢測。

CSRF 監控

  1. 通過請求IP, 以及Token 驗證,當Token 不符合我們的要求時,便可以將 IP 通過日誌記錄下來,作為可能的 CSRF 攻擊進行處理。。