Japan Computer Emergency Response TeamCoordination Center

電子署名者 : Japan Computer Emergency Response TeamCoordination 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

Copyright©2014 JPCERT/CC All rights reserved.

- JPCERT/CCをご存知ですか? -JPCERT/CCの活動
インシデント予防

インシデントの予測と捕捉発生したインシデントへの対応

脆弱性情報ハンドリング

情報収集・分析・発信

インシデントハンドリング 未公開の脆弱性関連情報を製品開発者へ提供し、対応依頼
 関係機関と連携し、国際的に情報公開日を調整
 セキュアなコーディング手法の普及
 制御システムに関する脆弱性関連情報の適切な流通定点観測（TSUBAME）（インシデント対応調整支援）

 ネットワークトラフィック情報の収集分
 マルウエアの接続先等の攻撃関連サイト
析等の閉鎖等による被害最小化
 セキュリティ上の脅威情報の収集、分析、  攻撃手法の分析支援による被害可能性必要とする組織への提供の確認、拡散抑止
ポートスキャン の上位 5 位を 表示
全セン サーのポートスキャン 合計 （単位：時間）
ポートスキャン の平均値 ＝
 再発防止に向けた関係各関の情報交換
30
セン サー合計
及び情報共有25（ICM Pは常に表示、o the rはその他合計）
ICM P

TCP 1 3 5

TCP 4 4 520

U DP 1 37

15

TCP 1 3 9
TCP 1 0 2 510o th er

50

1 2 /91 2 /1 0

1 2 /1 1

1 2 /1 21 2 /1 3

1 2 /1 4

D a ta

早期警戒情報重要インフラ、重要情報インフラ事業者等の特定組織向け情報発信

CSIRT構築支援
海外のNational-CSIRTや企業内のセキュリティ対応組織の構築・運用支援

アーティファクト分析
マルウエア（不正プログラム）等の攻撃手法の分析、解析

国際連携
各種業務を円滑に行うための海外関係機関との連携
2

Copyright©2014 JPCERT/CC All rights reserved.

HTML5とは従来のHTMLに代わる次世代のHTMLブラウザでのデータ格納、クライアントとサーバ間での双方向通信、位置情報の取得など、従来のHTMLよりも柔軟かつ利便性の高い
Web サイトの構築が可能となる
日本を含むアジア太平洋地域においても急速に普及が進みつつある
最近のブラウザの多くは、HTML5に対応している（一部実装されていない機能もある）
双方向通信

クロスドメイン
通信

高速化

UIの向上

3

Copyright©2014 JPCERT/CC All rights reserved.

マルチメディア対応
オフライン
アプリケーション

HTML5とは従来のHTMLに代わる次世代のHTMLブラウザでのデータ格納、クライアントとサーバ間での双方向通信、位置情報の取得など、従来のHTMLよりも柔軟かつ利便性の高いWeb サイトの構築が可能となる
日本を含むアジア太平洋地域においても急速に普及が進みつつある
最近のブラウザの多くは、HTML5に対応している（一部実装されていない機能もある）
XSS

従来のHTMLでは影響のなかったケースが、ブラウザのHTML5対応により、脆弱性となってしまうケースが存在する
利便性が向上する一方で、それらの新技術が攻撃者に悪用された際にユーザが受ける影響に関して、十分に検証や周知がされているとは言えない

4

Copyright©2014 JPCERT/CC All rights reserved.

CSRF

情報
漏えい

DoS

オープン
リダイレクトHTML5 を利用したWeb アプリケーションのセキュリティ問題に関する調査報告書
10月30日に公開
https://www.jpcert.or.jp/research/html5.html

5

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

Copyright©2014 JPCERT/CC All rights reserved.

JavaScript API
XMLHttpRequest
7

Copyright©2014 JPCERT/CC All rights reserved.

XMLHttpRequest(XHR)概要
XMLHttpRequest(XHR)とは—JavaScriptでHTTP通信を行うためのAPI—非同期通信によりインタラクティブな表現が可能—AJAXの普及に伴い使用される機会が増加—HTML5以前は同一オリジンとの通信のみに制限されていた

