Firefox Security Features

Post on 17-Dec-2014

6.407 views 1 download

description

Mozilla 勉強会@東京 6th 後半のセキュリティ機能紹介スライド

Transcript of Firefox Security Features

Security FeaturesSlides @ Mozilla Workshop @ Tokyo 6th

by Tomoya ASAI (dynamis)

last update on 2011.10.01see also: http://dynamis.jp/r

セキュリティ関連機能をまとめて紹介します

意外と知られていないが超重要!

about:me Tomoya ASAI (dynamis) Mozilla Japan - Technical mktg. http://dynamis.jp/ http://facebook.com/dynamis http://twitter.com/dynamitter dynamis mozilla-japan.org@

dynamis (古代ギリシャ語 dunamis) は「でゅなみす」と読みます

about:Mozilla Content Security Policy Security Privacy latest topic

Agenda

このスライドの見方 こんなスライドが基本スタイル 可読性のため下線なしリンクも コードは要点だけ残した簡略版

-moz- 以外の接頭辞など割愛

右下には補足や一次情報源 URL

何かあれば遠慮無く Facebook や Twitter でコンタクトしてください

画像からも時々リンクしてます

はじめに。

…ということです。

発行/オライリー・ジャパン 発売/オーム社 定価(本体3,400円+税) オライリー・ジャパンFirefox Hacks Rebooted

ISBN978-4-87311-497-2

Mozilla Japan

推薦書!

Mozilla Japan代表理事 瀧田佐登子

ウェブを使い倒すテクニック満載! ●新しいユーザーインタフェース ●タブグループ ●アプリタブ●Firefox Syncを使ってブラウザ情報の同期を取ろう ●テキスト領域のリサイズ ●Personasで実現する着せ替えブラウザ ●ユーザープロファイルの基本 ●Vimperator ●KeySnail ●VimperatorとKeySnailの設計の違いからくる設計手法 ●Firefox Home ●FirefoxとTwitter ●Facebook関連 ●Add-on SDKとは何か ●Add-on SDKのセットアップ ●拡張機能の開発(基礎編) ●addon-kitライブラリ●api-utilsライブラリ ●拡張機能の開発(応用編) ●拡張機能のローカライズ ●拡張機能の自動テスト●再起動不要な拡張機能「Bootstrapped Extensions」の作り方 ●Bootstrapped Extensionsの制限●

外部スクリプトをBootstrapped Extensionsで読み込む ●FirefoxのUIをBootstrapped Exten-sionsで変更する ●Bootstrapped Extensionsの設定UI ●Bootstrapped ExtensionsでのResource URLの登録 ●Bootstrapped Extensionsと非同期な初期化処理や終了処理 ●XPCOMコンポーネントをBootstrapped Extensionsに組み込む ●Bootstrapped Extensionsでのchrome.manifestの利用 ●Bootstrapped ExtensionsのFirefox 3.6対応 ●e10sにおけるプロセス間通信の基本 ●メッセージマネージャのAPI詳説 ●コンテントスクリプト用のAPI詳説 ●Chromeスクリプトからコンテントスクリプトへ同期的にメッセージを送る ●Bootstrapped Extensionsでコンテントスクリプトを使う ●非同期処理のすすめ ●MozStorageの非同期API ●アドオンマネージャの非同期API●ワーカーによるマルチスレッド処理 ●JSDeferredで非同期処理をスッキリ書く ●Firefoxの非同期処理をDeferred化する ●HTML5再入門 ●ECMAScript5 ●ECMAScript for XML ●E4X 応用●CSS3時代のデザイン ●Webフォント徹底活用 ●テキスト領域のリサイズ ●Canvas入門 ●SVGとSMILによるアニメーション ●新しいアニメーション技術比較 ●コンテンツセキュリティポリシー ●イマドキのセキュリティ機能を活用する ●AndroidでもFirefox ●デバイスセンサーを活用する ●プラグインプロセスの分離 ●js-ctypesとXPConnectの違いを理解する ●js-ctypesの基本的な使い方 ●js-ctypesで自力でメモリを管理する ●Firefox.Future

最新のWeb技術、新世代Add-on SDKはもちろん、FirefoxとWebの未来がこの一冊に集約!日本のMozillaドリームチームが綴ったこの本がバイブルになることは間違いない!次はあなたがHackにチャレンジする番です。

about:mozilla.com brain .org heart

about:Firefox Firefox の意義

オープンで適切な実装の提供 Firefox の目的

公共のリソースとしてのインターネットの発展を促進

.com brains - 会社組織 営利企業同様の開発スタイル

.org heart - 非営利組織 より良いインターネット環境へ 社員より遙かに多い貢献者

about:Mozilla

マニフェスト: http://www.mozilla.org/about/manifesto.ja.html

Mozilla Firefox セキュリティ&プライバシーが

開発における絶対条件 両者を両立している唯一の

モダンブラウザ IE はいずれか択一 Chrome はプライバシー弱い 噂のあのブラウザは…

Web のセキュリティポリシーといえば?

Same Origin Policy同一生成元ポリシー

JavaScript などから同一ドメインのコンテンツだけ読み込めるよう制限

それはもう古い!

CSPContent Security Policy

Content Security Policy 次世代セキュリティポリシー

XSS などの攻撃を防止 コンテンツ種別で読み込み制御

画像、CSS、JS など従来制限がなかったファイルも制御する

WebKit の開発もほぼできている Chrome では拡張機能にも

https://developer.mozilla.org/ja/Introducing_Content_Security_Policy

デフォルトセキュリティポリシー インライン JS/CSS 禁止

JS/CSS は外部ファイルに限る イベントハンドラなども不可

eval() などで文字列評価禁止 Function や setTimeout も同じ

data: URL 使用禁止インライン CSS の使用禁止については未実装

現在のところこれらを許可する方法は仕様草案にはあるが未実装

CSS, JavaScript は外部に<!-- インラインCSSは最新仕様では適用されない(未実装) --><style> body { font-size: 200%; } </style><p style="font-size: 200%;">I love lesser panda!</p><!-- インラインJavaScriptは実行されない(実装済み) --><script> alert("inline script"); </script><p onclick="alert('inline script')">Red panda!</p>

<!-- 外部 CSS, JavaScript はデフォルト許可 --><link rel="stylesheet" href="external.css"/><script src="external.js"></script>

https://developer.mozilla.org/en/Security/CSP/Using_Content_Security_Policy

文字列は評価されない/* これらを実行するとエラー(それ以降のコードも無視) */eval("alert('☺')");// call to eval("alert('☺')") blocked by CSPnew Function("alert('☺')");// call to Function() blocked by CSPsetTimeout("alert('☺')", 0);setInterval("alert('☺')", 0);// call to setTimeout/setInterval blocked by CSP

<!-- data: URL も無視される --><img id="dataimg" src="data:image/png;base64,AAAB ..."/>

CSP の使い方 X-Content-Security-Policy

HTTP レスポンスヘッダを送信 httpd.conf や .htacces など PHP なら header() 関数など

ポリシーファイルの MIME はtext/x-content-security-policy

Apache で CPS を設定// httpd.conf, .htaccess の Header ディレクティブを使うHeader always append X-Content-Security-Policy \ "default-src 'self'"// ポリシーファイルを使用する場合 AddType も忘れずにAddType "text/x-content-security-policy" .cspHeader always append X-Content-Security-Policy \ "policy-uri /csp/policy.csp"

以降ではこのように設定するHTTP ヘッダのみを書いて説明

CSP ヘッダ送信例// 全コンテンツを同一ドメインのみ (サブドメインも不可)X-Content-Security-Policy: default-src 'self'

// 自身と dynamis.jp のサブドメインのみ許可X-Content-Security-Policy: default-src 'self' *.dynamis.jp

// secure.mozilla.jp からの読み込みは HTTPS のみX-Content-Security-Policy: default-src https://secure.mozilla.jp/

https://developer.mozilla.org/en/Security/CSP/Using_Content_Security_Policy

CSP ヘッダ送信例

// 自身と *.mail.jp は全許可、他サイトは画像のみに制限// スクリプトなど指定していないものは default-src と同じX-Content-Security-Policy: defaut-src 'self' *.mail.jp; (実際は改行なし) img-src *

// 画像は任意サイト、メディアファイルと JS は指定サイトに限定X-Content-Security-Policy: default-src 'self'; img-src *; (実際は改行なし) media-src video.tld audio.tld; (実際は改行なし) script-src script.tld;

