クロスプラットフォーム開発を可能にするMonaca
- 1. 1URL : http://ja.monaca.io/ Copyright © Asial Corporation. All Right Reserved.
クロスプラットフォーム開発を可能にする
Monacaとそのセキュリティ対策
アシアル株式会社
代表取締役 田中正裕
masahiro@asial.co.jp
2018年4月23日
- 2. 2URL : http://ja.monaca.io/ Copyright © Asial Corporation. All Right Reserved.
アシアル株式会社
会社概要
• 創業:2002年
• 資本金:1000万円
• 事業所:東���(本社)、サンフランシスコ
• 従業員数:約50名(8国籍)
事業内容
• 開発プラットフォーム事業:開発ツール、UIフレームワーク
• 開発支援事業:アプリ開発、サーバーサイド(PHP)開発
• 教育事業:トレーニング、執筆
- 5. 5URL : http://ja.monaca.io/ Copyright © Asial Corporation. All Right Reserved.
モバイルアプリ開発基盤 Monaca
HTML5、JavaScript
でアプリ開発
セットアップ不要の
クラウド開発環境
UIフレームワーク
Onsen UI搭載
安心の日本語サポート
- 6. 6URL : http://ja.monaca.io/ Copyright © Asial Corporation. All Right Reserved.
iOS & Android向けのアプリを同時開発
• Web標準技術でモバイルアプリ開発
• モバイルアプリ開発の未経験者に最適
• 既存のWeb開発チームがアプリ開発チームに
• アプリの運用コストを劇的に低減
• ネイティブ機能を使ったアプリ開発も可能
- 7. 7URL : http://ja.monaca.io/ Copyright © Asial Corporation. All Right Reserved.
JavaScriptの世界が広がっていく
Stack Overflow Survey 2017 Stack Overflow Survey 2013
“It’s Official: JavaScript Is The Most Commonly Used Programming Language On
Earth.” - Daniel Rowinski, Editor-in-Chief at ARC
※ StackOverflow: 850万人の登録ユーザー、1500万件の
質問と回答を抱える、世界最大の開発者コミュニティ
- 8. 8URL : http://ja.monaca.io/ Copyright © Asial Corporation. All Right Reserved.
高いUI/UXを表現するUIコンポーネント群
• 様々なモバイルUIの部品をiOSと
Android向けに提供
• 端末のOSにあわせて自動的にデザイ
ンを適用
• 同じソースコードでクロスプラット
フォームUIを実現
• Angular、React、Vue、jQueryなど
各種フレームワークに対応
- 9. 9URL : http://ja.monaca.io/ Copyright © Asial Corporation. All Right Reserved.
Monacaは “プラットフォーム“
Monacaクラウド
WebベースのIDE デバッガー 好きなIDE/エディタ
プロジェクト管理
コード管理
リモートビルド
mBaaS
- 13. 13URL : http://ja.monaca.io/ Copyright © Asial Corporation. All Right Reserved.
ハイブリッドアプリ
Web技術でネイティブアプリを開発するためのフレームワーク
【特徴】
・プッシュ通知
・オフライン対応
・デバイスAPI、ネイティブAPIへのアクセス
・アプリストアでの販売、ストア課金
- 14. 14URL : http://ja.monaca.io/ Copyright © Asial Corporation. All Right Reserved.
HTML5+ネイティブ
ネイティブコード
HTML
コンテンツ
アプリ本体はHTML5で実装
ネイティブアプリ形式で配布
ハードウェア機能を利用可能
プラグインでネイティブ機能を拡張
- 15. 15URL : http://ja.monaca.io/ Copyright © Asial Corporation. All Right Reserved.
Cross Platformツールのシェア
61%
35%
31%
18%
15%
13%
12%
9%
4%
3%
0% 10% 20% 30% 40% 50% 60% 70%
PhoneGap/Cordova
Xamarin
Unity
Qt
Adobe Air
Appcelerator
Corona
Marmelade
Codename One
Live Code
Using this tool Prioritize this tool
Vision Mobile Analysis of Cross-Platform Development, July 2015
- 17. 17URL : http://ja.monaca.io/ Copyright © Asial Corporation. All Right Reserved.
Cordovaフレームワーク(iOS/Android)
コ
ー
ル
バ
ッ
ク
HTML5
CSS
JavaScript
WebView
ネ
イ
テ
ィ
ブ
ロ
ジ
ッ
ク
アプリケーションパッケージ
ネ
イ
テ
ィ
ブ
A
P
I
Android
iOS
- 18. 18URL : http://ja.monaca.io/ Copyright © Asial Corporation. All Right Reserved.
Cordovaフレームワーク(Windows)
HTML5
CSS
JavaScript
Chakra + EdgeHTML
アプリケーションパッケージ
ラ
ン
タ
イ
ム
A
P
I
Windows
ランタイム
(WinRT)
- 20. 20URL : http://ja.monaca.io/ Copyright © Asial Corporation. All Right Reserved.
'2016 OWASP Mobile Top 10
Improper Platform
Usage
OS機能やセキュリティの仕組みの誤用。Androidインテントやパーミッションの間違い、Keychainの
誤用など。
Insecure Data
Storage
安全でないデータ領域の使用や意図しないデータ漏洩など。
Insecure
Communication
ハンドシェイクの間違いや古いSSLバージョンの使用、暗号化されていない通信など。
Insecure
Authentication
認証処理の不備やセッション管理の問題など。
Insufficient
Cryptography
保護されるべきデータに対して、不完全な暗号を使用。
Insecure
Authorization
認可処理の不備。クライアントサイドでの認可処理や、強制ブラウジングなど。
Client Code Quality コードレベルの実装問題。バッファオーバーフローや文字列処理の間違いなど。
Code Tampering バイナリファイルの改ざんやリソースファイルの変更、動的なメモリの改ざんなど。
Reverse Engineering バイナリファイルからのソースコード復元、使用ライブラリやアルゴリズムの抽出など。
Extraneous
Functionality
隠しバックドアの存在や、リリースアプリに含まれてはいけないコメントの混入など。
- 21. 21URL : http://ja.monaca.io/ Copyright © Asial Corporation. All Right Reserved.
ハイブリッドアプリのセキュリティ懸念
ネットワーク通信
WebViewから(ページの読み込み、XHRでのAjax)
ネイティブから(Android/iOS)
WebView
ブラウザエンジンの脆弱性
Cordova本体
Cordovaの脆弱性
プラグイン
プラグインの脆弱性
リバースエンジニアリング
ロジックの漏洩やコードの改ざん
ソースコード
ソースコードの脆弱性
Cordova
アプリケーションパッケージ
ネイティブ言語
による実装
JavaScriptによる実装
WebView
ブラウザエン
ジンの脆弱性
ネットワーク
通信
リバースエン
ジニアリング
プラグイン
実装
プラグイン
- 22. 22URL : http://ja.monaca.io/ Copyright © Asial Corporation. All Right Reserved.
Same-Origin Policy
Cordovaが標準的に使用するiOSのUIWebViewやAndroidのWebViewはfile://プロ
トコルがOriginとなっておりSame-Origin Policyは適用されない。よっ
て、Content-Security Policyの指定が必要となる。
ただし、iOS 9 + Cordova iOS 4.0から利用できる「WKWebView」を用いる
場合、WebViewの不具合からSame-Origin Policyが適用されるため、サー
バー側にCORSヘッダーを付与する必要がある。
ネットワーク通信に対する��キュリティモデル
- 23. 23URL : http://ja.monaca.io/ Copyright © Asial Corporation. All Right Reserved.
Access OriginとAllow Navigation
Access Origin
設定ファイル(config.xml)にて記述する。初期バージョンより存在。
デフォルトは * (すべて許可)なので注意が必要。<video>タグやWebSocket等は制限されないた
Security Policyの利用が推奨される。
Allow Navigation
Cordova iOS/Android 4.0以上に導入されたセキュリティモデル。Androidはcordova-plugin-whitelist
フォルトで組み込み済)。WebViewで遷移可能なページを制限する。
デフォルトはfile://から開始される(端末内に存在する)URLにナビゲーションを許可する。
<access origin="http://example.com" />
<access origin="*" />
<allow-navigation href="http://example.com/*" />
ネットワーク通信に対するセキュリティモデル
- 24. 24URL : http://ja.monaca.io/ Copyright © Asial Corporation. All Right Reserved.
Content Security Policy
HTML内に<meta>タグを用いて記述する。KitKat(Android 4.4)以降、およびiOS 7以降で対応。
<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com; style-src 'self' 'unsafe-
inline'; media-src *">
• gap://プロトコル(iOSのUIWebView)およびhttps://ssl.gstatic.com(Androidで必要)を許可。
• eval()関数やインラインスクリプトを禁止。
<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline'
'unsafe-eval'">
• CSSとJavaScriptは同じオリジンのものを許可。
• eval()関数とインラインスクリプトも許可。
ネットワーク通信に対するセキュリティモデル
- 25. 25URL : http://ja.monaca.io/ Copyright © Asial Corporation. All Right Reserved.
iOS Application Transport Security (ATS)
iOSの持つセキュリティ基準で、iOS 11より必須に。ATSが有効の場合HTTP通信は許可されず、TLS 1.2以上が必須。
Cordovaでは<access>要素もしくは<allow-navigation>要素を指定すると、ATS設定を記述するInfo.plistファイルが上書
きされ、設定が適用される。
下記のように<access>要素が拡張された。
<access origin='*' allows-arbitrary-loads-in-media='true' allows-arbitrary-loads-in-web-content='true' allows-local-
networking='true' />
allows-arbitrary-loads-in-media
• trueの場合、AV Foundation Framework経由で読み込むメディアに対して接続制限が解除される。
allows-arbitrary-loads-in-web-content
• trueの場合、WebViewから行われるリクエストに対して接続制限が解除される。
allows-local-networking
• trueの場合、ローカルネットワークにあるリソースに対して接続制限が解除される。
ネットワーク通信に対するセキュリティモデル
- 27. 27URL : http://ja.monaca.io/ Copyright © Asial Corporation. All Right Reserved.
ブラウザ脆弱性
Android
https://developer.android.com/about/dashboards/
バージョン ブラウザ 世界シェア
4.3以前 WebKit 6%
4.4 (KitKat) Blink (Chrome) 10%
5.0以降 Evergreen
Chrome
84%
Android 5以降は常に最新のChromeエンジン
に更新されるため、機種依存は発生しない
iOS
2018年1月18日現在
https://developer.apple.com/support/app-store/
OSが常に自動更新を行うことから、ユーザー
は常に最新2世代のOSを使い続ける傾向にある。
バージョン依存は発生しづらい状況にある。
2018年4月16日
- 29. 29URL : http://ja.monaca.io/ Copyright © Asial Corporation. All Right Reserved.
Cordovaに関する脆弱性の報告
CVE-2015-5208
Apache Cordova iOS before 4.0.0 allows remote attackers to execute arbitrary plugins via a link.
CVE-2015-5207
Apache Cordova iOS before 4.0.0 might allow attackers to bypass a URL whitelist protection mechanism in an app and load
arbitrary resources by leveraging unspecified methods.
CVE-2015-5204
CRLF injection vulnerability in the Apache Cordova File Transfer Plugin (cordova-plugin-file-transfer) for Android before
1.3.0 allows remote attackers to inject arbitrary headers via CRLF sequences in the filename of an uploaded file.
CVE-2015-8320
Apache Cordova-Android before 3.7.0 improperly generates random values for BridgeSecret data, which makes it easier for
attackers to conduct bridge hijacking attacks by predicting a value.
CVE-2015-5256
Apache Cordova-Android before 4.1.0, when an application relies on a remote server, improperly implements a JavaScript
whitelist protection mechanism, which allows attackers to bypass intended access restrictions via a crafted URI.
Cordova/プラグインの脆弱性
- 30. 30URL : http://ja.monaca.io/ Copyright © Asial Corporation. All Right Reserved.
Google Play Storeでの対応
脆弱性のあるCordovaが用いられている場合、Google Play Storeにて公開停止が行わ
れる。
Google Play Storeでの説明記事
https://support.google.com/faqs/answer/6325474?hl=ja
現在はCordova Android 4.1.1以前で作られ
たパッケージはアップロード不可。
Cordovaの脆弱性が発生すると今後も対応
が必要になる。メンテナンス体制を整えて
おく必要がある。
Cordova/プラグインの脆弱性
- 31. 31URL : http://ja.monaca.io/ Copyright © Asial Corporation. All Right Reserved.
リバースエンジニアリング
ハイブリッドアプリのアセットファイル(HTML/JavaScript等)はネイティブコードにコンパイル
されず、ソースコードの状態で端末内に格納される。無用な記述を削除するため、コメント
の削除や難読化(最適化)を実施することが望ましい。
より進んだ対策としては、ビルド時に暗号化を行い実行時に復号する、サードパーティ製の
暗号化プラグインを使用する。復号に使うキーは、リモートサーバー等の安全な場所から取
り出す必要がある。
Monaca Enterpriseでは
アセットを暗号化できる
https://ja.monaca.io/enterprise.html
Cordova/プラグインの脆弱性
- 32. 32URL : http://ja.monaca.io/ Copyright © Asial Corporation. All Right Reserved.
不要なプラグインの除去
Cordova向けアプリテンプレートの多くが、Cordova Core Pluginsと呼ばれる基本プラグインをすべて同
梱している。実際には使用していないコードが含まれてしまい、脆弱性の温床になる可能性
がある。
Mohamed Shehab et. al, Reducing Attack Surface on Cordova-Based
Hybrid Mobile Apps, MobileDeLi 2014
PhoneGapのWebサイトに掲載されていた622
件のアプリに対しての調査(2014年)では、
プラグインの組み込みと実際の利用に大きな
開きが見られている。
Cordova/プラグインの脆弱性
- 34. 34URL : http://ja.monaca.io/ Copyright © Asial Corporation. All Right Reserved.
コーデイングの指針
Cordovaアプリの大半はSPA型であり、モバイルWebサイトと比べてもJavaScriptのウェイトが高
い。セキュアコーディング対策としてはHTML5向けのプラクティスを適用できる。
• ユーザー入力データのバリデーション
• 適切なエスケープ処理
• JavaScriptインジェクションの回避
• APIキーの適切な管理
セキュアコーディング
- 35. 35URL : http://ja.monaca.io/ Copyright © Asial Corporation. All Right Reserved.
エスケープ処理
コンテキストに応じたエスケープ処理が必要であるが、適切な記述を行うのは困難。
SPAフレームワークやテンプレートエンジンの採用が望ましい。
<div onmouseover="${data1}">${data2}</div>
<a href="${data3}">link</a>
<iframe srcdoc="${data4}"></iframe>
下記の例ではすべての変数に別のエスケープ処理が必要
バインディングをサポートするフレームワーク
やライブラリ
2-Way Bindingを持つもの
• Angular 1
• Angular 2
1-Way Bindingを持つもの
• React
テンプレートエンジン
• Handlebars
• Mustache
エスケープ処理を自前で実装するのは困難であるた
め、フレームワークを採用することが望ましい。
セキュアコーディング
- 37. 37URL : http://ja.monaca.io/ Copyright © Asial Corporation. All Right Reserved.
ハイブリッドアプリのセキュリティ懸念
ネットワーク通信
WebViewから(ページの読み込み、XHRでのAjax)
ネイティブから(Android/iOS)
WebView
ブラウザエンジンの脆弱性
Cordova本体
Cordovaの脆弱性
プラグイン
プラグインの脆弱性
リバースエンジニアリング
ロジックの漏洩やコードの改ざん
ソースコード
ソースコードの脆弱性
Cordova
アプリケーションパッケージ
ネイティブ言語
による実装
JavaScriptによる実装
WebView
ブラウザエン
ジンの脆弱性
ネットワーク
通信
リバースエン
ジニアリング
プラグイン
実装
プラグイン
- 38. 38URL : http://ja.monaca.io/ Copyright © Asial Corporation. All Right Reserved.
脆弱性とその対策
脆弱性
• OS、WebView → OSのアップデート
• Cordovaの脆弱性 → Cordovaのアップデート
• プラグインの脆弱性 → 最新のプラグインの利用
• アプリケーションの脆弱性 → セキュアコーディング
対策
• 安全なネットワーク通信(SSLの利用)
• OSの持つセキュアな領域の使用
• ソースコードの暗号化