Jun 13 2013 Yosuke HASEGAWA. NetAgent OWASP Japan Local Chapter Meeting #6 自己紹介 はせがわようすけ  ネットエージェント株式会社  株式会社セキュアスカイ・テクノロジー.

Slides:



Advertisements
Similar presentations
HTML5時代の Webセキュリティ Jul Yosuke HASEGAWA. NetAgent security-mikan techtalk #5 自己紹介 はせがわようすけ  ネットエージェント株式会社  株式会社セキュアスカイ・テクノロジー.
Advertisements

オリジンのはなし. NetAgent Shibuya.XSS Feb What is "Origin" ?  オリジン  Same-Origin Policy  クロスオリジンなんとか…  RFC6454 "The Web.
1 情報処理基礎 2006 年 7 月 6 日. 2 本日の学習項目 HTML 文書の基礎知識を習得する。 ホームページ・ビルダーの基本的な使 い方を習得する。 ホームページの作成 自己紹介のためのホームページを作成する。
XML ゼミ 独習 XML ~ 第 6 章 XHTML~ 6.1 XHTML の概要 6.2 XHTML の構造 谷津 哲平.
Internet Explorer 障害解析 最初の一歩 - IE のトラブルを理解する -. 概要 Internet Explorer を使用中に発生するトラブルの 種類と、調査のための切り分け方法を紹介します! (以降は IE と略称で表記します) よくあるお問い合わせ Web ページの表示が白画面のまま完了しない.
Copyright © Ariel Networks, Inc. AJAX 勉強会 アリエル・ネットワーク株式会社.
Nov Yosuke HASEGAWA #owaspjapan. OWASP Japan Local Chapter Meeting #8 #owaspjapan 自己紹介 はせがわようすけ  ネットエージェント株式会社  株式会社セキュアスカイ・テクノロジー 技術顧問  Microsoft.
Web アプリケーション開発入門 大岩研究会 今野隆平 2002 年 5 月 9 日 Introduction to Web Application Development.
1 安全性の高いセッション管理方 式 の Servlet への導入 東京工業大学 理学部 千葉研究室所属 99-2270-6 松沼 正浩.
© 2005 株式会社はてな 本資料の一部または全部の無断複製・転載を禁じます prototype.js と Perl で Ajax 株式会社はてな 伊藤 直也
1 PHP プログラムの実行(まと め) 担当 岡村耕二 月曜日 2限 平成 22 年度 情報科学 III (理系コア科目・2年生) 本資料の一部は、堀良彰准教授、天野浩文准教授、菅沼明 准教授等による以前の講義資料をもとにしています。
1 なんとなく Ajax ~新しくて古い XMLHttp 川合孝典 (Kansai.pm) 2005/5/22.
Web アプリをユーザー毎に カスタマイズ可能にする AOP フレームワーク
安全なログオン手順 2004/08/26 Port139 伊原 秀明.
The Perl Conference Japan ’98 朝日奈アンテナによる コンテンツ情報の取得と利用
Chapter11-4(前半) 加藤健.
HG/PscanServシリーズ Acrobatとなにが違うのか?
Web::Security beyond HTML5
Webサービスに関する基本用語 Masatoshi Ohishi / NAOJ & Sokendai
ネットエージェント株式会社 研究開発部 はせがわよすうけ
画像展示サイト“Fragments” 『閲覧しやすさ』と『デザイン性』を両立させた Webデザイン
サイバーセキュリティ演習 ― Webセキュリティ基礎&実践―
めんどうくさくない Bugハンティング Jul Yosuke HASEGAWA.
Webアプリケーションの 通信メカニズム WEBアプリ研究プロジェクト 第2回.
コンピュータウィルスと脆弱性 メディアコミュニケーション論Ⅲ 7/18/08.
JPAを利用した RESTful Webサービスの開発
受動的攻撃について Eiji James Yoshida penetration technique research site
Google AJAX Search APIのお勉強
IE5でアプリケーション開発 東日本計算センター 小野 修司.
Hot Pepper for iPod touch
第1回 HTML5入門.
Microsoft Office 2010 クイックガイド ~ファイルの互換性編~
XSSで使えるかもしれないJavaScriptテクニック
Keeping COMET alive サイボウズ・ラボ株式会社 奥 一穂.
第4回 個人の動画配信補足のためのWeb構築
OpenID 勉強会 (OpenID Authentication1.1)
Vulnerability of Cross-Site Scripting
第1回 JavaScriptゼミ ・ scriptエレメント ・ 記述における諸注意 ・ 古いブラウザへの対応方法
Piggy Bank: Experience the Semantic Web Inside Your Web Browser
HTTPプロトコルとJSP (1) データベース論 第3回.
JQueryでAjax 藤田@ジャストプレイヤー ※参考しまくり文献 jQuery日本語リファレンス.
押さえておきたいIE8の セキュリティ新機能
HTTPプロトコル J2EE I 第7回 /
情報コミュニケーション入門 総合実習(1) 基礎知識のポイント(2)
基礎プログラミング演習 第1回.
実際にたたいてAPI APIの初歩からプログラムまで使用方法のAtoZ.
第8章 Web技術とセキュリティ   岡本 好未.
型付きアセンブリ言語を用いた安全なカーネル拡張
卒業論文発表 「Web アクセスに伴う脅威の特徴分析」
ガジェット・マスターへの まわり道!? ~Ajaxを理解しよう~
対応可否 スキル一覧 株式会社エージェント 2015年10月7日 Ver.1.0.
独習XML 第2章 XML文書の構成要素 2.1 XMLの文字と文字列 2.2 コメント
セキュリティ 05A2013 大川内 斉.
第7回JavaScriptゼミ セクション4-5 発表者 直江 宗紀.
Webセキュリティ 情報工学専攻 1年 赤木里騎 P226~241.
Webプロキシ HTTP1.0 ヒント CS-B3 ネットワークプログラミング  &情報科学科実験I.
Cisco Configuration Professional Express 3.3 アップデート
コンピュータ プレゼンテーション.
情報コミュニケーション入門b 第11回 Web入門(2)
仮想環境を用いた 侵入検知システムの安全な構成法
情報コミュニケーション入門e 第12回 Part1 Web入門(2)
JavaScriptを含んだHTML文書に対する データフロー解析を用いた構文検証手法の提案
Webアプリケーションと JSPの基本 ソフトウェア特論 第4回.
Webページに動きを持たせるJavascript言語について 例題のプログラムを通して体験的に理解することとします。
情報コミュニケーション入門e 第12回 Part1 Web入門(2)
使用する CSS・JavaScrpitも指定
Microsoft Office 2010 クイックガイド ~ファイルの互換性編~
例題のプログラムを通して JavaScriptの仕組みを理解することとします。
アプリケーションゲートウェイ実験 2001.10.5 鬼塚 優.
HTTPプロトコルの詳細 M1 峯 肇史.
Presentation transcript:

