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

Типичные Проблемы Безопасности в Приложениях для iOS

Типичные Проблемы Безопасности в Приложениях для iOS

Andrey Belenko

October 28, 2014
Tweet

More Decks by Andrey Belenko

Other Decks in Programming

Transcript

  1. ПРИЛОЖЕНИЕ • Небезопасное хранение данных • Утечки данных • “Неправильная”

    криптография • Слабая защита исполняемых файлов • Многое другое. См. OWASP Mobile Top 10
  2. ДАННЫЕ ПРИЛОЖЕНИЯ • Приложение выполняется в песочнице • Приложения не

    имеют доступа к “чужим” песочницам Это не означает что данные недоступны извне
  3. ДАННЫЕ ПРИЛОЖЕНИЯ • File Sharing (через iTunes или Xcode) •

    iTunes Backup (включая Keychain!) • iCloud • com.apple.mobile.house_arrest • Джейлбрейк
  4. УЧЕТНЫЕ ЗАПИСИ • Никогда не храните в NSUserDefaults или CoreData

    • Используйте Keychain • Используйте наиболее строгий класс защиты при котором приложение еще работает
  5. КОНФИДЕНЦИАЛЬНЫЕ ДАННЫЕ • Избегайте использования NSUserDefaults и CoreData • Используйте

    Data Protection • Используйте наиболее строгий класс защиты при котором приложение еще работает • Используя NSUserDefaults или CoreData обеспечьте дополнительную защиту
  6. УТЕЧКИ ДАННЫХ • Логи • Удалите (или #ifdef) вывод логов

    в Release конфигурации • Cookies и кэши • См. NSURLCache, NSHTTPCookieStorage • Указывайте политики при создании запросов • Скриншоты • applicationDidEnterBackground:
  7. КРИПТОГРАФИЯ • Не используйте статические ключи • Не реализуйте криптографию

    самостоятельно • Не придумывайте собственные алгоритмы или протоколы • Если нестандартная криптография необходима – найдите профессионала
  8. ИСПОЛНЯЕМЫЕ ФАЙЛЫ • Борьба с эксплоитами • -fstack-protector(-strong, -all) •

    ASLR • DRM, интеллектуальная собственность • Обфускация
  9. ОБФУСКАЦИЯ • Strip; минимум строк в исполняемом файле • C++

    вместо Objective-C • Static linking • https://github.com/obfuscator-llvm • http://tigress.cs.arizona.edu Делайте это только если Вы понимаете что делаете и если это Вам действительно нужно!
  10. ИНТЕРНЕТ • Никогда не используйте незащищенные протоколы (такие как HTTP)

    • Используйте их защищенный вариант (HTTPS) • Используйте их правильно (да, это сложная часть)
  11. КАК УСТРОЕН SSL? Соединение Сертификат ОК? Продолжить сессию да нет:

    завершить сессию N.B.: на самом деле SSL намного более сложный протокол
  12. СЕРТИФИКАТЫ • Проверка сертификата чрезвычайно важна • Не используйте самоподписанные

    сертификаты в production • Если возможно, используйте фиксацию (“pinning”) сертификатов
  13. ПРОВЕРКА СЕРТИФИКАТА Доверять Не доверять да нет БД доверенных ЦС

    iOS 8: ~ 250 ЦС Сертификат подписан одним из доверенных центров сертификации?
  14. ПРОВЕРКА СЕРТИФИКАТА • Любой, кто может подписывать сертификаты одним из

    доверенных ЦС может организовать MITM • Это не уязвимость протокола; просто PKI так устроено • Вероятно, именно это произошло с iCloud.com в Китае на прошлой неделе
  15. ФИКСАЦИЯ СЕРТИФИКАТА • Удостоверяет что приложение общается с владельцем Вашего

    закрытого ключа: • или с Вами… • …или с кем-то кто серьезно “взломал” Ваш бэкэнд • Подменяет хранилище корневых ЦС
  16. SSL СЛОМАН Ему уже ~18 лет и ему пора на

    покой TLS заменяет собой SSL
  17. ИНТЕРНЕТ • Запретите использование SSL в приложениях и на серверах

    • Используйте TLS (желательно 1.2) с шифрами AEAD • Фиксируйте или хотя бы полноценно проверяйте сертификаты • Убедитесь что все “обходы” проверок сертификата отключены/удалены в Release коде
  18. СЕРВЕР • Сохраняйте площадь атаки минимальной • Не раскрывайте test/qa/dev/debug

    интерфейсы • Не доверяйте данным, получаемым от клиентов • Обеспечьте защиту передачи данных: • TLS (1.2) со стойкими AEAD-шифрами