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つの注意事項に同意いただく必要がございます。

  1. このガイド文書には間違いが含まれている可能性があります。ご自身の責任のもとでご利用ください。
  2. このガイド文書に含まれる間違いを見つけた場合には、下記連絡先までメールにてご連絡ください。ただしお返事することや修正をお約束するものではありませんのでご了承ください。

一般社団法人 日本スマートフォンセキュリティ協会

セキュアコーディングWG問い合わせ

メール宛先: jssec-securecoding-qa@googlegroups.com

件名:【コメント応募】Androidアプリのセキュア設計・セキュアコーディングガイド 2019年9月1日版

内容:氏名(任意)/所属(任意)/連絡先E-mail(任意)/ご意見(必須)/その他ご希望(任意)

1.4. 2018年9月1日版からの訂正記事について

本節では、前版の記事について事実関係と照らし合わせることで判明した訂正事項を一覧にして掲載しています。各訂正記事は、執筆者による継続的な調査結果だけでなく読者の方々の貴重なご指摘を広く取り入れたものです。特に、いただいたご指摘は、本改訂版をより実践に即したガイドとして高い完成度を得るための最も重要な糧となっています。

前版を元にアプリケーション開発を進めていた読者は、以下の訂正記事一覧に特に目を通していただきますようお願いいたします。なお、ここで掲げる項目には、誤植の修正、記事の追加、構成の変更、単なる表現上の改善は含みません。

本ガイドに対するコメントは、今後もお気軽にお寄せくださいますようよろしくお願いいたします。

訂正記事一覧

表 1.4.1 訂正記事一覧
2018年9月1日版の修正個所 本改訂版の訂正記事 訂正の要旨
(該当なし) 4.6.3.6. Android 10(API Level 29)における外部ストレージへのアクセスに関する仕様について Android 10(API Level 29)にて変更された外部ストレージへのアクセスに関する仕様について説明を追記しました。
4.6.1.4. 外部記憶(読み書き公開)ファイルを扱う 4.6.1.4. 外部記憶(読み書き公開)ファイルを扱う Android 10 において、対象範囲別ストレージ機能を一時的に無効とする requestLegacyExternalStorage マニフェスト属性設定について追記しました。
4.6.3.5. Android 7.0(API Level 24)における外部ストレージの特定ディレクトリへのアクセスに関する仕様変更について 4.6.3.5. Android 7.0(API Level 24)における外部ストレージの特定ディレクトリへのアクセスに関する仕様変更について Android 10 において、StorageVolume#createAccessIntentメソッド非推奨の説明を追記しました。
5.2.3.6. Android 6.0 以降の Permission モデルの仕様変更について 5.2.3.6. Android 6.0 以降の Permission モデルの仕様変更について Android 10 の端末における旧アプリ実行時の警告表示について、追記しました。
5.4. HTTPSで通信する5.4.1.1. HTTP通信する5.4.1.2. HTTPS通信する 5.4. HTTPSで通信する5.4.1.1. HTTP通信する5.4.1.2. HTTPS通信する 既にサービス提供を終了している Google Image Search API を使用しないサンプルコードに変更しました。それに伴い、記事内容も更新しました。
5.4.3.8. (コラム) セキュア接続のTLS1.2への移行について 5.4.3.8. (コラム) セキュア接続のTLS1.2/TLS1.3への移行について TLS 1.3 が Android 10 からサポートされることに伴い、記事内容を更新しました。
5.5.1.2. [包括同意あり] アプリ・プライバシーポリシーを組み込んだアプリ 5.5.1.2. [包括同意あり] アプリ・プライバシーポリシーを組み込んだアプリ 例題でIMEIを取得し使用していましたが、Android 10において非特権アプリは取得できない仕様となったため、使用するデータをUUIDに変更しました。
(該当なし) 5.5.3.4. Android 10 での再設定不可能なデバイスIDの取得制限について Android 10でデバイスID情報の取得で必要となるパーミッションが変更になったことに伴い、記事を追加しました。
5.6.2.2. 脆弱でないアルゴリズム(基準を満たすもの)を使用する (必須) 5.6.2.2. 脆弱でないアルゴリズム(基準を満たすもの)を使用する (必須) NIST および ECRYPT II の表を、更新された引用元のデータに合わせて修正しました。
5.6.3.2. 乱数の生成5.6.3.3. 乱数生成における脆弱性と対策 5.6.3.2. 乱数の生成5.6.3.3. 乱数生成における脆弱性と対策 Crypto Provider 非推奨/廃止に合わせて記事を修正しました。
5.7 指紋認証機能を利用する 5.7. 生体認証機能を利用する FingerprintManagerが非推奨となったため、章題を生体認証に改め内容についても更新しました。またサンプルコードはBiometricPromptを使用したもののみにしました。