コラム

「ハイブリット・モバイルアプリのセキュリティ」株式会社アシアル 代表取締役社長 田中 正裕氏

日本スマートフォンセキュリティ協会(JSSEC)は 2017 年 2 月 、都内のベルサール神田において、「JSSEC セキュリティフォーラム 2017 スマートフォン/IoT、その先にある ICT社会のセキュリティについて考える」を開催しました。JSSEC では、これまで「スマートフォンのセキュリティ」をテーマに様々な活動を展開してきました。今回は「IoT」や「AI」「制御システム」など、スマートフォンから一歩踏み込んだ講演を企画する一方、スマートフォンの技術分野も深く掘り下げました。株式会社アシアル代表取締役社長の田中 正裕氏は、「ハイブリット・モバイルアプリのセキュリティ」と題したセッションで、ハイブリッド・モバイルアプリの概要と開発時や運用時におけるセキュリティ上の注意点について解説しました。

今回のテーマである「ハイブリッドアプリ」とは、端末の機能へアクセスできるネイティブアプリの性質をもちつつ、JavaScriptで開発を行うことができるアプリです。クロスプラットフォームで開発でき、コストメリットを得やすいのが特徴です。

ひとくちにスマートデバイスと言っても、さまざまなプラットフォームがありますが、クロスプラットフォームへ柔軟に対応できることから、「ハイブリッドアプリ」が注目されています。一方でネイティブアプリ、ウェブアプリの「両側面からセキュリティを考慮しなければならない」のが、アプリ開発における留意点です。

「ネイティブ」「ウェブ」双方の脆弱性を引き継ぐハイブリッドアプリ

田中氏は、ハイブリッドアプリの話に入る前に、「モバイルアプリ」の特徴について触れ、「情報資産などのセンシティブな情報がユーザーの端末の中で取り扱っていること」を挙げました。

「アプリに脆弱性が作り込まれると、ユーザー本人の個人情報が盗まれるだけでなく、スマートフォンの機能を使われ、いろいろな被害へと拡大するリスクがある」と解説。モバイルアプリにおいては、「一段とセキュリティの強化が求められている」と語り、さらに「被害がサービスを提供するサーバにも及ぶ可能性についても考慮しなければならない」ことを指摘しました。「モバイルアプリに脆弱性があり、攻撃を許すると、ウェブAPIサーバやデータベースサーバにまで拡大することもありえます(田中氏)」。

「さらにハイブリッドアプリは、通常のネイティブアプリに比べてしくみが複雑で、セキュリティ対策が難しい部分がある」と、ハイブリッドアプリ特有の問題があると言います。

ハイブリッドアプリは、ネイティブアプリとウェブアプリの両方を組みあわせて実現しています。端末にインストールするプログラムはネイティブコードで書かれますが、アプリの本体はHTML5、具体的にはJavaScriptで実装されます。したがってサーバ上で提供されるHTMLコンテンツそのものがアプリの本体となります。

ハイブリッドアプリは、JavaScriptだけで開発でき、iOS、Android、Windowsというクロスプラットフォームで動かすことができます。コストメリットが高く、開発効率が良いのが特徴であり、田中氏は「エンタープライズ分野での採用が進んでいる状況にある」とハイブリッドアプリをめぐる状況を解説しました。

標準のウェブブラウザよりアクセスする「ウェブアプリ」では、Bluetooth、NFCなどを使うにも、APIが提供されていないため、利用できる機能に限界があります。しかし、ハイブリッドアプリでは、プラグインで機能を拡張できます。端末でネイティブアプリとして動作しますので、デバイスに対してネイティブなAPIを呼び出し、使用することができます。

しかもさまざまなプラグインが用意されており、利用するのも容易です。開発者がJavaScriptの機能を拡張してOSやデバイスの機能にアクセスできる環境が整っています。

フレームワーク「Cordova」の理解がハイブリッドアプリのセキュリティを高める

ハイブリッドアプリを作るフレームワークとして高いシェアを持っているのが「Cordova」や「PhoneGap」です。

PhoneGapはもともとnitobi社が開発したものですが、買収したアドビシステムズがこれをApache Foundationに寄贈し、Cordovaという名称が与えられ、オープンソース化されました。一方で現在もアドビもPhoneGapという名前もアドビのプロダクト名として使われています。

田中氏は「オープンソース化されたCordovaは、多くの企業が開発に参加しています。アシアルのMonacaを始め、IBM MobileFirst Platform、SAP Mobile Platform、Microsoft Visual Studioなどモバイル開発基盤のコアとしてCordovaが採用されています。セキュリティ対策において、Cordovaに対する理解が非常に重要といえます」と述べました。

Cordovaはふたつのレイヤーから成り立っています。 「WebView」によるウェブコンポーネントのレイヤー、もうひとつがネイティブ言語で記述されたネイティブロジックのレイヤーです。

ウェブコンポーネントのレイヤーだけでは、OSやデバイスの機能にアクセスできません。そこで設けられたのが、コールバックという仕組みです。コールバックを通して、ネイティブロジックにアクセスして、iOSやAndroidのネイティブAPIを呼び出して、デバイスの機能が利用できるようになります。

通常のネイティブアプリであれば、デバイスの機能を使うといっても、ネイティブAPIとネイティブロジックの間をつなぐだけですが、Cordovaで開発したハイブリッドアプリの場合は、その先にあるHTML5のWebコンポーネントのレイヤーまでつながります。