https://developer.mozilla.org/en/Security/CSP/Using_Content_Security_Policy

CSP 対応に移行する JS, CSS は外部ファイルに eval() などは使用しない

ライブラリ内のコードに注意 ポリシー違反レポートを監視 CSP ブックマークレットも使う

ポリシー違反レポート

// 違反レポートは送るが実行は実際にブロックしない場合// 既存サイトに必要なポリシーを調べるときに便利X-Content-Security-Policy-Report-Only: report-uri /csp/report

// ブラウザから違反レポートを受け取る URL を指定する// JSON 形式のレポートが届くのでサーバで処理するX-Content-Security-Policy: report-uri /csp/report

https://developer.mozilla.org/en/Security/CSP/Using_Content_Security_Policy

CSP ブックマークレット

https://github.com/bsterne/bsterne-tools/tree/master/csp-bookmarklet

Securitymore Secure Web...

HTTP Strict Transport Security HTTPS での接続を要求

HTTPS 認証ページなどで使う HTTP 接続禁止秒数を指定する

簡単なのですぐにでも採用を 非対応ブラウザへの副作用なし 古い Firefox は拡張機能で...

http://hacks.mozilla.org/2010/08/firefox-4-http-strict-transport-security-force-https/

HSTS ヘッダ送信例

http://code.google.com/intl/ja/apis/webfonts/docs/getting_started.html

注: HTTPS ページでのみ有効 HTTP ページで送信しても無効

// 86400 秒はこのサイトに HTTP での接続を禁止Strict-Transport-Security: max-age=86400

// 送信元サイトのサブドメインも HTTP 接続を禁止するStrict-Transport-Security: max-age=86400; includeSubdomains

X-Frame-Options <iframe> への埋め込み禁止 埋め込まれたくないページで

X-Frame-Options: ヘッダ出力 値は DENY, SAMEORIGIN

クリックジャッキング対策等に

Fx 3.6.9~ https://developer.mozilla.org/en/The_X-FRAME-OPTIONS_response_header

// Apache の設定でサイト全体に設定する場合:Header always append X-Frame-Options SAMEORIGIN

補: クリックジャッキング

http://blog.guya.net/2008/10/07/malicious-camera-spying-using-clickjacking/

Cross-Origin Resource Sharing 他ドメインからの読み込み許可

Cross-Site XMLHttpRequest

// dynamis.jp のページからはこのサイトの読み込み許可Access-Control-Allow-Origin: http://dynamis.jp

https://developer.mozilla.org/en/http_access_control

// 任意サイトからの読み込みを許可 (公開 API などに)Access-Control-Allow-Origin: *

Security 機能のまとめ HTTP Strict Transport Security

HTTPS に接続を限定 X-Frame-Options

クロスドメインフレーム禁止 Cross-Origin Resource Sharing

クロスサイト読み込みを許可 他にも機能あるけど今日は割愛

Privacymore Comfortable Web...

ユーザ追跡拒否ヘッダ Do-Not-Track (DNT:1) ヘッダ

ユーザ追跡拒否の意思表示 IE も Safari も対応 Chrome だけ非対応...

受け取ったらユーザ追跡禁止 navigator.doNotTrack も Fx9~

ユーザがオンにしてると "yes"https://developer.mozilla.org/en/The_Do_Not_Track_Field_Guide

latest topichow about Amazon Silk?

Amazon Silk @ Kindle Fire Amazon の Android タブレット

$199 (日本への発送不可)

独自のブラウザ Amazon Silk EC2 のクラウドと連携

Opera Mini/Turbo, Skyfire etc... EC2 との接続は SPDY 独自版

SSL Security!?

http://amazonsilk.wordpress.com/2011/09/28/introducing-amazon-silk/

What about handling secure (https) connections?We will establish a secure connection from the cloud to the site owner on your behalf for page requests of sites using SSL (e.g. https://example.com).

え? ブラウザじゃなくてクラウドから?SSL 通信の中身も Amazon に丸見え?プライバシーを確保するための暗号化が...

End to End でない暗号化は本質的にダメ

Amazon Silk の FAQ

Amazon Silk FAQ より: http://t.co/encBio73

Any Question ?