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