Jun Yosuke HASEGAWA

NetAgent OWASP Japan Local Chapter Meeting #6 自己紹介 はせがわようすけ  ネットエージェント株式会社  株式会社セキュアスカイ・テクノロジー 技術顧問  Microsoft MVP for Consumer Security Oct 

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

NetAgent OWASP Japan Local Chapter Meeting #6 HTML5の新機能  マルチメディアのサポート...  文書構造を表す要素...  フォームの拡張...  JavaScript API Web Workers, WebSocket, File...  その他…

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

NetAgent OWASP Japan Local Chapter Meeting #6 HTML5で増加する脅威  XSS  HTML5の新要素によるXSS  JSコード量の増加 – DOM Based XSS  AjaxデータによるXSS  CSRF  XMLHttpRequestで攻撃者有利  オープンリダイレクタ  JavaScriptによるリダイレクトの増加  その他  Ajaxデータからの情報漏えい  APIの使い方の問題  Web Storage、Canvas、WebWorkers…

NetAgent OWASP Japan Local Chapter Meeting #6 HTML5で増加する脅威  攻撃もクライアントサイドへシフト  JavaScriptを通じた攻撃の比重が増加  XSSのリスクも増加 多くの点から見て、XSS 脆弱性の危険性 はバッファ オーバーフローに匹敵します。 ” “ セキュリティに関するブリーフィング : Web に対する SDL の適用

