Taien內部資安講座 III
      用戶端攻擊與防禦
        2013.02.05 @ Hiiir Inc.
  Taien Wang<taien_wang@hiiir.com>
英屬維京群島商時間軸科技股份有限公司新創事業部
大綱

•   現有瀏覽器安全設計

•   跨網站腳本(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

用戶端攻擊與防禦

  • 1.
    Taien內部資安講座 III 用戶端攻擊與防禦 2013.02.05 @ Hiiir Inc. Taien Wang<taien_wang@hiiir.com> 英屬維京群島商時間軸科技股份有限公司新創事業部
  • 2.
    大綱 • 現有瀏覽器安全設計 • 跨網站腳本(XSS) • 跨網站請求偽造(CSRF) • 點擊綁架(ClickJacking) • HTML5安全 • OWASP相關檢測項目
  • 3.
    現有瀏覽器安全設計 • 沙盒 – 外掛程式獨立運行 • 跨網站腳本篩選器 • 惡意網站過濾 – SmartScreen – 惡意程式列表 • PhishTank - http://www.phishtank.com/ • Google SafeBrowsing API - https://developers.google.com/safe-browsing/ • 私密瀏覽
  • 4.
    沙盒 • http://www.youtube.com/watch?feature=player_embedded&v=2 9e0CtgXZSI
  • 5.
    跨網站腳本篩選器(1/2) 攻擊語法 <IMG SRC=“javascript:alert(document.cookie+', This XSS Attck');”>
  • 6.
    跨網站腳本篩選器(2/2) 攻擊語法 index.php?get=<img src=“javascript:alert('xss')”>
  • 7.
  • 8.
  • 9.
    跨網站腳本(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元件
  • 10.
    XSS攻擊測試字串 • OWASP Testing Guide v3 – 提供測試攻擊字串
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
    繞過不完美的XSS防禦 • 利用字元編碼 • 繞過長度 – 如有兩個input可利用註解<!-- --> – 利用事件(event) – location.hash • http://evil.com/index.html#alert(1) • eval(location.hash.substr(1)) • 利用<base>綁架 • Window.name
  • 17.
  • 18.
  • 19.
  • 20.
    實際案例(4/4) • http://forum.eviloctal.com/thread-28299-1-1.html
  • 21.
    JavaScript與Http除錯工具 • Firebug • IE 8 Developer Tools • Fiddler • HttpWatch • Firefox - Httpfox
  • 22.
    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() – ...
  • 23.
    XSS伺服器端防禦 - 需要防禦的地方(2/4) • 其他地方 – 頁面中所有的inputs框 – window.location(href, hash等) – window.name – document.referer – document.cookie – localstorage – XMLHttpRequest傳回的資料 – ...
  • 24.
    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
  • 25.
    XSS伺服器端防禦 – Flash安全設定(4/4) • 靜態 – 理論上沒有問題 • 動態指令檔 – allowNetworking • all 允許所有網路通訊, 預設 • internal 不能與瀏覽器通訊如navigteToURL, 但可呼叫其他API • none 禁止任何網路通訊 – allowScriptAccess, 定義flash能否與html溝通 • always 不限制 • sameDomain 同網域不限制, 預設 • never 都不行
  • 26.
    XSS客戶端防禦 • 除了瀏覽器內建防禦 • 關閉JavaScript • Firefox - NoScript
  • 27.
    跨網站請求偽造(CSRF) • 維京百科 • 跨網站請求偽造(Cross-site Request Forgery, CSRF)對於網站應用安全 一直是個嚴重的問題,即駭客利用網站對於合法使用者的信任,以合法使用 者的身分向網站發出偽造請求,並在使用者不知情的情況下執行一些惡意行 為,甚至執行駭客所指定的行為
  • 28.
    Cookie類型 • Session Cookie – 臨時Cookie • Third-party Cookie – 長期Cookie或本機Cookie – Http Header: Set-Cookie
  • 29.
    瀏覽器的原則 • 主流瀏覽器預設攔截Third-party Cookie – IE6, IE7, IE8, Safari • 不會攔截的 – Firefox 2, Firefox 3, Opera, Chrome, Android • 可能造成預設攔截失效 – P3P Header • W3C 制定的一項隱私標準, 全名為 The Platform for Privacy Perferebces
  • 30.
  • 31.
  • 32.
    CSRF防禦 • 根本原因 – CSRF之所以可以成功, 最重要的原因是所有參數可以被攻擊者猜測到的 • 防禦方法 – 驗證碼 – Referer Check – Anti CSRF Token • Token不是為了重複傳送, 因此為了使用方便可以允許在一個使用者的有效生命 週期內, 在token消耗掉前都用同一個token • 避免出現在頁面的 URL 中, 以防透過 referer 方式洩漏 – 敏感操作盡量避免 GET, 改採 POST • 但如果網站有XSS弱點CSRF Token會變得無效, 此類搭配攻擊稱為XSRF
  • 33.
    ClickJacking • 2008年 – Robert Hansen與Jeremiah Grossman發現了點擊綁架攻擊(ClickJacking) • 之後相關攻擊 – Html ClickJacking – Flash ClickJacking – Cross Site Image Overlaying(圖片覆蓋攻擊) – 拖曳綁架與資料竊取 • Next Generation Clickjacking • 瀏覽器拖曳拖曳, 不受相同來源策略限制 • Paul Stone, BlackHat 2010 – TapJacking(觸摸螢幕綁架)
  • 34.
  • 35.
  • 36.
    Flash ClickJacking • http://guya.net/security/clickjacking/game.html • http://www.youtube.com/watch?v=gxyLbpldmuU
  • 37.
    Cross Site ImageOverlaying(圖片覆蓋攻擊) • http://www.informit.com/blogs/blog.aspx?uk=XSIO--Cross-site- Image-Overlay-A-discussion-and-example
  • 38.
  • 39.
    ClickJacking防禦 • JavaScript: frame busting – 可被繞過 • Http Header: X-Frame-Options – DENY: 完全拒絕 – SAMEORIGIN: 相同來源 – ALLOW-FROM: 允許自訂可載入頁面 – 使用方式 1. 程式輸入header('X-FRAME-OPTIONS: DENY'); 2. Web server設定
  • 40.
    HTML5安全 • HTML新標籤 – XSS防禦趕不上進度<vedio> • Iframe沙盒的政策 – allow-same-origin: 允許同來源存取 – allow-top-navigation: 允許存取頂層視窗 – allow-forms: 允許傳送表單 – allow-scripts: 允許執行指令碼 • noreferrer – 解決了CSRF referrer洩漏問題 • 其他安全問題 – Cross-Origin Resource Sharing – 跨視窗傳遞 – Web Storage
  • 41.
    弱點揭露 • Exploits Database by Offensive Security • Metasploit • WooYun.org
  • 42.
    項目編號 項目 說明 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
  • 43.
    參考資料 • 吳翰清, 網路竟然這麼危險(白帽子讲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