Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Android Security

Android Security

Очень мало кто сегодня понимает, какие проблемы безопасности нужно учитывать при разработке Android-приложений. Мы рассмотрим разные варианты атак, а также то, как от них защититься.

Artur Vasilov

November 02, 2016
Tweet

More Decks by Artur Vasilov

Other Decks in Programming

Transcript

  1. Android Security 1) С точки зрения пользователя системы 2) С

    точки зрения разработчика приложений
  2. Пишем малварь под Android 1) Android Malware == Android application

    2) Делаем внешнюю обертку для приложения (полезные функции) 3) Просим разрешения: читаем / отправляем смс, отправляем информацию о действиях пользователя, считываем ввод данных, получаем данные других приложений
  3. Root доступ Можно делать все: любые данные, любые операции, установка

    приложений, все. Лучше не ставить root доступ на основное устройство Многие вирусы стараются получить root доступ
  4. Малварь для root доступа 1) Убеждаем пользователя дать root доступ

    2) Используем эксплоиты системы и ядра В большинстве случаев достаточно не ставить приложения из недоверенных источников
  5. Triada 1) Получает root доступ 2) Инжектирует Zygote (загрузчик приложений)

    3) Запускает свой зараженный код при загрузке приложений 4) Отключает root доступ, чтобы пользователь не мог заметить то, что устройство заражено 5) Работает до Android 4.4.4 - покупаем нексусы :)
  6. Нетривиальные угрозы 1) Утечка данных через поля ввода 2) Утечка

    через гироскоп 3) Утечка данных через usb (от зараженных розеток) 4) Подмена базовой станции (атака на двухфакторную авторизацию)
  7. Безопасность приложений 1) Хранение данных 2) Клиент-серверное взаимодействие 3) Ввод

    данных 4) Реверс-инжениринг 5) Проверка безопасности приложений
  8. Хранение данных 1) Стараемся хранить данные в RAM (так как

    снять дамп памяти можно только с рутом)
  9. Internal Storage + шифрование 1) Все важные данные нужно хранить

    только во внутреннем хранилище, так как данные во внешнем хранилище доступны всем приложениям 2) Нужно шифровать все данные: SQLCipher для базы данных, Hawk для SharedPreferences
  10. KeyStore KeyStore - хранилище ключей, откуда сложно извлечь данные зловредным

    приложениям 1) Данные шифруются ключом пользователя 2) Ключи позволяют выполнять асимметричное шифрование 3) Работает с Android API 18
  11. Ввод пользовательских данных 1) Использование кастомной клавиатуры (или свои кнопки)

    2) Не использовать EditText (из-за малварей или Accessibility Services) 3) Для паролей используем char[], а не String (String pool) 4) Не запускаемся на root устройствах
  12. Реверс-инжениринг 1) Получаем апк 2) Декомпилируем апк и получаем исходный

    код 3) Модифицируем исходный код 4) Собираем приложение заново
  13. Защита от реверс-инжениринга 1) ProGuard 2) DexProtector / DexGuard 3)

    JNI (тяжелее сделать реверс) 4) Проверка хеш-суммы Все это для усложнения модификации кода и хранения
  14. ProGuard ProGuard - это больше минификатор (уменьшает размер исходного кода),

    чем обфускатор, однако он полезен для усложнения задачи злоумышленнику
  15. Проверка хеш-суммы 1) После сборки приложения можно вычислить хеш-сумму .apk-

    файла и сохранить его на сервере. 2) При старте приложения вычислять эту сумму для текущего .apk-файла и сравнивать с хранящейся на сервере Но эти проверки можно также убрать при модификации приложения