Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
今さらきけないXSS
杉浦颯太 (sugiuras)
XSSのお話します
対象者
• XSSを知らない
• 聞いたことくらいはあるけど詳しくはしらない
• XSS?エスケープしとけばいいんでしょ?
• 脅威も概要も知ってるけどどう対策すればいいか想
像がつかない
アジェンダ
1. 自己紹介
2. XSS is
3. 攻撃者視点
4. 防御者視点
5. まとめ
アジェンダ
1. 自己紹介
2. XSS is
3. 攻撃者視点
4. 防御者視点
5. まとめ
申し訳程度の自己紹介
• 杉浦 颯太(すぎうら そうた)
• 研修なう
• 敬語できねぇ
• PDCAとか難しい
• スーツ息苦し(ry
• Twitter / GitHub : @sota1235
アジェンダ
1. 自己紹介
2. XSS is
3. 攻撃者視点
4. 防御者視点
5. まとめ
XSS、ご存じですか?
XSS is..
• XSS = Cross Site Scripting
• Webページ上で任意のスクリプトを実行できてし
まう脆弱性
• JavaScriptが流行り始めるとともに無視できなく
なってきた厄介なやつ
俺「え、別に問題なくね?」
問題大有りなんです
XSS is..
• Webページ上で任意のスクリプトを実行できてし
まう脆弱性
→つまりJavaScriptでできることは何でもできる
JSでできること
• ページの書き換え
• Cookieの読み出し
• Ajax
JSでできること
• ページの書き換え
→ ページ改竄による偽ページ
• Cookieの読み出し
→ ユーザ情報の盗難
• Ajax
→ 攻撃者へのデータ送信が可能
JSでできないこと
• PC上のリソースが脅かされる危険はない
• サンドボックスによりPC上のリソースは守られ
ている
• 同時に開いてる他タブの情報が取られることもない
• SOP(Same Origin Policy)によりブロックされる
とはいえ
• 脅威であることに変わりなし
• 後述しますが、フロントで攻撃が完結してしまうこ
ともあるため、決して油断できない脆弱性です
XSS is Evil( ꒪⌓꒪)
• JSの可能性 = 攻撃者の可能性
• XSS、ダメ、ゼッタイ
• サービスの致命的なセキュリティホールとなる
アジェンダ
1. 自己紹介
2. XSS is
3. 攻撃者視点
4. 防御者視点
5. まとめ
僕たちは守る側の人間
とはいえ
攻撃手法を知らないと守れない
サービスを守るために…
• 敵の攻撃方法を知って堅牢なサービスを作り隊
• セキュアでイケてるwebサービス作り隊
• 攻撃側の手法や種類を学んでみましょう
XSS三兄弟
• XSSは大きく分けて3種類存在する
XSS三兄弟
• 反射型XSS(Reflected XSS)
• 蓄積型XSS(Stored XSS)
• DOM Based XSS
反射型XSS(Reflected XSS)
• ユーザーの入力値をサーバが動的に出力することに
より発生する
• 発生原因の大半はエスケープ忘れ
• シングルクオートやダブルクオートでhtmlタグを破
壊し、スクリプトを混入する
蓄積型XSS(Stored XSS)
• ユーザーの入力値をDBに貯めこむことにより
• 発生原因の大半はエスケープ忘れ
• シングルクオートやダブルクオートでhtmlタグを破
壊し、スクリプトを混入する
DOM Based XSS
• JSで動的にHTMLを操作することにより発生
• 最近、こいつが急増してる
• これも原因はエスケープ忘れ
• 実装によってはサーバ側のログが一切残らず非常に
気づきにくい
攻撃者はありとあらゆる方法でXSSを試みます
imgタグ
<IMG SRC="javascript:alert('XSS');">
<IMG SRC=javascript:alert('XSS')>
<IMG SRC=JaVaScRiPt:alert('XSS')>
<IMG SRC=ja...
Data URI Scheme
• <iframe src="data:text/
html,<script>alert('XSS')</script>"></iframe>
• <object data= data:text/
html,<s...
他にもいっぱい
• JavaScript Scheme
• CSS Expression ( IE7)
• UTF-7
• XML
• 詳しくはGoogle先生
アジェンダ
1. 自己紹介
2. XSS is
3. 攻撃者視点
4. 防御者視点
5. まとめ
僕たちは守る側の人間
• どうすればXSSはなくなるのだろう?
防御法 心がけ編
心がけ編:エスケープ処理
• ユーザーの入力値による動的出力は必要最低限に留める
• 出力する場合は必ずエスケープする
• PHPならhtmlspecialchars()
• 最近のFWなら対策されてたりする
• ちなみにLaravelのBla...
心がけ編:DOM操作
• DOMの動的出力を行わない
• URLのパラメータでHTMLタグ生成とかダメ
• 特にdocument.hashは理由がない限り使わない
• 必ずしもユーザは優良ではないことを念頭に置いて
開発しましょう
防御法 Cookie
Cookie編
• Cookieにhttp-only属性をつける
• JSからCookieを読み込ませないようにする
• XSSによるCookie盗難の可能性はほぼ0になる
• このヘッダを付けない理由がないのであればつけ
るべき
• Set-...
防御法 CSP
CSP #とは
• CSP = Content Security Policy
• このヘッダの着いたリソースにはいくつかの制限が
課される
• HTTPのヘッダフィールドの一種
CSP #とは
• リソースの読み込み元を制限する
• デフォルトだとJSが制限されている
• eval禁止
• インラインスクリプト禁止
JS制限
• eval($(‘#text’).val());
→ 禁止!
• <script>alert(‘XSS’);</script>
→ 禁止!
CSP 動作例
CSP 使い方
• 使い方はHTTPヘッダを追加するだけ
• Content-Security-Policy: $policy
• ブラウザ、サーバどちらかが対応していない場合、
SOPが自動で適用される
CSP 使用例
• 使用例
• Content-Security-Policy: default-src ‘src’
• 読み込み元のリソースを配信先に設定
• eval禁止、インラインスクリプト禁止
• その他、細かくpolicyを設定するこ...
CSPまとめ
• CSPとはJSやリソースの読み込み元に制限をかける
HTTPヘッダフィールド
• 万が一XSSがあった時、攻撃者に大きな制限をか
けることができる
• ブラウザ、サーバどちらかが対応していない場合、
SOPが自動で適用される
...
CSPまとめ
• ほぼすべてのブラウザで対応している
安定のIE
諦めるしか無いのか…?
そんなこともあろうかと
防御法 X-XSS-Protection編
XSSフィルター
• IE8以降にはXSSフィルターという機能が存在する
• 有害なスクリプトを判定し、無効化する機構
• 不自然なインラインスクリプト等実行しなくなる
• HTTPヘッダでX-XSS-Protection属性に1を指
定するこ...
XSSフィルター
• IE以外のブラウザでもXSS防止の機構は存在する
• Chrome, Safari
→XSS Auditor
• FireFox
→NoScript(アドオン)
• ブラウザにより仕様が異なることを念頭に対策しましょう
アジェンダ
1. 自己紹介
2. XSS is
3. 攻撃者視点
4. 防御者視点
5. まとめ
まとめ XSS is
• XSSとは任意のJavaScriptが実行できる脆弱性
• JSで可能なこと全てを攻撃者に許してしまう
• JSでできないことはできない
• 攻撃手法は主に3種類
• 反射型XSS
• 蓄積型XSS
• DOM Bas...
まとめ 防御策
• HTMLエスケープ処理
• CookieをJSで処理しない
• CSPの活用
• ブラウザごとのXSSフィルターの活用
余談
• XSSにとても有効なCSPですが、去年にCSP Lv.2
なるものの最終草案が公開されました
• かなりイケてる感じなのでぜひ一度チェックしてみ
てください
参考
• IPAテクニカルウォッチ「DOM Based XSS」に関するレポート
• https://www.ipa.go.jp/files/000024729.pdf
• Slide Share : CSP Lv.2の話
• http://ww...
参考
• 1分でわかる「X-ナントカ」HTTPレスポンスヘッダ
• http://d.hatena.ne.jp/hasegawayosuke/comment/20110107
• 徳丸浩の日記
• http://blog.tokumaru.or...
おまけ
• XSS Game
https://xss-game.appspot.com/
Googleが出してるXSSしてくれYO!ってページ。
ゲーム感覚で一通りの攻撃手法が学べるのでぜひ
おまけ
以上。
Nächste SlideShare
Wird geladen in …5
×

今さら聞けないXSS

5.205 Aufrufe

Veröffentlicht am

XSSの概要と対策をざっくりまとめてみた。
社内勉強会用資料。

Veröffentlicht in: Technologie
  • Als Erste(r) kommentieren

今さら聞けないXSS

  1. 1. 今さらきけないXSS 杉浦颯太 (sugiuras)
  2. 2. XSSのお話します
  3. 3. 対象者 • XSSを知らない • 聞いたことくらいはあるけど詳しくはしらない • XSS?エスケープしとけばいいんでしょ? • 脅威も概要も知ってるけどどう対策すればいいか想 像がつかない
  4. 4. アジェンダ 1. 自己紹介 2. XSS is 3. 攻撃者視点 4. 防御者視点 5. まとめ
  5. 5. アジェンダ 1. 自己紹介 2. XSS is 3. 攻撃者視点 4. 防御者視点 5. まとめ
  6. 6. 申し訳程度の自己紹介 • 杉浦 颯太(すぎうら そうた) • 研修なう • 敬語できねぇ • PDCAとか難しい • スーツ息苦し(ry • Twitter / GitHub : @sota1235
  7. 7. アジェンダ 1. 自己紹介 2. XSS is 3. 攻撃者視点 4. 防御者視点 5. まとめ
  8. 8. XSS、ご存じですか?
  9. 9. XSS is.. • XSS = Cross Site Scripting • Webページ上で任意のスクリプトを実行できてし まう脆弱性 • JavaScriptが流行り始めるとともに無視できなく なってきた厄介なやつ
  10. 10. 俺「え、別に問題なくね?」
  11. 11. 問題大有りなんです
  12. 12. XSS is.. • Webページ上で任意のスクリプトを実行できてし まう脆弱性 →つまりJavaScriptでできることは何でもできる
  13. 13. JSでできること • ページの書き換え • Cookieの読み出し • Ajax
  14. 14. JSでできること • ページの書き換え → ページ改竄による偽ページ • Cookieの読み出し → ユーザ情報の盗難 • Ajax → 攻撃者へのデータ送信が可能
  15. 15. JSでできないこと • PC上のリソースが脅かされる危険はない • サンドボックスによりPC上のリソースは守られ ている • 同時に開いてる他タブの情報が取られることもない • SOP(Same Origin Policy)によりブロックされる
  16. 16. とはいえ • 脅威であることに変わりなし • 後述しますが、フロントで攻撃が完結してしまうこ ともあるため、決して油断できない脆弱性です
  17. 17. XSS is Evil( ꒪⌓꒪) • JSの可能性 = 攻撃者の可能性 • XSS、ダメ、ゼッタイ • サービスの致命的なセキュリティホールとなる
  18. 18. アジェンダ 1. 自己紹介 2. XSS is 3. 攻撃者視点 4. 防御者視点 5. まとめ
  19. 19. 僕たちは守る側の人間
  20. 20. とはいえ 攻撃手法を知らないと守れない
  21. 21. サービスを守るために… • 敵の攻撃方法を知って堅牢なサービスを作り隊 • セキュアでイケてるwebサービス作り隊 • 攻撃側の手法や種類を学んでみましょう
  22. 22. XSS三兄弟 • XSSは大きく分けて3種類存在する
  23. 23. XSS三兄弟 • 反射型XSS(Reflected XSS) • 蓄積型XSS(Stored XSS) • DOM Based XSS
  24. 24. 反射型XSS(Reflected XSS) • ユーザーの入力値をサーバが動的に出力することに より発生する • 発生原因の大半はエスケープ忘れ • シングルクオートやダブルクオートでhtmlタグを破 壊し、スクリプトを混入する
  25. 25. 蓄積型XSS(Stored XSS) • ユーザーの入力値をDBに貯めこむことにより • 発生原因の大半はエスケープ忘れ • シングルクオートやダブルクオートでhtmlタグを破 壊し、スクリプトを混入する
  26. 26. DOM Based XSS • JSで動的にHTMLを操作することにより発生 • 最近、こいつが急増してる • これも原因はエスケープ忘れ • 実装によってはサーバ側のログが一切残らず非常に 気づきにくい
  27. 27. 攻撃者はありとあらゆる方法でXSSを試みます
  28. 28. imgタグ <IMG SRC="javascript:alert('XSS');"> <IMG SRC=javascript:alert('XSS')> <IMG SRC=JaVaScRiPt:alert('XSS')> <IMG SRC=javascript:alert(&quot;XSS&quot;)> <IMG SRC=`javascript:alert("RSnake says, 'XSS'")`> <IMG """><SCRIPT>alert("XSS")</SCRIPT>"> <IMG SRC=javascript:alert(String.fromCharCode(88,83,83))> <IMG SRC=javascript:alert( 'XSS')> <IMG SRC=&#0000106&#0000097&#0000118&#0000097&#0000115&#0000099&#0000114&#0000105&#0000112&#0000 116&#0000058&#0000097&#0000108&#0000101&#0000114&#0000116&#0000040&#0000039&#0000088&#000008 3&#0000083&#0000039&#0000041> <IMG SRC=&#x6A&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70&#x74&#x3A&#x61&#x6C&#x65&#x72&#x74&#x28&#x 27&#x58&#x53&#x53&#x27&#x29> <IMG SRC="jav ascript:alert('XSS');"> <IMG SRC="jav ascript:alert('XSS');"> <IMG SRC="jav ascript:alert('XSS');"> <IMG SRC="jav ascript:alert('XSS');">
  29. 29. Data URI Scheme • <iframe src="data:text/ html,<script>alert('XSS')</script>"></iframe> • <object data= data:text/ html,<script>alert('XSS2')</script>"></object> • <iframe src='data:text/ html;base64,PHNjcmlwdD5hbGVydCgnWFNTJ yk8L3NjcmlwdD4='></iframe>
  30. 30. 他にもいっぱい • JavaScript Scheme • CSS Expression ( IE7) • UTF-7 • XML • 詳しくはGoogle先生
  31. 31. アジェンダ 1. 自己紹介 2. XSS is 3. 攻撃者視点 4. 防御者視点 5. まとめ
  32. 32. 僕たちは守る側の人間 • どうすればXSSはなくなるのだろう?
  33. 33. 防御法 心がけ編
  34. 34. 心がけ編:エスケープ処理 • ユーザーの入力値による動的出力は必要最低限に留める • 出力する場合は必ずエスケープする • PHPならhtmlspecialchars() • 最近のFWなら対策されてたりする • ちなみにLaravelのBladeは中括弧を3重にすることでエス ケープしてくれる • とにかくエスケープ!!!!!!!!!!!!
  35. 35. 心がけ編:DOM操作 • DOMの動的出力を行わない • URLのパラメータでHTMLタグ生成とかダメ • 特にdocument.hashは理由がない限り使わない • 必ずしもユーザは優良ではないことを念頭に置いて 開発しましょう
  36. 36. 防御法 Cookie
  37. 37. Cookie編 • Cookieにhttp-only属性をつける • JSからCookieを読み込ませないようにする • XSSによるCookie盗難の可能性はほぼ0になる • このヘッダを付けない理由がないのであればつけ るべき • Set-Cookie: HttpOnly;
  38. 38. 防御法 CSP
  39. 39. CSP #とは • CSP = Content Security Policy • このヘッダの着いたリソースにはいくつかの制限が 課される • HTTPのヘッダフィールドの一種
  40. 40. CSP #とは • リソースの読み込み元を制限する • デフォルトだとJSが制限されている • eval禁止 • インラインスクリプト禁止
  41. 41. JS制限 • eval($(‘#text’).val()); → 禁止! • <script>alert(‘XSS’);</script> → 禁止!
  42. 42. CSP 動作例
  43. 43. CSP 使い方 • 使い方はHTTPヘッダを追加するだけ • Content-Security-Policy: $policy • ブラウザ、サーバどちらかが対応していない場合、 SOPが自動で適用される
  44. 44. CSP 使用例 • 使用例 • Content-Security-Policy: default-src ‘src’ • 読み込み元のリソースを配信先に設定 • eval禁止、インラインスクリプト禁止 • その他、細かくpolicyを設定することが可能
  45. 45. CSPまとめ • CSPとはJSやリソースの読み込み元に制限をかける HTTPヘッダフィールド • 万が一XSSがあった時、攻撃者に大きな制限をか けることができる • ブラウザ、サーバどちらかが対応していない場合、 SOPが自動で適用される • ほぼすべてのブラウザで対応している
  46. 46. CSPまとめ • ほぼすべてのブラウザで対応している
  47. 47. 安定のIE
  48. 48. 諦めるしか無いのか…?
  49. 49. そんなこともあろうかと
  50. 50. 防御法 X-XSS-Protection編
  51. 51. XSSフィルター • IE8以降にはXSSフィルターという機能が存在する • 有害なスクリプトを判定し、無効化する機構 • 不自然なインラインスクリプト等実行しなくなる • HTTPヘッダでX-XSS-Protection属性に1を指 定することで有効化できる
  52. 52. XSSフィルター • IE以外のブラウザでもXSS防止の機構は存在する • Chrome, Safari →XSS Auditor • FireFox →NoScript(アドオン) • ブラウザにより仕様が異なることを念頭に対策しましょう
  53. 53. アジェンダ 1. 自己紹介 2. XSS is 3. 攻撃者視点 4. 防御者視点 5. まとめ
  54. 54. まとめ XSS is • XSSとは任意のJavaScriptが実行できる脆弱性 • JSで可能なこと全てを攻撃者に許してしまう • JSでできないことはできない • 攻撃手法は主に3種類 • 反射型XSS • 蓄積型XSS • DOM Based XSS
  55. 55. まとめ 防御策 • HTMLエスケープ処理 • CookieをJSで処理しない • CSPの活用 • ブラウザごとのXSSフィルターの活用
  56. 56. 余談 • XSSにとても有効なCSPですが、去年にCSP Lv.2 なるものの最終草案が公開されました • かなりイケてる感じなのでぜひ一度チェックしてみ てください
  57. 57. 参考 • IPAテクニカルウォッチ「DOM Based XSS」に関するレポート • https://www.ipa.go.jp/files/000024729.pdf • Slide Share : CSP Lv.2の話 • http://www.slideshare.net/yagihashoo/csp-lv2 • MDN : Content Security Policy • https://developer.mozilla.org/ja/docs/Security/CSP_ %28Content_Security_Policy%29
  58. 58. 参考 • 1分でわかる「X-ナントカ」HTTPレスポンスヘッダ • http://d.hatena.ne.jp/hasegawayosuke/comment/20110107 • 徳丸浩の日記 • http://blog.tokumaru.org/ • XSSに限らず様々な脆弱性の記事があがっています • キャッチアップしておくとPHPでの脆弱性感度は間違いなくあがります • OWASP Top 10 - 2013 • https://www.owasp.org/images/7/79/OWASP_Top_10_2013_JPN.pdf
  59. 59. おまけ • XSS Game https://xss-game.appspot.com/ Googleが出してるXSSしてくれYO!ってページ。 ゲーム感覚で一通りの攻撃手法が学べるのでぜひ
  60. 60. おまけ
  61. 61. 以上。

×