コラム

「セキュアコーディングガイド 最新版の紹介」

日本スマートフォンセキュリティ協会(JSSEC)技術部会では、Androidアプリケーション開発においてデファクトスタンダードとなっている「Androidアプリのセキュア設計・セキュアコーディングガイド(以下、セキュアコーディングガイド)」を発行しています。

2018年2月には最新版となる第9版をリリースしました。Android 8.0へ対応したほか、可読性に優れたHTML版を新たに公開しています。

JSSECが2018年3月9日に都内の東京電機大学で開催した「JSSEC セキュリティフォーラム2018」では、JSSEC 技術部会 セキュアコーディンググループ リーダー 安藤 彰氏(ソニーデジタルネットワークアプリケーションズ株式会社)が登壇し、第9版で改定されたポイントと今後の予定について紹介しました

 
アプリの開発発注時にも活用される「セキュアコーディングガイド」
 
JSSECの技術部会では、安全なAndroidプログラムの開発を支援するため、「セキュアコーディングガイド」を2012年から発行しています。Android OSのバージョンアップと歩調を合わせるかたちで、年間1、2回の改定を行っており、今回で第9版となりました。

まず安藤氏は、セキュアコーディングガイドの活用状況について触れました。

アプリの開発ベンダーなどで活用されていることは容易に想像つきますが、安藤氏によれば、ある企業がアプリの開発をシステム開発会社などに依頼する場合や、システム開発会社がさらに協力会社にアプリの開発を依頼するときに、「セキュリティの基準として同ガイドへ準拠するよう求めるケースもある」ことを紹介。国内においてデファクトスタンダードとして活用されている状況を説明しました。さらに、2014年からは英語版も発行されている。

おもにAndroid OSの改定にあわせて改版を重ねており、2018年2月1日に公開された第9版では、最新のAndroid 8.0に対応しています。安藤氏は今回の改定内容として「Autofillフレームワーク」が追加されたことや「Permission」「Account Manager」「SSLv3非サポート」「Android ID」「WebView」の変更があったことを紹介しました。

 

「Android 8.0」でセキュリティはどこが変わったか

Android 8.0では「Autofillフレームワーク」が追加されました。ウェブブラウザにおいて保存された情報を自動入力するための枠組みで、ユーザー情報を毎回手入力する手間を省くことができると安藤氏はメリットを説明します。

保存される情報は、ユーザー名やパスワード、住所、電話番号、クレジットカード番号など多岐にわたり、かつ重要な情報を扱うのがポイントです。

さらに技術的な説明を行い、安藤氏はAutofillフレームワークと図を使って、Autofillを使うアプリケーション、利用するユーザー、入力されたデータを保存するAutofillサービスとデータベースを繋ぐものだと解説しました。利用者がAutofillサービスを利用するにはシステムに許可を与える必要があります。

※Autofillフレームワークの概要。アクティブなアプリが対象となり、ユーザーにデータの保存や利用について尋ねるしくみだ
 

具体的には「このアプリが信頼できることを確認してください」というメッセージを表示し、ユーザーが入力した情報に対し「(データ名)を(Autofillサービス名)に保存しますか?」とユーザーに選択を行わせます。

ここで安藤氏はAutofillサービスのリスクについて指摘しました。Autofillサービスを利用するのがマルウェアなどの場合は、ユーザーが入力した重要情報が漏洩するのはもちろん、
ユーザーが意図しない不正な情報を勝手に自動入力されてしまうおそれがあります。

つまり、利用者が適切なAutofillサービスを選定し、保存時には適切に許可を与え、自動入力時には正しい候補を選択しなければならないということです。

安藤氏は、Android 8.0におけるAutofillサービスのセキュリティは、利用者の選択や許可に大きく依存すると指摘。アプリケーション側が行える対策はView(Activity)ごとにAutofillサービスを無効にすることしかできないと述べました。

第9版ではこのようなAutofillフレームワークの仕組みとセキュリティ上の懸念を説明するとともに、リスクに対する対策を盛り込みました。

「Permission」に関してはAndroid 8.0(targetSDK 26以上)から再度の仕様変更がありました。Android 5.1までアプリへ権限を付与するタイミングは、アプリのインストール時でした(インストール時に権限を列挙して利用者に許可のボタンを押さないとアプリがインストールされません)。

Android 6.0(targetSDK 23以上)からは権限が必要になった最初の実行時に確認する「Runtime Permissionの導入」となりました。

