1 / 106

HTML5 時代の Web セキュリティ

HTML5 時代の Web セキュリティ. Jul 21 2012 Yosuke HASEGAWA. 自己紹介. はせがわようすけ ネットエージェント株式会社 株式会社セキュアスカイ・テクノロジー 技術顧問 Microsoft MVP for Consumer Security Oct 2005 - http://utf-8.jp/ セキュリティキャンプ Web セキュリティクラス講師. これまでに調べた脆弱性. Web ブラウザ、 Web アプリケーションを中心にいろいろ … CVE-2007-0995 XSS of Mozilla Firefox

woods
Download Presentation

HTML5 時代の Web セキュリティ

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. HTML5時代のWebセキュリティ Jul 21 2012 Yosuke HASEGAWA

  2. 自己紹介 はせがわようすけ • ネットエージェント株式会社 • 株式会社セキュアスカイ・テクノロジー 技術顧問 • Microsoft MVP for Consumer Security Oct 2005 - • http://utf-8.jp/ • セキュリティキャンプ Webセキュリティクラス講師

  3. これまでに調べた脆弱性 • Webブラウザ、Webアプリケーションを中心にいろいろ… • CVE-2007-0995 XSS of Mozilla Firefox • CVE-2007-1262 XSS of SquirrelMail • CVE-2007-2227 XSS of Internet Explorer • CVE-2008-0416 XSS of Mozilla Firefox • CVE-2008-1468 XSS of Namazu • CVE-2008-5808 XSS of Movable Type • CVE-2010-1213 Cross-origin data disclosure of Mozilla Firefox • CVE-2010-3348 Cross-origin data disclosure of Internet Explorer • CVE-2010-3770 XSS of Mozilla Firefox • CVE-2011-1339 XSS of Google Search Appliance • CVE-2011-3384 XSS of Sage • CVE-2011-3648 XSS of Mozilla Firefox ...

  4. 難読化 JavaScriptObfuscated JavaScript

  5. $=~[];$={___:++$,$$$$:(![]+"")[$],__$:++$,$_$_:(![]+"")[$],_$_:++$,$_$$:({}+"")[$],$$_$:($[$]+"")[$],_$$:++$,$$$_:(!""+"")[$],$__:++$,$_$:++$,$$__:({}+"")[$],$$_:++$,$$$:++$,$___:++$,$__$:++$};$.$_=($.$_=$+"")[$.$_$]+($._$=$.$_[$.__$])+($.$$=($.$+"")[$.__$])+((!$)+"")[$._$$]+($.__=$.$_[$.$$_])+($.$=(!""+"")[$.__$])+($._=(!""+"")[$._$_])+$.$_[$.$_$]+$.__+$._$+$.$;$.$$=$.$+(!""+"")[$._$$]+$.__+$._+$.$+$.$$;$.$=($.___)[$.$_][$.$_];$.$($.$($.$$+"\""+$.$_$_+(![]+"")[$._$_]+$.$$$_+"\\"+$.__$+$.$$_+$._$_+$.__+"(\\\"\\"+$.__$+$.__$+$.___+$.$$$_+(![]+"")[$._$_]+(![]+"")[$._$_]+$._$+",\\"+$.$__+$.___+"\\"+$.__$+$.__$+$._$_+$.$_$_+"\\"+$.__$+$.$$_+$.$$_+$.$_$_+"\\"+$.__$+$._$_+$._$$+$.$$__+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$$_+$.___+$.__+"\\\"\\"+$.$__+$.___+")"+"\"")())();$=~[];$={___:++$,$$$$:(![]+"")[$],__$:++$,$_$_:(![]+"")[$],_$_:++$,$_$$:({}+"")[$],$$_$:($[$]+"")[$],_$$:++$,$$$_:(!""+"")[$],$__:++$,$_$:++$,$$__:({}+"")[$],$$_:++$,$$$:++$,$___:++$,$__$:++$};$.$_=($.$_=$+"")[$.$_$]+($._$=$.$_[$.__$])+($.$$=($.$+"")[$.__$])+((!$)+"")[$._$$]+($.__=$.$_[$.$$_])+($.$=(!""+"")[$.__$])+($._=(!""+"")[$._$_])+$.$_[$.$_$]+$.__+$._$+$.$;$.$$=$.$+(!""+"")[$._$$]+$.__+$._+$.$+$.$$;$.$=($.___)[$.$_][$.$_];$.$($.$($.$$+"\""+$.$_$_+(![]+"")[$._$_]+$.$$$_+"\\"+$.__$+$.$$_+$._$_+$.__+"(\\\"\\"+$.__$+$.__$+$.___+$.$$$_+(![]+"")[$._$_]+(![]+"")[$._$_]+$._$+",\\"+$.$__+$.___+"\\"+$.__$+$.__$+$._$_+$.$_$_+"\\"+$.__$+$.$$_+$.$$_+$.$_$_+"\\"+$.__$+$._$_+$._$$+$.$$__+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$$_+$.___+$.__+"\\\"\\"+$.$__+$.___+")"+"\"")())(); 記号JavaScript JS without alnum jjencode - http://utf-8.jp/public/jjencode.html

  6. ゚ω゚ノ= /`m´)ノ ~┻━┻ //*´∇`*/ ['_']; o=(゚ー゚) =_=3; c=(゚Θ゚) =(゚ー゚)-(゚ー゚); (゚Д゚) =(゚Θ゚)= (o^_^o)/ (o^_^o);(゚Д゚)={゚Θ゚: '_' ,゚ω゚ノ : ((゚ω゚ノ==3) +'_') [゚Θ゚] ,゚ー゚ノ :(゚ω゚ノ+ '_')[o^_^o - (゚Θ゚)] ,゚Д゚ノ:((゚ー゚==3) +'_')[゚ー゚] }; (゚Д゚) [゚Θ゚] =((゚ω゚ノ==3) +'_') [c^_^o];(゚Д゚) ['c'] = ((゚Д゚)+'_') [ (゚ー゚)+(゚ー゚)-(゚Θ゚) ];(゚Д゚) ['o'] = ((゚Д゚)+'_') [゚Θ゚];(゚o゚)=(゚Д゚) ['c']+(゚Д゚) ['o']+(゚ω゚ノ +'_')[゚Θ゚]+ ((゚ω゚ノ==3) +'_') [゚ー゚] + ((゚Д゚) +'_') [(゚ー゚)+(゚ー゚)]+ ((゚ー゚==3) +'_') [゚Θ゚]+((゚ー゚==3) +'_') [(゚ー゚) - (゚Θ゚)]+(゚Д゚) ['c']+((゚Д゚)+'_') [(゚ー゚)+(゚ー゚)]+ (゚Д゚) ['o']+ ((゚ー゚==3) +'_') [゚Θ゚];(゚Д゚) ['_'] =(o^_^o) [゚o゚] [゚o゚];(゚ε゚)=((゚ー゚==3) +'_') [゚Θ゚]+ (゚Д゚) .゚Д゚ノ+((゚Д゚)+'_') [(゚ー゚) + (゚ー゚)]+((゚ー゚==3) +'_') [o^_^o -゚Θ゚]+((゚ー゚==3) +'_') [゚Θ゚]+ (゚ω゚ノ +'_') [゚Θ゚]; (゚ー゚)+=(゚Θ゚); (゚Д゚)[゚ε゚]='\\'; (゚Д゚).゚Θ゚ノ=(゚Д゚+ ゚ー゚)[o^_^o -(゚Θ゚)];(o゚ー゚o)=(゚ω゚ノ +'_')[c^_^o];(゚Д゚) [゚o゚]='\"';(゚Д゚) ['_'] ( (゚Д゚) ['_'] (゚ε゚+(゚Д゚)[゚o゚]+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚Θ゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚Θ゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚) [゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)a+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚) [゚ε゚]+(゚Θ゚)+ ((o^_^o) - (゚Θ゚))+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚) [゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚) [゚ε゚]+(゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚o゚]) (゚Θ゚)) ('_'); 顔文字JavaScript JS with emoticons aaencode - http://utf-8.jp/public/aaencode.html

  7. 質問Question

  8. 質問 :Web技術、好きですか?Q. Do you love web technologies?

  9. クロスサイトスクリプティング 強制ブラウズ 書式文字列攻撃 リモートファイルインクルード SQLインジェクション LDAPインジェクション バッファオーバーフロー パストラバーサル CSRF 質問 :Web技術、好きですか?Q. Do you love web technologies? セッションハイジャック OSコマンドインジェクション オープンリダイレクタ セッション固定攻撃 DoS メモリリーク HTTPレスポンス分割 HTTPヘッダインジェクション XPathインジェクション

  10. Web技術、好きですか? 「はい」に挙手した人 • かなり打たれ強いor • 攻撃者

  11. HTML5時代のWebアプリ

  12. HTML5時代のWebアプリ • 次々とリリースされるブラウザ • 多数の新しい要素と属性 • canvas, video, audio, input… • 多数の新しいAPI • Web Sockets, Web Storage, XHR Lv.2… • 最適化されたJavaScriptエンジン • 高速化された描画エンジン • どのブラウザにどの機能が実装されているのか把握できない

  13. 次々とリリースされるブラウザ 2001 2001 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 6 7 8 9 10 3.6 15 1.0 1.5 2.0 3.0 3.5 Ajax 5 1 3 4 2 23 5 6 1 2 3 4 11 5 6 7 8 9 10 12

  14. HTML5の新機能 • マルチメディアのサポート<video> <audio> <canvas>... • 文書構造を表す要素<section> <header> <footer> ... • フォームの拡張<input type="email"> ... • JavaScript APIWeb Workers, WebSocket, File... • その他…

  15. HTML5時代のWebアプリ • HTML5時代のブラウザ • 高速化、高機能化 • 実行コードのブラウザ上へのシフト • ネイティブアプリからWebアプリへ • サーバ側で実行されていた処理がブラウザのJavaScript上へ • 攻撃もクライアントサイドへシフト • JavaScript上の問題点の増加 • XSSやCSRFなどの比重が増加

  16. HTML5時代のWebアプリ • 攻撃もクライアントサイドへシフト • JavaScriptを通じた攻撃の比重が増加 • XSSのリスクも増加 “ 多くの点から見て、XSS 脆弱性の危険性はバッファ オーバーフローに匹敵します。 ” セキュリティに関するブリーフィング : Web に対する SDL の適用 http://msdn.microsoft.com/ja-jp/magazine/cc794277.aspx

  17. そもそもXSSって?→簡単におさらい

  18. XSSおさらい • 対象 • 動的にHTMLを生成するWebアプリ • 問題 • 攻撃者が用意したスクリプトがHTML内に挿入される • 対策 • HTMLを生成する時点でエスケープ

  19. XSSおさらい http://shop.example.com/ ?item="><script>... 攻撃者 被害者 GET /?item="><script>... <input type="text" value=""><script>... HTMLを生成するときの エスケープ漏れ オンラインショップなど

  20. XSSおさらい http://shop.example.com/ ?item="><script>... 攻撃者 被害者 GET /?item="><script>... <input type="text" value=""><script>... 反射型XSS ユーザの送信内容をそのまま表示する オンラインショップなど

  21. XSSおさらい 攻撃者 被害者 Subject: test mail <html><script>... Subject: test mail <html><script>... HTMLを生成するときの エスケープ漏れ Webメールなど

  22. XSSおさらい 攻撃者 被害者 Subject: test mail <html><script>... Subject: test mail <html><script>... 持続型/蓄積型XSS 攻撃者のスクリプトはサーバ内で保持されている HTMLを生成するときの エスケープ漏れ Webメールなど

  23. XSSおさらい • 対象 • 動的にHTMLを生成するWebアプリ • 問題 • 攻撃者が用意したスクリプトがHTML内に挿入される • 対策 • HTMLを生成する時点でエスケープ

  24. 大原則HTMLを生成する時点でエスケープ って何だっけ? → おさらい

  25. XSSおさらい <html> • HTMLを生成する時点でエスケープ! < → &lt; > → &gt; " → &quot; ' → &#39; & → &amp; &lt; &gt; 1101100110010 0010001110110 1000010100110 0101011011110 データ 処理 HTML生成 ユーザ

  26. エスケープの例外 • href、src等のURLの動的生成 • http以外のスキームに注意 • JavaScript内の動的生成 • JS内の文字列リテラルはHTMLとは異なるエスケープ <a href="javascript:alert(1)"> <iframe src="data:text/html;base64, PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K"> <script> var s="</script><script>alert(1)//"; </script>

  27. XSSおさらい • HTMLを生成する時点でエスケープ • コンテキスト(文脈)に応じたエスケープ • コンテキストが入れ子になっているときはエスケープも入れ子に。<div onclick="foo('\u0022><script>…');"> • URLの動的生成 • href、src等はhttp,https限定とする

  28. やってはいけないXSS対策

  29. やってはいけないXSS対策 <html> • 入力時のサニタイズ < → &lt; > → &gt; " → &quot; ' → &#39; & → &amp; &lt; &gt; 1101100110010 0010001110110 1000010100110 0101011011110 サニタイズ データ 処理 HTML生成 ユーザ

  30. やってはいけない:入力時のサニタイズ • 入力時点でのデータの加工はプログラム規模が大きくなると破綻する • 「サニタイズ」という語が本来の意味を失って意味不明になっている • 続きはWebで サニタイズ言うな 検索

  31. XSSの種類

  32. XSSの種類 • 反射型XSS / Type-1 • ユーザからの送信内容をそのまま表示 • XSSフィルタ等である程度防御 • お問い合わせフォーム、サイト内検索 • 持続型XSS / Type-2 • 攻撃者のスクリプトがサーバ内で保持 • 掲示板、Webメール

  33. XSSの種類 • 反射型XSS / Type-1 • ユーザからの送信内容をそのまま表示 • XSSフィルタ等である程度防御 • お問い合わせフォーム、サイト内検索 • 持続型XSS / Type-2 • 攻撃者のスクリプトがサーバ内で保持 • 掲示板、Webメール ※GETだけでなくPOSTもあり得る GET /?item="><script>... <input type="text"value=""><script>...

  34. XSSの種類

  35. XSSの種類

  36. XSSの種類 XSSフィルターはリクエストとレスポンス 両方に同じスクリプトが含まれると反応

  37. XSSの種類 • 反射型XSS / Type-1 • ユーザからの送信内容をそのまま表示 • XSSフィルタ等である程度防御 • お問い合わせフォーム、サイト内検索 • 持続型XSS / Type-2 • 攻撃者のスクリプトがサーバ内で保持 • 掲示板、Webメール

  38. XSSの種類 • 反射型XSS / Type-1 • ユーザからの送信内容をそのまま表示 • XSSフィルタ等である程度防御 • お問い合わせフォーム、サイト内検索 • 持続型XSS / Type-2 • 攻撃者のスクリプトがサーバ内で保持 • 掲示板、Webメール Subject: test <script>... Subject: test <script>...

  39. XSSの種類 • 持続型XSS / Type-2 • 2006年6月 mixi「こんにちはこんにちは」 • 2007年8月 Twitter「こんにちはこんにちは」 • 2010年9月 Twitter

  40. XSSの種類 • 反射型XSS / Type-1 • ユーザからの送信内容をそのまま表示 • XSSフィルタ等である程度防御 • お問い合わせフォーム、サイト内検索 • 持続型XSS / Type-2 • 攻撃者のスクリプトがサーバ内で保持 • 掲示板、Webメール • DOM based XSS / Type-0 • JavaScriptが引き起こす • サーバ側のHTML生成には問題なし //http://example.jp/#<script>alert(1)</script> div.innerHTML = location.hash;

  41. DOM based XSS

  42. DOM based XSS • JavaScriptが引き起こすXSS • サーバ側のHTML生成時には問題なし • JavaScriptによるHTMLレンダリング時の問題 • JavaScriptの利用に合わせて増加 //http://example.jp/#<script>alert(1)</script> div.innerHTML = location.hash;

  43. DOM based XSS location.hashを使ったXSSの場合、サーバ側に攻撃の詳細が残らない

  44. ここまでXSSの復習です!

  45. HTML5が生む脆弱性

  46. HTML5が生む脆弱性 • Cross-Site Scripting(XSS) • 要素、属性、イベントが増えている • Cross-Document Messaging(XDM) • クロスドメインでのドキュメント間通信 • XMLHttpRequest(XHR) Lv.2 • クロスドメインでの読み込み • Ajaxデータを利用した攻撃 • XSS、データの盗み見

  47. HTML5が生む脆弱性 • Cross-Site Scripting(XSS) • 要素、属性、イベントが増えている • Cross-Document Messaging(XDM) • クロスドメインでのドキュメント間通信 • XMLHttpRequest(XHR) Lv.2 • クロスドメインでの読み込み • Ajaxデータを利用した攻撃 • XSS、データの盗み見

  48. XSS • これまでの間違ったXSS対策 • 危険そうな要素を検出<script> <object> <iframe> • onXXX、hrefなどの名称の属性を検出<div onmouseover=alert(1)><img src=# onerror=alert(1)><a href="javascript:alert(1)> • これまで仮にこの方法で網羅できていたとしても…

  49. XSS • HTML5で多数の要素、属性、イベントが導入<input autofocuspattern="..."><videoonplay="...">

  50. XSS • いわゆる「ブラックリスト」での対応に漏れ • そもそもブラックリスト方式は無理がある • 「HTML生成時にエスケープ」の原則 • HTML5と関係なくXSSを防げる <form> <button formaction="javascript:alert(1)">X </button> //http://html5sec.org/#72

More Related