NetAgent OWASP Japan Local Chapter Meeting #6 SOP & CORS  近代的なWebにおけるセキュリティ確保 のためのコンセプト  SOP - Same-Origin Policy  CORS – Cross-Origin Resource Sharing

NetAgent OWASP Japan Local Chapter Meeting #6 Same-Origin Policy  Origin - オリジン  RFC6454 “The Web Origin Concept”  オリジン = スキーム + ホスト + ポート

NetAgent OWASP Japan Local Chapter Meeting #6 オリジン = スキーム+ホスト+ポート  スキーム + ホスト + ポート      file:、data:、javascript:等のスキーム は実装依存

NetAgent OWASP Japan Local Chapter Meeting #6 オリジン = スキーム+ホスト+ポート  正規化した表現方法  "     location.origin - WebKit系ブラウザ

NetAgent OWASP Japan Local Chapter Meeting #6 オリジン = スキーム+ホスト+ポート  オリジンに基づく制約  XMLHttpRequest  Web Storage  X-Frame-Options  オリジン以外に基づく制約  Cookie  HTTP Authentication  document.domain

NetAgent OWASP Japan Local Chapter Meeting #6 オリジン = スキーム+ホスト+ポート オリジンに基づく制約  XMLHttpRequest  同一オリジンでない場合は明示的な許可なしには レスポンスは読めない  Web Storage  オリジン単位で保存。オリジンを超えての読み書 きは不可  X-Frame-Options  X-FRAME-OPTIONS:SAMEORIGIN によりオリジン 単位でフレーム許可

NetAgent OWASP Japan Local Chapter Meeting #6 オリジン = スキーム+ホスト+ポート オリジン以外に基づく制約  Cookie  デフォルトではhttp、httpsで共有される  domain、pathによる指定  HTTP Authentication  ディレクトリ単位で制限  document.domain  document.domainの書き換えにより異な るオリジン間でドキュメントの共有が可能

NetAgent OWASP Japan Local Chapter Meeting #6  document.domainは書き換え可能  ポート、プロトコルは同一であること document.domain // parent.example.jp... document.domain = "example.jp"; alert( frames[0].document.body.innerHTML ); // child.example.jp document.domain = "example.jp";

NetAgent OWASP Japan Local Chapter Meeting #6 Same-Origin Policy  Same-Origin Policy  オリジンを境界としてリソースの読み書きを 保護する仕組みの総称  新しい機構はSOPで制約  古くからの機構はSOP以外で制約

NetAgent OWASP Japan Local Chapter Meeting #6 クロスオリジンでのアクセス  Cross-Origin Resource Sharing   クロスオリジンでリソースにアクセスす るルールを定義  XMLhttpRequest Level 2 ,,CSS... Firefox,Opera,Chrome,Safari

NetAgent OWASP Japan Local Chapter Meeting #6 XHR with CORS // var xhr = new XMLHttpRequest(); xhr.open( "GET", " true ); xhr.onreadystatechange = function(){... }; xhr.send( null ); GET / HTTP/1.1 Host: another.example.jp User-Agent: Mozilla/5.0 (Windows NT 6.1)... Origin: HTTP/ OK Date: Tue, 28 Feb :34:56 GMT Access-Control-Allow-Origin: Content-Type: text/html; charset=utf-8...

NetAgent OWASP Japan Local Chapter Meeting #6 XHR with CORS // var xhr = new XMLHttpRequest(); xhr.open( "GET", " true ); xhr.withCredentials = true; xhr.onreadystatechange = function(){... }; xhr.send( null ); GET / HTTP/1.1 Host: another.example.jp User-Agent: Mozilla/5.0 (Windows NT 6.1)... Cookie: sessionid=135A2387BC12EE0F Origin: HTTP/ OK Date: Tue, 28 Feb :34:56 GMT Access-Control-Allow-Origin: Content-Type: text/html; charset=utf-8...

