-
タグ
タグ
- セキュリティ
- 人材開発・教育
- システム開発
- アプリ開発
- モバイルアプリ
- DX
- AI
- サイバー攻撃
- サイバー犯罪
- 標的型攻撃
- 脆弱性
- 働き方改革
- 企業市民活動
- 攻撃者グループ
- JSOC
- JSOC INSIGHT
- サイバー救急センター
- サイバー救急センターレポート
- LAC Security Insight
- セキュリティ診断レポート
- サイバー・グリッド・ジャパン
- CYBER GRID JOURNAL
- CYBER GRID VIEW
- ラックセキュリティアカデミー
- すごうで
- ランサムウェア
- ゼロトラスト
- ASM
- EDR
- SASE
- デジタルアイデンティティ
- インシデントレスポンス
- 情シス向け
- 対談
- CIS Controls
- Tech Crawling
- クラウド
- クラウドインテグレーション
- データベース
- アジャイル開発
- DevSecOps
- OWASP
- CTF
- FalconNest
- セキュリティ診断
- IoT
- EC
- サプライチェーンリスク
- スレットインテリジェンス
- テレワーク
- リモートデスクトップ
- アーキテクト
- プラス・セキュリティ人材
- 障がい者採用
- 官民学・業界連携
- カスタマーストーリー
- 白浜シンポジウム
- CODE BLUE
- 情報モラル
- クラブ活動
- 初心者向け
- 趣味
- カルチャー
- 子育て、生活
- 広報・マーケティング
- コーポレート
- ライター紹介
- IR
デジタルペンテストサービス部の宮崎です。
Androidアプリ開発者の皆さん、JSSECセキュアコーディングガイドをご存知でしょうか?
一般社団法人日本スマートフォンセキュリティ協会(JSSEC)が発行する、Androidアプリケーション開発者向けのセキュア設計、セキュアコーディングのノウハウをまとめたTips集で、先日、最新版となる2020年11月1日版が公開されました。JSSECの公式サイトより無料で閲覧・ダウンロードすることができます。
ラックもJSSECの幹事企業で、私自身も本改訂版の執筆をさせていただきました。
今回は、最新版の改訂内容について一部紹介していきたいと思います。
- セキュアコーディングガイド2020年11月1日版改訂内容
- 3.1.1.2. Androidスマートフォンにおける機能資産
- 4.6.3.7. Android 11(API Level 30)における対象範囲別ストレージの適用について
- おわりに
セキュアコーディングガイド2020年11月1日版改訂内容
JSSECセキュアコーディングガイドは、Android OSのバージョンアップに追従するかたちで改訂が続けられています。
2012年6月版が初版となり、過去2年の版数と対象となるAndroidバージョンは以下のようになっています。
JSSECセキュアコーディングガイド | Androidバージョン |
---|---|
2018年2月1日版 | Android 8 |
2018年9月1日版 | Android 9 |
2019年9月1日版 | Android 10 |
2019年12月1日版 | Android 10 |
2020年11月1日版 | Android 11 |
JSSECセキュア コーディングガイド |
Androidバージョン |
---|---|
2018年2月1日版 | Android 8 |
2018年9月1日版 | Android 9 |
2019年9月1日版 | Android 10 |
2019年12月1日版 | Android 10 |
2020年11月1日版 | Android 11 |
ご覧の通り、最新版である2020年11月1日版は、Android 11における変更点を中心に改訂が行われています。以下に、最新版における改訂内容を、ガイド本文より抜粋します。
最新版の訂正記事 | 訂正の要旨 |
---|---|
3.1.1.2. Androidスマートフォンにおける機能資産 | 機能資産におけるアップデート情報についての説明を追記しました。 |
4.6.3.7. Android 11(API Level 30)における対象範囲別ストレージの適用について | Android 11.0(API Level 30)における対象範囲別ストレージについての説明を追記しました。 |
5.2.3.6. Android 6.0 以降の Permission モデルの仕様変更について | Android 11.0(API Level 30)における1回だけのアクセス許可についての説明を追記しました。 |
5.2.3.7. Android 11.0 以降での使用していないアプリの権限が自動リセットされる機能について | Android 11.0(API Level 30)における権限の自動リセットについての説明を追記しました。 |
5.5.3.5. Android 11 でのデータアクセスの監査について | Android 11.0(API Level 30)におけるデータアクセスの監査についての説明およびサンプルコードを追記しました。 |
5.5.3.6. Android 11 での位置情報アクセスについて | Android 11.0(API Level 30)における位置情報アクセスについての説明を追記しました。 |
5.6.3.6. Conscryptモジュールについて | Conscryptモジュールについての説明とAndroid 9 / Android 10における利用方法の違いについての説明を追記しました。 |
5.7.3.2. Android 11における生体認証の変更点 | Android 11.0(API Level 30)における生体認証の変更点についての説明を追記しました。 |
Android 11では、対象範囲別ストレージや1回だけのアクセス許可など、ユーザーのプライバシーに配慮した変更が多くなされました。改訂内容一覧からもわかる通り、最新版のセキュアコーディングガイドでは、これら変更点について説明されています。
3.1.1.2. Androidスマートフォンにおける機能資産
この節ではスマートフォンにおける、機能資産に対する適切な保護について述べられています。機能資産とは、守るべき対象を「情報」と「機能」に分けて考えた場合、情報資産と対になる言葉です。以下でAndroid OSがアプリに提供する機能資産の一例をご紹介します。
- SMSメッセージを送受する機能
- カメラ撮影機能
- 電話を掛ける機能
- 音量変更機能
- ネットワーク通信機能
- 電話番号、携帯状態の読み取り機能
これらの機能がマルウェア等に勝手に利用されてしまうと、ユーザーのプライバシーを侵害したり意図しない課金を発生させたりすることが容易なため、機能資産として適切に保護する必要があるわけです。
JSSECのセキュリティ基準に100%準拠した
Androidアプリ脆弱性診断ツール
また、機能資産にはAndroidアプリ間の連携機能も含まれます。たとえば、セキュリティアプリなどはスマートフォン内のあらゆるデータにアクセスする必要があるわけですが、このアプリが取得した内容を、適切な権限をもたない他のアプリから容易に取得できるようでは、ユーザーのプライバシーを保護することができません。
Android 11ではこのポリシーが厳密になり、アプリから他のアプリにアクセスする必要がある場合は、マニフェストファイルに明記することが必須となりました。以下に、Android 11以前と以降のマニフェストファイルの記述例を示します。
Android 11以前
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.jssec.android.activity.inhouseuser" >
Android 11以降
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.jssec.android.activity.inhouseuser" >
<queries>
<package android:name="org.jssec.android.activity.inhouseactivity" />
</queries>
赤フォントの<queries>要素で、連携するアプリを明記しています。
実際、このポリシー変更のため、セキュアコーディングガイドに付属のサンプルの多くも修正が必要になりました。既存もしくは開発中のアプリをAndroid 11に対応させる際、Package Manger関連で期待した動作が得られない場合は、このポリシー変更が関係している可能性が高いため、是非、ガイドの当該節とそのサンプルコードを参照してみてください。
4.6.3.7. Android 11(API Level 30)における対象範囲別ストレージの適用について
おそらくAndroid 11における変更点のうち、もっとも大きなウェートを占めるのが、この節で述べられている対象範囲別ストレージではないでしょうか。
対象範囲別ストレージとは、公式原文では「Scoped Storage」とあり、アプリは他のアプリのデータフォルダにはアクセスできないというポリシーのことを指します。たとえば、ユーザーがカメラアプリで撮影した写真を外部ストレージに保存した場合、他のアプリからは自由にその写真データへアクセスできず、Android OSが用意した所定の権限とアクセス方法によってのみアクセスできるというものです。
ユーザーのプライバシー保護の観点に基づくポリシーであり、もともとはAndroid 10から導入されていたポリシーではありましたが、既存のアプリへの影響が大きいという理由で、ポリシー自体をオプトアウトするrequestLegacyExternalStorageマニフェスト属性が暫定的に用意されていました。
アプリデータのアクセス方法についてはネット上でも情報が混乱しているため、改めて以下にまとめます。
コンテンツの種類 | アクセス手段 | 必要な許可 | 他のアプリが アクセス可能 |
アプリの アンインストール時に 削除される |
---|---|---|---|---|
アプリ固有の ファイル |
内部ストレージの場合 外部ストレージの場合 |
内部ストレージには不要 Android 4.4(API レベル 19)以降を搭載するデバイスでアプリを使用する場合、外部ストレージには不要 |
ファイルが内部ストレージ内のディレクトリにある場合、不可能 ファイルが外部ストレージ内のディレクトリにある場合、可能 |
削除される |
メディア | MediaStore API | Android 10(API レベル 29)以降で他のアプリのファイルにアクセスする場合、READ_EXTERNAL_STORAGE または WRITE_EXTERNAL_STORAGE Android 9(API レベル 28)以前では、すべてのファイルで許可が必要 |
可能(ただし、他のアプリでは READ_EXTERNAL_STORAGE 権限が必要) | 削除されない |
ドキュメントや ファイル |
SAF(Storage Access Framework) | なし | 可能(システムのファイル選択ツールを使用) | 削除されない |
コンテンツの種類 | アプリ固有の ファイル |
メディア | ドキュメントや ファイル |
---|---|---|---|
アクセス手段 | 内部ストレージの場合 外部ストレージの場合 |
MediaStore API | SAF (Storage Access Framework) |
必要な許可 | 内部ストレージには不要 Android 4.4 |
Android 10 Android 9 |
なし |
他のアプリが アクセス可能 |
ファイルが ファイルが |
可能 (ただし、他のアプリでは READ_EXTERNAL_STORAGE 権限が必要) |
可能 (システムのファイル 選択ツールを使用) |
アプリの アンインストール時に 削除される |
削除される | 削除されない | 削除されない |
Android 10まで用意されていたrequestLegacyExternalStorageマニフェスト属性は、Android 11からは無効となりました。アプリをAndroid 11に対応させるには、上の表のアクセス方法に従う必要があります。この表から、ユーザーが作成した写真や動画などはMediaStore APIで、ダウンロードディレクトリに保存される電子書籍などはSAF(Storage Access Framework)によってでのみアクセスが可能であることが読み取れます。おそらく既存の音楽プレーヤーアプリや写真加工アプリは、ユーザデータへのアクセス方法をMediaStore APIを使用するよう変更することで対応可能かと思われます。
それでは、上記のアクセス方法だけでは従前の機能を実現できないアプリはどうなるのでしょうか?
ストレージの空き容量を確保するため端末内のキャッシュをクリアする機能を備えたバックアップアプリや、あるいはウイルス対策アプリなど端末内すべてのデータにアクセスする必要があるアプリの場合です。
これらアプリのためにも、それぞれ新規のパーミッションとアクセス手段が用意されています。
該当するアプリを開発されており、ターゲットOSをAndroid 11にバージョンアップする必要がある場合は、具体的な対応方法がガイド内に記載されておりますので、是非、ガイドの当該節とそのサンプルコードを参照してみてください。
おわりに
最新版のJSSECセキュアコーディングガイド 、2020年11月1日版の改訂内容の主な変更について紹介させていただきました。Androidアプリケーションを開発されている方で、JSSECセキュアコーディングガイドをご覧になったことがない方は、ぜひ一度ご覧になってみてください。ご覧になったことがある方も、最新版で訂正された記事をご確認いただくことをお勧めします。
JSSECのセキュリティ基準に100%準拠した
Androidアプリ脆弱性診断ツール
Secure Coding Checkerは、JSSECが定めたAndroidアプリのセキュリティ基準に準拠しており、高品質な脆弱性検査が可能です。
タグ
- セキュリティ
- 人材開発・教育
- システム開発
- アプリ開発
- モバイルアプリ
- DX
- AI
- サイバー攻撃
- サイバー犯罪
- 標的型攻撃
- 脆弱性
- 働き方改革
- 企業市民活動
- 攻撃者グループ
- JSOC
- もっと見る +
- JSOC INSIGHT
- サイバー救急センター
- サイバー救急センターレポート
- LAC Security Insight
- セキュリティ診断レポート
- サイバー・グリッド・ジャパン
- CYBER GRID JOURNAL
- CYBER GRID VIEW
- ラックセキュリティアカデミー
- すごうで
- ランサムウェア
- ゼロトラスト
- ASM
- EDR
- SASE
- デジタルアイデンティティ
- インシデントレスポンス
- 情シス向け
- 対談
- CIS Controls
- Tech Crawling
- クラウド
- クラウドインテグレーション
- データベース
- アジャイル開発
- DevSecOps
- OWASP
- CTF
- FalconNest
- セキュリティ診断
- IoT
- EC
- サプライチェーンリスク
- スレットインテリジェンス
- テレワーク
- リモートデスクトップ
- アーキテクト
- プラス・セキュリティ人材
- 障がい者採用
- 官民学・業界連携
- カスタマーストーリー
- 白浜シンポジウム
- CODE BLUE
- 情報モラル
- クラブ活動
- 初心者向け
- 趣味
- カルチャー
- 子育て、生活
- 広報・マーケティング
- コーポレート
- ライター紹介
- IR