Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

HTML5 Security & Headers - X-Crawling-Response-Header - by 重森 友行

1,757 views

Published on

HTML5の利用により、Webサイト閲覧者のブラウザ内でのデータ格納、クライアントとサーバ間での双方向通信、位置情報の取得など利便性の高いWebサイトの構築が可能となる一方で、それらの新技術が攻撃者に悪用された際にWebサイト閲覧者が受ける影響に関して、十分に検証や周知がされているとは言えず、セキュリティ対策がされないまま普及が進むことが危惧されている。
JPCERT/CCでは、2013年10月に「HTML5 を利用したWebアプリケーションのセキュリティ問題に関する調査報告書」を公開した。本報告書の調査は、HTML5 を利用した Web アプリケーションを開発する際に注意すべき点や、HTML5 への移行が Web アプリケーションのセキュリティに及ぼす影響などについて、現時点における知見を可能な限り体系的に整理し、Web セキュリティ研究者および Webアプリケーション開発者のための基礎資料を提供することを目指した。
本講演では、この調査報告書をもとに、HTML5 を利用した Web アプリケーション開発時のセキュリティ上の注意点をデモを交えて対策とともに紹介する。また、約 95 万サイトを対象としたレスポンスヘッダのデータから見えてきた、HTML5 を利用したWeb アプリケーションの危険な実装とその対策や、HTML5 を使用した Web アプリケーションのセキュリティに関する現状なども併せて紹介する。

重森 友行 - Tomoyuki Shigemori

一般社団法人JPCERTコーディネーションセンター 早期警戒グループ 情報セキュリティアナリスト。
JPCERT/CC 早期警戒グループ情報分析ラインにおいて情報セキュリティアナリストとして従事。主に情報収集や早期警戒情報のf提供などを行っている。
オープンソースカンファレンス 2013 .Enterprise、Parallels Summit 2013 Japan など、非公開のものも含めた多数の講演を行い、 「サイバー攻撃からビジネスを守る(NTT出版)」等の書籍の共著も行っている。

Published in: Technology
  • Be the first to comment