NetAgent OWASP Japan Local Chapter Meeting #6,,CSS with CORS // <img src=" crossorigin="anonymous"> GET /takahiro.jpg HTTP/1.1 Host: another.example.jp User-Agent: Mozilla/5.0 (Windows NT 6.1)... Origin: HTTP/ OK Date: Tue, 28 Feb :34:56 GMT Access-Control-Allow-Origin: Content-Type: image/jpeg... Originがつき、Cookieは送信されない Canvas経由で読み取り可能になる

NetAgent OWASP Japan Local Chapter Meeting #6,,CSS with CORS // <img src=" crossorigin="use-credentials"> GET /takahiro.jpg HTTP/1.1 Host: another.example.jp User-Agent: Mozilla/5.0 (Windows NT 6.1)... Cookie: sessionid=135A2387BC12EE0F Origin: HTTP/ OK Date: Tue, 28 Feb :34:56 GMT Access-Control-Allow-Origin: Content-Type: image/jpeg... Canvas経由で読み取り可能になる

NetAgent OWASP Japan Local Chapter Meeting #6 Access-Control-Allow-Origin  Access-Control-Allow-Origin: *  誰からでも読み取り可能  機密情報を含むコンテンツの場合、罠ページ からも読み取られれてしまう! HTTP/ OK Date: Tue, 28 Feb :34:56 GMT Access-Control-Allow-Origin: * Content-Type: text/html...

NetAgent OWASP Japan Local Chapter Meeting #6 ここまでのまとめ  オリジン  スキーム、ホスト、ポートの組み合わせ  SOP – Same-Origin Policy  オリジンを境界としてリソースの読み書きを保護 する仕組みの総称  CORS – Cross-Origin Resource Sharing  オリジンを超えてリソースを共有するためのルー ル  ブラウザを狙う攻撃はSOP回避の受動的攻撃

NetAgent OWASP Japan Local Chapter Meeting #6 HTML5の新要素によるXSS  これまでの間違ったXSS対策  危険そうな要素を検出  onXXX、hrefなどの名称の属性を検出  これまで仮にこの方法で網羅できていた としても …

NetAgent OWASP Japan Local Chapter Meeting #6 HTML5の新要素によるXSS  HTML5で多数の要素、属性、イベントが 導入

NetAgent OWASP Japan Local Chapter Meeting #6 HTML5の新要素によるXSS  いわゆる「ブラックリスト」での対応に 漏れ  そもそもブラックリスト方式は無理がある  「HTML生成時にエスケープ」の原則  HTML5と関係なくXSSを防げる X //

NetAgent OWASP Japan Local Chapter Meeting #6 DOM based XSS  JavaScriptが引き起こすXSS  サーバ側のHTML生成時には問題なし  JavaScriptによるHTMLレンダリング時の問題  JavaScriptの利用に合わせて増加 // alert(1) div.innerHTML = location.hash.substring(1);

NetAgent OWASP Japan Local Chapter Meeting #6 DOM based XSS

NetAgent OWASP Japan Local Chapter Meeting #6 DOM based XSS

NetAgent OWASP Japan Local Chapter Meeting #6 DOM Based XSS  ブラウザのXSSフィルタを通過 することが多い  location.hash内の実行コードはサーバ側に ログが残らない  history.pushStateでアドレスバー書き換 え  技術のあるユーザでもXSSに気づきにくい // alert(1) div.innerHTML = location.hash.substring(1);

NetAgent OWASP Japan Local Chapter Meeting #6 DOM Based XSS  IE6のlocation.searchは壊れている  URLの#よりうしろの?以降が location.searchに設定される  XSSの実行コードがサーバ側に送信され ず、ログに残らない // div.innerHTML = location.search.substring(1);

