Критичность: СРЕДНИЙ
Способ обнаружения: DAST, APK

Описание

Приложение Android, собранное с включенной опцией создания резервной копии (флаг android:allowBackup = True в AndroidManifest.xml), может позволить злоумышленнику, имея физический доступ к устройству, создать backup приложения со всеми данными, хранящимися во внутренней директории приложения. Помимо доступа к информации возможно изменить информацию, содержащуюся в файлах и восстановить настройки из измененного backup. Такой вариант эксплуатации, в ряде случаев, может повлечь за собой компрометацию пользовательских данных.

Стоит иметь ввиду, что по умолчанию данная опция включена.

Пример уязвимого кода (файл AndroidManifest.xml):

<?xml version=»1.0″ encoding=»utf-8″?>
<manifest xmlns:android=»http://schemas.android.com/apk/res/android»
package=»com.appsec.android.activity.privateactivity» >

<application
<!— *** Включенние возможности создания резервной копии *** —>
android:allowBackup=»true»
android:icon=»@drawable/ic_launcher»
android:label=»@string/app_name» >

<activity
android:name=».PrivateActivity»
android:label=»@string/app_name»
android:exported=»false» />

</application>
</manifest>

Пример команды, которая создаст резервную копию приложения:

adb backup -f com.appsec.android

Далее при помощи скриптов или утилиты android-backup-extractor необходимо преобразовать из формата Android Backup в обычный архив и получить доступ к данным. Либо, можно воспользоваться альтернативной командой:

dd if=mybackup.ab bs=24 skip=1| openssl zlib -d > mybackup.tar
# Или воспользоваться abe
abe unpack mybackup.ab mybackup.tar

При необходимости, можно изменить содержимое файлов, той же утилитой android-backup-extractor сформировать архив типа Android Backup и восстановить на устройстве:

abe pack mybackup.tar mybackup.ab
adb restore mybackup.ab

Рекомендации

При сборке релизной версии приложения убедитесь, что отключена возможность создания резервной копии. Отключить эту возможность можно установив для атрибута android:allowBackup значение false в файле манифеста.

Пример безопасного кода:

<?xml version=»1.0″ encoding=»utf-8″?>
<manifest xmlns:android=»http://schemas.android.com/apk/res/android»
package=»com.appsec.android.activity.privateactivity» >

<application
<!— *** Выключенние возможности создания резервной копии *** —>
android:allowBackup=»false»
android:icon=»@drawable/ic_launcher»
android:label=»@string/app_name» >

<activity
android:name=».PrivateActivity»
android:label=»@string/app_name»
android:exported=»false» />

</application>
</manifest>

Предыдущая Передача sensitive-информации в параметрах SQL-запроса
Следующая Приложение не обфусцировано
Содержание: