View
642
Download
5
Category
Preview:
DESCRIPTION
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 - PowerPoint PPT Presentation
Citation preview
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
自己紹介
はせがわようすけネットエージェント株式会社株式会社セキュアスカイ・テクノロジー 技術顧問
Microsoft MVP for Consumer Security Oct 2005 -
http://utf-8.jp/セキュリティキャンプ Web セキュリティクラス講師
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
これまでに調べた脆弱性
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
...
$=~[];$={___:++$,$$$$:(![]+"")[$],__$:++$,$_$_:(![]+"")[$],_$_:++$,$_$$:({}+"")[$],$$_$:($[$]+"")[$],_$$:++$,$$$_:(!""+"")[$],$__:++$,$_$:++$,$$__:({}+"")[$],$$_:++$,$$$:++$,$___:++$,$__$:++$};$.$_=($.$_=$+"")[$.$_$]+($._$=$.$_[$.__$])+($.$$=($.$+"")[$.__$])+((!$)+"")[$._$$]+($.__=$.$_[$.$$_])+($.$=(!""+"")[$.__$])+($._=(!""+"")[$._$_])+$.$_[$.$_$]+$.__+$._$+$.$;$.$$=$.$+(!""+"")[$._$$]+$.__+$._+$.$+$.$$;$.$=($.___)[$.$_][$.$_];$.$($.$($.$$+"\""+$.$_$_+(![]+"")[$._$_]+$.$$$_+"\\"+$.__$+$.$$_+$._$_+$.__+"(\\\"\\"+$.__$+$.__$+$.___+$.$$$_+(![]+"")[$._$_]+(![]+"")[$._$_]+$._$+",\\"+$.$__+$.___+"\\"+$.__$+$.__$+$._$_+$.$_$_+"\\"+$.__$+$.$$_+$.$$_+$.$_$_+"\\"+$.__$+$._$_+$._$$+$.$$__+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$$_+$.___+$.__+"\\\"\\"+$.$__+$.___+")"+"\"")())();
記号 JavaScript JS without alnum
jjencode - http://utf-8.jp/public/jjencode.html
゚ ω ゚ノ = / `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
質問 : Web 技術、好きですか ?Q. Do you love web technologies?
クロスサイトスクリプティング
SQL インジェクション
CSRF
HTTP レスポンス分割
オープンリダイレクタ
HTTP ヘッダインジェクション
セッションハイジャックパストラバーサル
リモートファイルインクルード
DoS
OS コマンドインジェクション
メモリリーク
バッファオーバーフロー
強制ブラウズ
セッション固定攻撃
LDAP インジェクション
XPath インジェクション
書式文字列攻撃
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
Web 技術、好きですか ?
「はい」に挙手した人かなり打たれ強い
or攻撃者
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
HTML5 時代の Web アプリ
次々とリリースされるブラウザ多数の新しい要素と属性
canvas, video, audio, input…多数の新しい API
Web Sockets, Web Storage, XHR Lv.2…最適化された JavaScript エンジン高速化された描画エンジン
どのブラウザにどの機能が実装されているのか把握できない
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
次々とリリースされるブラウザ
6 7 8
2001 2001 2003 2004 2006 2007 2008 2009
1 3 4
5 9 10
3.5 3.63.01.5 2.0
6 7 8
2
41 2 3
20102005
1.0
Ajax 5
2011 2012
9 10
15
23
5
11 12
6
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
HTML5 の新機能
マルチメディアのサポート<video> <audio> <canvas>...
文書構造を表す要素<section> <header> <footer> ...
フォームの拡張<input type="email"> ...
JavaScript APIWeb Workers, WebSocket, File...
その他…
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
HTML5 時代の Web アプリ
HTML5 時代のブラウザ高速化、高機能化
実行コードのブラウザ上へのシフトネイティブアプリから Web アプリへサーバ側で実行されていた処理がブラウザの
JavaScript 上へ攻撃もクライアントサイドへシフト
JavaScript 上の問題点の増加XSS や CSRF などの比重が増加
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
HTML5 時代の Web アプリ
攻撃もクライアントサイドへシフトJavaScript を通じた攻撃の比重が増加XSS のリスクも増加
多くの点から見て、 XSS 脆弱性の危険性はバッファ オーバーフローに匹敵します。 ”
“セキュリティに関するブリーフィング : Web に対する SDL の適用http://msdn.microsoft.com/ja-jp/magazine/cc794277.aspx
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
XSS おさらい
対象動的に HTML を生成する Web アプリ
問題攻撃者が用意したスクリプトが HTML 内に
挿入される対策
HTML を生成する時点でエスケープ
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
XSS おさらいhttp://shop.example.com/?item="><script>...
GET /?item="><script>...
<input type="text" value=""><script>...
HTML を生成するときのエスケープ漏れ
被害者
攻撃者
オンラインショップなど
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
XSS おさらい
被害者
攻撃者
オンラインショップなど
http://shop.example.com/?item="><script>...
<input type="text" value=""><script>...
反射型 XSSユーザの送信内容をそのまま表示する
GET /?item="><script>...
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
XSS おさらい
Subject: test mail
<html><script>...
HTML を生成するときのエスケープ漏れ
被害者
攻撃者
Web メールなど
Subject: test mail
<html><script>...
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
XSS おさらい
HTML を生成するときのエスケープ漏れ
被害者
攻撃者
Web メールなど
Subject: test mail
<html><script>...
Subject: test mail
<html><script>...
持続型 / 蓄積型 XSS 攻撃者のスクリプトはサーバ内で保持されている
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
XSS おさらい
対象動的に HTML を生成する Web アプリ
問題攻撃者が用意したスクリプトが HTML 内に
挿入される対策
HTML を生成する時点でエスケープ
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
HTML を生成する時点でエスケープ !
XSS おさらい
<html><>
1101100110010001000111011010000101001100101011011110
< → <> → >" → "' → '& → &
データ 処理 ユーザHTML 生成
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
エスケープの例外
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>
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
XSS おさらい
HTML を生成する時点でエスケープコンテキスト ( 文脈 ) に応じたエスケープコンテキストが入れ子になっているときはエ
スケープも入れ子に。<div onclick="foo('\u0022><script>…');">
URL の動的生成href 、 src 等は http,https 限定とする
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
入力時のサニタイズ
やってはいけない XSS 対策
<html><>
処理 ユーザHTML 生成
1101100110010001000111011010000101001100101011011110
データ
< → <> → >" → "' → '& → &
サニタイズ
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
やってはいけない:入力時のサニタイズ
入力時点でのデータの加工はプログラム規模が大きくなると破綻する
「サニタイズ」という語が本来の意味を失って意味不明になっている続きは Web で
サニタイズ言うな 検索
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
XSS の種類反射型 XSS / Type-1
ユーザからの送信内容をそのまま表示XSS フィルタ等である程度防御お問い合わせフォーム、サイト内検索
持続型 XSS / Type-2攻撃者のスクリプトがサーバ内で保持掲示板、 Web メール
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
XSS の種類反射型 XSS / Type-1
ユーザからの送信内容をそのまま表示XSS フィルタ等である程度防御お問い合わせフォーム、サイト内検索
持続型 XSS / Type-2攻撃者のスクリプトがサーバ内で保持掲示板、 Web メール
GET /?item="><script>...
<input type="text" value=""><script>...
※GET だけでなく POST もあり得る
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
XSS の種類
XSS フィルターはリクエストとレスポンス両方に同じスクリプトが含まれると反応
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
XSS の種類反射型 XSS / Type-1
ユーザからの送信内容をそのまま表示XSS フィルタ等である程度防御お問い合わせフォーム、サイト内検索
持続型 XSS / Type-2攻撃者のスクリプトがサーバ内で保持掲示板、 Web メール
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
XSS の種類反射型 XSS / Type-1
ユーザからの送信内容をそのまま表示XSS フィルタ等である程度防御お問い合わせフォーム、サイト内検索
持続型 XSS / Type-2攻撃者のスクリプトがサーバ内で保持掲示板、 Web メール
Subject: test
<script>...
Subject: test
<script>...
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
XSS の種類
持続型 XSS / Type-22006年 6月 mixi 「こんにちはこんにち
は」2007年 8月 Twitter 「こんにちはこんにちは」
2010年 9月 Twitter
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
XSS の種類反射型 XSS / Type-1
ユーザからの送信内容をそのまま表示XSS フィルタ等である程度防御お問い合わせフォーム、サイト内検索
持続型 XSS / Type-2攻撃者のスクリプトがサーバ内で保持掲示板、 Web メール
DOM based XSS / Type-0JavaScript が引き起こすサーバ側の HTML 生成には問題なし
//http://example.jp/#<script>alert(1)</script>div.innerHTML = location.hash;
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
DOM based XSS
JavaScript が引き起こす XSSサーバ側の HTML 生成時には問題なし
JavaScript による HTML レンダリング時の問題
JavaScript の利用に合わせて増加
//http://example.jp/#<script>alert(1)</script>div.innerHTML = location.hash;
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
DOM based XSS
location.hash を使った XSS の場合、サーバ側に攻撃の詳細が残らない
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
HTML5 が生む脆弱性
Cross-Site Scripting(XSS)要素、属性、イベントが増えている
Cross-Document Messaging(XDM)クロスドメインでのドキュメント間通信
XMLHttpRequest(XHR) Lv.2クロスドメインでの読み込み
Ajax データを利用した攻撃XSS 、データの盗み見
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
HTML5 が生む脆弱性
Cross-Site Scripting(XSS)要素、属性、イベントが増えている
Cross-Document Messaging(XDM)クロスドメインでのドキュメント間通信
XMLHttpRequest(XHR) Lv.2クロスドメインでの読み込み
Ajax データを利用した攻撃XSS 、データの盗み見
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
XSS
これまでの間違った XSS 対策危険そうな要素を検出<script> <object> <iframe>
onXXX 、 href などの名称の属性を検出<div onmouseover=alert(1)><img src=# onerror=alert(1)><a href="javascript:alert(1)>
これまで仮にこの方法で網羅できていたとしても…
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
XSS
HTML5 で多数の要素、属性、イベントが導入<input autofocus pattern="..."><video onplay="...">
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
XSS
いわゆる「ブラックリスト」での対応に漏れ
そもそもブラックリスト方式は無理がある「 HTML 生成時にエスケープ」の原則
HTML5 と関係なく XSS を防げる
<form> <button formaction="javascript:alert(1)">X </button>//http://html5sec.org/#72
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
DOM based XSS
DOM based XSS は増えているJavaScript の大規模化に伴い増加
サーバ側での対策と原則は同じHTML 生成時にエスケープURL 生成時は http(s) のみbackgroundImage への代入やイベント
ハンドラの動的生成は避ける
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
DOM based XSS
HTML 生成時にエスケープ
むしろ textNode を使おう !
div.innerHTML = s.replace( /&/g, "&" ) .replace( /</g, "<" ) .replace( />/g, ">" ) .replace( /"/g, """ ) .replace( /'/g, "'" );
div.appendChild( document.createTextElement( s ) );
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
DOM based XSS
URL 生成時は http(s) のみ
オープンリダイレクタを発生させないよう同一ホストに制限
if( url.match( /^https?:\/\// ) ){ a.setAttribute( "href", url );}
var base = location.protocol + "//" + location.host + "/";if( url.substring( 0, base.length ) == base ){ location.href = url;}
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
DOM based XSS
if( url.match( /^https?:\/\// ) ){ var elm = docuement.createElement( "a" ); elm.appendChild( document.createTextNode( url ) ); elm.setAttribute( "href", url ); div.appendChild( elm ); }
// bad codediv.innerHTML = '<a href="' + url + '">' + url + '</a>';
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
HTML5 が生む脆弱性
Cross-Site Scripting(XSS)要素、属性、イベントが増えている
Cross-Document Messaging(XDM)クロスドメインでのドキュメント間通信
XMLHttpRequest(XHR) Lv.2クロスドメインでの読み込み
Ajax データを利用した攻撃XSS 、データの盗み見
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
XDM
Cross-Document Messagingブラウザの window/iframe間で相互に通
信http://example.com/
http://example.jp/<iframe id="iframe1">
window.onmessage=function( ){}
iframe1.contentWindow.postMessage( "..." );
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
XDM
Cross-Document Messaging// メッセージ送信側iframe1.contentWindow.postMessage( " メッセージ " )
// メッセージ受信側 (iframe 内に表示 )window.onmessage = function( e ){ if( e.origin == "http://example.jp/" ){ alert( e.data ); }}
正規の相手以外と通信しないように origin を必ず確認する
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
HTML5 が生む脆弱性
Cross-Site Scripting(XSS)要素、属性、イベントが増えている
Cross-Document Messaging(XDM)クロスドメインでのドキュメント間通信
XMLHttpRequest(XHR) Lv.2クロスドメインでの読み込み
Ajax データを利用した攻撃XSS 、データの盗み見
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
XHR Lv.2
XMLHttpRequestかつては同一オリジンへのリクエストしかで
きなかったプロトコル + ホスト + ポートvar xhr = new XMLHttpRequest();xhr.open( "GET", "http://example.jp/", true ); xhr.onreadystatechange = function(){ if( xhr.readyState == 4 && xhr.status == 200 ){ alert( xhr.responseText ); }}xhr.send( null );
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
XHR Lv.2
XMLHttpRequest現在はクロスドメインでのリクエストが可能
GET / HTTP/1.1Host: another.example.jpOrigin: http://base.example.jp/
HTTP/1.1 200 OKAccess-Control-Allow-Origin: *
HTML
base.example.jp
another.example.jp
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
XHR Lv.2
XHR を利用する側は、任意ドメインからのデータを読まないようにチェック// bad code: http://example.jp/#/foo/bar.txtvar url = location.hash.substring(1);var xhr = new XMLHttpRequest();xhr.open( "GET", url, true ); xhr.onreadystatechange = function(){ if( xhr.readyState == 4 && xhr.status == 200 ){ div.innerHTML = xhr.responseText; }}xhr.send( null );
http://example.jp/#http://evil.example.jp/ などの指定で任意コンテンツを挿入可能
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
XHR Lv.2
XHR を利用する側は、任意ドメインからのデータを読まないようにチェック// bad code: http://example.jp/#/foo/bar.txtvar url = location.hash.substring(1);var xhr = new XMLHttpRequest();xhr.open( "GET", url, true ); xhr.onreadystatechange = function(){ if( xhr.readyState == 4 && xhr.status == 200 ){ div.innerHTML = xhr.responseText; }}xhr.send( null );
http://example.jp/#http://evil.example.jp/ などの指定で任意コンテンツを挿入可能
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
XHR Lv.2
XHR を利用する側は、任意ドメインからのデータを読まないようにチェック// http://example.jp/#/foo/bar.txtvar url = location.hash.substring(1);if( url.match( /^\/\w/ ) ){ var xhr = new XMLHttpRequest(); xhr.open( "GET", url, true ); ...}
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
XHR Lv.2
サーバ側 :特定の相手にのみ応答を許可
サーバ側はリクエストの Origin ヘッダを見て相手を判別してはいけない
Origin ヘッダは偽装されている可能性がある。
GET / HTTP/1.1Host: another.example.jpOrigin: http://base.example.jp/
HTTP/1.1 200 OKAccess-Control-Allow-Origin: htp://base.example.jp
リクエスト
レスポンス
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
XHR Lv.2サーバ側 :特定の相手にのみ応答を許可。
JS で明示的に指定した場合のみ Cookie が送信される
GET / HTTP/1.1Host: another.example.jpOrigin: http://base.example.jp/Cookie: sessionid=A251BBCA
HTTP/1.1 200 OKAccess-Control-Allow-Origin: htp://base.example.jpAccess-Control-Allow-Credentials: true
リクエスト
レスポンス
xhr.withCredentials = true; // JavaScript 内
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
XHR Lv.2サーバ側 :特定の相手にのみ応答を許可。
リクエストヘッダに「秘密の情報」を含める
サーバ側はリクエストヘッダ内の情報を確認して正規の通信相手か判断
クロスドメインでの setRequestHeader は癖があるので注意事前に OPTIONS 要求が発行 (preflight)https://developer.mozilla.org/en/http_access_control
xhr.setRequestHeader( "X-Secret-Key", "A251BBCA" );
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
HTML5 が生む脆弱性
Cross-Site Scripting(XSS)要素、属性、イベントが増えている
Cross-Document Messaging(XDM)クロスドメインでのドキュメント間通信
XMLHttpRequest(XHR) Lv.2クロスドメインでの読み込み
Ajax データを利用した攻撃XSS 、データの盗み見
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
Ajax データを利用した攻撃
Ajax での利用増加HTML5 とは直接は関係ない
Ajax データを利用した XSSAjax でやり取りされるデータ (JSON,text,
csv etc..) を直接ブラウザ上で開いたときに XSS
Ajax データの盗み見機密情報を含む Ajax データを受動的攻撃に
より攻撃者が盗み見る
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
Ajax データを利用した攻撃
Ajax での利用増加HTML5 とは直接は関係ない
Ajax データを利用した XSSAjax でやり取りされるデータ (JSON,text,
csv etc..) を直接ブラウザ上で開いたときに XSS
Ajax データの盗み見機密情報を含む Ajax データを受動的攻撃に
より攻撃者が盗み見る
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
Ajax データを利用した XSS
IE の Content-Type無視HTML ではないものが HTML に昇格し
て XSS例えば text/plain
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
Ajax データを利用した XSS
IE は最終的に「ファイルタイプ」に基づいてコンテンツを処理する
Content-Type 以外にも様々な要因からファイルタイプを決定文書化されていない複雑なメカニズム
「ファイルのダウンロードダイアログで表示されるファイル名の命名規則」 http://support.microsoft.com/kb/436153/jaファイルタイプ決定のメカニズム解明に近づく唯一のドキュメント
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
Ajax データを利用した XSS
ファイルタイプの決定因子"Content-Type" HTTP レスポンスヘッダ"X-Content-Type-Option" HTTP レスポ
ンスヘッダWindows レジストリにおける関連付けIE の設定 :" 拡張子ではなく、内容によって
ファイルを開く "URL 自身コンテンツそのもの
IE におけるファイルタイプ決定のメカニズム
Y N
Y
N
N
Y
有効無効
Y N
N YY N
Y N
Content-Type がレジストリに登録されている ? [ HKEY_CLASSES_ROOT\MIME\Database\Content Type ]
ファイルタイプを仮決定
外部プラグイン / アプリが必要 ?
IE8+ && "X-Content-Type-Options:nosniff"?
コンテンツを sniff しファイルタイプを決定
URL の拡張子が ".cgi" または ".exe" または "/" ? e.g. http://utf-8.jp/a.cgi?abcd, http://utf-8.jp/foo/
外部プラグイン / アプリが必要 ?プラグインを起動またはダウンロード
「拡張子ではなく、内容によってファイルを開く」設定値 仮決定したファイルタイプを使用
IE8+ && "X-Content-Type-Options:nosniff"? 仮決定したファイルタイプを使用
QUERY_STRING からファイルタイプを仮決定
プラグインを起動またはダウンロードコンテンツを sniff しファイルタイプを決定
コンテンツを sniff しファイルタイプを決定
外部プラグイン / アプリが必要 ?
URL の拡張子からファイルタイプを仮決定
ダウンロード
プラグインを起動またはダウンロードYosuke HASEGAWA http://utf-8.jp/※これ以外にも例外的な挙動が多数あり
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
Ajax データを利用した XSS
ファイルタイプ決定のメカニズムは、とにかく複雑すぎる!そもそも例外的な挙動が多いいつのまにか挙動が変化していることも多いMicrosoft 自身も挙動を把握しきれていな
いのでは
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
Ajax データを利用した XSSXSS 実例
https://www.microsoft.com/en-us/homepage/ bimapping.js/a.html?v=<script>alert(1)</script>&k...HTTP/1.1 200 OK
Content-Type: text/javascript; charset=utf-8Date: Wed, 22 Jun 2011 13:53:37 GMTContent-Length: 2092
var <script>alert(1)</script>={"Webtrends":{"enabled":true,"settings":{"interactiontype":{"0":true,"1":true,"2":true,"3":true,"4":true,"5":true,"6":true,"7":true,"8":true,"9":true,"10":true,"11":true,"12":true,"13"....
"text/javascript" はレジストリに未登録
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
Ajax データを利用した XSS
Ajax コンテンツによる XSS は以下のような状況で発生しやすいJSON - JSON 文字列内
{"text" :"<script>..." }JSONP - callback名
http://example.com/?callback=<script>...text, CSV - そもそもエスケープできない
対策の話はあとで。
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
Ajax データを利用した攻撃
Ajax での利用増加HTML5 とは直接は関係ない
Ajax データを利用した XSSAjax でやり取りされるデータ (JSON,text,
csv etc..) を直接ブラウザ上で開いたときに XSS
Ajax データの盗み見機密情報を含む Ajax データを受動的攻撃に
より攻撃者が盗み見る
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
Ajax データの盗み見
JavaScript として解釈可能な Ajaxデータが狙われやすいJavaScript の src として読み込む
<script src="target.json"></script><script src="target.csv"></script>
{"from" : "a@example.com"}
JSON
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
Ajax データの盗み見
様々な手法でブラウザごとに JSON データを奪取JSON Array Hijacking for Android JSON Hijacking for IE
JSON 以外にも CSV などは狙いやすい
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
Ajax データの盗み見
様々な手法でブラウザごとに JSON データを奪取JSON Hijacking for Android JSON Hijacking for IE
JSON 以外にも CSV などは狙いやすい
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
Array Hijacking for Android
Android では、古い JSON Hijackingの手法がまた通用するPC 用ブラウザでは 2008年頃にはすでに根絶
Android 2.2, 2.3 で確認property setter の再定義機密情報を含む JSON配列がターゲット
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
Array Hijacking for Android[ { "name" : "alice", "mail" : "alice@example.com" }, { "name" : "bob", "mail" : "bob@example.jp" },]
<script type="text/javascript"> var s = ""; Object.prototype.__defineSetter__( "mail", function( val ) { s += "mail:" + val + "\n"; } ); Object.prototype.__defineSetter__( "name", function( val ) { s += "name:" + val + "\n"; } );</script><script src="http://example.jp/target.json"></script>
攻撃対象となる JSON : http://example.jp/target.json
攻撃者の作成した罠ページ
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
Ajax データの盗み見
様々な手法でブラウザごとに JSON データを奪取JSON Hijacking for Android JSON Hijacking for IE
JSON 以外にも CSV などは狙いやすい
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
JSON Hijacking for IE
IE6,IE7 では特定条件下で JSON の奪取が可能攻撃者が JSON 内に文字列を挿入可能機密情報を含む JSON がターゲット
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
JSON Hijacking for IE
[ { "name" : "abc+MPv/fwAiAH0AXQA7-var t+AD0AWwB7ACIAIg-:+ACI-", "mail" : "hasegawa@utf-8.jp" }, { "name" : "John Smith", "mail" : "john@example.com" }]
攻撃者によって挿入
ターゲットとなる JSON : http://example.com/newmail.json
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
JSON Hijacking for IE
[ { "name" : "abc"}];var t=[{"":"", "mail" : "hasegawa@utf-8.jp" }, { "name" : "John Smith", "mail" : "john@example.com" }]
ターゲットとなる JSON : http://example.com/newmail.json
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
JSON Hijacking for IE
<script src="http://example.com/newmail.json" charset="utf-7"><script> alert( t[ 1 ].name + t[ 1 ].mail ); </script>
攻撃者は罠ページを準備して誘導
[ { "name" : "abc+MPv/fwAiAH0AXQA7-var t+AD0AWwB7ACIAIg-:+ACI-", "mail" : "hasegawa@utf-8.jp" }, { "name" : "John Smith", "mail" : "john@example.com" }]
ターゲットとなる JSON http://example.com/newmail.json[ { "name" : "abc"}];var t=[{"":"", "mail" : "hasegawa@utf-8.jp" }, { "name" : "John Smith", "mail" : "john@example.com" }]
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
JSON Hijacking for IE
<script src="http://example.com/newmail.json" charset="utf-7">攻撃者の準備した罠ページ
Content-Type: application/json; charset=utf-8
[ { "name" : "abc+MPv/fwAiAH0AXQA7-var t+AD0AWwB7ACIAIg-:+ACI-", "mail" : "hasegawa@utf-8.jp" }, { "name" : "John Smith", "mail" : "john@example.com" }]
攻撃者対象の JSON こっちが優先される
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
JSON Hijacking for IE
IE6,IE7 は HTTP レスポンスヘッダより<script> 要素の charset 属性を優先IE8 では修正されている
2008年 10月に報告したが修正されない
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
Ajax データを利用した攻撃Ajax データを利用した攻撃
Ajax データを利用した XSSAjax でやり取りされるデータ (JSON,text, csv etc..)を直接ブラウザ上で開いたときに XSS
Ajax データの盗み見機密情報を含むAjax データを受動的攻撃により攻撃者が盗み見る
対策XMLHttpRequest 以外からのアクセスを弾くX-Content-Type-Options: nosniff ヘッダエスケープ (XSS 対策 ) 、 POST only(盗み見対策 ) な
ども次善策として…
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
Ajax データを利用した攻撃への対策
XMLHttpRequest 以外からのアクセスを弾くAjax データは通常、 XHR からのリクエス
トを想定しているXHR 以外からアクセスさせないことで XSS
および盗み見を防ぐことができる
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
Ajax データを利用した攻撃への対策
XMLHttpRequest 以外からのアクセスを弾くリクエストヘッダに特定文字列を入れる
GET http://example.jp/foo.json HTTP/1.1Host: example.jpConnection: keep-aliveX-Request-With: XMLHttpRequestUser-Agent: Mozilla/5.0 (Windows NT 6.0; rv:8.0)
jQuery 、 prototype.js だと X-Request-With は自動挿入される
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
Ajax データを利用した攻撃への対策
XMLHttpRequest 以外からのアクセスを弾くリクエストヘッダに特定文字列を入れる
GET http://example.jp/foo.json HTTP/1.1Host: example.jpConnection: keep-aliveX-Request-With: XMLHttpRequestUser-Agent: Mozilla/5.0 (Windows NT 6.0; rv:8.0)
jQuery 、 prototype.js だと X-Request-With は自動挿入される
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
Ajax データを利用した攻撃への対策
X-Content-Type-Optoins:nosniffレスポンスヘッダで応答
IE8 以降で HTML扱いされることがなくなる
Content-Type: application/json; charset=utf-8X-Content-Type-Options: nosniff
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
HTML5 が生む脆弱性:まとめ
Cross-Site Scripting(XSS)これまで通りの対策の徹底
Cross-Document Messaging(XDM)origin による通信相手の確認
XMLHttpRequest(XHR) Lv.2クライアント / サーバ側とも通信相手を確認
Ajax データを利用した攻撃XMLHttpRequest からの要求のみに限定X-Content-Type-Options:nosniff ヘッダの付与
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
新しい防御機構
様々な防御機構がブラウザに追加XSS フィルター / XSS Auditor X-Content-Type-Options クリックジャッキング対策Content Security Policy
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
XSS フィルター / XSS Auditor
反射型の XSS をほぼ軽減IE8+ 、 Chrome 、 Safari に搭載
レスポンスヘッダに
の指定でフィルタを停止可能
X-XSS-Protection: 0
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
X-Content-Type-Options
Content-Type に従ってコンテンツを開く指定コンテンツ内の "sniff" を行わなくなるIE8+ で有効レスポンスヘッダに以下をつける
原則、全てのコンテンツにつけておくべき。
X-Content-Type-Options: nosniff
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
クリック !!
クリックジャッキング対策
クリックジャッキング標的サイトを透明に重ね、意図しないクリッ
ク等を引き起こす攻撃
透明表示の標的サイト
罠サイト
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
クリックジャッキング対策
frame および iframe での表示を禁止するIE8+ 、 Chrome 、 Safari 、 Opera 、 F
irefox の各ブラウザが対応レスポンスヘッダで指定// 全ての埋め込みを禁止
X-Frame-Options: DENY
// 同一オリジン以外からの埋め込みを禁止X-Frame-Options: SAMEORIGIN
http://www.jpcert.or.jp/ed/2009/ed090001.pdf
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
Content Security Policy
Content-Security-Policy(CSP)<script src> 等のソースを限定するための指令
レスポンスヘッダで指定
// 画像以外を同一ドメインに制約Content-Security-Policy: default-src 'self'; image-src *
// example.jp の script src を許可Content-Security-Policy: default-src 'self'; script-src example.jp
http://www.w3.org/TR/2012/WD-CSP-20120710/http://dvcs.w3.org/hg/content-security-policy/raw-file/tip/csp-specification.dev.html
NetAgent http://www.netagent.co.jp/security-mikan techtalk #5
質問
hasegawa@utf-8.jphasegawa@netagent.co.jp
@hasegawayosuke
http://utf-8.jp/
Recommended