NetAgent OWASP Japan Local Chapter Meeting #6 DOM based XSS  DOM based XSSは増えている  JavaScriptの大規模化に伴い増加  サーバ側での対策と原則は同じ  HTML生成時にエスケープ  URL生成時はhttp(s)のみ  CSS backgroundImage等への代入やイベ ントハンドラの動的生成は避ける

NetAgent OWASP Japan Local Chapter Meeting #6 DOM based XSS  HTML生成時にエスケープ  むしろtextNodeを使おう! div.innerHTML = s.replace( /&/g, "&" ).replace( /</g, "<" ).replace( />/g, ">" ).replace( /"/g, """ ).replace( /'/g, "'" ); div.appendChild( document.createTextElement( s ) );

NetAgent OWASP Japan Local Chapter Meeting #6 DOM based XSS  URL生成時はhttp(s)のみ if( url.match( /^https?:\/\// ) ){ var elm = docuement.createElement( "a" ); elm.appendChild( document.createTextNode( url ) ); elm.setAttribute( "href", url ); div.appendChild( elm ); } // bad code div.innerHTML = ' ' + url + ' ';

NetAgent OWASP Japan Local Chapter Meeting #6 DOM based XSS  URL生成時はhttp(s)のみ  リダイレクト時はオープンリダイレクタ を発生させないよう同一ホストに制限 var base = location.protocol + "//" + location.host + "/"; if( url.substring( 0, base.length ) == base ){ location.href = url; }

NetAgent OWASP Japan Local Chapter Meeting #6 DOM based XSS  URLの確認は実はめんどうくさい。  詳細は「めんどうくさいWebセキュリティ」 参照

NetAgent OWASP Japan Local Chapter Meeting #6 XSS with Ajax data  Ajaxデータを利用したXSS  Ajaxでやり取りされるデータ(JSON,text, csv etc..)を直接ブラウザ上で開いたときに XSS  IEのContent-Type無視に起因

NetAgent OWASP Japan Local Chapter Meeting #6 XSS with Ajax data  IEのContent-Type無視  HTMLではないものがHTMLに昇格して XSS  例えばtext/plain

NetAgent OWASP Japan Local Chapter Meeting #6 XSS with Ajax data  IEは最終的に「ファイルタイプ」に基づいて コンテンツを処理する  Content-Type 以外にも様々な要因から ファイルタイプを決定  文書化されていない複雑なメカニズム  「ファイルのダウンロードダイアログで表示され るファイル名の命名規則」 ファイルタイプ決定のメカニズム解明に近づく唯一のドキュメント

NetAgent OWASP Japan Local Chapter Meeting #6 XSS with Ajax data  ファイルタイプの決定因子  "Content-Type" HTTPレスポンスヘッダ  "X-Content-Type-Option" HTTPレスポ ンスヘッダ  Windowsレジストリにおける関連付け  IEの設定:"拡張子ではなく、内容によって ファイルを開く"  URL自身  コンテンツそのもの

IEにおけるファイルタイプ決定のメカニズム 46 Y N Y N N Y 有効 無効 YN NYYN YN Content-Type がレジストリに登録されている ? [ HKEY_CLASSES_ROOT\MIME\Database\Content Type ] ファイルタイプを仮決定 外部プラグイン / アプリが必要 ? IE8+ && "X-Content-Type-Options:nosniff"? コンテンツを sniff しファイルタイプを決定 URL の拡張子が ".cgi" または ".exe" または "/" ? e.g. 外部プラグイン / アプリが必 要 ? プラグインを起動またはダウン ロード 「拡張子ではなく、内容に よってファイルを開く」設定 値 仮決定 した ファイルタイプを使用 IE8+ && "X-Content-Type-Options:nosniff"? 仮決定したファイルタイプを使用 QUERY_STRING からファイルタイプを 仮決定 プラグインを起動 またはダウンロー ド コンテンツを sniff し ファイルタイプを決 定 コンテンツを sniff し ファイルタイプを決 定 外部プラグイン / アプリが必要 ? URL の拡張子からファイルタイプを 仮決定 ダウンロー ド プラグインを起動 またはダウンロー ド Yosuke HASEGAWA ※これ以外にも例外的な挙動が多数あり

