Your SlideShare is downloading. ×
  • Like
  • Save
XSS再入門
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

XSS再入門

  • 23,873 views
Published

XSSの初心者向け説明です。初心者向けだけど、きっちり理解したい方向け…

XSSの初心者向け説明です。初心者向けだけど、きっちり理解したい方向け…

Published in Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
23,873
On SlideShare
0
From Embeds
0
Number of Embeds
18

Actions

Shares
Downloads
0
Comments
0
Likes
103

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. クロスサイトスクリプティング再入門 HASHコンサルティング株式会社 徳丸 浩 twitter id: @ockeghem
  • 2. XSS脆弱なスクリプトの例 Copyright © 2013 HASH Consulting Corp. 2 <body><?php echo $_GET['p']; ?></body> 値を「そのまま」表示 p=<script>alert(document.cookie)</script> で参照
  • 3. なにか、問題でも? Copyright © 2013 HASH Consulting Corp. 3
  • 4. 典型的なXSSサンプルに対する「素朴な疑問」 • クッキーの値がアラートで表示されても、特に危険性はないよ うな気がする • クッキーの値はブラウザのアドオンなどでも表示できるよね • 任意のJavaScriptが実行されると言っても、ホームページ作 れば任意のJavaScriptが書けるし、見た人のブラウザで実行 されるよね… Copyright © 2013 HASH Consulting Corp. 4
  • 5. そもそもの疑問:JavaScriptは危険か? • 実は、JavaScriptの実行自体は危険ではない • Webは、未知の(ひょっとすると悪意のある?)サイトを訪問し ても「悪いこと」が起きないように設計されている • JavaScriptの「サンドボックス」による保護 – JavaScriptからローカルファイルにアクセスできない – JavaScriptからクリップボードの値にアクセスできない – ブラウザにはファイルアップロードの機能があるが、JavaScriptで 任意ファイルをアップロードはできない – JavaScriptからプリンタに印刷することはできない(印刷ダイアログ を表示することはできる) Copyright © 2013 HASH Consulting Corp. 5
  • 6. では、他のWebサイト上の「個人情報」 にはアクセスできないの? Copyright © 2013 HASH Consulting Corp. 6
  • 7. できない Copyright © 2013 HASH Consulting Corp. 7
  • 8. ここで、 「タブブラウザは安全なのか」問題 Copyright © 2013 HASH Consulting Corp. 8
  • 9. タブブラウザに秘密情報のある光景 Copyright © 2013 HASH Consulting Corp. 9 うっかり、罠の仕掛 けてあるページを開 いたら、Gmailの内 容を読み取られな いのか? ワナのサイト
  • 10. 試してみよう! Copyright © 2013 HASH Consulting Corp. 10
  • 11. Gmailを別タブに開いてHTMLを読み出す罠 Copyright © 2013 HASH Consulting Corp. 11 <html> <head> <script> var newWin = window.open( 'https://mail.google.com/mail/u/0/#inbox', 'subwin'); setTimeout(function() { alert(newWin.document.documentElement.innerHTML); }, 3000); </script> </head> <body> こんにちは </body> </html> 新しいWindowを開 いて、そこにGmail を表示させる Gmailのロードを待っ て(3秒想定)、Gmail のHTMLを表示
  • 12. 別Windowのdocumentにアクセスできない… Copyright © 2013 HASH Consulting Corp. 12 Error: Permission denied to access property 'document'
  • 13. 同じドメインだとdocumentにアクセスできる Copyright © 2013 HASH Consulting Corp. 13
  • 14. 同じドメイン? Copyright © 2013 HASH Consulting Corp. 14
  • 15. 正確にはドメインではなく ”オリジン” Copyright © 2013 HASH Consulting Corp. 15
  • 16. 同一生成元ポリシー(Same-Origin Policy; SOP)とは • オリジン = スキーム、ホスト、ポート番号の組み合わせ • これらがすべて同じ場合、同一生成元(Same Origin)であると いう – http と https は異なるスキーム すなわち別オリジンとなる • JavaScriptによるプロパティへのアクセス等は同一生成元に 対してのみ許可される • XMLHttpRequestによるオブジェクトアクセスは、同一生成元 の場合無条件に許可される – 異なる生成元に対するアクセスは、CORS(Cross-Origin Resource Sharing)により可能 Copyright © 2013 HASH Consulting Corp. 16
  • 17. SOPによる保護 Copyright © 2013 HASH Consulting Corp. 17 evil.example.com shop.example.jp 邪悪なサイト 正規サイト 個人情報 個人情報 ワナ 個人情報 ワナ 個人情報 XMLHttpRequest JavaScript JavaScript Cookie
  • 18. XSSによるJavaScripの注入 Copyright © 2013 HASH Consulting Corp. 18 evil.example.com shop.example.jp 邪悪なサイト 正規サイト(XSS脆弱) ワナ 脆弱なページ ワナ JavaScript JavaScript 脆弱なページ JavaScript JavaScript ① ④ ③ ②
  • 19. XSSにより注入されたJSはSOPの保護を回避する Copyright © 2013 HASH Consulting Corp. 19 evil.example.com shop.example.jp 邪悪なサイト 正規サイト 個人情報 ワナ ワナ 個人情報 XMLHttpRequest JavaScript JavaScript 個人情報 Cookie 同一オリジン なので、個人 情報等にア クセス可
  • 20. iframeを用いたワナのイメージ Copyright © 2013 HASH Consulting Corp. 20 マル秘激安お得情報!!! JavaScript 個人情報あり個人情報なし 正規サイトワナサイトと同一オリジン http://very.evil-site.biz/
  • 21. XSSによる個人情報アクセス Copyright © 2013 HASH Consulting Corp. 21 マル秘激安お得情報!!! http://very.evil-site.biz/ JavaScript 個人情報 正規サイト JavaScript 注入
  • 22. なぜJavaScriptを注入されるか? Copyright © 2013 HASH Consulting Corp. 22
  • 23. 要素内容の場合 Copyright © 2013 HASH Consulting Corp. 23 <div>○○○○○○</div> 要素内容の終端マークは < < を用いて要素内容を終わらせスクリプトを注入! <div>○○○○○○<script>alert(1)</script></div> 対策は < を &lt; にエスケープする & → &amp; エスケープも必須 通常は、 < > & をエスケープしますね
  • 24. 属性値の場合 Copyright © 2013 HASH Consulting Corp. 24 <input value="○○○○○○"> 属性値の終端マークは " " を用いてスクリプトを注入! <input value="○○○○○○"><script>alert(1)</script>"> 対策は " を &quot; にエスケープする & → &amp; エスケープも必須 通常は、 < > & " をエスケープしますね
  • 25. JavaScriptの場合 Copyright © 2013 HASH Consulting Corp. 25 init("○○○○○○"); 文字列リテラルの終端マークは " " を用いてスクリプトを注入! init("○○○○○○");alert(document.cookie);//"); 対策は " を ¥" にエスケープする(&quot;ではない) ¥ → ¥¥ エスケープも必須 属性値に書く場合は上記をさらにHTMLエスケープする
  • 26. これで、おk? Copyright © 2013 HASH Consulting Corp. 26
  • 27. No! XSSは色々ややこしい Copyright © 2013 HASH Consulting Corp. 27
  • 28. 参考文献(1) Copyright © 2013 HASH Consulting Corp. 28 XSSの基礎を説明して いますが、DOM base XSSやAjaxに関する説 明はあまりありません
  • 29. 参考文献(2) 29 http://www.ipa.go.jp/about/technicalwatch/20130129.html DOM base XSSに関 する体系的な説明とし て貴重な参考資料です
  • 30. 参考文献(3) Copyright © 2013 HASH Consulting Corp. 30 ブラウザセキュリティの 「面倒くささ」について、 逃げずに丹念に説明し ています。上級者およ び上級者を目指す方向 け
  • 31. まとめ • ブラウザには、サンドボックス、同一生成元ポリシー(SOP)などの 保護機能がある • SOPの保護機能により、正規サイトと「怪しいサイト」はアクセスが 遮断されている • XSSは、SOPの保護機能の元で、正規サイトの情報に、「怪しいサ イト」からアクセスできる(これはアプリケーションの脆弱性) • XSSがあると、ワナサイトを閲覧した利用者の個人情報が漏洩 – あるいは「なりすまし犯行予告」の書き込みをさせることも… • XSS対策の基本は、「終端」となる記号の文脈に応じたエスケープ • でも、色々ややこしいので参考文献で勉強を • みなさん、よく言っておきますが、ウェブアプリの脆弱性の中で、 XSSが一番難しいですよ! Copyright © 2013 HASH Consulting Corp. 31