SlideShare a Scribd company logo
1 of 61
Download to read offline
今さらきけない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=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=&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;
&#39;&#88;&#83;&#83;&#39;&#41;>
<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&#x09;ascript:alert('XSS');">
<IMG SRC="jav&#x0A;ascript:alert('XSS');">
<IMG SRC="jav&#x0D;ascript:alert('XSS');">
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>
他にもいっぱい
• JavaScript Scheme
• CSS Expression ( IE7)
• UTF-7
• XML
• 詳しくはGoogle先生
アジェンダ
1. 自己紹介
2. XSS is
3. 攻撃者視点
4. 防御者視点
5. まとめ
僕たちは守る側の人間
• どうすればXSSはなくなるのだろう?
防御法 心がけ編
心がけ編:エスケープ処理
• ユーザーの入力値による動的出力は必要最低限に留める
• 出力する場合は必ずエスケープする
• PHPならhtmlspecialchars()
• 最近のFWなら対策されてたりする
• ちなみにLaravelのBladeは中括弧を3重にすることでエス
ケープしてくれる
• とにかくエスケープ!!!!!!!!!!!!
心がけ編:DOM操作
• DOMの動的出力を行わない
• URLのパラメータでHTMLタグ生成とかダメ
• 特にdocument.hashは理由がない限り使わない
• 必ずしもユーザは優良ではないことを念頭に置いて
開発しましょう
防御法 Cookie
Cookie編
• Cookieにhttp-only属性をつける
• JSからCookieを読み込ませないようにする
• XSSによるCookie盗難の可能性はほぼ0になる
• このヘッダを付けない理由がないのであればつけ
るべき
• Set-Cookie: HttpOnly;
防御法 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 Based XSS
まとめ 防御策
• 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://www.slideshare.net/yagihashoo/csp-lv2
• MDN : Content Security Policy
• https://developer.mozilla.org/ja/docs/Security/CSP_
%28Content_Security_Policy%29
参考
• 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
おまけ
• XSS Game
https://xss-game.appspot.com/
Googleが出してるXSSしてくれYO!ってページ。
ゲーム感覚で一通りの攻撃手法が学べるのでぜひ
おまけ
以上。

More Related Content

What's hot

とある診断員とSQLインジェクション
とある診断員とSQLインジェクションとある診断員とSQLインジェクション
とある診断員とSQLインジェクションzaki4649
 
若手エンジニアのためのセキュリティ講座
若手エンジニアのためのセキュリティ講座若手エンジニアのためのセキュリティ講座
若手エンジニアのためのセキュリティ講座Hiroshi Tokumaru
 
徳丸本ができるまで
徳丸本ができるまで徳丸本ができるまで
徳丸本ができるまでHiroshi Tokumaru
 
XSSフィルターを利用したXSS攻撃 by Masato Kinugawa
XSSフィルターを利用したXSS攻撃 by Masato KinugawaXSSフィルターを利用したXSS攻撃 by Masato Kinugawa
XSSフィルターを利用したXSS攻撃 by Masato KinugawaCODE BLUE
 
最近のやられアプリを試してみた
最近のやられアプリを試してみた最近のやられアプリを試してみた
最近のやられアプリを試してみたzaki4649
 
セキュリティの都市伝説を暴く
セキュリティの都市伝説を暴くセキュリティの都市伝説を暴く
セキュリティの都市伝説を暴くHiroshi Tokumaru
 
PenTesterが知っている危ないAWS環境の共通点
PenTesterが知っている危ないAWS環境の共通点 PenTesterが知っている危ないAWS環境の共通点
PenTesterが知っている危ないAWS環境の共通点 zaki4649
 
フリーでできるセキュリティWeb編(SQLMあpを楽しもう)
フリーでできるセキュリティWeb編(SQLMあpを楽しもう)フリーでできるセキュリティWeb編(SQLMあpを楽しもう)
フリーでできるセキュリティWeb編(SQLMあpを楽しもう)abend_cve_9999_0001
 
今夜わかるWebアプリケーション脆弱性診断 (OWASP Day 758 / 2018)
今夜わかるWebアプリケーション脆弱性診断 (OWASP Day 758 / 2018)今夜わかるWebアプリケーション脆弱性診断 (OWASP Day 758 / 2018)
今夜わかるWebアプリケーション脆弱性診断 (OWASP Day 758 / 2018)Sen Ueno
 
文字コードの脆弱性はこの3年間でどの程度対策されたか?
文字コードの脆弱性はこの3年間でどの程度対策されたか?文字コードの脆弱性はこの3年間でどの程度対策されたか?
文字コードの脆弱性はこの3年間でどの程度対策されたか?Hiroshi Tokumaru
 
