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. ТИПИЧНЫЕ ПРОБЛЕМЫ
    БЕЗОПАСНОСТИ В
    ПРИЛОЖЕНИЯХ ДЛЯ IOS
    Андрей Беленко
    viaForensics

    View Slide

  2. Интернет

    View Slide

  3. Интернет

    View Slide

  4. ПРИЛОЖЕНИЕ
    • Небезопасное хранение данных
    • Утечки данных
    • “Неправильная” криптография
    • Слабая защита исполняемых файлов
    • Многое другое. См. OWASP Mobile Top 10

    View Slide

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

    View Slide

  6. ДАННЫЕ ПРИЛОЖЕНИЯ
    • File Sharing (через iTunes или Xcode)
    • iTunes Backup (включая Keychain!)
    • iCloud
    • com.apple.mobile.house_arrest
    • Джейлбрейк

    View Slide

  7. Доступ к песочнице приложения с помощью iExplorer

    View Slide

  8. Данные учетной записи хранятся в NSUserDefaults

    View Slide

  9. УЧЕТНЫЕ ЗАПИСИ
    • Никогда не храните в NSUserDefaults или
    CoreData
    • Используйте Keychain
    • Используйте наиболее строгий класс защиты
    при котором приложение еще работает

    View Slide

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

    View Slide

  11. КЛАССЫ ЗАЩИТЫ
    Файл
    NSFileProtection…
    Keychain
    kSecAttrAccessible…
    None Always(ThisDeviceOnly)
    Complete WhenUnlocked(ThisDeviceOnly)
    CompleteUnlessOpen
    CompleteUntilFirstUserAuthentication AfterFirstUnlock(ThisDeviceOnly)

    View Slide

  12. УТЕЧКИ ДАННЫХ
    • Логи
    • Удалите (или #ifdef) вывод логов в Release
    конфигурации
    • Cookies и кэши
    • См. NSURLCache, NSHTTPCookieStorage
    • Указывайте политики при создании запросов
    • Скриншоты
    • applicationDidEnterBackground:

    View Slide

  13. КРИПТОГРАФИЯ
    • Не используйте статические ключи
    • Не реализуйте криптографию самостоятельно
    • Не придумывайте собственные алгоритмы или
    протоколы
    • Если нестандартная криптография необходима
    – найдите профессионала

    View Slide

  14. ИСПОЛНЯЕМЫЕ ФАЙЛЫ
    • Борьба с эксплоитами
    • -fstack-protector(-strong, -all)
    • ASLR
    • DRM, интеллектуальная собственность
    • Обфускация

    View Slide

  15. ОБФУСКАЦИЯ?

    View Slide

  16. View Slide

  17. View Slide

  18. ОБФУСКАЦИЯ
    • Strip; минимум строк в исполняемом
    файле
    • C++ вместо Objective-C
    • Static linking
    • https://github.com/obfuscator-llvm
    • http://tigress.cs.arizona.edu
    Делайте это только если Вы понимаете что делаете и если это Вам
    действительно нужно!

    View Slide

  19. Интернет

    View Slide

  20. Интернет

    View Slide

  21. ИНТЕРНЕТ
    • Никогда не используйте незащищенные
    протоколы (такие как HTTP)
    • Используйте их защищенный вариант
    (HTTPS)
    • Используйте их правильно (да, это сложная
    часть)

    View Slide

  22. КАК УСТРОЕН SSL?
    Соединение
    Сертификат
    ОК?
    Продолжить сессию
    да
    нет: завершить сессию
    N.B.: на самом деле SSL намного более сложный протокол

    View Slide

  23. СЕРТИФИКАТЫ
    • Проверка сертификата чрезвычайно
    важна
    • Не используйте самоподписанные
    сертификаты в production
    • Если возможно, используйте фиксацию
    (“pinning”) сертификатов

    View Slide

  24. ПРОВЕРКА СЕРТИФИКАТА
    Доверять Не доверять
    да нет
    БД доверенных
    ЦС
    iOS 8: ~ 250 ЦС
    Сертификат подписан
    одним из доверенных
    центров сертификации?

    View Slide

  25. ПРОВЕРКА СЕРТИФИКАТА
    • Любой, кто может подписывать сертификаты
    одним из доверенных ЦС может
    организовать MITM
    • Это не уязвимость протокола; просто PKI так
    устроено
    • Вероятно, именно это произошло с
    iCloud.com в Китае на прошлой неделе

    View Slide

  26. ФИКСАЦИЯ СЕРТИФИКАТА
    Доверять Не доверять
    да нет
    Приложение ожидает
    именно этот сертификат?

    View Slide

  27. ФИКСАЦИЯ СЕРТИФИКАТА
    • Удостоверяет что приложение общается
    с владельцем Вашего закрытого ключа:
    • или с Вами…
    • …или с кем-то кто серьезно “взломал”
    Ваш бэкэнд
    • Подменяет хранилище корневых ЦС

    View Slide

  28. НО ЭТО НЕ ВСЕ…

    View Slide

  29. SSL СЛОМАН
    Ему уже ~18 лет и ему пора на покой
    TLS заменяет собой SSL

    View Slide

  30. ИНТЕРНЕТ
    • Запретите использование SSL в приложениях и на
    серверах
    • Используйте TLS (желательно 1.2) с шифрами AEAD
    • Фиксируйте или хотя бы полноценно проверяйте
    сертификаты
    • Убедитесь что все “обходы” проверок сертификата
    отключены/удалены в Release коде

    View Slide

  31. Интернет

    View Slide

  32. Интернет

    View Slide

  33. СЕРВЕР
    • Сохраняйте площадь атаки минимальной
    • Не раскрывайте test/qa/dev/debug интерфейсы
    • Не доверяйте данным, получаемым от
    клиентов
    • Обеспечьте защиту передачи данных:
    • TLS (1.2) со стойкими AEAD-шифрами

    View Slide

  34. Q & A

    View Slide

  35. https://www.viaprotect.com/lab/

    View Slide

  36. СПАСИБО!
    [email protected]
    @abelenko

    View Slide