田中氏は「開発者は担当を分担することが多く、ウェブコンポーネントの部分だけ、ネイティブロジックの部分だけを作るという開発スタイルが一般的です」と説明。続けて、「そのため、ウェブコンポーネントを開発する側が、コールバックを使って端末からアクセスされるということを想定してプログラムを作っていないこともありえます」と問題点を挙げました。

ハイブリッドアプリ開発の注意点

ほとんどのCordovaで開発したハイブリッドアプリは、アプリが起動したらすぐにWebViewの画面があらわれ、JavaScriptが動き、必要に応じてネイティブなAPIを呼び出すというのが叩くというようなものが、大多数を占めています。
 
田中氏は「ハイブリッドアプリでは、ウェブアプリの脆弱性、ネイティブアプリの脆弱性の両方を引き継ぎます」と、脆弱性についてハイブリッドアプリが抱える特有の問題点について説明しました。

ウェブコンポーネントの部分だけでも、ネットワーク通信やWebView、Cordova本体の脆弱性があります。

さらに「ネイティブアプリ」の部分では、プラグイン、リバースエンジニアリング、ソースコードの脆弱性へ考慮しなければなりません。セキュアなハイブリッドアプリを開発するには、それらを網羅した対策が求められます。

田中氏は、まずネットワーク通信を例にセキュリティ対策について解説しました。ウェブアプリであれば、不用意に異なるサーバにリクエストを送っても、サーバ側がレスポンスを返さない「Same-Origen Policy」があり、一般的なアプリであれば、このポリシーが適用されます。

しかし、端末のなかにあるファイルに対しては、「file」というプロトコルを用いてアクセスされますが、「Same-Origen Policy」が適用されません。ファイルにリクエストを自由に送ることができるため、Same-Origen Policyでは、万が一の際に問題を回避できないことになります。

しかしこの問題に対して、「Access Origin」「Allow Navigation」「Content-Security Policy」など対策も用意されています。

「Access Origen」は、Cordovaの設定ファイル「config-XML」でアクセスできるドメインを指定できます。また「Allow Navigation」は、Cordova iOS/Android 4.0以上で導入されたセキュリティモデルで、「WebView」で遷移可能なページを制限します。

「Content-Security Policy」は、「Access Origin」など、以前からあるしくみを介在して利用します。これはブラウザが持っている機能で、html内のメタタグ、メタ要素に記述することで、プロトコルやサーバ、インラインScriptなどを制御します。

iOSに関しては、ATS(iOS Application Transport Security)という機能が利用できます。これはiOS 9より搭載されたセキュリティ基準で、ATSが有効でない場合は、通信ができなくなります。将来的には必須になると見られています。Cordovaでは、「Access Origin」や「Allow Navigation」を指定すると、自動的にATS用の設定ファイルへ上書きできます。

iOS 10ではATSがさらに拡張されて、メディアの呼び込みだけは任意のURLから読み込める、ローカルのネットワークであれば任意のアクセスができるという形で仕様変更が行われました。

続いて田中氏は、「WebView」の脆弱性にテーマを移しました。Cordovaのデフォルトでは、Androidの場合システム標準の「WebView」を使う仕様になっています。

しかし、Androidのバージョン5になるまではOSのバージョンにリンクして、OSのベンダーが「WebView」に対するパッチを適用しない限り、そのままアップデートが行われず、「WebView」が脆弱な状態に置かれている場合もあります。

「Android 5以降を使わない限り、脆弱な『WebView』でアプリケーションが動いてしまう問題を抱えています。特にAndroid 4.3以前の『WebView』には、深刻な脆弱性が指摘されており、現在でも約20%の端末が稼働しているという調査もあります」と田中氏は警告します。

回避策として田中氏が挙げたのが、サードパーティー製のライブラリの活用です。1例として挙げた「CrossWalk」では、「WebView」の代わりに「chromium」を利用するため、「WebView」の脆弱性を回避できます。

ファイルサイズが大きくなる課題もありますが、一般的にアプリのファイルサイズは年々大きくなっており、セキュリティが向上すれば気にしないユーザーも増えてきていると解説しました。

またCordovaとプラグインに脆弱性が見つかり、修正パッチが公開されることもあります。田中氏はこの点に関し、Google Playでは、アプリのアップロード時に、Cordovaのバージョンが解析され、特定バージョン以下の場合は注意喚起が行われ、アプリの公開に制限がかかるなど、対策も取られていることを紹介しました。

Cordovaの本質的な仕様が持つ課題もあります。ハイブリッドアプリがHTML5で作られる以上、ソースコードが簡単に読むことが可能です。

「無用な記述やコメントを削除することも重要ですが、そもそもJavaScriptがそのまま平文で見られてしまうことが大きな問題です。サードパーティー製の暗号化プラグインを利用して、ソースコードを難読化させることも必要でしょう」と田中氏は対策を挙げました。

講演の最後に田中氏は「Cordovaは、クロスプラットフォームとしてiOS、Aandroid、Windowsに対応できる利点があります。その恩恵を受けるには、セキュリティは欠かせないテーマです」とまとめ、セッションを終了しました。

【編集協力:Security NEXT 企画制作部】