はじめに
セッション14-C-1は「Androidセキュアコーディング」である。このセッションは、Androidアプリに潜む脆弱性の事例とその対策について紹介し、また、市場に流通するAndroidアプリの潜在的な危険性に関する調査をベースにしながら、実際のコーディング時の注意ポイントを示すものだった。セッションでは、身近なアプリにも脆弱性が発見されている現状や、急増するAndroidアプリの脆弱性も「氷山の一角」でしかないといった報告がなされた。
セッションスピーカーは、JPCERTコーディネーションセンター(JPCERT/CC)久保正樹氏と日本スマートフォンセキュリティ協会(JSSEC)松並勝氏の2名だ。久保氏は、同センターの情報流通対策グループ脆弱性情報の解析を行いながら、セキュアコーディングに関するセミナー講師としても活動している。松並氏は、ソニーデジタルネットワークアプリケーションズ株式会社でセキュリティビジネスに携わる一方、JSSEC技術部会セキュアコーディンググループリーダーとして、ボランティアベースで作成されている「Androidアプリのセキュア設計・セキュアコーディングガイド」の作成に尽力している。
Androidアプリの脆弱性はちょっとした注意で減らせる
松並氏のセッションは、実際のAndroidアプリで発見・報告された脆弱性の事例を示しながら、その対策方法とJSSECのコーディングガイドではどのように記述されているかを説明する形で進行した。
事例の紹介に入る前に、松並氏は、Androidアプリの脆弱性が急増している原因について、アプリが増えたことと、それに伴いセキュリティ研究者の注目も集めたことによる増加と分析した。IPAのレポートによれば、2011年に18件ほどだったAndroidアプリの脆弱性報告が、2012年は9月の段階で95件に達している。iPediaという脆弱性情報のデータベースにはすでに156件の登録がある。しかし、松並氏によれば、この数はまだ増えるだろうという。
さらに同レポートでは、報告された脆弱性の多くがアクセス制御の不備によるものであり、開発者が、Androidのアクセス制御の仕組みを知らずにコーディングしていることも大きな要因であると指摘している。松並氏は、そのような単純ミスの事例として、3つのアプリを紹介した。なおこれらのアプリの脆弱性は現在では修正されており、安全に利用することができる。
事例1:Twitter投稿アプリのアクセス制御不備
1つめは、Twitterの画像投稿アプリのActivityが一般に公開されていたため、マルウエアはアプリのアップロード機能を呼び出すだけで、そのアカウントから画像などを公開できてしまうというものだ。被害者は、公開したくない画像を勝手に公開されたり、マルウエアのアップロードの濡れ衣を着せられてしまう。対策としては、画像アップロード機能のActivityは外部に公開しないことだが、コーディングガイドでは、必要のないActivityに対してAndroidManifest.xmlの「android:exported」を「false」に設定する方法が示されている。
事例2:SNSアプリで有人の発言をSDカードに保存
2つめは、SNSの友人の発言が攻撃者に読まれてしまうという事例だ。あるSNSアプリはサーバーから取得した友人の発言をSDカードに保管していため、他のアプリからアクセスできてしまう状態だったという。対策は、個人情報やプライバシーにかかわる情報は、SDカードのようなデバイスではなく非公開ファイルに保存することだ。コーディングガイドでは、同一アプリで読み書きするファイルは「openFileOutput()メソッド」を「MODE_PRIVATE」に設定して作成することを推奨している。
事例3:デバッグコードが残したままリリースビルドを作成
最後の事例は、人気アニメを題材にしたアプリだった。この事例は、Twitterの連携機能に不備があり、IDおよびパスワードが外部に漏れてしまう危険性が放置されたままだったというものだ。問題のアプリでは、ユーザーのTwitterアカウント情報をLogCatに出力しており、マルウエアはログファイルをアクセスすることで、IDとパスワード情報を入手できてしまう。原因について松並氏は、「この不備は、おそらくデバッグ用に実装されていた部分が、リリースビルドにも残っていたためではないか?」と分析している。対策は、リリースビルドではデバッグログ関連の処理を残さないようにするしかない。このような事例は、コーディングガイドには未掲載のものだそうで、現在作成中の第三版に記述を追加する予定だそうだ。
セッションの中で松並氏が強調していたことだが、以上の脆弱性は、すべて被害が発生する前に研究者などによって発見され、すべてが対応済みである。また、対策がとられているということは、これらのベンダーは報告された脆弱性について真摯に取り組み、修正も積極的に行ったベンダーということだ。脆弱性の例として紹介しているが、これらのベンダーの脆弱性への対応はむしろ賞賛されるべきものだという。そして、「JSSECのコーディングガイドは、サンプルコードも豊富に掲載し、NGな例を示すよりOKな例を示しているので、プログラマーはそのまま自分のコードに利用してもらえるように作成しています。(松並氏)」と述べた。