◆王保錦 林 卉 王健如 李桂青
跨站請求偽造攻擊技術淺析
◆王保錦 林 卉 王健如 李桂青
(山東曲阜師范大學(軟件學院) 山東 273100)
隨著WEB應用逐漸普及,這提升了用戶的使用體驗,但是隨之而來的安全漏洞時刻威脅著服務提供商與用戶,引起人們對網絡安全問題的關注。本文以“跨站”腳本201D攻擊為例,首先對CSRF攻擊技術的基本概念進行介紹,分析“跨站”請求偽造攻擊原理,復現攻擊場景,剖析該類漏洞的利用方法與觸發條件。根據“跨站”請求偽造攻擊的特點提出三種防御策略,為服務器安全體系結構的設計提供思路。
CSRF攻擊;Web應用;“跨站”腳本攻擊
近年來,作為網絡內容傳播和通訊載體的Web應用越來越多。在優化用戶體驗、提升工作效率的同時,也可能會帶來巨大的隱私泄露風險。本文通過使用相關檢測工具,模擬攻擊場景,評估漏洞風險。從對安全策略、攻擊方式的分析中總結經驗,為將來開發高效防御應用打下基礎。
CSRF(Cross Site Request Forgery),其攻擊的目的是偽造用戶請求,非法修改數據。受害者訪問并登錄存在CSRF漏洞的網站后,獲得服務器發送的身份信息,攜帶身份信息訪問攻擊者制作的攻擊頁面,攻擊頁面跨域向原網站提交請求,主流瀏覽器默認攜帶受害者的身份信息,存在CSRF漏洞的網站收到請求后,將執行攻擊者的請求。

圖1 CSRF攻擊流程
通過剖析安全策略以及瀏覽器對安全策略的執行程度,明確如何繞過安全策略,完成CSRF攻擊。在真實的應用場景中存在一些安全策略,如cookie策略、同源策略、“跨源”資源共享策略等。本節將對上述安全策略進行分析,找到可能觸發CSRF漏洞的部分條件。
同源策略(Same Origin Policy ,SOP),也稱為同域策略。瀏覽器的功能實現基于同源策略。同源策略是指一些動態腳本只被允許訪問與之同域名、協議、端口的資源。假設存在域:http://csrftest.com/dir/test.html (默認80端口),在HTML中,一些標簽的“src”屬性可以跨域請求資源,例如<iframe>、<img>、<svg>。這些標簽對資源的加載本質上是對目標資源發送的請求。另外,XMLHttpRequest(XHR)不能跨域請求資源,但它可以訪問同源的內容以及提交跨域請求,CSRF攻擊正是利用了該特性實施攻擊。
HTTP無法保存用戶狀態,為了提高用戶使用體驗,出現了cookie技術。cookie分為臨時cookie和本地cookie。臨時cookie在關閉瀏覽器后失效,而本地cookie會在到達響應頭中expires屬性[2]指定的時間后自動失效。主流瀏覽器如火狐,chrome等在進行跨域資源請求時默認允許攜帶第三方cookie,為CSRF攻擊創造了條件。
“跨源”資源共享(Cross Origin Resouce Sharing ,CORS)是W3C委員會在制定HTML5標準時,為了解決日益增多的“跨站資源請求而提出來的標準。CORS策略將請求分為簡單請求和非簡單請求[3]。
簡單請求:瀏覽器向網站A發起簡單請求,網站A根據自身設置的相關字段的值與請求附帶的相關值進行對比,判斷是否允許該請求。如果通過驗證會返回請求內容,否則“HTTP狀態碼”置為403。
非簡單請求:瀏覽器不會直接發送用戶的跨域請求,而是先發送請求方法為option的預先驗證請求,網站B接收到非簡單請求后,會通過對請求頭的相關字段進行驗證決定是否允許此跨域請求。如果驗證通過,則瀏覽器發送跨域請求,否則將“HTTP狀態碼”置為403。
但是CORS策略也存在安全問題。如果通過XHR對象將WithCredentials屬性的值設置為true,Content-Type字段的值設為“multi-part/form-data”的同時,服務器端將“Access-Control-Allow-Credentials”字段的值設置為true,則瀏覽器會攜帶cookie直接向服務器發送請求,為CSRF攻擊提供了條件。
通過模擬用戶操作進行抓包發現,請求方式為GET,攜帶cookie,可能存在CSRF攻擊。編寫攻擊頁面,其中,payload為 通過對目標網站分析,發現TOKEN作為其中一個input標簽的屬性值隱藏在了表單當中。同時,對留言板界面進行測試,發現如圖2所示XSS漏洞: 圖2 網站存在存儲型XSS漏洞 攻擊者首先在留言板寫入XSS代碼。當用戶訪問留言板時, XSS代碼自動獲取當前用戶token并向服務器發送請求。 請求頭中的referer字段表明了請求來源[4]。通過在服務器端添加對請求頭字段的驗證拒絕一切“跨站”請求。 通過觸發式、嵌入式、字符式驗證碼易于攔截“跨站”請求偽造攻擊。對敏感操作添加隨機驗證碼,驗證碼強制只有用戶與Web應用完成交互后才能實現正常的請求[5]。這種方法防范效率較高,但影響了用戶的使用體驗。 令牌(token)通常作為一種身份標識,如果來自瀏覽器請求中的token值與服務器發送給用戶的token不匹配或者請求中token不存在,則拒絕該請求。使用token驗證可以有效防止CSRF攻擊,優化了用戶體驗。但該方式增加了后端數據處理的工作量。 在HTTP的響應頭中,same-site有兩種值:strict或lax。當設置為strict時,則表明該服務器發送的cookie值不允許附帶在第三方請求中;當設置為lax時,如果請求類型為同步請求且請求方式為GET,則允許此cookie作為請求頭的附帶信息。將same-site的值設為strict可破壞產生CSRF攻擊的必要條件。 本文闡述了CSRF攻擊的概念、產生原因、場景以及常見的防御方法。在防范CSRF攻擊時,應選擇折中的方案,既要優化用戶體驗,又要考慮服務器性能,達到用戶體驗與服務器負載的平衡。用戶與網絡管理員應提高安全意識,避免遭到與XSS、社會工程學結合的CSRF攻擊。 [1]徐淑芳.服務器端CSRF防御研究[D].江西師范大學,2014. [2]陳萬坡.基于WEB應用程序技術的CSRF攻擊與防御技術[D].上海交通大學,2015. [3]Hosee.CORS與CSRF[EB/OL].https://my.oschin a.net/hosee/blog/903665,2017-5-18. [4]陳春艷.“跨站”請求偽造攻擊的基本原理與防范[J].電腦知識與技術,2014,10(05):902-904.3.2 基于TOKEN驗證的CSRF攻擊

4 “跨站”請求攻擊防御
4.1 請求頭驗證
4.2 驗證碼驗證
4.3 token驗證
4.4 same-site字段驗證
5 結束語