[email protected] - Десятки мобильных приложений под Android и iOS ежегодно - Мобильный банкинг, мессенджеры, приложения операторов связи - Обучение принципам безопасной разработки
данных Недостаточная защита от подбора аут. данных Небезопасная передача данных Небезопасное межпроцессное взаимодействие Доли мобильных банков по максимальному уровню риска уязвимостей Топ-5 уязвимостей клиентских частей мобильных банков
На другом клиенте • В канале связи Локальный нарушитель (вредоносное ПО) Физический доступ к устройству • Кража или утеря • Кратковременный доступ • Доступ по USB с доверенного компьютера
для установки - Можно устанавливать из Google Play, альтернативных маркетов, приложения с самоподписанным сертификатом - Обновление приложения происходит только если сертификат совпадает с сертификатом установленной версии - на основании сертификата можно запускать приложения от имени одного пользователя и выдавать разрешения - App Signing v1, v2 – изменить сертификат нельзя, v3 – можно - Приложение не шифруется
подпись приложения - Общий Keychain для одного и того же сертификата - Допустимы только сертификаты от Apple - При установке не через AppStore необходимо вручную подтвердить доверие к сертификату - Приложение шифруется при скачивании из AppStore уникальным для AppleID ключом
приложения: - Приложения с закладками и недокументированными возможностями - Использующие приватные API - Выполняющие загрузку кода извне - Выходящие за свой участок при работе с памятью - Злоупотребляющие личными данными пользователей - … Google Play отклоняет следующие приложения: - Использующие личные данные без согласия пользователя - Запрашивающие не нужные для функционирования разрешения - Hacker tools - Имитирующие функции системы (“Your Android has I Virus!”) - Несанкционированное изменение настроек устройства - …
имеет свой UID на устройстве - Домашний каталог приложения находится по адресу /data/data/com.example.app/ и доступен только ему - Права по умолчанию: 751 до версии 6.0, 700 после 6.0 - /data/data/com.example.app/shared_prefs/ содержит файлы настроек, xml - /data/data/com.example.app/databases/ содержит базы данных sqlite (*.db) - /data/data/com.exapmle.app/app_webview/ содержит кэш WebView и файлы Cookie - Дополнительная защита по умолчанию с помощью SELinux в Android 9.0+ (targetSdkVersion >= 28) - /sdcard – world readable
имеет доступ только к своему контейнеру в файловой системе /var/containers/Bundle/Application/D1FDA1C6- D161-44D0-BA5D-60F73BB18B75/ - Documents используется для сохранения данных, созданных пользователем, есть возможность делиться данными - Library – все, что не относится к данным пользователя, поддиректории хранят то, что не должно быть доступно пользователю - Tmp – временные файлы - Файлы шифруются в зависимости от выбранного уровня защиты
одного приложения, взаимодействие компонентов разных приложений, запрос ресурсов у ОС – все есть межпроцессное взаимодействие - Любое межпроцессное взаимодействие осуществляется через Binder, передаются объекты Parcel - Intent – межпроцессное сообщение, работает поверх Binder - Разделяют экспортированные и приватные компоненты приложений, описываются в AndroidManifest.xml: - Activity - Service - BroadcastReceiver (можно не описывать) - ContentProvicer
устройстве - Изолирован от остальной системы на аппаратном уровне - Обеспечивает шифрование, подпись - Аппаратную генерацию случайных чисел Secure Element - Микросхема для финансовых операций - Взаимодействует с платежным терминалом напрямую Trusted Execution Environment (TEE) - Изолированное окружение для исполнения доверенных программ - Не доступно для основной ОС в случае ее компрометации
SQLite для безопасного хранения ключей шифрования и токенов - Допускает сохранение при резервном копировании - Начиная с iOS 9.0 шифрование выполняется с помощью Secure Enclave - Данные могут быть доступны всем приложениям, подписанным одним и тем же ключом - По умолчанию данные не удаляются после удаления приложения Встроенный криптопроцессор использует уникальный вшитый ключ AES-256, либо ключ, сгенерированный внутри Secure Enclave.
хранения ключей - Ключи используются без извлечения из Keystore - Криптографические операции над ключами выполняются в системном процессе либо с использованием TEE, SE - Может использовать аппаратный генератор случайных чисел для генерации ключей
блокировке устройства с Face ID или Touch ID ключи, использующиеся для защиты данных, не удаляются, а сохраняются в Secure Enclave - Face ID и Touch ID проводят распознавание лица в Secure Enclave - Используется для Apple Pay - Данные Face ID и Touch ID не попадают в резервные копии - Face ID и Touch ID можно использовать для доступа к Keychain
устройств) для Android, сложно – для iOS - Максимальный доступ к ОС - Чтение, запись любых файлов - Межпроцессное взаимодействие без ограничений - Доступ к микрофону, камере, геопозиции, сети (мониторинг трафика) и пр. - Доступ к отладке любого процесса - Отсутствует доступ к TEE, Secure Enclave, Keystore, Keychain однако есть возможность с помощью отладки процесса использовать TEE, чтобы расшифровать/зашифровать данные или подписать/проверить подпись. Сами ключи из TEE при этом не доступны
читать логи других приложений на устройстве. После 4.1 – используя adb при подключении по usb к доверенному компьютеру. Логи iOS приложений можно читать с помощью Xcode при подключении к доверенному компьютеру по USB.
к пользовательским файлам - Включение режима отладки - доступ к данным, сохраненным в keychain/keystore - доступ к файлам из домашнего каталога приложения - мониторинг трафика - установка недоверенного сертификата - отключение проверки сертификата SSL - выполнение действий от имени пользователя - Установка/переустановка приложения - Больше возможностей выполнить root / jailbreak и получить доступ ко всем файлам на устройстве
обход» проверки подписи и проверки приложений в маркетах: 1. Для подписи Android-приложений можно использовать самоподписанные сертификаты. Если поставить галочку «неизвестные источники» в настройках, то будет разрешена установка таких приложений: • из сторонних маркетов • загруженных с веб-сайтов, полученных по Bluetooth, malvertising, добавленных через ПК • используя adb по USB с доверенного компьютера или с любого компьютера до версии Android 4.0 • используя исходный код и Android Studio 2. Для установки приложения не из App Store на устройство с iOS необходимо вручную подтвердить доверие к сертификату устанавливаемого приложения. Сертификат обязательно должен быть выдан Apple. Далее установить приложение можно следующими способами: • через Cydia Impactor с использованием доверенного компьютера • через Android Studio / Xcode
/ Reverse Engineering / Extraneous Functionality Модификация кода и данных / Анализ бинарных файлов / Скрытая функциональность Модификация кода • Перепаковка банковского приложения для «фишинга» • Модификация кода во время исполнения (XPosed, Frida) Скрытая функциональность • Отладочные библиотеки • Функциональность «в разработке» Слабость к анализу бинарных файлов • Чувствительные данные в коде: ключи шифрования, аутентификационные данные и серверные пути • Имена классов, методов (в том числе в отладочных строках) • Сообщения логов
/ Reverse Engineering / Extraneous Functionality Модификация кода и данных / Анализ бинарных файлов / Скрытая функциональность Защита: • Использовать обфускаторы (для Android – minifyEnabled = true, proguard) • Не зашивать в код чувствительную информацию • Постоянно совершенствовать защиту кода
Data Storage Небезопасное хранение данных Где могут храниться данные: • Android: /sdcard, /data/data/<app-id>/ iOS: /var/mobile/Containers/Data/Application/<uuid>/ • WebView cache & cookies • Keystore / Keychain с небезопасными флагами • Скриншоты Android: /data/system/recent_images/ iOS: /private/var/mobile/Containers/Data/Application/<uuid> /Library/Caches/Snapshots/<bundle-id>/ Распространенные ошибки: • Сохранение данных, когда можно не сохранять • Сохранение аутентификационных данных в открытом виде • Сохранение ключей шифрования рядом с зашифрованными данными • Сохранение файлов в общедоступных каталогах • Сохранение Cookie в компонентах WebView • Сохранение скриншотов
Data Storage Небезопасное хранение данных Защита: • Хранить меньше • Сохранять не в общедоступных каталогах • Использовать надежную криптографию • Не хранить ключи шифрования • использовать Keystore (Android) / Keychain (iOS) • Отключать кэширование и сохранение Cookie в WebView • Использовать фоновое изображение при сворачивании приложения, отключить автоматическое создание скриншотов
- Самописные алгоритмы шифрования - Собственные реализации криптопротоколов (DoS через diffie-helman) - Использование слабых алгоритмов шифрования и хэш-функций (md5), а также стойких алгоритмов со слабыми параметрами (AES ECB, RSA 512 bit) - Неправильное хранение ключей - Соль в коде приложения - Выработка ключей из пользовательского ввода с низкой энтропией OWASP Mobile TOP 10: M5 Insufficient Cryptography Слабая криптография
Слабая криптография Защита: • Использовать проверенные реализации стойких алгоритмов шифрования, хэширования (AES 128 CBC, RSA 2048, SHA256, …) • Использовать проверенные криптопротоколы и их проверенные реализации • Генерировать «соль» на устройстве • Использовать надежные криптографические параметры: ключи достаточной длины, пароли и пинкоды с высокой энтропией • Не зашивать ключи в код приложения и не хранить их на устройстве
сертификатов - Ошибки реализации SSL-пиннинга (Android, iOS) - Передача данных без шифрования (например, http, sip, rtp, голый tcp) - Внешние HTTP-ссылки OWASP Mobile TOP 10: M3 Insecure Communication Небезопасная передача данных
Communication Небезопасная передача данных Защита: • Для ссылок использовать только схему https:// • Использовать шифрование для защиты передаваемых данных • Не отключать проверку сертификатов • Зашивать сертификат в код (Certificate Pinning) и всегда использовать его для установления защищенного соединения, в т.ч. в WebView.
клиенте - Слабая защита от перебора (локального или на сервере) либо ее отсутствие - Низкая энтропия паролей (например, 4 десятичных цифры) - Обход двухфакторной аутентификации - Автоматическое распознавание смс с ОТП - Использование QR-кода для инициализации генератора ОТП, когда сканирует код другое приложение - Пуш-сообщения продолжают приходить после нажатия кнопки «выйти» - Не завершается сессия при нажатии на кнопку «выйти» OWASP Mobile TOP 10: M4 Insecure Authentication & Authorization Ошибки аутентификации и авторизации
Insecure Authentication & Authorization Ошибки аутентификации и авторизации Защита: • Реализация аутентификации согласно стандартам (высокая энтропия паролей, достаточная длина паролей, пин-кода, блокировка подбора, …) • Использовать разные секретные значения для локальной аутентификации (секретная фраза для выработки ключа шифрования) и аутентификации через сервер (логин и пароль) • Разработка и реализация политики безопасности • Использование программных или аппаратных генераторов одноразовых паролей вместо смс- сообщений • Обеспечить корректный механизм завершения сессии (сессия завершается как на клиенте, так и на сервере, а также отключаются пуш-сообщения)
- Небезопасное межпроцессное взаимодействие - Глобальные broadcast - Intent forwarding - Экспортированные компоненты - Отсутствие фильтрации во входящих Intent или параметрах App URL - Обращение к собственным компонентам через App URL - Непреднамеренная утечка данных - Временные файлы OWASP Mobile TOP 10: M1 Improper platform usage Обход архитектурных ограничений
platform usage Обход архитектурных ограничений WKWebView • Доступ к сookie, кэшу (можно очистить) содержимому страниц • Данные остаются в песочнице приложения • Доступ к приложению из javascript SFSafariViewController • Возможность использовать аутентификацию пользователя на других сервисах (Safari Cookie) • Данные сохраняются глобально в Safari • Возможность CSRF-атаки • Уязвимость к UXSS-технике через iOS share/action extension
platform usage Обход архитектурных ограничений Уязвимость присутствует если • Android < KitKat • TargetSDK < KitKat (import android.support.v4.app.Fragment;) • Используются сторонние библиотеки (например, для корректной работы интерфейса на разных версиях Android), переопределяющие поведение фрагментов
platform usage Обход архитектурных ограничений Вызов openURL / open myAppURL://login Для схемы myAppURL:// может существовать несколько обработчиков, но вызывается всегда только один (и всегда один и тот же).
настройками (не хранить кэш и cookie, не допускать попадания недоверенного javascript-кода) - Использовать самые новые SDK - Межпроцессное взаимодействие - Использовать LocalBroadcastManager - Не экспортировать компоненты, предназначенные для использования только внутри приложения - Для фрагментов использовать isValidFragment - Фильтровать входящие Intent и параметры App URL - Не использовать App URL для взаимодействия внутри iOS-приложения, либо использовать Universal Links OWASP Mobile TOP 10: M1 Improper platform usage Обход архитектурных ограничений