JSSECが公開している『Androidアプリのセキュア設計・セキュアコーディングガイド』の2016-09-01版を共有用にまとめているもののうち、「3. セキュア設計・セキュアコーディングの基礎知識」のものとなります。
詳細やサンプルコードについては原著の方を参考ください
Androidアプリのセキュリティ
Androidは守る対象として、情報資産と機能資産があります。これらは、許可された人しか使えなければいけません
情報とは、
- 個人の情報(アカウント情報等、スマフォ固有の情報、スマフォ内部にある情報、アプリが管理する情報)
- 他者の情報(電話帳等)
- アプリ自身の情報(アプリメーカーの情報、dexファイル、アプリが保持しているユーザの情報など)
を示します
機能とは、OSがアプリに提供する機能です。また、アプリ間連携機能も含まれます。これにより、適切な対策をしていないと、マルウェア等に利用され、課金が生じたりしてしまいます
脅威とは、情報の勝手な変更や参照、機能の勝手な利用のことです
- 第三者による脅威として、サーバとアプリのネットワークの中間に立ち、アプリ、サーバに攻撃を行う等があります(通信内容の、盗聴、改竄、なりすまし)
- マルウェアによる脅威として、端末に入った、マルウェアが、アプリ間連携や脆弱性を利用して、アプリの資産にアクセスする等があります
- ファイルによる脅威として、攻撃ファイルをダウンロードしたユーザーが、ファイル処理アプリで開いたときに、アプリの脆弱性を利用して攻撃する等があります
- 悪意あるユーザの脅威として、adbを利用して、アプリを解析、アプリの試算にアクセスされる等があります
- スマフォの近くの第三者による攻撃として、覗き見、Bluetooth、端末の窃盗、破壊等があります
入力データの安全性
- 攻撃者が直接的、間接的にそのデータの値を操作可能な場合は、全て入力データの安全性確認が必要となります
- 例えば、Activityが受け取ったIntentは攻撃者が細工したデータの可能性があります。そのため、以下の2点に気を付ける必要があります。
- 受け取ったデータが想定の形式かつ、想定の範囲内であるかの確認
- 想定している形式、値のあらゆるデータを受け取っても、想定外の動きをしない保証
参考
『Android アプリのセキュア設計・セキュアコーディングガイド』【2016年9月1日版】
https://www.jssec.org/dl/android_securecoding.pdf