33
ТИПИЧНЫЕ ПРОБЛЕМЫ БЕЗОПАСНОСТИ В ПРИЛОЖЕНИЯХ ДЛЯ IOS Андрей Беленко viaForensics

#MBLTdev: Безопасность iOS-устройств (viaForensics)

Embed Size (px)

DESCRIPTION

#MBLTdev: Конференция мобильных разработчиков Спикер: Андрей Беленко Ведущий инженер по безопасности , viaForensics http://mbltdev.ru/

Citation preview

Page 1: #MBLTdev: Безопасность iOS-устройств (viaForensics)

ТИПИЧНЫЕ ПРОБЛЕМЫ БЕЗОПАСНОСТИ В

ПРИЛОЖЕНИЯХ ДЛЯ IOSАндрей Беленко

viaForensics

Page 2: #MBLTdev: Безопасность iOS-устройств (viaForensics)

Интернет

Page 3: #MBLTdev: Безопасность iOS-устройств (viaForensics)

ПРИЛОЖЕНИЕ

What can go wrong?

Page 4: #MBLTdev: Безопасность iOS-устройств (viaForensics)

ПРИЛОЖЕНИЕ• Небезопасное хранение данных

• Утечки данных

• “Неправильная” криптография

• Слабая защита исполняемых файлов

• Многое другое. См. OWASP Mobile Top 10

Page 5: #MBLTdev: Безопасность iOS-устройств (viaForensics)

ДАННЫЕ ПРИЛОЖЕНИЯ

• Приложение выполняется в песочнице

• Приложения не имеют доступа к “чужим” песочницам

Это не означает что данные недоступны извне

Page 6: #MBLTdev: Безопасность iOS-устройств (viaForensics)

ДАННЫЕ ПРИЛОЖЕНИЯ• File Sharing (через iTunes или Xcode)

• iTunes Backup (включая Keychain!)

• iCloud

• com.apple.mobile.house_arrest

• Джейлбрейк

Page 7: #MBLTdev: Безопасность iOS-устройств (viaForensics)

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

Page 8: #MBLTdev: Безопасность iOS-устройств (viaForensics)

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

Page 9: #MBLTdev: Безопасность iOS-устройств (viaForensics)

УЧЕТНЫЕ ЗАПИСИ• Никогда не храните в NSUserDefaults или

CoreData

• Используйте Keychain

• Используйте наиболее строгий класс защиты при котором приложение еще работает

Page 10: #MBLTdev: Безопасность iOS-устройств (viaForensics)

КОНФИДЕНЦИАЛЬНЫЕ ДАННЫЕ

• Избегайте использования NSUserDefaults и CoreData

• Используйте Data Protection

• Используйте наиболее строгий класс защиты при котором приложение еще работает

• Используя NSUserDefaults или CoreData обеспечьте дополнительную защиту

Page 11: #MBLTdev: Безопасность iOS-устройств (viaForensics)

КЛАССЫ ЗАЩИТЫФайл

NSFileProtection…Keychain

kSecAttrAccessible…

None Always(ThisDeviceOnly)

Complete WhenUnlocked(ThisDeviceOnly)

CompleteUnlessOpen

CompleteUntilFirstUserAuthentication AfterFirstUnlock(ThisDeviceOnly)

Page 12: #MBLTdev: Безопасность iOS-устройств (viaForensics)

УТЕЧКИ ДАННЫХ• Логи