HTML5 Security & Headers - X-Crawling-Response-Header - by 重森 友行

  1. 1. HTML5 Security & Headers - X-Crawling-Response-Header- 一般社団法人JPCERTコーディネーションセンター 早期警戒グループ 情報セキュリティアナリスト 重森 友行
  2. 2. Copyright©2014 JPCERT/CC All rights reserved. JPCERT/CCとは 1 一般社団法人JPCERTコーディネーションセンター (JPCERT/CC (ジェーピーサート・コーディネーションセンター)) Japan Computer Emergency Response Team Coordination Center — https://www.jpcert.or.jp/ — サービス対象: 日本国内のインターネット利用者やセキュリティ管理担当 者、ソフトウエア製品開発者等(主に、情報セキュリティ担当者) — コンピュータセキュリティインシデントへの対応、国内外にセンサをおい たインターネット定点観測、ソフトウエアや情報システム・制御システム 機器等の脆弱性への対応などを通じ、セキュリティ向上を推進 — インシデント対応をはじめとする、国際連携が必要なオペレーションや情 報連携に関する、我が国の窓口となる CSIRT ※各国に同様の窓口となる CSIRTが存在する (例えば、米国のUS-CERT 、中国のCNCERT, 韓国のKrCERT/CC、など) 経済産業省からの委託事業として、コンピュータセキュリティ早期警 戒体制構築運用事業を実施
  3. 3. Copyright©2014 JPCERT/CC All rights reserved. 脆弱性情報ハンドリング 情報収集・分析・発信 定点観測(TSUBAME)  未公開の脆弱性関連情報を製品開発者 へ提供し、対応依頼  関係機関と連携し、国際的に情報公開日 を調整  セキュアなコーディング手法の普及  制御システムに関する脆弱性関連情報の 適切な流通 1 2/9 ポートスキャンの平均値 = 全センサーのポートスキャン合計 ポートスキャンの上位 5位を表示 (ICM Pは常に表示、otherはその他合計)センサー合計 (単位:時間) 1 2/1 0 1 2/1 1 1 2/1 2 1 2/1 3 1 2/1 4 Data 0 5 1 0 1 5 2 0 2 5 3 0 ICM P TCP 1 35 TCP 4 4 5 U DP 1 37 TCP 1 39 TCP 1 02 5 other 早期警戒情報 重要インフラ、重要情報インフラ事業者等の特定組織向け情報発信 CSIRT構築支援 海外のNational-CSIRTや企業内のセキュリティ対応組織の構築・運用支援  ネットワークトラフィック情報の収集分 析  セキュリティ上の脅威情報の収集、分析、 必要とする組織への提供 アーティファクト分析 マルウエア(不正プログラム)等の攻撃手法の分析、解析 国際連携 各種業務を円滑に行うための海外関係機関との連携  マルウエアの接続先等の攻撃関連サイト 等の閉鎖等による被害最小化  攻撃手法の分析支援による被害可能性 の確認、拡散抑止  再発防止に向けた関係各関の情報交換 及び情報共有 インシデントの予測と捕捉インシデント予防 発生したインシデントへの対応 - JPCERT/CCをご存知ですか? - JPCERT/CCの活動 インシデントハンドリング (インシデント対応調整支援) 2
  4. 4. Copyright©2014 JPCERT/CC All rights reserved. HTML5とは 従来のHTMLに代わる次世代のHTML ブラウザでのデータ格納、クライアントとサーバ間での双方向通信、 位置情報の取得など、従来のHTMLよりも柔軟かつ利便性の高い Web サイトの構築が可能となる 日本を含むアジア太平洋地域においても急速に普及が進みつつある 最近のブラウザの多くは、HTML5に対応している(一部実装されて いない機能もある) 3 クロス ドメイン 通信 双方向 通信 マルチ メディア 対応 UIの 向上 高速化 オフライン アプリケー ション
  5. 5. Copyright©2014 JPCERT/CC All rights reserved. HTML5とは 従来のHTMLに代わる次世代のHTML ブラウザでのデータ格納、クライアントとサーバ間での双方向通信、 位置情報の取得など、従来のHTMLよりも柔軟かつ利便性の高い Web サイトの構築が可能となる 日本を含むアジア太平洋地域においても急速に普及が進みつつある 最近のブラウザの多くは、HTML5に対応している(一部実装されて いない機能もある) 4 従来のHTMLでは影響のなかっ たケースが、ブラウザのHTML5 対応により、脆弱性となってし まうケースが存在する 利便性が向上する一方で、それ らの新技術が攻撃者に悪用され た際にユーザが受ける影響に関 して、十分に検証や周知がされ ているとは言えない DoS 情報 漏えい XSS CSRF オープン リダイレクト
  6. 6. Copyright©2014 JPCERT/CC All rights reserved. HTML5 を利用したWeb アプリケーションの セキュリティ問題に関する調査報告書 10月30日に公開 https://www.jpcert.or.jp/research/html5.html 5
  7. 7. Copyright©2014 JPCERT/CC All rights reserved. 報告書の使い方 技術書・ガイドラインのベース資料 仲間内の勉強会資料 セミナの参考資料 などにどうぞ 引用・転載にあたっては以下を参照してください。 JPCERT/CC ご利用にあたってのお願い https://www.jpcert.or.jp/guide.html 記載例) 引用元: JPCERTコーディネーションセンター 「HTML5 を利用したWeb アプリケーションのセキュリティ問題 に関する調査報告書」 https://www.jpcert.or.jp/research/HTML5-20131030.pdf 6
  8. 8. Copyright©2014 JPCERT/CC All rights reserved.7 JavaScript API XMLHttpRequest
  9. 9. Copyright©2014 JPCERT/CC All rights reserved. XMLHttpRequest(XHR)概要 8 XMLHttpRequest(XHR)とは —JavaScriptでHTTP通信を行うためのAPI —非同期通信によりインタラクティブな表現が可能 —AJAXの普及に伴い使用される機会が増加 —HTML5以前は同一オリジンとの通信のみに制限されていた ※オリジン: ホスト・ポート・スキームの組み合わせ Java Script Access-Control-Allow-Origin: 許可するオリジン or * example.jp other.example.jp Origin: 読み込み元オリジン Cookieを許可するためには別途Access-Control-Allow-Credentialsが必要 HTML5のXHR
  10. 10. Copyright©2014 JPCERT/CC All rights reserved. HTML5の現状 9
  11. 11. Copyright©2014 JPCERT/CC All rights reserved. 以前に行われた調査 2012年11月に行われた2539サイトに対する調査 Access-Control-Allow-Origin以外のCORS関連のヘッダの 状況は?? 10 引用元:http://www.veracode.com/blog/2012/11/security-headers-report/ 約0.25% のサイトがCORSに対応
  12. 12. Copyright©2014 JPCERT/CC All rights reserved. HTML5の利用についての調査 HTML5の利用状況について確認するため、以下を調査した —CORS関連ヘッダ(*1)の利用状況 —セキュリティ関連ヘッダ(*2)の利用状況 調査方法 —Alexa Top 1,000,000 (*3)に含まれるサイトのトップページをク ロール —CurlコマンドのレスポンスのHTTPヘッダを調査 —リダイレクトされる場合は、最終リダイレクト先が対象 —送信するリクエストには、Originリクエストヘッダを追加 —調査期間は、2013/12/26 – 2013/12/30 11 (*1) CORSで使われるヘッダ名が「Access-Control-」から始まるレスポンスヘッダ (*2) 調査報告書で紹介したセキュリティ関連機能に関するヘッダ (*3) http://www.alexa.com/topsites
  13. 13. Copyright©2014 JPCERT/CC All rights reserved. CORS関連レスポンスヘッダ Access-Control-Allow-Origin —リソースへのアクセスを許可するオリジンを指定 Access-Control-Allow-Credentials —Cookie等の認証情報を含んだリクエストに対するレスポン スへのアクセスを許可する場合にtrueを指定 Access-Control-Expose-Headers —ブラウザが使用してもよいヘッダを指定 Access-Control-Allow-Methods(プリフライト) —送信を許可するメソッドを指定 Access-Control-Allow-Headers(プリフライト) —送信を許可するヘッダを指定 Access-Control-Max-Age(プリフライト) —プリフライトレスポンスをキャッシュする時間を指定 12
  14. 14. Copyright©2014 JPCERT/CC All rights reserved. セキュリティ関連レスポンスヘッダ X-XSS-Protection —XSS攻撃からの保護 X-Content-Type-Options —Content-Typeヘッダに従ったコンテンツの取り扱い X-Frame-Options —フレームへの埋め込みを制限 Content-Security-Policy —コンテンツの読み込み元を制限 Content-Disposition —ファイルのダウンロードダイアログの制御 Strict-Transport-Security —HTTPSの強制 13
  15. 15. Copyright©2014 JPCERT/CC All rights reserved. 調査結果 14
  16. 16. Copyright©2014 JPCERT/CC All rights reserved. CORS対応状況 15 レスポンスを受け取ったサイト数は、949,217サイト CORS対応サイト(*)は、7218サイト CORS対応サイトは、全体の約0.76% 0 1000 2000 3000 4000 5000 6000 7000 8000 CORS関連ヘッダ(Access-Control-xxx) 941999 7218 CORS対応サイト 非対応 対応 (*) CORS関連ヘッダを返してきたWebサイト
  17. 17. Copyright©2014 JPCERT/CC All rights reserved. Access-Control-Allow-Origin 約5.4%のサイトが誤った設定を行っていた 誤った設定では、設定された値は無視されるため、Acecss- Control-Allow-Originヘッダを設定しても効果がない 16 6650 377 Access-Control-Allow-Origin の設定 正しい設定 誤った設定 4741 1909 設定値(正しい設定のみ) * オリジン
  18. 18. Copyright©2014 JPCERT/CC All rights reserved. Access-Control-Allow-Originの設定 正しい設定 —scheme://host[:port][ scheme://host[:port]]* (※1) —null —* 誤った設定の例(いずれの設定も無効) —スキームなし: example.com —カンマ区切りで複数: http://example1.com,http://example2.com —ワイルドカード使用: http://*.example.com —オリジンの末尾に /: http://example.com/ —複数のヘッダ: http://example1.com http://example2.com 内容を理解せず安易にヘッダを付加した場合、アクセス制限が弱 まり脆弱となる場合があることに注意 ※1:スペース区切りの複数オリジンの記載は、ブラウザの実装に よっては、禁止されている場合がある 17
  19. 19. Copyright©2014 JPCERT/CC All rights reserved. Access-Control-Allow-Origin Access-Control-Allow-Originの設定を正しく行っている Webサイトのうち —約71%が値に*を設定 ⇒全てのWebサイトからのCORSを許可 —約29%が値にオリジンを設定 ⇒オリジンで指定したWebサイトからのCORSのみを許可 18 6650 377 Access-Control-Allow-Origin の設定 正しい設定 誤った設定 4741 1909 設定値(正しい設定のみ) * オリジン
  20. 20. Copyright©2014 JPCERT/CC All rights reserved. Access-Control-Allow-Credentials Access-Control-Allow-Credentialsを設定しているサイトは、 CORS対応サイト全体の約22% 設定値は「true」のみが意味を持つ設定値。それ以外は全て 「true」が設定されていない場合と同様の動作となるが 「false」と指定されているものも複数存在 19 5622 1525 71 Access-Control-Allow-Credentials 設定なし TRUE FALSE
  21. 21. Copyright©2014 JPCERT/CC All rights reserved. Access-Control-Allow-Credentials Access-Control-Allow-Credentialsにtrueを指定する場合、 Access-Control-Allow-Originに*を使うことはできないが163 サイトが*を設定 意図したとおりの動作となっているか事前に確認を 20 4573 163 4 Access-Control-Allow- Credentials 設定なし TRUE FALSE 599 1250 2 Access-Control-Allow- Credentials 設定なし TRUE FALSE Access-Control-Allow-Originに *を設定しているWebサイト Access-Control-Allow-Originに 適切にオリジンを設定しているWebサイト
  22. 22. Copyright©2014 JPCERT/CC All rights reserved. Access-Control-Allow-Credentials Access-Control-Allow-Originでオリジンを指定しているサイ トの約68%で、Access-Control-Allow-Credentialsの値にtrue を指定 21 4573 163 4 Access-Control-Allow- Credentials 設定なし TRUE FALSE 599 1250 2 Access-Control-Allow- Credentials 設定なし TRUE FALSE Access-Control-Allow-Originに *を設定しているWebサイト Access-Control-Allow-Originに 適切にオリジンを設定しているWebサイト
  23. 23. Copyright©2014 JPCERT/CC All rights reserved. Access-Control-Allow-Origin 上記例のスポンスヘッダが返った場合、http://example.com から読み込んだJavaScriptは、ユーザがブラウザを操作する 場合と同様のふるまいをすることが可能。 ⇒Access-Control-Allow-Originで指定したサイトで、任意の JavaScriptが実行できる場合、非常に危険な状況となる 脆弱性がなければ大丈夫? 22 送られるレスポンスヘッダ例:trueの場合 Access-Control-Allow-Origin: http://example.com Access-Control-Allow-Credentials: true 599 1250 2 Access-Control-Allow- Credentials 設定なし TRUE FALSE Access-Control-Allow-Originに 適切にオリジンを設定しているWebサイト
  24. 24. Copyright©2014 JPCERT/CC All rights reserved. マッシュアップサイトの場合 23 X さんの画像 マッシュアップ元サイト マッシュアップサイトB マッシュアップサイトA お気に入り画像を 背景として利用 お気に入り画像の 関連商品を提供 A-C-Allow-Origin:siteB A-C-Allow-Credentials:true A-C-Allow-Origin: siteA A-C-Allow-Credentials:true Origin: siteA Origin: siteB 各サイトにCookie付き CORSを許可するため、 レスポンスヘッダを動的 に生成 Cookie
  25. 25. Copyright©2014 JPCERT/CC All rights reserved. 危険な動作の例 24 X さんの画像 マッシュアップ元サイト 悪意あるサイト (evil.examle.com) A-C-Allow-Origin: http://evil.example.com A-C-Allow-Credentials:true Origin: http://evil.example.com 外部に送信 個人情報 漏えい Cookie Xさん
  26. 26. Copyright©2014 JPCERT/CC All rights reserved. XHR2を用いた他源泉リクエスト 25 IPA セキュアプログラミング講座 Webアプリケーション編 https://www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/704.html
  27. 27. Copyright©2014 JPCERT/CC All rights reserved. Access-Control-Allow-Origin 194サイトが、送ったOriginヘッダの値を、Access- Control-Allow-Originヘッダにそのまま設定して返送!! 認証済みのユーザのみに限定すべきページでも上記動作を 行っている場合、情報が盗まれる可能性がある さらに、トークンによるCSRF対策が回避されるケースも 26 194 1056 実際のAllow-Originの値 http://example.com その他オリジン 今回の調査で 実際に送ったリクエスト: GET / HTTP/1.1 HOST: <target> Origin: http://example.com
  28. 28. Copyright©2014 JPCERT/CC All rights reserved. CSRFによるパスワード変更 27 token=2a8bc84e token=2a8bc84e GET /passwd HTTP/1.1 Origin: http://evil.com POST /passwd HTTP/1.1 newpwd=infected& token発行 Cookie Cookie token検証 Java Script Access-Control-Allow-Origin: http://evil.com Access-Control-Allow-Credentials: true Origin: http://evil.com JavaScriptでtokenを取得 XHR パスワード変更 完了
  29. 29. Copyright©2014 JPCERT/CC All rights reserved. 正しい設定 28 token=2a8bc84e GET /passwd HTTP/1.1 Origin: http://evil.com 制限 ・ 検証 Cookie Java Script XHR token発行 Access-Control-Allow-Origin: http://evil.com Access-Control-Allow-Credentials: true JavaScriptはtokenに アクセス不可 許可するページの制限 — 認証を行っているユーザのみに限定するべきページには、Access- Control-Allow-Origin、Access-Control-Allow-Credentialsを付加しない (設定変更ページ、パスワード変更ページ等) オリジンの検証 — 特定のサイトに対して許可する場合には、Originの値を検証し、許可 する場合にのみAccess-Control-Allow-Origin、Access-Control-Allow- Credentialsを付加する
  30. 30. Copyright©2014 JPCERT/CC All rights reserved. 設定例 29 <FilesMatch “¥.(jpeg|gif|png)$”> SetEnvIf Origin “^https?://.*$” ORIGIN=$0 Header set Access-Control-Allow-Origin %{ORIGIN}e env=ORIGIN </FilesMatch> Apache での設定例:画像ファイルのみでリソースの使用を許可 許可するページの制限 —認証を行っているユーザのみに限定するべきページには、Access- Control-Allow-Origin、Access-Control-Allow-Credentialsを付加し ない(設定変更ページ、パスワード変更ページ等) オリジンの検証 —特定のサイトに対して許可する場合には、Originの値を検証し、許 可する場合にのみAccess-Control-Allow-Origin、Access-Control- Allow-Credentialsを付加する Apache での設定例:example.comのサブドメインのみにリソースの使用を許可 SetEnvIf Origin “^https?://.*¥.example¥.com$” ORIGIN=$0 Header set Access-Control-Allow-Origin %{ORIGIN}e env=ORIGIN ※実際に設定する場合には、アプリケーションの仕様を踏まえた 設定の検討と、十分なテストが必要です
  31. 31. Copyright©2014 JPCERT/CC All rights reserved. セキュリティ関連ヘッダ 30
  32. 32. Copyright©2014 JPCERT/CC All rights reserved. X-XSS-Protection X-XSS-Protectionを設定しているサイトのほとんどが 1;mode=block(保護フィルタ有効、検出時には空白ページ を表示) 514サイトが0 (無効)を設定 XSS保護フィルタの無効は、誤検出があるなど特別な理由 があるページのみに限定すべき 31 100 44169 514 1 1; mode=block 0 44783 904434 設定あり 設定なし
  33. 33. Copyright©2014 JPCERT/CC All rights reserved. Strict-Transport-Security 全サイト中20720サイトがHTTPSにリダイレクト 1754サイトがHSTSを設定 半数以上がHSTSの期限を1年に設定 0を設定した場合、ブラウザはHSTSのリストから該当の サイトを削除することに注意 32 1754 18966 HSTSあり HSTSなし 969 187 119 93 49 337 max-age設定値 31536000 2592000 15768000 0 16070400 その他
  34. 34. Copyright©2014 JPCERT/CC All rights reserved. まとめ 33
  35. 35. Copyright©2014 JPCERT/CC All rights reserved. まとめ HTML5では便利になる一方で、使用には注意が必要な機 能も多数ある 「HTML5を利用したWebアプリケーションのセキュリ ティ問題に関する調査報告書」をセキュアなWebアプリ ケーションの開発に役立ててください お問い合わせは以下まで —ご意見お待ちしています 34 JPCERTコーディネーションセンター Email:ww-info@jpcert.or.jp Tel:03-3518-4600 Web: https://www.jpcert.or.jp/
  36. 36. Copyright©2014 JPCERT/CC All rights reserved. おまけ 35
  37. 37. Copyright©2014 JPCERT/CC All rights reserved. Custom HTTP header X-Recruiting: We’re looking for talented people, join us: <URL>(We have cookies!) X-Recruiting: Like HTTP headers? Come write ours: <URL> x-poetry: Choose Life. Choose a job. Choose a career. X-<CompanyName>-jobs: you’re reading this … come work at xxx! Were-currently-looking-for-devs-like-you: Tweet @xxx for job details. 36
  38. 38. Copyright©2014 JPCERT/CC All rights reserved. X-Want-A-Job-With-Us response header 37
  39. 39. Copyright©2014 JPCERT/CC All rights reserved. discem file type 38 output to a file Compressed file…. :-c
  40. 40. Copyright©2014 JPCERT/CC All rights reserved. extraction by bzip2 39 extraction confirm file type ASCII! Readable!!
  41. 41. Copyright©2014 JPCERT/CC All rights reserved. finish? 40 rotate …
  42. 42. Copyright©2014 JPCERT/CC All rights reserved. perl 41
  43. 43. Copyright©2014 JPCERT/CC All rights reserved.42 ご静聴ありがとうございました

×