NetAgent OWASP Japan Local Chapter Meeting #6 XSS with Ajax data  ファイルタイプ決定のメカニズムは、と にかく複雑すぎる!  そもそも例外的な挙動が多い  いつのまにか挙動が変化していることも多い  Microsoft自身も挙動を把握しきれていない のでは

NetAgent OWASP Japan Local Chapter Meeting #6 XSS with Ajax data  XSS実例 bimapping.js/a.html?v= alert(1) &k... HTTP/ OK Content-Type: text/javascript; charset=utf-8 Date: Wed, 22 Jun :53:37 GMT Content-Length: 2092 var alert(1) ={"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,"1 0":true,"11":true,"12":true,"13".... "text/javascript" はレジストリに未登録

NetAgent OWASP Japan Local Chapter Meeting #6 XSS with Ajax data  XSS実例

NetAgent OWASP Japan Local Chapter Meeting #6 XSS with Ajax data  AjaxコンテンツによるXSSは以下のよう な状況で発生しやすい  JSON - JSON文字列内 {"text" :"..." }  JSONP - callback名  text, CSV - そもそもエスケープできない

NetAgent OWASP Japan Local Chapter Meeting #6 XSS with Ajax data  対策  X-Content-Type-Options: nosniffヘッダ IE8以上で有効、非HTMLをHTMLへ昇格させない  XMLHttpRequest以外からのアクセスを弾く X-Request-Withリクエストヘッダを付与 ※両方とも対応しておくほうがよい

NetAgent OWASP Japan Local Chapter Meeting #6 XSS with Ajax data  X-Content-Type-Options: nosniff  コンテンツ内の "sniff" を行わなくなる  IE8+で有効  レスポンスヘッダに以下をつける  原則、全てのコンテンツにつけておくべ き。 X-Content-Type-Options: nosniff

NetAgent OWASP Japan Local Chapter Meeting #6 XSS with Ajax data  XMLHttpRequest以外からのアクセスを 弾く  Ajaxデータは通常、XHRからのリクエスト を想定している  XHR以外からアクセスさせないことでXSSお よび盗み見を防ぐことができる

NetAgent OWASP Japan Local Chapter Meeting #6 XSS with Ajax data  XMLHttpRequest以外からのアクセスを 弾く  リクエストヘッダに特定文字列を入れる var xhr = new XMLHttpRequest(); xhr.open("GET", " xhr.onreadystatechange = function(){... }; xhr.setRequestHeader("X-Request-With", "XMLHttpRequest"); xhr.send( null ); jQuery、prototype.js だと X-Request-With は自動挿入される

NetAgent OWASP Japan Local Chapter Meeting #6 XSS with Ajax data  XMLHttpRequest以外からのアクセスを 弾く  リクエストヘッダに特定文字列を入れる GET HTTP/1.1 Host: example.jp Connection: keep-alive X-Request-With: XMLHttpRequest User-Agent: Mozilla/5.0 (Windows NT 6.0; rv:8.0) jQuery、prototype.js だと X-Request-With は自動挿入される

まとめ Conclusion

NetAgent OWASP Japan Local Chapter Meeting #6 XSS beyond HTML5  XSSの増加  HTML5の新要素によるXSS  JSコード量の増加 – DOM Based XSS  AjaxデータによるXSS

NetAgent OWASP Japan Local Chapter Meeting #6 XSS beyond HTML5  対策は従来と大きくは変わらない  「HTML生成時にエスケープ」の原則  URL生成時はhttp(s)スキームのみ許可  X-Content-Type-Optionsはとにかく付け ておけ  攻撃可能な箇所は増える  新しいHTML要素、属性、イベント  JSコード量の増加  Ajax使用量の増加

質問タイム Question ?

NetAgent OWASP Japan Local Chapter Meeting #6 質問 @hasegawayosuke