Рекомендации по безопасной разработке приложений
Рекомендации для Android
Небезопасное хранение ключевой информации
Доступное на запись хранилище ключей
Доступное на запись хранилище ключей со слабым паролем
Доступное на чтение файловое хранилище ключей
Доступное на чтение хранилище ключей со слабым паролем, содержащее закрытые ключи
Доступное на чтение хранилище ключей со слабым паролем, содержащее открытые ключи
Доступное на чтение хранилище ключей с приватными ключами, защищёнными слабым паролем
Использование файлового хранилища ключей
Хранилище ключей со слабым паролем, содержащее закрытые ключи
Хранилище ключей со слабым паролем, содержащее открытые ключи
Хранилище ключей с приватными ключами, защищёнными слабым паролем
Передача sensitive-информации в Activity
Небезопасная передача sensitive-информации в Activity
Небезопасная передача sensitive-информации во внешнюю Activity
Передача sensitive-информации во внутреннюю Activity
Передача sensitive-информации в Service
Небезопасная передача sensitive-информации в Service
Небезопасная передача sensitive-информации во внешний Service
Небезопасная передача sensitive-информации во внутренний Service
Передача sensitive-информации по сети
Включение sensitive-информации в параметры GET-запроса
Включение чувствительной информации в HTTPS запрос
Передача sensitive информации в HTTP-запросе
Получение sensitive-информации в HTTP-ответе
Получение чувствительной информации в HTTPS-ответе
Хранение sensitive-информации
Хранение sensitive-информации в памяти
Хранение sensitive-информации в общедоступном файле вне директории приложения
Хранение sensitive-информации в общедоступном файле внутри директории приложения
Хранение sensitive-информации в приватном файле вне директории приложения
Хранение sensitive-информации в приватном файле внутри директории приложения
Хранение sensitive-информации в общедоступной защищённой базе данных
Хранение sensitive-информации в защищённой базе данных
Хранение чувствительной информации в незащищённой базе данных
Хранение sensitive-информации в общедоступной незащищённой базе данных
Хранение sensitive-информации в исходном коде приложения
Хранение или использование ранее найденной sensitive-информации
Хранение sensitive-информации в кэше клавиатуры
Хранение ключей/сертификатов
Хранение приватного ключа/сертификата, не защищенного паролем, в директории/ресурсах приложения
Хранение публичного ключа/сертификата в директории/ресурсах приложения
Хранение приватного ключа/сертификата, защищенного паролем, в директории/ресурсах приложения
Хранение сертификата/ключа в директории/ресурсах приложения
Анализ разрешений
Небезопасный protectionLevel у разрешения
Неверное пространство имён у разрешения
У компонента выставлен неверный атрибут вместо android:permission (возможно — android:uses-permission)
Приложение использует не объявленное разрешение
Приложение не использует объявленное разрешение
Небезопасный доступ к Content Provider
ContentProvider использует одинаковые разрешения на чтение и запись
Указан небезопасный путь к Content Provider
Опасные разрешения
Разрешения и группы разрешений
Опасные группы разрешений
Приложение использует запрещенные разрешения
Анализ не-нативных компонентов (WebView и сокеты)
Потенциально опасные настройки WebView
WebView вызывает evaluateJavascript
Включена отладка WebView (remote debugging)
Опасная комбинация настроек WebView: JavaScript и доступ к локальным файлам
Проброс произвольных данных в контекст WebView
Создание локального сетевого сокета
Прослушивание всех сетевых интерфейсов через локальный сокет (0.0.0.0)
Межкомпонентное взаимодействие (IPC): Intent, Activity, Service, BroadcastReceiver
Экспортированная Activity
Экспортированный Service
Экспортированный BroadcastReceiver
Возможность опосредованного запуска приватных Activity
Возможность запуска произвольной Activity через Intent
Возможность запуска произвольного Service через Intent
Возможность посылки произвольного широковещательного сообщения через Intent
Доступ к произвольному фрагменту с помощью интента
Доступ к произвольному Composable (Jetpack Compose) через Intent
Уязвимая навигация в Android Jetpack navigation
Приложение использует уязвимую compose-навигацию
Ошибка в приложении при работе через IPC
Данные из сторонних источников формируют Intent
Возможность показа произвольного сообщения через Intent в BroadcastReceiver
Возможность доступа к произвольному файлу через getParcelableExtra
ContentProvider
Экспортированный Content Provider
Возможность получения доступа к произвольному ContentProvider
Возможность доступа к произвольному файлу через ContentProvider
SQL-инъекция в ContentProvider
Произвольные данные вставляются в ContentProvider
Произвольные данные обновляются в ContentProvider
Стороннее приложение может удалить данные в ContentProvider
Получение данных из ContentProvider
WebView и веб-взаимодействие
Хранение значений Cookies в стандартной базе WebView
Возможность открытия произвольных данных в контексте WebView
Возможность подмены URL
Данные из EditText попадают в WebView.loadurl()
Данные из сторонних источников могут попасть в WebView JS
Сетевое взаимодействие и домены
Приложение разрешает сетевые соединения по протоколу HTTP
Приложение осуществляет сетевое взаимодействие по протоколу HTTP
Небезопасная конфигурация сетевого взаимодействия
Отсутствует или некорректно реализован SSL-pinning
Обнаружены «внутренние домены», доступные извне
Обнаружены «внутренние домены», заданные для поиска
Обнаружены домены из публичного списка malware
Обнаружены домены из списка, опубликованного Роскомнадзором
Раскрытие чувствительной информации (прочие каналы)
Вывод sensitive-информации в системный лог
Потенциально чувствительная информация, найденная энтропийным анализом
Хранение данных от сторонних сервисов в открытом виде
Передача sensitive-информации в параметрах SQL-запроса
Передача sensitive-информации в BroadcastReceiver
Передача sensitive-информации в Private BroadcastReceiver
Включение sensitive-информации в сообщения WebSocket
Файлы и Path Traversal
Возможность получения доступа к произвольному файлу
Запись в произвольный файл через ContentResolver
Path/directory traversal
Перезапись файлов при использовании публичных архивов
Возможность перезаписи файлов в приватной директории приложения при работе с zip-архивами
Данные из сторонних источников используются в FileResolver
Данные из EditText попадают в файл
Инъекции и выполнение произвольного кода
Данные из сторонних источников формируют SQL-выражение
Данные из сторонних источников могут привести к RCE
Потенциальное выполнение произвольного кода в контексте приложения
Криптография
Небезопасное использование криптографических алгоритмов
Использован уязвимый алгоритм хеширования
Использование слабого ключа шифрования
Простой вектор инициализации (IV)
Использована трансформация ECB для шифрования данных, превышающих размер блока
Использована уязвимая трансформация
Использование слова в качестве соли
Использование соли с низкой энтропией
Неверные параметры для алгоритма генерации ключа
Слабый пароль шифрования базы данных
Перехват пароля шифрования базы данных
Android KeyStore
Приложение использует, но не проверяет, что AndroidKeyStore HardwareBacked
Доступ к ключам из AndroidKeyStore без требования аутентификации
Ключи в AndroidKeyStore создаются без требования биометрической инвалидации
Защита приложения и анти-реверс (RASP)
Отсутствие проверки на root-доступ
Недостаточная проверка на root-доступ
Отсутствие проверки на запуск на эмуляторе
Недостаточная проверка на запуск на эмуляторе
Отсутствие проверки целостности приложения
Возможно отсутствует проверка на отладчик
Возможно отсутствует проверка на Frida
Приложение не обфусцировано
Отстуствует проверка блокировки экрана
Манифест, подпись и сборка
Небезопасный алгоритм подписи
Недостаточная длина ключа подписи
Небезопасные настройки в AndroidManifest.xml
Небезопасные настройки в AndroidManifest.xml. Флаг android:hasFragileUserData
Небезопасные настройки в AndroidManifest.xml. Флаг android:requestLegacyExternalStorage
Возможность создания резервной копии приложения
Состав ПО (SCA) и цепочка поставок
SCA. Список компонентов
Уязвимость в OpenSource компоненте
Возможна атака на цепочку поставок через атаку MavenGate
Возможна атака на цепочку поставок через атаку MavenGate (домен обновлен)
Диагностика и сравнение версий
Построен граф для трасс вызовов
Обнаружены изменения в трассах вызовов
Нет изменений в трассах вызовов
Обнаружены расхождения между сравниваемыми версиями приложения
Сравниваемые версии приложения идентичны
Рекомендации для iOS
Хранение ключей/сертификатов
Хранение сертификата/ключа в директории/ресурсах приложения
Хранение приватного ключа/сертификата, защищенного паролем, в директории/ресурсах приложения
Хранение публичного ключа/сертификата в директории/ресурсах приложения
Хранение приватного ключа/сертификата, не защищенного паролем, в директории/ресурсах приложения
Небезопасное хранение ключевой информации
Доступное на запись хранилище ключей
Доступное на запись хранилище ключей со слабым паролем
Доступное на чтение файловое хранилище ключей
Доступное на чтение хранилище ключей со слабым паролем, содержащее закрытые ключи
Доступное на чтение хранилище ключей со слабым паролем, содержащее открытые ключи
Доступное на чтение хранилище ключей с приватными ключами, защищёнными слабым паролем
Использование файлового хранилища ключей
Хранилище ключей со слабым паролем, содержащее закрытые ключи
Хранилище ключей со слабым паролем, содержащее открытые ключи
Хранилище ключей с приватными ключами, защищёнными слабым паролем
Прочие
Включенное кэширование сетевых запросов
Вывод sensitive-информации в системный лог
Небезопасная конфигурация App Transport Security
Приложение не использует функции защиты от переполнений
Наличие скриптов сборки в собранном пакете приложения
Наличие файла со списком сторонних зависимостей в собранном пакете приложения
Хранение sensitive-информации в кэше клавиатуры
Хранение sensitive-информации в NSUserDefaults
Хранение sensitive-информации в приватном файле
Хранение sensitive-информации в исходном коде приложения
Хранение чувствительной информации в Binary Cookies
Хранение sensitive-информации в KeyChain
Небезопасный класс защиты данных для элемента KeyChain
Хранение или использование ранее найденной чувствительной информации
Приложение не запрещает использование пользовательских клавиатур
Потенциально чувствительная информация, найденная энтропийным анализом
Чувствительная информация в исполняемом файле
Хранение данных от сторонних сервисов в открытом виде
Построен граф для трасс вызовов
Обнаружены изменения в трассах вызовов
Нет изменений в трассах вызовов
Обнаружены «внутренние домены», доступные извне
Обнаружены «внутренние домены», заданные для поиска
SCA. Список компонентов
Обнаружены домены из публичного списка malware
Обнаружены домены из реестров Роскомнадзора
Уязвимость в OpenSource компоненте (iOS)