これは保護レベルがdangerousのpermissionのみ影響し、実行中に必要に応じた利用者による許諾が行われるようになりましたが、一方でPermission Group単位での権限管理となっていました。

具体的には連絡先の読み出しが必要なアプリケーションの場合、AndroidManifest.xmlでREAD_CONTACTSの宣言が必要です。そして、実際に連絡先の読み出しを行う最初の時に利用者に対し「連絡先のアクセスの許可を付与しますか?」と許可を求めます。

ところが、Android 6.0のRuntime Permissionでは「連絡先のアクセス」に関わる全ての権限を与えるという問題があり、先のケースでは「はい」を選択すると本来権限を与えなくてもよい「連絡先への書き込み」の権限も与えることになります。

悪意がある、あるいはプログラムにミスのあるアプリケーションでは、不必要な連絡先を追加する事や、既存の連絡先を上書きすることも可能だと安藤氏は問題点を説明しました。

そこでAndroid 8.0ではユーザーには同じUIで「連絡先のアクセスの許可を付与しますか?」と許可を求めますが、開発者はAndroidManifest.xmlで明示的に利用宣言を行う事が必須に変更され「普通の仕様に戻った感じです」と安藤氏は評価しました。

※Android 6.0での問題点。Android 6.0〜7.1でtargetSDK23以上の場合はグループ単位での付与となり、宣言していない権限も同時に付与される。Android 8.0以降、targetSDK 26以上では宣言したpermissionのみが付与されるようになった
 

Account Managerはアプリがオンラインサービスへアクセスするために、アカウント情報と認証トークンを一元管理するAndroid OSの仕組みです。Android 8.0かつアプリケーションのAPI Level26以降の場合、署名が一致しないAuthenticatorのアカウントを読めるケースがあります。

安藤氏は第9版でこのようなケースがあることを追記し、いくつかの変更と拡充を図ったと説明しました。

SSLv3は暗号通信で使われるプロトコルですが、すでに規格上の問題が指摘されており、使用しないことが推奨されています。互換性のために残されていましたが、今回より「OSレベルで使えなくした」と安藤氏は解説しました。SSLv3はすでに脆弱性が判明しているため利用が推奨されていませんが、Android 8.0からはOSレベルのサポートが中止となりました。
さらに利用者の端末を特定するために使われていたAndroid IDに関してAndroid 8.0から変更がありました。従来のAndroid 7.1までのAndroid IDは「端末毎にユニークな識別子」が付与され、端末をリセットしない限り同じ識別子が使われます。

このため、特定のアプリでAndroid IDが不適切に利用されると、他のアプリケーションで名寄せが可能という問題がありました。Android 8.0では開発者署名毎に異なる識別子が割り当てられるため、アプリケーションをまたがった情報収集が困難になっています。

一方、Android 8.0で安全性が非常に上がったわけではない上、「Android IDを変更するためにリセットすることを利用者はまず行わない」と安藤氏は語り、開発者はアプリケーション上でプライバシー情報を紐づけて利用するのは注意が必要と呼びかけました。Android IDは端末毎にユニークなものから端末とアプリケーション署名毎にユニークなものに変更され、多少安全性が加味されましたが、それでも取扱には注意が必要です。また安藤氏は、HTMLファイルやWebサイトをアプリケーションから閲覧するための機能であるWebViewの機能についても触れ、Android 8.0ではNetwork Security Configurationの平文通信禁止フラグがWebView時でも有効となった点を紹介しました。

利便性高いHTML版を用意、次回改定ではAndroid Pに対応予定

安藤氏は、「セキュアコーディングガイド」の新たな試みとして、従来のPDF提供にくわえてHTML版の提供を開始したことを明らかにしました。HTML化によって見出しの階層構造がわかりやすくなり、各見出しへのリンクも提供されており、必要な個所へのアクセスが容易になりました。

安藤氏によると、HTML版ではサンプルコードが長い場合もページをまたがることがなくなり、フォントに色が付いているため、可読性が向上したといいます。

すでに次のAndroid PのDeveloper Preview 1版が公開されており、安藤氏は次の第10版でAndroid Pへの対応を予定していることを明らかにしました。また講演の最後に
「セキュアコーディングガイド」について、引き続きAndroidアプリケーションを安全に記述するためのガイドとして活用してほしいと呼びかけ、講演を締めくくりました。

 

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