CSRF和SSRF漏洞

CSRF漏洞簡介

CSRF(Cross-Site Request Forgery,跨站點僞造請求)是一種網絡攻擊方式,該攻擊可以在受害者毫不知情的情況下以受害者名義僞造請求發送給受攻擊站點,從而在未授權的情況下執行在權限保護之下的操作,具有很大的危害性。具體來講,可以這樣理解CSRF攻擊:攻擊者盜用了你的身份,以你的名義發送惡意請求,對服務器來說這個請求是完全合法的,但是卻完成了攻擊者所期望的一個操作,比如以你的名義發送郵件、發消息,盜取你的賬號,添加系統管理員,甚至於購買商品、虛擬貨幣轉賬等。CSRF攻擊方式並不爲大家所熟知,實際上很多網站都存在CSRF的安全漏洞。早在2000年,CSRF這種攻擊方式已經由國外的安全人員提出,但在國內,直到2006年纔開始被關注。2008年,國內外多個大型社區和交互網站先後爆出CSRF漏洞,如:百度HI、NYTimes.com(紐約時報)、Metafilter(一個大型的BLOG網站)和YouTube等。但直到現在,互聯網上的許多站點仍對此毫無防備,以至於安全業界稱CSRF爲“沉睡的巨人”,其威脅程度由此“美譽”便可見一斑。

攻擊原理

用戶登錄網站訪問一個正常的網頁後,在用戶未退出此網站時又打開了另一個惡意頁面,此頁面會返回一些攻擊性的代碼,併發送一個請求給用戶所登錄的正常頁面,正常頁面不知道是惡意頁面發送的請求,所以會根據用戶登錄的權限來執行惡意頁面的代碼。

CSRF攻擊分類

CSRF漏洞一般分爲站外和站內兩種類型。

CSRF站外類型

CSRF站外類型的漏洞本質上就是傳統意義上的外部提交數據問題。通常程序員會考慮給一些留言或者評論的表單加上水印以防止SPAM問題(這裏,SPAM可以簡單的理解爲垃圾留言、垃圾評論,或者是帶有站外鏈接的惡意回覆),但是有時爲了提高用戶的體驗性,可能沒有對一些操作做任何限制,所以攻擊者可以事先預測並設置請求的參數,在站外的Web頁面裏編寫腳本僞造文件請求,或者和自動提交的表單一起使用來實現GET、POST請求,當用戶在會話狀態下點擊鏈接訪問站外Web頁面,客戶端就被強迫發起請求。

CSRF站內類型

CSRF站內類型的漏洞在一定程度上是由於程序員濫用類變量造成的。在一些敏感的操作中(如修改密碼、添加用戶等),本來要求用戶從表單提交發起請求傳遞參數給程序,但是由於使用了REQUEST類變量造成的。在一些敏感的操作中(如修改密碼、添加用戶等),本來要求用戶從表單提交發起POST請求傳遞參數給程序,但是由於使用了_REQUEST等變量,程序除支持接收POST請求傳遞的參數外也支持接收GET請求傳遞的參數,這樣就會爲攻擊者使用CSRF攻擊創造條件。一般攻擊者只要把預測的請求參數放在站內一個貼子或者留言的圖片鏈接裏,受害者瀏覽了這樣的頁面就會被強迫發起這些請求。

CSRF漏洞防禦

CSRF漏洞防禦主要可以從三個層面進行,即服務端的防禦用戶端的防禦安全設備的防禦

服務端的防禦:
目前業界服務器端防禦CSRF攻擊主要有三種策略:驗證HTTP Referer字段,在請求地址中添加token並驗證,在HTTP頭中自定義屬性並驗證。

用戶端的防禦:
對於普通用戶來說,都學習並具備網絡安全知識以防禦網絡攻擊是不現實的。但若用戶養成良好的上網習慣,則能夠很大程度上減少CSRF攻擊的危害。例如,用戶上網時,不要輕易點擊網絡論壇、聊天室、即時通訊工具或電子郵件中出現的鏈接或者圖片;及時退出長時間不使用的已登錄賬戶,尤其是系統管理員,應儘量在登出系統的情況下點擊未知鏈接和圖片。除此之外,用戶還需要在連接互聯網的計算機上安裝合適的安全防護軟件,並及時更新軟件廠商發佈的特徵庫,以保持安全軟件對最新攻擊的實時跟蹤。

其他防禦手段:
1.CSRF攻擊是有條件的,當用戶訪問惡意鏈接時,認證的cookie仍然有效,所以當用戶關閉頁面時要及時清除認證cookie,對支持TAB模式(新標籤打開網頁)的瀏覽器尤爲重要。
2.儘量少用或不要用request()類變量,獲取參數指定request.form()還是request. querystring (),這樣有利於阻止CSRF漏洞攻擊,此方法只不能完全防禦CSRF攻擊,只是一定程度上增加了攻擊的難度。

SSRF漏洞簡介

SSRF(Sever-Side Request Forgery,服務器端請求僞造)是一種由攻擊者構造請求,由服務端發起請求的安全漏洞。一般情況下,SSRF攻擊的目標是外網無法訪問的內部系統(正因爲請求是由服務端發起的,所以服務端能請求到與自身相連而與外網隔離的內部系統)。

SSRF漏洞原理

SSRF形成的原因大都是由於服務端提供了從其他服務器應用獲取數據的功能,且沒有對目標地址做過濾與限制。例如,黑客操作服務端從指定URL地址獲取網頁文本內容,加載指定地址的圖片等,利用的是服務點的請求僞造。SSRF利用存在缺陷的Web應用作爲代理攻擊遠程和本地的服務器。
例: A網站,是一個所有人都可以訪問的外網網站,B網站是一個他們內部的網站。 所以,我們普通用戶只可以訪問a網站,不能訪問b網站。但是我們可以同過a網站做中間人,訪問b網站,從而達到攻擊b網站需求。

產生的原因

服務器端的驗證並沒有對其請求獲取數據的參數做出嚴格的過濾以及限制,導致對外的開放的網站可以從其他服務器的獲取數據

SSRF漏洞修復

1.過濾返回信息,驗證遠程服務器對請求的響應是比較容易的方法。如果web應用是去獲取某一種類型的文件。那麼在把返回結果展示給用戶之前先驗證返回的信息是否符合標準。
2.統一錯誤信息,避免用戶可以根據錯誤信息來判斷遠端服務器的端口狀態。
3.限制請求的端口爲http常用的端口,比如,80,443,8080,8090。
4.黑名單內網ip。避免應用被用來獲取獲取內網數據,攻擊內網。
5.禁用不需要的協議。僅僅允許http和https請求。可以防止類似於file:///、gopher://、ftp:// 等引起的問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章