1. はじめに¶
1.1. スマートフォンを安心して利用出来る社会へ¶
本ガイドはAndroidアプリケーション開発者向けのセキュア設計、セキュアコーディングのノウハウをまとめたTips集です。できるだけ多くのAndroidアプリケーション開発者に活用していただきたく思い、ここに公開いたします。
昨今、スマートフォン市場は急拡大しており、さらにその勢いは増すばかりです。スマートフォン市場の急拡大は多種多彩なアプリケーション群によってもたらされています。従来の携帯電話ではセキュリティ制約によって利用できなかったさまざまな携帯電話の重要な機能がスマートフォンアプリケーションには開放され、従来の携帯電話では実現できなかった多種多彩なアプリケーション群がスマートフォンの魅力を引き立てています。
スマートフォンのアプリケーション開発者にはそれ相応の責任が生じています。従来の携帯電話ではあらかじめ課せられたセキュリティ制約によって、セキュリティについてあまり意識せずに開発したアプリケーションであっても比較的安全性が保たれていました。スマートフォンでは前述のとおり、携帯電話の重要な機能がアプリケーション開発者に開放されているため、アプリケーション開発者がセキュリティを意識して設計、コーディングをしなければ、スマートフォン利用者の個人情報が漏洩したり、料金の発生する携帯電話機能をマルウェアに悪用されたりといった被害が生じます。
AndroidスマートフォンはiPhoneに比べると、アプリケーション開発者のセキュリティへの配慮がより多く求められます。iPhoneに比べAndroidスマートフォンはアプリケーション開発者に開放された携帯電話機能が多く、App Storeに比べGoogle Play(旧Android Market)は無審査でアプリケーション公開ができるなど、アプリケーションのセキュリティがほぼ全面的にアプリケーション開発者に任されているためです。
スマートフォン市場の急拡大にともない、様々な分野のソフトウェア技術者が一気にスマートフォンアプリケーション開発市場に流れ込んできており、スマートフォン特有のセキュリティを考慮したセキュア設計、セキュアコーディングのノウハウ集約、共有が急務となっています。
このような状況を踏まえ、一般社団法人日本スマートフォンセキュリティ協会はセキュアコーディングWGを立ち上げ、Androidアプリケーションのセキュア設計、セキュアコーディングのノウハウを集めて、公開することにいたしました。それがこのガイド文書です。多くのAndroidアプリケーション開発者にセキュア設計、セキュアコーディングのノウハウを知っていただき、アプリケーション開発に活かしていただくことで、市場にリリースされる多くのAndroidアプリケーションのセキュリティを高めることを狙っています。その結果、安心、安全なスマートフォン社会づくりに貢献したいと考えています。
1.2. 常にベータ版でタイムリーなフィードバックを¶
私たちJSSECセキュアコーディングWGはこのガイド文書の内容について、できるだけ間違いがないように心がけておりますが、その正しさを保証するものではありません。私たちはタイムリーにノウハウを公開し共有していくことが第一と考え、最新かつその時点で正しいと思われることをできるだけ記載・公開し、間違いがあればフィードバックを頂いて常に正しい情報に更新し、タイムリーに提供するよう心がける、いわゆる常にベータ版というアプローチをとっています。このアプローチはこのガイド文書をご利用いただく多くのAndroidアプリケーション開発者のみなさまにとって有意義であると私たちは信じています。
このガイド文書とサンプルコードの最新版はいつでも下記URLから入手できます。
1.3. 本文書の利用許諾¶
このガイド文書のご利用に際しては次の2つの注意事項に同意いただく必要がございます。
- このガイド文書には間違いが含まれている可能性があります。ご自身の責任のもとでご利用ください。
- このガイド文書に含まれる間違いを見つけた場合には、下記連絡先までメールにてご連絡ください。ただしお返事することや修正をお約束するものではありませんのでご了承ください。
一般社団法人 日本スマートフォンセキュリティ協会
セキュアコーディングWG問い合わせ
メール宛先: jssec-securecoding-qa@googlegroups.com
件名:【コメント応募】Androidアプリのセキュア設計・セキュアコーディングガイド 2018年2月1日版
内容:氏名(任意)/所属(任意)/連絡先E-mail(任意)/ご意見(必須)/その他ご希望(任意)
1.4. 2017年2月1日版からの訂正記事について¶
本節では、前版の記事について事実関係と照らし合わせることで判明した訂正事項を一覧にして掲載しています。各訂正記事は、執筆者による継続的な調査結果だけでなく読者の方々の貴重なご指摘を広く取り入れたものです。特に、いただいたご指摘は、本改訂版をより実践に即したガイドとして高い完成度を得るための最も重要な糧となっています。
前版を元にアプリケーション開発を進めていた読者は、以下の訂正記事一覧に特に目を通していただきますようお願いいたします。なお、ここで掲げる項目には、誤植の修正、記事の追加、構成の変更、単なる表現上の改善は含みません。
本ガイドに対するコメントは、今後もお気軽にお寄せくださいますようよろしくお願いいたします。
訂正記事一覧
2017年2月1日版の修正個所 | 本改訂版の訂正記事 | 訂正の要旨 |
---|---|---|
(該当なし) | 4.1.3.7 Autofillフレームワークについて | Autofillフレームワークについての解説を記載しました。 |
4.2 Broadcastを受信する・送信する | 4.2 Broadcastを受信する・送信する | Android 8.0(API Level 26)以降の暗黙的Broadcst Intentの受信に対する制限について追記しました。 |
5.2.3.6 Android 6.0以降のPermissionモデルの仕様変更について | 5.2.3.6 Android 6.0以降のPermissionモデルの仕様変更について | Android 8.0(API Level 26)以降のPermission付与に関する挙動の変更について追記しました。 |
5.3.2.4 KEY_INTENTには、ログイン画面Activityのクラス名を指定した明示的Intentを与える (必須) | 5.3.2.4 KEY_INTENTには、ログイン画面Activityのクラス名を指定した明示的Intentを与える (必須) | Android 4.4(API Level 19)前後でのKey Intentの挙動の違いについて追記しました。 |
5.3.2.6 Account Managerにパスワードを保存しない (推奨) | 5.3.2.6 Account Managerにパスワードを保存しない (推奨) | Android 7.0(API Level 24)以降のパスワード保存場所に関する記述を追記しました。 |
5.3.3.1 Account Managerの利用とPermission | 5.3.3.1 Account Managerの利用とPermission | Android 6.0(API Level 23)以降およびAndorid 8.0(API Level 26)以降のAccountManagerに関するPermissionとメソッドの対応を追記しました。 |
(該当なし) | 5.3.3.3 Android 8.0(API Level 26)以降で署名の一致しないAuthenticatorのアカウントを読めるケース | Android 8.0(API Level 26)以降で署名の一致しないAuthenticatorのアカウント情報を取得できるケースとその対策に関する記述を追記しました。 |
5.4 HTTPSで通信する | 5.4 HTTPSで通信する | Android 8.0以降のSSLv3のサポート打ち切りに関して追記しました。 |
5.4.3.1 プライベート証明書の作成方法とサーバー設定 | 5.4.3.1 プライベート証明書の作成方法とサーバー設定 | プライベート証明書にSubjectAltNameを含むように作成スクリプトを修正しました。 |
(該当なし) | 5.4.3.8 (コラム) セキュア接続のTLS1.2への移行について | HTTPS(SSL/TLS)通信のTLS 1.2への移行を推奨する記事を追加しました。 |
(該当なし) | 5.5.3.3 Android IDのバージョンによる違いについて | Android IDのバージョンによる値や生成規則の違いについて記載しました。 |