Лучшие практики для безопасности приложений iOS
Размышляя о безопасности приложений iPhone/iPad, я могу заметить, что есть:
- Широко доступные хакерские инструменты обеспечивают доступ к файловой системе
- Сетевой перехват, мужчины в середине атаки
==> угроза кражи данных
а также:
- Наличие хакерских инструментов, позволяющих свободно делиться платным приложением с друзьями / сообществом (замечено в Cydia)
- Наличие хакерских инструментов, позволяющих получать покупки в приложениях без оплаты (видел в Cydia и слышал, что он не работает ни с одним приложением)
==> Угроза потери дохода
Итак, я задаюсь вопросом № 1, каковы наилучшие методы для повышения безопасности в приложении для iOS? Кроме того, #2, каковы лучшие способы уменьшить потерю дохода и минимизировать риск взлома?
для #1 Я видел несколько слайдов WWDC о безопасности 1 2 3 4+ Apple Docs
и я могу сказать, что между этими лучшими практиками есть:
- Использование API, предлагающих защиту данных (например, NSFileManager с атрибутом NSFileProtectionKey)
- Использование брелка
- Защита конфиденциальных данных с помощью SSL и использование сертификатов
для # 2 Я думаю, что при использовании бизнес-модели, основанной на бесплатном приложении, тогда при покупке приложения с проверкой квитанций магазина может быть модель с минимальной потерей дохода.
Каковы ваши рекомендации по обеспечению безопасности и лучший способ минимизировать шансы на взлом приложений?
4 ответа
#1 Каковы наилучшие практики для повышения безопасности в приложении для iOS?
Надлежащая защита данных в значительной степени зависит от характера информации. Это долго или недолго? Это общие учетные данные, которые можно использовать для открытия других объектов, или отдельного фрагмента данных? Является ли потенциальная потеря конфиденциальности, финансовой или безопасности? Определение соответствующих мер защиты требует конкретного случая и не имеет общего ответа. Но вы спрашиваете о лучших практиках, а их несколько. Ни один из них не является идеальным или неразрушимым. Но они лучшие практики. Вот несколько из них:
- Храните конфиденциальную информацию в связке ключей
- Установить защиту данных на
NSFileProtectionComplete
где это возможно. - Не храните конфиденциальные данные, которые вам на самом деле не нужны, или дольше, чем вам нужно.
- Храните специфичные для приложения токены аутентификации, а не пароли.
- Используйте HTTPS для проверки сервера, с которым вы связываетесь. Никогда не принимайте недействительный или недоверенный сертификат.
- При подключении к вашему собственному серверу убедитесь, что служба представляет сертификат, который вы подписали, а не просто "доверенный сертификат".
Это всего лишь несколько подходов, но они задают основной тон:
- Используйте встроенные API для хранения вещей. По мере того как Apple повышает безопасность, вы получаете преимущества бесплатно.
- Избегайте хранения конфиденциальной информации и минимизируйте чувствительность того, что вы храните.
- Проверьте сервисы, с которыми вы общаетесь.
# 2 Каковы наилучшие способы уменьшить потерю доходов и минимизировать риск взлома?
Это много раз обсуждалось на SO. Этот ответ включает в себя ссылки на некоторые другие обсуждения:
Безопасное шифрование https для приложения iPhone на веб-странице
Короткий ответ: беспокоиться о своих клиентах, а не о тех, кто не является клиентом. Многие пираты никогда не будут платить вам деньги, поэтому ваше время и деньги лучше расходуются, помогая вашим реальным клиентам хотеть платить вам, и облегчая им задачу. Сосредоточьтесь на том, чтобы зарабатывать больше денег, а не защищать себя от денег, которых у вас никогда не было бы. Никогда, никогда не ставьте галочку на платящем клиенте в своих попытках отчитать не платящего клиента. Месть - игра лоха и пустая трата ресурсов.
Есть два отличных способа избежать пиратства:
- Не публиковать.
- Публиковать барахло никто не хочет.
Есть некоторые основные вещи, которые вы можете сделать, которые, как говорится, стоят того, чтобы честные люди были честными (некоторые обсуждаются в различных связанных дискуссиях). Но не лежите без сна ночью, волнуясь о том, как помешать пиратам. Не спите, волнуясь о том, как удивить своих клиентов.
И всегда помните: Apple тратит больше денег, чем большинство из нас когда-либо видели в своей жизни, пытаясь защитить iPhone. Все еще взломан. Подумайте, чего достигнет ваш бюджет.
Когда злоумышленник получает физический доступ к устройству (например, кража), он может сделать практически все, что угодно. Обратите внимание, что очень легко читать файлы приложений. Украденное устройство может быть легко взломано, и злоумышленник получает доступ даже к защищенным файлам.
Мой совет для хранения конфиденциальных данных на устройстве:
- не делайте этого, если они могут храниться на безопасном сервере
- используйте свое собственное шифрование, расшифровывайте, когда пользователь вошел в систему, удалите дешифрованный файл, когда он выходит из системы или через некоторое время приложение находится в фоновом режиме.
- каждый пароль и ключ шифрования должны храниться в цепочке для ключей.
Роб Нейпир упомянул хорошие моменты. Но чтобы сделать его более безопасным,
1 Каковы наилучшие практики для повышения безопасности приложения iOS?
- Храните конфиденциальную информацию в зашифрованном виде в связке ключей.
- При физическом доступе к устройству данные цепочки для ключей могут быть легко сброшены.
- Установите соответствующий класс защиты данных (предпочтительно NSFileProtectionComplete).
- Всегда используйте пользовательское шифрование вместе со встроенным API для хранения данных.
- Даже если хакеры найдут лазейки во встроенном API, ваше приложение будет в безопасности.
- Перезаписать временно сохраненные данные перед удалением.
- Криминалистические методы могут быть использованы для восстановления удаленных данных.
- Используйте HTTPS и закрепление сертификата. Никогда не принимайте ненадежные сертификаты.
- Храните важные файлы plist, sqlite и т. Д. В папке Library/caches.
- Файлы, хранящиеся в папке caches, не сохраняются в iTunes.
- Всегда создавайте приложение с последним XCode.
- Добавлена поддержка только для последних шифров SSL
2 Каковы наилучшие способы уменьшить потерю доходов и минимизировать риск взлома?
Может быть невозможно остановить пиратство, но мы можем сделать его жестким.
- Запретить запуск приложения на взломанных устройствах (подумайте дважды, вы можете потерять действительных клиентов)
- Добавить код, который обнаруживает существование Jailbreak
- Запретить приложению подключаться к отладчикам
- Приложения, загруженные из AppStore, зашифрованы. Отладчики используются для расшифровки и анализа приложения. Добавьте код, который обнаруживает отладчики.
Это действительно зависит от того, что вы делаете. Что касается доступа к API, все, что вам действительно нужно сделать, - это хеш и / или солит информация о пользователе, а затем сохранить информацию (при необходимости) в цепочке для ключей (вы можете добавить дополнительную безопасность, зашифровав пароли, прежде чем вставлять их в цепочку для ключей. Лучше всего, чтобы вы не использовали NSUserDefaults, поскольку введенные в него данные хранятся в файле.txt в файловой системе iPhone, к которой, как вы сказали, могут получить доступ хакеры.
Добавление дополнительных возможностей для повышения безопасности приложения
- Не отправляйте параметры с помощью HTTP GET, вместо этого используйте HTTP POST.
- Вы можете выполнить SSL-закрепление, чтобы избежать атак MITM.
- Перед переходом к производству удалите все журналы из источника.
- Не следует жестко кодировать ключи шифрования в самом приложении, лучше хранить их где-нибудь подальше.
- При отправке запроса всегда используйте последнюю версию SSL (TLSv1.2).
- Если в вашем приложении есть WebView, остерегайтесь внедрения ссылок. Если вы не ожидаете в WebView каких-либо URL-адресов, отличных от HTTP, проверьте все URL-адреса перенаправления с префиксом "http", чтобы загруженный веб-сайт не позволял открывать другие ссылки.
- Вы можете разрешить или заблокировать расширения клавиатуры, поскольку они прослушивают все ваши нажатия клавиш.