Origin: 読み込み元オリジン

HTML5のXHR
Java
Scriptexample.jp

other.example.jp

Access-Control-Allow-Origin: 許可するオリジン or *Cookieを許可するためには別途Access-Control-Allow-Credentialsが必要※オリジン： ホスト・ポート・スキームの組み合わせ
8

Copyright©2014 JPCERT/CC All rights reserved.

HTML5の現状

9

Copyright©2014 JPCERT/CC All rights reserved.

以前に行われた調査
2012年11月に行われた2539サイトに対する調査

約0.25％ のサイトがCORSに対応

引用元：http://www.veracode.com/blog/2012/11/security-headers-report/

Access-Control-Allow-Origin以外のCORS関連のヘッダの状況は？？
10

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(*1) CORSで使われるヘッダ名が「Access-Control-」から始まるレスポンスヘッダ(*2) 調査報告書で紹介したセキュリティ関連機能に関するヘッダ(*3) http://www.alexa.com/topsites
11

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

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

Copyright©2014 JPCERT/CC All rights reserved.

調査結果

14

Copyright©2014 JPCERT/CC All rights reserved.

CORS対応状況
CORS関連ヘッダ(Access-Control-xxx)

CORS対応サイト
7218

非対応8000700060005000
4000
3000
2000
1000
0941999

対応

レスポンスを受け取ったサイト数は、949,217サイト
CORS対応サイト(*)は、7218サイト
CORS対応サイトは、全体の約0.76%(*) CORS関連ヘッダを返してきたWebサイト
15

Copyright©2014 JPCERT/CC All rights reserved.

Access-Control-Allow-Origin
Access-Control-Allow-Originの設定

設定値（正しい設定のみ）

377
正しい設定
6650

＊

1909
4741

誤った設定

オリジン

約5.4%のサイトが誤った設定を行っていた
誤った設定では、設定された値は無視されるため、AcecssControl-Allow-Originヘッダを設定しても効果がない

16

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

内容を理解せず安易にヘッダを付加した場合、アクセス制限が弱まり脆弱となる場合があることに注意※１：スペース区切りの複数オリジンの記載は、ブラウザの実装によっては、禁止されている場合がある
17

Copyright©2014 JPCERT/CC All rights reserved.

Access-Control-Allow-Origin
Access-Control-Allow-Originの設定

設定値（正しい設定のみ）

377
正しい設定
6650

＊

1909
4741

誤った設定

オリジン

Access-Control-Allow-Originの設定を正しく行っている
Webサイトのうち—約71%が値に*を設定⇒全てのWebサイトからのCORSを許可—約29%が値にオリジンを設定⇒オリジンで指定したWebサイトからのCORSのみを許可
18

Copyright©2014 JPCERT/CC All rights reserved.

Access-Control-Allow-Credentials
Access-Control-Allow-Credentials
71
設定なし

15255622

TRUE
FALSE

Access-Control-Allow-Credentialsを設定しているサイトは、
CORS対応サイト全体の約22%
設定値は「true」のみが意味を持つ設定値。それ以外は全て「true」が設定されていない場合と同様の動作となるが「false」と指定されているものも複数存在

19

Copyright©2014 JPCERT/CC All rights reserved.

Access-Control-Allow-Credentials
Access-Control-Allow-Originに*を設定しているWebサイト

Access-Control-AllowCredentials
4
163

Access-Control-Allow-Originに適切にオリジンを設定しているWebサイト

2

Access-Control-AllowCredentials

設定なし
4573

TRUE
FALSE

599
1250

設定なし
TRUE
FALSE

Access-Control-Allow-Credentialsにtrueを指定する場合、Access-Control-Allow-Originに*を使うことはできないが163
サイトが*を設定意図したとおりの動作となっているか事前に確認を
20

Copyright©2014 JPCERT/CC All rights reserved.

