最新Androidアプリの脆弱性事情と危険アプリの実例
本セッションのスピーカー奥山氏が所属するソニーデジタルネットワークアプリケーションズ(SDNA)は、VAIOのソフト部門が独立してできたソフト専門子会社だ。ソニーグループの中では、比較的早い段階からソフトウェアセキュリティに関わる業務をしている。
セッション冒頭、奥山氏は会場に「Androidアプリは安全という印象を持っている人はいますか?」と問いかけたが、手を挙げた人はほとんどいなかった。実態はどうだろうか。
SDNAは2015年、Androidアプリの脆弱性の実態調査を行い、その結果を「Android アプリ脆弱性調査レポート 2015年12月版」にまとめた。マーケットプレイスで公開されている各カテゴリのダウンロード数上位500以上、かつ1000ダウンロード以上のアプリ、11686件が調査対象だ。
その結果、脆弱性リスクのあるアプリの割合は何と93%に達していた。前回調査が行われた2013年は96%より若干改善されているため、一部の先進的な開発者がセキュリティに取り組み始めたと思われる。
アクセス制御といわれる類の脆弱性のリスクに絞ると、2013年のデータでは88%のアプリにあったが、2015年には59%まで減少し、かなり改善している。それでも、まだ半分以上のアプリにリスクがあるという事実は変わらない。
ではアクセス制御の脆弱性があると、どういう問題があるのか。奥山氏が紹介したのは「勝手にツイートされてしまうTwitterアプリ」だ。同じ端末に悪さをするアプリがあり、このTwitterアプリに「この端末に入っている画像をツイートして」というメッセージを出すと、このアプリは何もチェックせずにそのままツイートしてしまう、ということが実際に起きた。プライベートな情報の流出につながる脆弱性だ。
原因は、画像アップロード用のActivityが、他のアプリからアクセス可能な状態になっていたことにある。そのため、他のアプリからその機能を勝手に利用することができてしまったのである。
通信内容の暗号化・改ざん検知を行うHTTPS通信の利用状況はどうか。インターネット通信機能を持つアプリのうち、2013年は72%から2015年は88%と、約9割のアプリがHTTPS通信を行っているということが分かった。
しかし奥山氏は「安易なHTTPS実装に起因した脆弱性も存在する。実際、暗号通信が解読・改ざんされるリスクの割合が39%から43%に増加している」と警鐘を鳴らす。
HTTPSの実装の不備があった事例として「通信内容を盗み見られてしまうECサイトアプリ」が紹介された。ECサイトアプリという体で作られてはいるものの、実際はWebViewを使い、普通のPCブラウザでアクセスするのと同じような作りだった。そのため通信内容が盗聴可能で、クレジットカード情報やログインID、パスワードが流出してしまった。
その原因は、すべての通信が攻撃者のPC経由になるよう仕向けられたWi-Fiアクセスポイントが仕掛けられていたことにある。ただ、HTTPS通信のリスクに正しく対応していれば、サーバ証明書の検証で正規の通信ではないことが分かり、そこで遮断することができる。ところがHTTPS自身はエラーだと分かって警告しているのだが、このアプリはそのエラーを無視してしまい、通信を継続してしまった。結果的に重要情報を盗まれてしまった。
そのほかの傾向として奥山氏が注目しているのが暗号技術だ。米国政府も日本政府も、電子政府推奨暗号リストを公開している。それより強度が弱い暗号の使用は止めようということだが、現実は62%のアプリが脆弱な暗号技術を利用している。
そのほかにも、Google自身がセキュリティ上の問題から非推奨としているMODE_WORLD_X機能を使っているアプリが2015年時点でも22%残っている。Android開発元からの情報発信をキャッチできていないベンダーが、まだ存在することに注意が必要だ。
以上のように、Androidアプリのセキュリティ対策が未だ不十分な中で、奥山氏が注目しているのはダウンロード数別の脆弱性リスク傾向だ。グラフで見ると、人気(ダウンロード数)が出るにつれて脆弱性リスクが高まっている。それは、人気に合わせて機能が追加された結果と想像できる。
面白いのはその先で、約1000万ダウンロードをしきい値に、そこを越えると減っていく。つまり脆弱性対策をするようになるという傾向がある。「ダウンロードが増えると儲かるようになる。するとセキュリティ対策をそろそろしないと何かあったとき問題だ、という認識になるのでは」と奥山氏は推察する。
2013年にはこのような傾向は無く、どのアプリにも満遍なく脆弱性があった。つまりこの2年で、モバイルアプリのセキュリティ対策も進んできたと思われる。とはいえ、未だ大半のアプリが不十分という事実を認識しなければならない。
セキュアなAndroidアプリ開発のため留意すべきこととは
では、どのように方法でAndroidアプリを作っていけばセキュアになるのか。
2012年4月から一般社団法人として活動している「日本スマートフォンセキュリティ協会(JSSEC)」が刊行している「Androidアプリのセキュア設計・セキュアコーディングガイド」は、通信キャリアや総務省が推奨するガイドラインのデファクトスタンダードだ。
作成はJSSECのワーキンググループ「セキュアコーディンググループ」が担当し、グループリーダーはSDNAの松並勝氏が務め、奥山氏もガイドの執筆に関わっている。
ガイドの初版は2012年に刊行され、Android 6.0対応の第6版は2016年2月に公開された。その中から奥山氏は以下の3項目について紹介した。
- 新しいPermissionモデル(Runtime Permission)
- 指紋認証によるユーザー認証
- Notification Visibility
まずPermissionモデルについて。Permissionとはアプリにネットワーク通信や位置情報の提供などを許可することを意味する。従来はアプリのインストール時にリストを見せられてOKを押すと、それ以降はアプリの機能がすべて使えることになっていた。これがAndroid 6.0では、アプリの実行時にユーザーの同意を得る方式に変わった。これはiPhoneのiOSと同じになったともいえる。
新しいPermissionモデルは、保護レベルが危険な許諾のみに影響を与えている。Permissionグループ単位での権限管理になっており、同じグループに属するPermissionは一度の要求ですべて承諾される。
驚くのは、ユーザーによる許可の取り消しが可能になったことだ。iOSではOS自体に許諾機能が組み込まれているが、Androidでは、開発者が意識的に権限要求用のAPIを呼び出す必要がある。また許諾を得られなかったり、許諾を取り消されたりした場合のエラー処理が必須だ。
奥山氏は、「危険レベルのPermissionが必要なアプリが落ちないようにするための最低限度の対応」として以下のスライドを紹介した。
次に指紋認証について。個々のアプリから指紋認証を使えるようになった。いわゆるログインやパスワード対応、それ以外にも使うことができる。利用には以下の条件がある。
- Android 6.0(API Level 23)以降
- Fingerprint機能が端末にないと使用不可
- ロックが設定されていないと使用不可
- 指紋が登録されていないと使用不可
奥山氏は指紋認証の特徴として、以下の点を挙げた。
まず良い点は、入力が楽になることだ。パスワードを覚えなくていいし、漏えいの危険も無くなる。また端末の指紋認証センサーまでアクセスしないと解除できないので、攻撃を受けにくい。
しかし悪い点もある。秘匿困難性や人工物による認証、認証制度などの問題から、強度はパスワードよりも弱いと言われている。また指を大きく傷つけてしまうと認証できなくなる可能性がある。換えがきかないものを認証の鍵として使っているため、非交換性という生体認証特有の弱点がある。課金や決済といった重要な情報・機能を扱う際は、かならず他の認証方法と併用した方がいい。
また正しい暗号の使い方も理解する必要がある。弱い暗号を使ってしまうと、弱い鍵を使う結果につながるので、注意が必要だ。
最後はNotification(通知)だ。Android 5.0から変わった点として、画面ロック中にも画面上にNotificationを出せるようになった。画面ロック中にメール着信が分かるなど、ユーザーの利便性を上げるために、簡単なメッセージが見られるようになっている。
単純に何でもNotificationを出すというわけではなく、Public、Private、Secretの三種類のVisibilityを設定できるようになっている。Publicはすべてのロック画面上でNotificationが表示されるが、Secretでは表示されない。Privateでは、画面ロック中にユーザーに見せる情報と、ロック解除後に見せる情報を切り分けて設定することが求められる。
最後に奥山氏は「Android 6.0でも脆弱性はまだまだ残っている。ガイドブックなどを読み、意識的にセキュアなアプリ開発をしていただきたい」と語り、セッションを閉じた。
お問い合わせ
ソニーデジタルネットワークアプリケーションズ株式会社