脆弱性対策チェックリスト

脆弱性対策チェック項目一覧について

このチェック項目一覧は、本ツールで取り上げた各脆弱性の対策が行われているか確認するためのチェック項目を一覧にしたものです。
アプリを開発する際にこの一覧を利用することで、脆弱性が存在していないかどうかチェックすることができます。

確認方法について

以下の各項目について、対策が行われているかどうか確認してください。
対策されていない項目があるアプリは脆弱性があると考えられるため、アプリの仕様と実装状況を再度確認し、必要な対策を行う必要があります。
チェック項目一覧には関連する学習コンテンツへのリンクを配置してありますので、参考にしてください。

脆弱性対策チェック項目一覧

No. 脆弱性の種類 対策内容 関連学習コンテンツ 備考
01 ファイルアクセスの制限不備 ファイルやPreferenceの作成時にはMODE_PRIVATEを使用する 内部ストレージのアクセス制限不備
Preferenceファイルのアクセス制限不備
*1
02 SDカードに重要な情報を保存しない SDカードのファイルアクセス制限の理解不足
03 コンポーネントのアクセス制限不備 android:exported属性はできるかぎりfalseに設定する 非公開コンポーネントのアクセス制限不備 *2
*3
*4
04 公開コンポーネントはPermissionで保護する 公開コンポーネントのアクセス制限不備
ContentProviderのアクセス制限不備
*2
05 暗黙的Intentの不適切な使用 できる限り暗黙的Intentは使用しない BroadcastしたIntent情報の漏えい
*5
06 不適切なログ出力 重要な情報をログに出力しない 重要情報の想定外のログ出力 *6
07 WebViewの不適切な使用 任意のURLを受け入れるWebViewでは、addJavascriptInterfaceを使用しない JavascriptInterfaceの理解不足 *7
08 SSL通信の実装不備 独自のTrustManagerやHostnameVerifierを使用しない セキュリティ例外の無視
09 SSL通信時のエラーを無視せず適切に処理する セキュリティ例外の無視
10 不必要な権限の取得 不必要なPermissionの使用を定義しない マルウェアと誤解される可能性のあるPermissionの使用


備考1
MODE_WORLD_READABLE、MODE_WORLD_WRITEABLEは、Android4.2 (APIレベル17)以降では廃止され、使用しないように求められています。
(ただし、現時点ではAPIレベル17のAPIを使用していても、「MODE_WORLD_READABLE」や「MODE_WORLD_WRITEABLE」を使用できる状況です。)

端末のバージョン MODE_WORLD_WRITEABLE
Android4.1 (APIレベル16)以前
使用可能
Android4.2 (APIレベル17)以降 使用可能だが
使用しないように求められている

端末のバージョン MODE_WORLD_READABLE
Android4.1 (APIレベル16)以前
使用可能
Android4.2 (APIレベル17)以降 使用可能だが
使用しないように求められている
ファイルデータを共有する際にはファイルのアクセス制限を利用するのではなく、ContentProviderやBroadcastReceiver、Serviceなどの、データを他のアプリに提供する仕組みの利用を検討しましょう。
備考2
Home画面からアプリを起動した際に呼び出されるActivityは、android:exported属性にtrueが設定されます。
これはAndroid OSの仕様通りの設定なのでこのままで問題ありません。
備考3
ContentProviderの宣言時にandroid:exported属性を明示的に指定しなかった場合の初期値はバージョンにより異なります。
Android4.1 (APIレベル16)以前では初期状態で他の全てのアプリに公開される仕様になっています。
端末のバージョン android:exportedの初期値
Android4.1 (APIレベル16)以前 true
Android4.2 (APIレベル17)以降 false
備考4
Android2.2 (APIレベル8)以前ではContentProviderの宣言時にandroid:exported属性を設定しても機能しないため、ContentProviderを非公開にすることができません。
端末のバージョン android:exported属性の機能
Android2.2 (APIレベル8)以前 機能しない
Android2.3.1 (APIレベル9)以降 機能する
備考5
アプリが提供する機能によっては、連携先のアプリを指定せずにデータ連携することが必要な場合があります。
意図した設計であるかどうか確認する必要があります。
備考6
Android4.2 (APIレベル17)以降の環境では、ログを読み込む権限を持つアプリであっても、他のアプリが出力したログは読み込めないようになっています。
端末のバージョン 他アプリが出力したログの読み込み
Android4.1 (APIレベル16)以前 可能
Android4.2 (APIレベル17)以降 不可能
備考7
JavascriptInterfaceの問題はAndroid OSのバージョンに依存します。安全にJavascriptInterfaceを使うための条件は非常に複雑です。 JavascriptInterfaceの理解不足を参照して、条件を正しく理解してください。

参考:
Android OS において任意の Java のメソッドが実行される脆弱性
http://jvndb.jvn.jp/ja/contents/2013/JVNDB-2013-000111.html