猫でもわかるかもしれない SQLインジェクション
猫でもわかるかもしれない SQLインジェクション猫でもわかるかもしれない SQLインジェクション
猫でもわかるかもしれない SQLインジェクションkinme modoki
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021Hiroshi Tokumaru
 
Let's verify the vulnerability-脆弱性を検証してみよう!-
Let's verify the vulnerability-脆弱性を検証してみよう!-Let's verify the vulnerability-脆弱性を検証してみよう!-
Let's verify the vulnerability-脆弱性を検証してみよう!-zaki4649
 
ウェブセキュリティのありがちな誤解を解説する
ウェブセキュリティのありがちな誤解を解説するウェブセキュリティのありがちな誤解を解説する
ウェブセキュリティのありがちな誤解を解説するHiroshi Tokumaru
 
文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)Hiroshi Tokumaru
 
130821 owasp zed attack proxyをぶん回せ
130821 owasp zed attack  proxyをぶん回せ 130821 owasp zed attack  proxyをぶん回せ
130821 owasp zed attack proxyをぶん回せ Minoru Sakai
 
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011Hiroshi Tokumaru
 
フリーでやろうぜ!セキュリティチェック!
フリーでやろうぜ!セキュリティチェック!フリーでやろうぜ!セキュリティチェック!
フリーでやろうぜ!セキュリティチェック!zaki4649
 
CODE BLUE 2014 : バグハンターの愉しみ by キヌガワマサト Masato Kinugawa
CODE BLUE 2014 : バグハンターの愉しみ by キヌガワマサト Masato KinugawaCODE BLUE 2014 : バグハンターの愉しみ by キヌガワマサト Masato Kinugawa
CODE BLUE 2014 : バグハンターの愉しみ by キヌガワマサト Masato KinugawaCODE BLUE
 
X-XSS-Nightmare: 1; mode=attack ~XSSフィルターを利用したXSS攻撃~
X-XSS-Nightmare: 1; mode=attack ~XSSフィルターを利用したXSS攻撃~X-XSS-Nightmare: 1; mode=attack ~XSSフィルターを利用したXSS攻撃~
X-XSS-Nightmare: 1; mode=attack ~XSSフィルターを利用したXSS攻撃~Masato Kinugawa
 

What's hot (20)

とある診断員とSQLインジェクション
とある診断員とSQLインジェクションとある診断員とSQLインジェクション
とある診断員とSQLインジェクション
 
若手エンジニアのためのセキュリティ講座
若手エンジニアのためのセキュリティ講座若手エンジニアのためのセキュリティ講座
若手エンジニアのためのセキュリティ講座
 
徳丸本ができるまで
徳丸本ができるまで徳丸本ができるまで
徳丸本ができるまで
 
XSSフィルターを利用したXSS攻撃 by Masato Kinugawa
XSSフィルターを利用したXSS攻撃 by Masato KinugawaXSSフィルターを利用したXSS攻撃 by Masato Kinugawa
XSSフィルターを利用したXSS攻撃 by Masato Kinugawa
 
最近のやられアプリを試してみた
最近のやられアプリを試してみた最近のやられアプリを試してみた
最近のやられアプリを試してみた
 
セキュリティの都市伝説を暴く
セキュリティの都市伝説を暴くセキュリティの都市伝説を暴く
セキュリティの都市伝説を暴く
 
PenTesterが知っている危ないAWS環境の共通点
PenTesterが知っている危ないAWS環境の共通点 PenTesterが知っている危ないAWS環境の共通点
PenTesterが知っている危ないAWS環境の共通点
 
フリーでできるセキュリティWeb編(SQLMあpを楽しもう)
フリーでできるセキュリティWeb編(SQLMあpを楽しもう)フリーでできるセキュリティWeb編(SQLMあpを楽しもう)
フリーでできるセキュリティWeb編(SQLMあpを楽しもう)
 
今夜わかるWebアプリケーション脆弱性診断 (OWASP Day 758 / 2018)
今夜わかるWebアプリケーション脆弱性診断 (OWASP Day 758 / 2018)今夜わかるWebアプリケーション脆弱性診断 (OWASP Day 758 / 2018)
今夜わかるWebアプリケーション脆弱性診断 (OWASP Day 758 / 2018)
 
文字コードの脆弱性はこの3年間でどの程度対策されたか?
文字コードの脆弱性はこの3年間でどの程度対策されたか?文字コードの脆弱性はこの3年間でどの程度対策されたか?
文字コードの脆弱性はこの3年間でどの程度対策されたか?
 
