Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
Muneaki Nishimura
PDF, PPTX
6,863 views
Firefox OS パッケージ型アプリ インストールの仕組みを調べてみた
2013年9月30日に開催される「Geckoと仲良くなりたい人主催 FxOS Gecko勉強会」の発表資料です。
Technology
◦
Read more
7
Save
Share
Embed
Embed presentation
Download
Download as PDF, PPTX
1
/ 22
2
/ 22
3
/ 22
4
/ 22
5
/ 22
6
/ 22
7
/ 22
8
/ 22
9
/ 22
10
/ 22
11
/ 22
12
/ 22
13
/ 22
14
/ 22
15
/ 22
16
/ 22
17
/ 22
18
/ 22
19
/ 22
20
/ 22
21
/ 22
22
/ 22
More Related Content
PDF
[デブサミ2012]趣味と実益の脆弱性発見
by
Yosuke HASEGAWA
PDF
ものすごく今更なXPCOMとXPConnectのおはなし
by
Hiroshi Yuki
PDF
WebIDLを見てみる
by
takenspc
PDF
Gecko入門 - Introduction to Gecko -
by
Masahiro Hidaka
PDF
せっかくだから俺はこの NPAPI の話をするぜ
by
Naruto TAKAHASHI
PDF
Basis of Firefox Apps
by
dynamis
PDF
Firefox os hackathon
by
dynamis
PDF
Try Firefox OS
by
dynamis
[デブサミ2012]趣味と実益の脆弱性発見
by
Yosuke HASEGAWA
ものすごく今更なXPCOMとXPConnectのおはなし
by
Hiroshi Yuki
WebIDLを見てみる
by
takenspc
Gecko入門 - Introduction to Gecko -
by
Masahiro Hidaka
せっかくだから俺はこの NPAPI の話をするぜ
by
Naruto TAKAHASHI
Basis of Firefox Apps
by
dynamis
Firefox os hackathon
by
dynamis
Try Firefox OS
by
dynamis
Similar to Firefox OS パッケージ型アプリ インストールの仕組みを調べてみた
PDF
20140531 firefox os
by
Noritada Shimizu
PDF
関東Firefox OS勉強会6th「Firefox OS」
by
Noritada Shimizu
PDF
Apps for Web Platform
by
dynamis
PDF
Firefox OS アプリケーション チュートリアル
by
funakky
PDF
Firefox OS 1.0 Application Development
by
dynamis
PDF
Firefox OS - Blaze Your Own Path
by
dynamis
PDF
Firefox Marketplace and Payment
by
dynamis
PDF
アプリリリース後に後悔しないための20のこと
by
leverages_event
PPTX
Androidアプリ内蔵広告 徹底解析 公開用
by
Lumin Hacker
PDF
進化する Web ~ Progressive Web Apps の実装と応用 ~
by
Microsoft Azure Japan
PDF
Firefox OS アプリ開発
by
Yoshitomo Akimoto
PDF
Firefox OSアプリ開発・公開経験談
by
Kenichi Kambara
PDF
appengine ja night #10 Google AppEngine で作る Google Apps Marketplace 対応サービス
by
Nobuhiro Nakajima
PDF
[SC10] 自社開発モバイルアプリの DLP 対応化を Microsoft Intune で可能に
by
de:code 2017
PDF
Malwat4 20130223 analyzing_android_malware
by
Ayase
PDF
20130315 abc firefox_os
by
Tomoaki Konno
PDF
Firefoxosハンズオン
by
Kazutoshi Kashimoto
PDF
さわってみよう Firefox OS in 大阪
by
Honma Masashi
PDF
GDG Shikoku 2013
by
Takashi EGAWA
PDF
Firefox OSアプリの概要@gunma.web
by
Hayato Hiratori
20140531 firefox os
by
Noritada Shimizu
関東Firefox OS勉強会6th「Firefox OS」
by
Noritada Shimizu
Apps for Web Platform
by
dynamis
Firefox OS アプリケーション チュートリアル
by
funakky
Firefox OS 1.0 Application Development
by
dynamis
Firefox OS - Blaze Your Own Path
by
dynamis
Firefox Marketplace and Payment
by
dynamis
アプリリリース後に後悔しないための20のこと
by
leverages_event
Androidアプリ内蔵広告 徹底解析 公開用
by
Lumin Hacker
進化する Web ~ Progressive Web Apps の実装と応用 ~
by
Microsoft Azure Japan
Firefox OS アプリ開発
by
Yoshitomo Akimoto
Firefox OSアプリ開発・公開経験談
by
Kenichi Kambara
appengine ja night #10 Google AppEngine で作る Google Apps Marketplace 対応サービス
by
Nobuhiro Nakajima
[SC10] 自社開発モバイルアプリの DLP 対応化を Microsoft Intune で可能に
by
de:code 2017
Malwat4 20130223 analyzing_android_malware
by
Ayase
20130315 abc firefox_os
by
Tomoaki Konno
Firefoxosハンズオン
by
Kazutoshi Kashimoto
さわってみよう Firefox OS in 大阪
by
Honma Masashi
GDG Shikoku 2013
by
Takashi EGAWA
Firefox OSアプリの概要@gunma.web
by
Hayato Hiratori
More from Muneaki Nishimura
PDF
Find Blue Oceans - Through the Competitive World of Bug Bounty
by
Muneaki Nishimura
PDF
OWASP Testing Guide からはじめよう - セキュリティ診断技術の共有、そして横展開
by
Muneaki Nishimura
PDF
Firefoxの倒し方
by
Muneaki Nishimura
PDF
Webプラットフォームのセキュリティ
by
Muneaki Nishimura
PDF
Firefoxの日和見暗号がカジュアルに無効化された話
by
Muneaki Nishimura
PDF
Mozillaの報奨金制度で200万円ほど稼いだ話
by
Muneaki Nishimura
PDF
HPKP Supercookies (公開鍵ピンニングによるユーザ追跡)
by
Muneaki Nishimura
PDF
Mozillaの報奨金制度で100万円ほど稼いだ話
by
Muneaki Nishimura
PDF
Future of Web Security Opened up by CSP
by
Muneaki Nishimura
PDF
Welcome to the Black Hole of Bug Bounty Program Rebooted
by
Muneaki Nishimura
PDF
そろそろ押さえておきたい AngularJSのセキュリティ
by
Muneaki Nishimura
PDF
Welcome to the Black Hole of Bug Bounty Program
by
Muneaki Nishimura
PDF
Webアプリ開発者のためのHTML5セキュリティ入門
by
Muneaki Nishimura
PDF
GeckoのLocal Storageについて調べてみた
by
Muneaki Nishimura
PDF
Firefox OS 起動の仕組みを調べてみた
by
Muneaki Nishimura
Find Blue Oceans - Through the Competitive World of Bug Bounty
by
Muneaki Nishimura
OWASP Testing Guide からはじめよう - セキュリティ診断技術の共有、そして横展開
by
Muneaki Nishimura
Firefoxの倒し方
by
Muneaki Nishimura
Webプラットフォームのセキュリティ
by
Muneaki Nishimura
Firefoxの日和見暗号がカジュアルに無効化された話
by
Muneaki Nishimura
Mozillaの報奨金制度で200万円ほど稼いだ話
by
Muneaki Nishimura
HPKP Supercookies (公開鍵ピンニングによるユーザ追跡)
by
Muneaki Nishimura
Mozillaの報奨金制度で100万円ほど稼いだ話
by
Muneaki Nishimura
Future of Web Security Opened up by CSP
by
Muneaki Nishimura
Welcome to the Black Hole of Bug Bounty Program Rebooted
by
Muneaki Nishimura
そろそろ押さえておきたい AngularJSのセキュリティ
by
Muneaki Nishimura
Welcome to the Black Hole of Bug Bounty Program
by
Muneaki Nishimura
Webアプリ開発者のためのHTML5セキュリティ入門
by
Muneaki Nishimura
GeckoのLocal Storageについて調べてみた
by
Muneaki Nishimura
Firefox OS 起動の仕組みを調べてみた
by
Muneaki Nishimura
Firefox OS パッケージ型アプリ インストールの仕組みを調べてみた
1.
Firefox OS パッケージ型アプリ インストールの仕組みを調べてみた Geckoと仲良くなりたい人主催
FxOS Gecko勉強会 2013.9.30 @ Mozilla Japan オフィス
2.
2 本日お話する内容 • パッケージアプリとは • パッケージ型アプリのインストール処理 •
アプリの非公式インストールとその対策
3.
3 自己紹介 本発表は私の個人的な調査に基づくものです。 内容に誤りがあるかもしれませんがご了承ください 名前 西村 宗晃
(にしむねあ) ・https://www.facebook.com/muneaki.nishimura 職業 セキュリティエンジニア ・セキュア開発のコンサルティング ・Android端末~アプリの開発支援
4.
4 パッケージ型アプリとは Firefox OS パッケージ型アプリ インストールの仕組みを調べてみた
5.
5 Firefox OSのアプリ • HTML,
JS, CSSといったWebの技術で開発 • アプリを構成するファイルの格納場所によって2種類に分類 ⁃ ホスト型アプリ ファイルはWebサーバ上に置き、通常は端末からHTTP(S)でアクセスして実行する ⁃ パッケージ型アプリ ファイルはZIPファイルに圧縮し、端末上にダウンロードして実行する • 全てのアプリにはApp Manifestファイルが必要 ⁃ アプリのインストールや動作に必要な情報(アプリ名等)を定義したファイル ホスト型アプリの場合はサーバ上に格納 パッケージ型アプリの場合はZIPファイルの中に格納
6.
6 パッケージ型アプリの種類 Web (未信頼アプリ) Privileged (特権アプリ) Certified (認定アプリ) • 通信事業者や端末メーカーによって認定されたアプリ → プリインストールアプリ •
ほぼ全てのWeb APIが利用できる • Marketplaceによる審査を経て承認されたアプリ → Marketplaceの署名が付いたアプリ • 限られたWeb APIしか利用できない • 上記以外の通常アプリ • ほとんどのWeb APIが利用できない ※ 主に端末設定や課金、ハードウェア制御に関するWeb APIが利用できない ※
7.
7 インストール方法 Certified Privileged
Web Marketplaceから入手 × その他のウェブサイトから入手 (Apps.installPackageを使用) × × Firefox OS SimulatorからPush × 商用端末へのインストール可否 ※1 開発用ビルド(MOZ_OFFICIAL_BRANDING=false)の場合はインストール可 ※2 配布元のURLが検証されるのでMarketplaceの署名付きアプリであってもインストール不可 ※1 ※2
8.
8 パッケージ型アプリのインストール処理 Firefox OS パッケージ型アプリ インストールの仕組みを調べてみた
9.
9 Marketplaceからのインストール① Firefox OS端末 Marketplaceサーバー Marketplaceアプリ
GeckoSystemアプリ アプリのインストールを要求 Apps.installPackage Mini Manifestを取得 XmlHttpRequest Mini Manifestファイルを送信 インストール確認画面を表示 webapps-ask-install インストール許可を通知 webapps-install-granted ⁃ 既にインストール済みでないことを確認 ⁃ HTTPレスポンスヘッダのContent-Typeがapplication/ x-web-app-manifest+jsonであることを確認 ⁃ Mini Manifestに構文エラーがないことを確認 ⁃ Mini Manifestのinstalls_allowed_fromに書かれている オリジンとアプリ配布元が等しいことを確認 ⁃ 今後のアップデート有無の確認のためにEtagを記録 ↓ ↓次ページに続く↓ ↓ ⁃ インストールがキャンセルされた場合は終了
10.
10 Marketplaceからのインストール② Firefox OS端末 Marketplaceサーバー Marketplaceアプリ
GeckoSystemアプリ ⁃ 取得したMini Manifestを/data/local/webapps/{uuid} /update.webappという名前で保存 アプリ本体を取得 アプリ本体 (署名付きZIPファイル)を送信 ⁃ アプリの署名を検証 ⁃ Marketplaceの署名が付いている場合は、アプリの取得 元がMarketplaceであることを確認 ⁃ アプリ本体に含まれるApp Manifestを検証。構文エラー やMini Manifestの記載内容との違いがある場合は終了 ⁃ App Manifestのアプリ種別を確認。certifiedが指定され ている場合は終了。またprivilegedが指定されているの に未署名の場合も終了 ⁃ アプリ本体とApp Manifestを/data/local/webapps/ {アプリディレクトリ}/に保存 ⁃ アプリの管理に必要なメタ情報一式を/data/local/ webapps/webapps.jsonに保存 ⁃ App Manifestに宣言されたPermissionをアプリに付与インストール完了通知を表示 installed
11.
11 Mini Manifestについて • パッケージ型アプリのインストールに必要な情報 を記述したマニフェストファイル
Apps.installPackageの第一引数に指定される package_pathに指定されたURLからアプリ本体が ダウンロードされる 記載する内容はApp Manifestと似ているが、幾つか の項目が異なる ⁃ インストール時に不要な情報は持たない (permission, launch_path, type, cspなど) ⁃ Mini Manifest独自の項目を持つ (package_path, release_notes, size) 以下の項目はアプリ本体に含まれるApp Manifestと 完全に一致していなければならない ⁃ name, version, developer, locales { "name": "My App", "package_path": "http://my.com/app.zip", "version": "1.0", "size": 123456, "release_notes": "First release", "developer": { "name": "Developer Name", "url": "http://my.com/" }, "locales": { "se_SE": { "name": "Min balla app" } }, "icons": { "256": "/icons/256.png" } }
12.
12 アプリの署名について • Mozillaの署名ツールで署名する https://wiki.mozilla.org/Apps/PrivilegedApplication/SigningService • アプリの/META-INFに署名ファイルが含まれる
manifest.mf ⁃ アプリの各ファイルのSHA1とMD5ハッシュを計算し、 BASE64エンコードした値を列挙したもの zigbert.sf ⁃ manifest.mfのSHA1とMD5ハッシュを計算し、 BASE64エンコードした値を記述したもの zigbert.rsa ⁃ zigbert.sfをMarketplaceの秘密鍵で署名し、署名値と 公開鍵証明書(X509のDER)をCMS形式で格納したもの • 署名検証は .rsa →.sf →.mf の順に行われる Manifest-Version: 1.0 Name: index.html Digest-Algorithms: MD5 SHA1 MD5-Digest: 0uGKBwq2RXW8JYA2VGzYfw== SHA1-Digest: X3uavo5AlDGIM5rN1P7qhuUnf0w= : Signature-Version: 1.0 MD5-Digest-Manifest: 8n4aIIP04d7gLQ8yUe8Rcg== SHA1-Digest-Manifest: MeExZFwgDjJaFSlciXbVldOxcUE= /META-INF/manifest.mf /META-INF/zigbert.sf Certificate: Data: Version: 3 (0x2) Serial Number: 1048577 (0x100001) Signature Algorithm: sha384WithRSAEncryption Issuer: C=US, O=Mozilla Corporation, : /META-INF/zigbert.rsa ※ ※openssl pkcs7 -inform DER -in zigbert.rsa -print_certs –text で公開鍵証明書を出力したもの
13.
13 webapps.jsonについて 端末にインストールされたアプリを管理するためのJSONファイル※1 “{8750614d-a19a-44c3-aa02-2b084f8e0c7d}”: { ―
アプリの格納ディレクトリ名 “origin”: “app://{8750614d-a19a-44c3-aa02-2b084f8e0c7d}”, ― アプリに割り当てられたドメイン名 “installOrigin”: “https://marketplace.firefox.com”, ― インストール元のオリジン “installTime”: 132333986000, ― インストールされた時刻 “manifestURL”: “https://marketplace.firefox.com/mini.webapp”, ― Mini Manifestの取得元 “removable”: true, ― アンインストールの可否 “localId”: 1021, ― インストール順に割り当てられたアプリの通し番号 “etag”: “¥”6f996751558be05eaa8bec8db03edbe0¥“”, ― Mini Manifestのダウンロード時に取得したETag “appStatus”: 2, ― アプリの種別 (2=特権アプリ) “basePath”: “/data/local/webapps”, ― アプリのインストールディレクトリパス “receipt”: null, ― 課金アプリの購入に関する情報 “name”: “My App”, ― アプリ名 “csp”: “”, ― 標準のCSP設定からの変更点 : } ※1 Androidで言うところの/data/system/packages.list やpackages.xml のようなもの
14.
14 Permissionについて • 端末の機能にアクセスするために必要な権限 電話帳へのアクセス、カメラや通話機能の使用など
使用する機能に対応するPermissionをApp Manifestに宣言する • アプリの種類に応じて、使用できるPermissionと権限の付与 のされ方が異なる 例えば、認定アプリからの電話帳アクセスは暗黙的に許可される が、特権アプリが電話帳へアクセスする場合は、実行の都度、 ユーザーにアクセス可否を確認するためのプロンプトが開かれる Permissionとその保護レベルは以下のコードに定義されている gecko/dom/apps/src/PermissionsTable.jsm • 付与されたPermissionは端末のSQLite DBで管理される /data/local/permissions.sqlite /data/local/permissions.sqlite
15.
15 Firefox OS Simulatorによるインストール① ホストPC
Firefox OS端末 Firefox ブラウザ Firefox OS Simulator ADB Client ADB Server Gecko ADB Device Daemon (adbd) DeviceRoot Actor Webapps Actor Debugger Server tcp:6000 tcp:6000 アプリ本体の転送 (ADB protocol) アプリのインストール要求 (Mozilla debugging protocol)
16.
16 Firefox OS Simulatorによるインストール② PCから端末へのポートフォワードを設定 アプリ本体を端末に転送 デバッガの接続完了を通知 デバッガの提供する機能一覧を要求 デバッガがアプリ管理機能(webappActor)を持っていることを通知 アプリのインストールを要求 インストール完了を通知 Firefox
OS Simulator ADB Client ADB Server ADB Device Daemon DeviceRoot Actor Webapps Actor Debugger Server ホストPC Firefox OS端末 adb forward tcp:6000 tcp:6000 adb push {application file path} /data/local/tmp {“from” : “root”, “applicationType” : “browser”, …} {“to”:”root”, “type” : “listTabs”} {“from” : “root”, “webappActor” : “conn1.webapp3”, …} {“to”:”conn1.webapp3”, “type” : “install”, “appId”: “{uuid}”, …} {“from” : “conn1.webapp3”, “type”:“webappsEvent”, “appId”:”{uuid}”} デバッガの接続確認画面を表示 (Systemアプリに画面表示を要求) インストール処理 (アプリの署名検証は行わない)
17.
17 アプリの非公式インストールとその対策 Firefox OS パッケージ型アプリ インストールの仕組みを調べてみた
18.
18 非公式なインストールとは Androidのroot化ツール(の一部)を用いてroot権限が取得できる ⁃ adbを用いてLinux KernelやAndroidの脆弱性を突くプログラムを実行する ⁃
ブートローダをアンロックし、リカバリツールでsuをインストールする root権限でOSの制限を解除することで、禁止されたアプリをインストールできる ⁃ 特権アプリの署名検証を無効化し、Marketplace以外から取得する ⁃ 第三者が作成した認可アプリをインストールする 本資料は端末のroot化や非公式なアプリのインストールを推奨するものではありません。 故障や不具合などが生じても責任は負いませんので自己責任で実施してください
19.
19 本資料で説明する非公式インストールの手順 • 特権(Privileged)アプリをMarketplace以外のウェブサイトから入手する • 認定(Certified)アプリをFirefox
OS SimulatorからPushでインストールする これらの手順はエミュレータ以外での動作確認をしていないため、実端末では動作しない可能性があります
20.
20 特権アプリをウェブサイトからインストール ① 端末をroot化する ② 端末からomni.jaファイルを抜き出す adb
pull /system/b2g/omni.ja ③ omni.jaからアプリの署名検証に使用される JSファイル(Webapps.jsm)を抽出する unzip omni.ja modules/Webapps.jsm ④ 抽出したJSファイルをテキストエディタで開き、 左記のとおりにコードを書き換える ⑤ 変更したJSファイルをomni.jaに保存する zip omni.ja modules/Webapps.jsm ⑥ 変更したomni.jaを端末に転送する adb shell mount –o rw,remount /system adb push omni.ja /system/b2g/omni.ja ⑦ ウェブサイトから特権アプリをインストールする (a) 変更後の署名検証エラーが起きても処理を続行するように変更 (b) Marketplace以外からのインストールでも続行するように変更 (c) ids.jsonがなくてもインストールを続行するように変更 (a) (b) (c)
21.
21 認定アプリをFirefox OS SimulatorからPush ①
基本的な手順は前ページと同じ ② omni.jaからRemote Debugger経由でアプリをイ ンストールする際に使用されるJSファイル(dbg- webapps-actors.js)を抽出する unzip omni.ja chrome/chrome/content/dbg-webapps-actors.js ③ 抽出したJSファイルをテキストエディタで開き、 左記のとおりにコードを書き換える ④ 変更したJSファイルをomni.jaに保存する zip omni.ja chrome/chrome/content/dbg-webapps-actors.js ⑤ 変更したomni.jaを端末に転送する ⑥ Firefox OS Simulatorで認定アプリをPushする (a) アプリの種別がcertifiedでもインストール処理を継続するように変更 (a)
22.
22 非公式インストールを防ぐには • 製品向けビルド時はadbのshell, pullコマンドを無効化する ⁃
Androidのroot化ツールを使用できなくするため ⁃ Webアプリの開発者はこれらのコマンドが無くても困らない • systemとrecovery領域の改ざんを防ぐ ⁃ 商用機でのブートローダ―アンロックを禁止する ⁃ ハードウェアの機能(TrustZone等)を用いて改ざん検知を行う ⁃ 改ざんを検知した場合はバックアップデータから復元してデータを初期状態に戻す ⁃ もちろんバックアップデータ自体も改ざんから守る • 他にも色々な対策が必要 ⁃ LSMでGeckoアップデート時を除くsystem領域のremountを防ぐなどなど
Download