Access-Control-Allow-Credentials
Access-Control-Allow-Originに*を設定しているWebサイト

Access-Control-AllowCredentials
4
163

Access-Control-Allow-Originに適切にオリジンを設定しているWebサイト

2

Access-Control-AllowCredentials

設定なし
4573

TRUE
FALSE

599
1250

設定なし
TRUE
FALSE

Access-Control-Allow-Originでオリジンを指定しているサイトの約68%で、Access-Control-Allow-Credentialsの値にtrueを指定

21Copyright©2014 JPCERT/CC All rights reserved.

Access-Control-Allow-Origin
Access-Control-Allow-Originに適切にオリジンを設定しているWebサイト

2

Access-Control-AllowCredentials

599
1250

設定なし

送られるレスポンスヘッダ例：trueの場合
Access-Control-Allow-Origin: http://example.com
Access-Control-Allow-Credentials: true

TRUEFALSE

上記例のスポンスヘッダが返った場合、http://example.com
から読み込んだJavaScriptは、ユーザがブラウザを操作する場合と同様のふるまいをすることが可能。
⇒Access-Control-Allow-Originで指定したサイトで、任意のJavaScriptが実行できる場合、非常に危険な状況となる脆弱性がなければ大丈夫？
22

Copyright©2014 JPCERT/CC All rights reserved.

マッシュアップサイトの場合
A-C-Allow-Origin: siteA
A-C-Allow-Credentials:trueマッシュアップ元サイト

A-C-Allow-Origin:siteB
A-C-Allow-Credentials:true

X さんの画像マッシュアップサイトB

マッシュアップサイトA

CookieOrigin: siteA

お気に入り画像を背景として利用
23

Origin: siteB

各サイトにCookie付き
CORSを許可するため、レスポンスヘッダを動的に生成

Copyright©2014 JPCERT/CC All rights reserved.

お気に入り画像の関連商品を提供

危険な動作の例
A-C-Allow-Origin:
http://evil.example.com
A-C-Allow-Credentials:true

マッシュアップ元サイト
X さんの画像

悪意あるサイト（evil.examle.com）

個人情報漏えい

CookieOrigin: http://evil.example.com

外部に送信
Xさん
24

Copyright©2014 JPCERT/CC All rights reserved.

XHR2を用いた他源泉リクエスト

IPA セキュアプログラミング講座 Webアプリケーション編
https://www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/704.html
25

Copyright©2014 JPCERT/CC All rights reserved.

Access-Control-Allow-Origin
今回の調査で実際に送ったリクエスト：
GET / HTTP/1.1
HOST: <target>
Origin: http://example.com

実際のAllow-Originの値

194
1056

http://example.com
その他オリジン

194サイトが、送ったOriginヘッダの値を、AccessControl-Allow-Originヘッダにそのまま設定して返送！！
認証済みのユーザのみに限定すべきページでも上記動作を行っている場合、情報が盗まれる可能性がある
さらに、トークンによるCSRF対策が回避されるケースも26

Copyright©2014 JPCERT/CC All rights reserved.

CSRFによるパスワード変更
GET /passwd HTTP/1.1
Origin: http://evil.com

Cookietoken発行

Access-Control-Allow-Origin: http://evil.com
Access-Control-Allow-Credentials: true

XHR
Java
Scripttoken=2a8bc84e

POST /passwd HTTP/1.1
newpwd=infected& token=2a8bc84e
Origin: http://evil.com

Cookietoken検証
パスワード変更完了

27

Copyright©2014 JPCERT/CC All rights reserved.

JavaScriptでtokenを取得

正しい設定許可するページの制限— 認証を行っているユーザのみに限定するべきページには、AccessControl-Allow-Origin、Access-Control-Allow-Credentialsを付加しない（設定変更ページ、パスワード変更ページ等）
オリジンの検証— 特定のサイトに対して許可する場合には、Originの値を検証し、許可する場合にのみAccess-Control-Allow-Origin、Access-Control-AllowCredentialsを付加する
GET /passwd HTTP/1.1
Origin: http://evil.comCookie
token発行制限
・検証