猫でもわかるかもしれない SQLインジェクション
猫でもわかるかもしれない SQLインジェクション猫でもわかるかもしれない SQLインジェクション
猫でもわかるかもしれない SQLインジェクション
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
 
Let's verify the vulnerability-脆弱性を検証してみよう!-
Let's verify the vulnerability-脆弱性を検証してみよう!-Let's verify the vulnerability-脆弱性を検証してみよう!-
Let's verify the vulnerability-脆弱性を検証してみよう!-
 
ウェブセキュリティのありがちな誤解を解説する
ウェブセキュリティのありがちな誤解を解説するウェブセキュリティのありがちな誤解を解説する
ウェブセキュリティのありがちな誤解を解説する
 
文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)
 
130821 owasp zed attack proxyをぶん回せ
130821 owasp zed attack  proxyをぶん回せ 130821 owasp zed attack  proxyをぶん回せ
130821 owasp zed attack proxyをぶん回せ
 
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011
 
フリーでやろうぜ!セキュリティチェック!
フリーでやろうぜ!セキュリティチェック!フリーでやろうぜ!セキュリティチェック!
フリーでやろうぜ!セキュリティチェック!
 
CODE BLUE 2014 : バグハンターの愉しみ by キヌガワマサト Masato Kinugawa
CODE BLUE 2014 : バグハンターの愉しみ by キヌガワマサト Masato KinugawaCODE BLUE 2014 : バグハンターの愉しみ by キヌガワマサト Masato Kinugawa
CODE BLUE 2014 : バグハンターの愉しみ by キヌガワマサト Masato Kinugawa
 
X-XSS-Nightmare: 1; mode=attack ~XSSフィルターを利用したXSS攻撃~
X-XSS-Nightmare: 1; mode=attack ~XSSフィルターを利用したXSS攻撃~X-XSS-Nightmare: 1; mode=attack ~XSSフィルターを利用したXSS攻撃~
X-XSS-Nightmare: 1; mode=attack ~XSSフィルターを利用したXSS攻撃~
 

More from Sota Sugiura

「データベース実践入門」から学ぶリレーショナルモデル
「データベース実践入門」から学ぶリレーショナルモデル「データベース実践入門」から学ぶリレーショナルモデル
「データベース実践入門」から学ぶリレーショナルモデルSota Sugiura
 
TechCrunchTokyo Hackathon 2015
TechCrunchTokyo Hackathon 2015TechCrunchTokyo Hackathon 2015
TechCrunchTokyo Hackathon 2015Sota Sugiura
 
コミットメッセージの話
コミットメッセージの話コミットメッセージの話
コミットメッセージの話Sota Sugiura
 
各ブラウザでの均等割り付け比較
各ブラウザでの均等割り付け比較各ブラウザでの均等割り付け比較
各ブラウザでの均等割り付け比較Sota Sugiura
 
GitHubにおける開発フローについてのお話
GitHubにおける開発フローについてのお話GitHubにおける開発フローについてのお話
GitHubにおける開発フローについてのお話Sota Sugiura
 
Promiseでコールバック地獄から解放された話
Promiseでコールバック地獄から解放された話Promiseでコールバック地獄から解放された話
Promiseでコールバック地獄から解放された話Sota Sugiura
 
Web Audio API 入門
Web Audio API 入門Web Audio API 入門
Web Audio API 入門Sota Sugiura
 

More from Sota Sugiura (9)

「データベース実践入門」から学ぶリレーショナルモデル
「データベース実践入門」から学ぶリレーショナルモデル「データベース実践入門」から学ぶリレーショナルモデル
「データベース実践入門」から学ぶリレーショナルモデル
 
TechCrunchTokyo Hackathon 2015
TechCrunchTokyo Hackathon 2015TechCrunchTokyo Hackathon 2015
TechCrunchTokyo Hackathon 2015
 
コミットメッセージの話
コミットメッセージの話コミットメッセージの話
コミットメッセージの話
 
HTTP2入門
HTTP2入門HTTP2入門
HTTP2入門
 
HTTP入門
HTTP入門HTTP入門
HTTP入門
 
各ブラウザでの均等割り付け比較
各ブラウザでの均等割り付け比較各ブラウザでの均等割り付け比較
各ブラウザでの均等割り付け比較
 
GitHubにおける開発フローについてのお話
GitHubにおける開発フローについてのお話GitHubにおける開発フローについてのお話
GitHubにおける開発フローについてのお話
 
Promiseでコールバック地獄から解放された話
Promiseでコールバック地獄から解放された話Promiseでコールバック地獄から解放された話
Promiseでコールバック地獄から解放された話
 
Web Audio API 入門
Web Audio API 入門Web Audio API 入門
Web Audio API 入門
 

今さら聞けないXSS