Upload
hiiir-lab
View
581
Download
9
Embed Size (px)
Citation preview
Taien內部資安講座 III用戶端攻擊與防禦
2013.02.05 @ Hiiir Inc.
Taien Wang<[email protected]>
英屬維京群島商時間軸科技股份有限公司新創事業部
大綱
• 現有瀏覽器安全設計
• 跨網站腳本(XSS)
• 跨網站請求偽造(CSRF)
• 點擊綁架(ClickJacking)
• HTML5安全
• OWASP相關檢測項目
現有瀏覽器安全設計
• 沙盒
– 外掛程式獨立運行
• 跨網站腳本篩選器
• 惡意網站過濾
– SmartScreen
– 惡意程式列表
• PhishTank - http://www.phishtank.com/
• Google SafeBrowsing API -
https://developers.google.com/safe-browsing/
• 私密瀏覽
沙盒
• http://www.youtube.com/watch?feature=player_embedded&v=2
9e0CtgXZSI
跨網站腳本篩選器(1/2)
攻擊語法 <IMG SRC=“javascript:alert(document.cookie+', This XSS Attck');”>
跨網站腳本篩選器(2/2)
攻擊語法 index.php?get=<img src=“javascript:alert('xss')”>
惡意網站過濾
私密瀏覽
跨網站腳本(XSS)
• 維京百科
• 跨網站腳本(Cross-Site Scripting,通常簡稱為XSS或跨站指令碼或跨站指令碼攻擊)
是一種網站應用程式的安全漏洞攻擊,是代碼注入的一種。它允許惡意使用者將程式碼注
入到網頁上,其他使用者在觀看網頁時就會受到影響。這類攻擊通常包含了HTML以及使
用者端腳本語言
• XSS根據效果不同可以分兩種
– 反射型XSS(Reflected XSS),亦稱非持久型XSS(Non-Persistent XSS)
– 儲存型XSS(Stored XSS),亦稱持久型XSS(Persistent XSS)
– 跨站腳本DOM(DOM XSS)
• 本質上與反射型XSS相似,因歷史背景獨立提出
• 輸出到JavaScript或控制到HTML DOM元件
XSS攻擊測試字串
• OWASP Testing Guide v3
– 提供測試攻擊字串
攻擊利用方式(1/5)利用圖片
攻擊利用方式(2/5)用JavaScript發送POST,用DOM建立表單
攻擊利用方式(3/5)直接HTML建立表單
攻擊利用方式(4/5)AJAX 透過 XMLHttpRequest 發送 POST
攻擊利用方式(5/5)AJAX透過 jquery 發送 POST
繞過不完美的XSS防禦
• 利用字元編碼
• 繞過長度
– 如有兩個input可利用註解<!-- -->
– 利用事件(event)
– location.hash
• http://evil.com/index.html#alert(1)
• eval(location.hash.substr(1))
• 利用<base>綁架
• Window.name
實際案例(1/4)
實際案例(2/4)
實際案例(3/4)
實際案例(4/4)
• http://forum.eviloctal.com/thread-28299-1-1.html
JavaScript與Http除錯工具
• Firebug
• IE 8 Developer Tools
• Fiddler
• HttpWatch
• Firefox - Httpfox
XSS伺服器端防禦 - 需要防禦的地方(1/4)
• 在正確的地方採取正確的防禦
– MVC架構下在View處理資料淨化
– 無特別輸出HTML指定Header
• header('Content-Type: text/javascript; charset=utf-8');
• 設定HttpOnly
– ini_set("session.cookie_httponly", 1);
– session_set_cookie_params(0, NULL, NULL, NULL, TRUE);
– header("Set-Cookie: hidden=value; httpOnly");
• 伺服器輸出透過 JavaScript 輸出到 HTML 頁面必經之路
– document.write()
– document.writeln()
– xxx.innerHTML()
– xxx.outerHTML()
– innerHTML.replace()
– document.attachEvent()
– window.attachEvent()
– document.location.replace()
– document.location.assign()
– ...
XSS伺服器端防禦 - 需要防禦的地方(2/4)
• 其他地方
– 頁面中所有的inputs框
– window.location(href, hash等)
– window.name
– document.referer
– document.cookie
– localstorage
– XMLHttpRequest傳回的資料
– ...
XSS伺服器端防禦 - 過濾HTML(3/4)
• PHP
– htmlentities()
– htmlspecialchars()
– ESAPI http://code.google.com/p/owasp-esapi-php/
• HTML輸出: encodeForHTML, encodeForHTMLAttribute
• Script或事件輸入: encodeForJavaScript
• CSS輸出: encodeForCSS
• 網址輸出: encodeForURL
• Python
– cgi.escape()
• ASP
– Server.HTMLEncode()
• ASP.NET
– Server.HtmlEncode(), Microsoft Anti-Cross Site Scripting Library
• Java
– xssprotect
• Node.js
– node-validator
XSS伺服器端防禦 – Flash安全設定(4/4)
• 靜態
– 理論上沒有問題
• 動態指令檔
– allowNetworking
• all 允許所有網路通訊, 預設
• internal 不能與瀏覽器通訊如navigteToURL, 但可呼叫其他API
• none 禁止任何網路通訊
– allowScriptAccess, 定義flash能否與html溝通
• always 不限制
• sameDomain 同網域不限制, 預設
• never 都不行
XSS客戶端防禦
• 除了瀏覽器內建防禦
• 關閉JavaScript
• Firefox - NoScript
跨網站請求偽造(CSRF)
• 維京百科
• 跨網站請求偽造(Cross-site Request Forgery, CSRF)對於網站應用安全
一直是個嚴重的問題,即駭客利用網站對於合法使用者的信任,以合法使用
者的身分向網站發出偽造請求,並在使用者不知情的情況下執行一些惡意行
為,甚至執行駭客所指定的行為
Cookie類型
• Session Cookie
– 臨時Cookie
• Third-party Cookie
– 長期Cookie或本機Cookie
– Http Header: Set-Cookie
瀏覽器的原則
• 主流瀏覽器預設攔截Third-party Cookie
– IE6, IE7, IE8, Safari
• 不會攔截的
– Firefox 2, Firefox 3, Opera, Chrome, Android
• 可能造成預設攔截失效
– P3P Header
• W3C 制定的一項隱私標準, 全名為 The Platform for Privacy
Perferebces
實際案例
Google使用while(1);防禦CRSF?
CSRF防禦
• 根本原因
– CSRF之所以可以成功, 最重要的原因是所有參數可以被攻擊者猜測到的
• 防禦方法
– 驗證碼
– Referer Check
– Anti CSRF Token
• Token不是為了重複傳送, 因此為了使用方便可以允許在一個使用者的有效生命
週期內, 在token消耗掉前都用同一個token
• 避免出現在頁面的 URL 中, 以防透過 referer 方式洩漏
– 敏感操作盡量避免 GET, 改採 POST
• 但如果網站有XSS弱點CSRF Token會變得無效, 此類搭配攻擊稱為XSRF
ClickJacking
• 2008年
– Robert Hansen與Jeremiah Grossman發現了點擊綁架攻擊(ClickJacking)
• 之後相關攻擊
– Html ClickJacking
– Flash ClickJacking
– Cross Site Image Overlaying(圖片覆蓋攻擊)
– 拖曳綁架與資料竊取
• Next Generation Clickjacking
• 瀏覽器拖曳拖曳, 不受相同來源策略限制
• Paul Stone, BlackHat 2010
– TapJacking(觸摸螢幕綁架)
HTML ClickJacking
更多實際案例
Flash ClickJacking
• http://guya.net/security/clickjacking/game.html
• http://www.youtube.com/watch?v=gxyLbpldmuU
Cross Site Image Overlaying(圖片覆蓋攻擊)
• http://www.informit.com/blogs/blog.aspx?uk=XSIO--Cross-site-
Image-Overlay-A-discussion-and-example
TapJacking
ClickJacking防禦
• JavaScript: frame busting
– 可被繞過
• Http Header: X-Frame-Options
– DENY: 完全拒絕
– SAMEORIGIN: 相同來源
– ALLOW-FROM: 允許自訂可載入頁面
– 使用方式
1. 程式輸入header('X-FRAME-OPTIONS: DENY');
2. Web server設定
HTML5安全
• HTML新標籤
– XSS防禦趕不上進度<vedio>
• Iframe沙盒的政策
– allow-same-origin: 允許同來源存取
– allow-top-navigation: 允許存取頂層視窗
– allow-forms: 允許傳送表單
– allow-scripts: 允許執行指令碼
• noreferrer
– 解決了CSRF referrer洩漏問題
• 其他安全問題
– Cross-Origin Resource Sharing
– 跨視窗傳遞
– Web Storage
弱點揭露
• Exploits Database by Offensive Security
• Metasploit
• WooYun.org
項目編號 項目 說明
OWASP-AT-006 記住密碼與密碼重置弱點測試
可透過AUTOCOMPLETE=“off”標籤屬性避免紀錄
OWASP-SM-001 連線管理模式測試 是否是在安全和非預知的情況下產生cookies和其他連線驗證碼?
OWASP-SM-002 Cookies屬性測試 Cookies是否設定Secure、HttpOnly、Domain與是否可竄改取得更高權限?
OWASP-SM-003 連線固定測試 在連線固定狀況下,是否可利用該弱點挾持用戶連線?
OWASP-SM-004 連線變數洩漏測試 連線ID(SessionID)是否加密?如無是否利用HTTPS保護?
OWASP-SM-005 CSRF測試 攻擊者是否可在用戶登入後暗中進行其他操作?
OWASP-AZ-002 繞過授權模式測試 是否可不經過驗證取得隱藏功能?
OWASP-AZ-003 權限提升測試 用戶是否可透過權限提升攻擊不經過正常管道提升權限?
OWASP-DV-001 跨站腳本反射測試 Reflected XSS
OWASP-DV-002 跨站腳本儲存測試 Stored XSS
OWASP-DV-003 跨站腳本DOM測試 DOM XSS
OWASP-DV-004 Flash跨站測試 Cross Site Flashing
參考資料
• 吳翰清, 網路竟然這麼危險(白帽子讲Web安全), 2012
• IE 8 XSS Filter Architecture / Implementation
• 跨網站指令碼
• 跨網站的偽造要求(CSRF)
• OWASP, OWASP Testing Guide v3
• OWASP, OWASP Enterprise Security API
• OWASP, OWASP Secure Coding Practices
• Gustav Rydstedt, Elie Bursztein, Dan Boneh, and Collin Jackson, "Busting
frame busting: a study of clickjacking vulnerabilities at popular sites"
• Gustav Rydstedt, Elie Bursztein, and Dan Boneh, "raming Attacks on Smart
Phones and Dumb Routers: Tap-jacking and Geo-localization“
• HTML5 Security Cheatsheet