ПРИЛОЖЕНИЕ • Небезопасное хранение данных • Утечки данных • “Неправильная” криптография • Слабая защита исполняемых файлов • Многое другое. См. OWASP Mobile Top 10
УЧЕТНЫЕ ЗАПИСИ • Никогда не храните в NSUserDefaults или CoreData • Используйте Keychain • Используйте наиболее строгий класс защиты при котором приложение еще работает
КОНФИДЕНЦИАЛЬНЫЕ ДАННЫЕ • Избегайте использования NSUserDefaults и CoreData • Используйте Data Protection • Используйте наиболее строгий класс защиты при котором приложение еще работает • Используя NSUserDefaults или CoreData обеспечьте дополнительную защиту
УТЕЧКИ ДАННЫХ • Логи • Удалите (или #ifdef) вывод логов в Release конфигурации • Cookies и кэши • См. NSURLCache, NSHTTPCookieStorage • Указывайте политики при создании запросов • Скриншоты • applicationDidEnterBackground:
КРИПТОГРАФИЯ • Не используйте статические ключи • Не реализуйте криптографию самостоятельно • Не придумывайте собственные алгоритмы или протоколы • Если нестандартная криптография необходима – найдите профессионала
ОБФУСКАЦИЯ • Strip; минимум строк в исполняемом файле • C++ вместо Objective-C • Static linking • https://github.com/obfuscator-llvm • http://tigress.cs.arizona.edu Делайте это только если Вы понимаете что делаете и если это Вам действительно нужно!
ИНТЕРНЕТ • Никогда не используйте незащищенные протоколы (такие как HTTP) • Используйте их защищенный вариант (HTTPS) • Используйте их правильно (да, это сложная часть)
СЕРТИФИКАТЫ • Проверка сертификата чрезвычайно важна • Не используйте самоподписанные сертификаты в production • Если возможно, используйте фиксацию (“pinning”) сертификатов
ПРОВЕРКА СЕРТИФИКАТА • Любой, кто может подписывать сертификаты одним из доверенных ЦС может организовать MITM • Это не уязвимость протокола; просто PKI так устроено • Вероятно, именно это произошло с iCloud.com в Китае на прошлой неделе
ФИКСАЦИЯ СЕРТИФИКАТА • Удостоверяет что приложение общается с владельцем Вашего закрытого ключа: • или с Вами… • …или с кем-то кто серьезно “взломал” Ваш бэкэнд • Подменяет хранилище корневых ЦС
ИНТЕРНЕТ • Запретите использование SSL в приложениях и на серверах • Используйте TLS (желательно 1.2) с шифрами AEAD • Фиксируйте или хотя бы полноценно проверяйте сертификаты • Убедитесь что все “обходы” проверок сертификата отключены/удалены в Release коде
СЕРВЕР • Сохраняйте площадь атаки минимальной • Не раскрывайте test/qa/dev/debug интерфейсы • Не доверяйте данным, получаемым от клиентов • Обеспечьте защиту передачи данных: • TLS (1.2) со стойкими AEAD-шифрами