• Удалите (или #ifdef) вывод логов в Release конфигурации

• Cookies и кэши

• См. NSURLCache, NSHTTPCookieStorage

• Указывайте политики при создании запросов

• Скриншоты• applicationDidEnterBackground:

Page 13: #MBLTdev: Безопасность iOS-устройств (viaForensics)

КРИПТОГРАФИЯ• Не используйте статические ключи

• Не реализуйте криптографию самостоятельно

• Не придумывайте собственные алгоритмы или протоколы

• Если нестандартная криптография необходима – найдите профессионала

Page 14: #MBLTdev: Безопасность iOS-устройств (viaForensics)

ИСПОЛНЯЕМЫЕ ФАЙЛЫ• Борьба с эксплоитами

• -fstack-protector(-strong, -all)

• ASLR

• DRM, интеллектуальная собственность

• Обфускация

Page 15: #MBLTdev: Безопасность iOS-устройств (viaForensics)

ОБФУСКАЦИЯ?

Page 16: #MBLTdev: Безопасность iOS-устройств (viaForensics)
Page 17: #MBLTdev: Безопасность iOS-устройств (viaForensics)
Page 18: #MBLTdev: Безопасность iOS-устройств (viaForensics)

ОБФУСКАЦИЯ• Strip; минимум строк в исполняемом файле

• C++ вместо Objective-C

• Static linking

• https://github.com/obfuscator-llvm

• http://tigress.cs.arizona.eduДелайте это только если Вы понимаете что делаете и если это Вам

действительно нужно!

Page 19: #MBLTdev: Безопасность iOS-устройств (viaForensics)

Интернет

Page 20: #MBLTdev: Безопасность iOS-устройств (viaForensics)

ИНТЕРНЕТ• Никогда не используйте незащищенные протоколы (такие как HTTP)

• Используйте их защищенный вариант (HTTPS)

• Используйте их правильно (да, это сложная часть)

Page 21: #MBLTdev: Безопасность iOS-устройств (viaForensics)

КАК УСТРОЕН SSL?Соединение

Сертификат ОК?

Продолжить сессию

да

нет: завершить сессию

N.B.: на самом деле SSL намного более сложный протокол

Page 22: #MBLTdev: Безопасность iOS-устройств (viaForensics)

СЕРТИФИКАТЫ• Проверка сертификата чрезвычайно важна

• Не используйте самоподписанные сертификаты в production

• Если возможно, используйте фиксацию (“pinning”) сертификатов

Page 23: #MBLTdev: Безопасность iOS-устройств (viaForensics)

ПРОВЕРКА СЕРТИФИКАТА

Доверять Не доверять

да нет

БД доверенных ЦС

iOS 8: ~ 250 ЦС

Сертификат подписан одним из доверенных центров сертификации?

Page 24: #MBLTdev: Безопасность iOS-устройств (viaForensics)

ПРОВЕРКА СЕРТИФИКАТА• Любой, кто может подписывать сертификаты одним из доверенных ЦС может организовать MITM

• Это не уязвимость протокола; просто PKI так устроено

• Вероятно, именно это произошло с iCloud.com в Китае на прошлой неделе

Page 25: #MBLTdev: Безопасность iOS-устройств (viaForensics)

ФИКСАЦИЯ СЕРТИФИКАТА

Доверять Не доверять

да нет

Приложение ожидает именно этот сертификат?

Page 26: #MBLTdev: Безопасность iOS-устройств (viaForensics)

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

• или с Вами…

• …или с кем-то кто серьезно “взломал” Ваш бэкэнд

• Подменяет хранилище корневых ЦС

Page 27: #MBLTdev: Безопасность iOS-устройств (viaForensics)

НО ЭТО НЕ ВСЕ…

Page 28: #MBLTdev: Безопасность iOS-устройств (viaForensics)

SSL СЛОМАНЕму уже ~18 лет и ему пора на покой

TLS заменяет собой SSL

Page 29: #MBLTdev: Безопасность iOS-устройств (viaForensics)

ИНТЕРНЕТ• Запретите использование SSL в приложениях и на серверах

• Используйте TLS (желательно 1.2) с шифрами AEAD

• Фиксируйте или хотя бы полноценно проверяйте сертификаты

• Убедитесь что все “обходы” проверок сертификата отключены/удалены в Release коде

Page 30: #MBLTdev: Безопасность iOS-устройств (viaForensics)

Интернет

Page 31: #MBLTdev: Безопасность iOS-устройств (viaForensics)

СЕРВЕР• Сохраняйте площадь атаки минимальной

• Не раскрывайте test/qa/dev/debug интерфейсы

• Не доверяйте данным, получаемым от клиентов

• Обеспечьте защиту передачи данных:

• TLS (1.2) со стойкими AEAD-шифрами

Page 32: #MBLTdev: Безопасность iOS-устройств (viaForensics)

Q & A

Page 33: #MBLTdev: Безопасность iOS-устройств (viaForensics)

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