Access-Control-Allow-Origin: http://evil.com
Access-Control-Allow-Credentials: true
token=2a8bc84e

JavaScriptはtokenにアクセス不可28

Copyright©2014 JPCERT/CC All rights reserved.

XHR
JavaScript設定例※実際に設定する場合には、アプリケーションの仕様を踏まえた設定の検討と、十分なテストが必要です

許可するページの制限— 認証を行っているユーザのみに限定するべきページには、AccessControl-Allow-Origin、Access-Control-Allow-Credentialsを付加しない（設定変更ページ、パスワード変更ページ等）
Apache での設定例：画像ファイルのみでリソースの使用を許可<FilesMatch “¥.(jpeg|gif|png)$”>SetEnvIf Origin “^https?://.*$” ORIGIN=$0Header set Access-Control-Allow-Origin %{ORIGIN}e env=ORIGIN</FilesMatch>

オリジンの検証— 特定のサイトに対して許可する場合には、Originの値を検証し、許可する場合にのみAccess-Control-Allow-Origin、Access-ControlAllow-Credentialsを付加する
Apache での設定例：example.comのサブドメインのみにリソースの使用を許可

SetEnvIf Origin “^https?://.*¥.example¥.com$” ORIGIN=$0
Header set Access-Control-Allow-Origin %{ORIGIN}e env=ORIGIN
29

Copyright©2014 JPCERT/CC All rights reserved.

セキュリティ関連ヘッダ

30

Copyright©2014 JPCERT/CC All rights reserved.

X-XSS-Protection
514

44783

100

1

設定あり
90443444169
設定なし

1; mode=block
0

X-XSS-Protectionを設定しているサイトのほとんどが
1;mode=block(保護フィルタ有効、検出時には空白ページを表示)
514サイトが0 (無効)を設定
XSS保護フィルタの無効は、誤検出があるなど特別な理由があるページのみに限定すべき31

Copyright©2014 JPCERT/CC All rights reserved.

Strict-Transport-Security
1754

max-age設定値

HSTSあり18966
HSTSなし

49
93
119
187

337
969

31536000
2592000
15768000
016070400
その他

全サイト中20720サイトがHTTPSにリダイレクト
1754サイトがHSTSを設定
半数以上がHSTSの期限を1年に設定0を設定した場合、ブラウザはHSTSのリストから該当のサイトを削除することに注意

32

Copyright©2014 JPCERT/CC All rights reserved.

まとめ

33

Copyright©2014 JPCERT/CC All rights reserved.

まとめ
HTML5では便利になる一方で、使用には注意が必要な機能も多数ある「HTML5を利用したWebアプリケーションのセキュリ
ティ問題に関する調査報告書」をセキュアなWebアプリ
ケーションの開発に役立ててください

お問い合わせは以下まで—ご意見お待ちしています

JPCERTコーディネーションセンター
Email：ww-info@jpcert.or.jp
Tel：03-3518-4600
Web: https://www.jpcert.or.jp/
34

Copyright©2014 JPCERT/CC All rights reserved.

おまけ35

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 … comework at xxx!

Were-currently-looking-for-devs-like-you: Tweet @xxx forjob details.
36

Copyright©2014 JPCERT/CC All rights reserved.

X-Want-A-Job-With-Us response header

37

Copyright©2014 JPCERT/CC All rights reserved.

discem file typeoutput to a file

Compressed file…. :-c38

Copyright©2014 JPCERT/CC All rights reserved.

extraction by bzip2
extraction

confirm file type

ASCII！ Readable！！
39

Copyright©2014 JPCERT/CC All rights reserved.

finish?

rotate …

40

Copyright©2014 JPCERT/CC All rights reserved.

perl

41

Copyright©2014 JPCERT/CC All rights reserved.

ご静聴ありがとうございました42Copyright©2014 JPCERT/CC All rights reserved.