Apple: iOS 6 исправит мошенничество с внутриигровыми покупками, разработчикам предоставлено временное решение

Apple отреагировала на недавнюю ошибку и мошенничество с внутриигровыми покупками в App Store, отправив электронное письмо и временное решение зарегистрированным разработчикам iOS. Это письмо содержит ссылку на новый веб-документ Apple для разработчиков, который описывает проблему и учит разработчиков, как временно устранить ее. Apple утверждает, что полностью исправит ошибку с предстоящим выпуском iOS 6 (спасибо, @natesiphone).

В iOS 5.1 и более ранних версиях была обнаружена уязвимость, связанная с проверкой чеков внутриигровых покупок путем прямого подключения к серверу App Store с устройства iOS. Злоумышленник может изменить таблицу DNS, чтобы перенаправить эти запросы на сервер, контролируемый злоумышленником. Используя центр сертификации, контролируемый злоумышленником и установленный на устройстве пользователем, злоумышленник может выдать SSL-сертификат, который мошеннически идентифицирует сервер злоумышленника как сервер App Store. Когда этот мошеннический сервер запрашивает проверку недействительного чека, он отвечает так, как будто чек действителен.

iOS 6 устранит эту уязвимость. Если ваше приложение соответствует описанным ниже лучшим практикам, оно не подвержено этой атаке.

Apple предоставила раздел с вопросами, ответами и решениями для трех распространенных вопросов разработчиков за последние несколько дней (с момента обнаружения крупного сбоя в App Store):

Мое приложение выполняет проверку, подключаясь к моему собственному серверу. Как это меня затрагивает?

Если ваше приложение соответствует лучшим практикам и выполняет проверку чеков, отправляя чек на ваш сервер, и ваш сервер выполняет проверку с сервером App Store, ваше приложение не затронуто этой атакой, поскольку оно не подключается к серверу App Store. Однако оно может быть уязвимо для аналогичных атак при подключении к вашему серверу.

Используйте соответствующие криптографические методы, чтобы гарантировать, что ваше приложение действительно подключено к вашему серверу, а ваш сервер действительно подключен к серверу App Store. Вы можете использовать стратегию смягчения последствий, изложенную в этом документе, в качестве отправной точки. Для получения дополнительной информации см. Обзор безопасности.

Мое приложение выполняет проверку, подключаясь напрямую к серверу App Store. Как это меня затрагивает?

Лучшая практика для проверки чеков — отправлять чек на ваш сервер, и ваш сервер должен выполнять проверку с сервером App Store.

Если ваше приложение подключается к серверу App Store напрямую с устройства, ваше приложение может быть подвержено этой уязвимости. Вы можете устранить эту уязвимость следующим образом:

  • Убедитесь, что SSL-сертификат, используемый для подключения к серверу App Store, является EV-сертификатом.
  • Убедитесь, что информация, возвращаемая при проверке, соответствует информации в объекте SKPayment.
  • Убедитесь, что у чека действительная подпись.
  • Убедитесь, что новые транзакции имеют уникальный идентификатор транзакции.

Как проверить транзакции, которые уже были завершены?

Расходные материалы: Если вы сохранили чеки либо на устройстве, либо на своем сервере, повторно проверьте чеки после внедрения вашей стратегии смягчения последствий. Если вы не сохранили чеки, вы не можете проверить эти прошлые транзакции; вам не следует предпринимать никаких действий.

Нерасходуемые: Отложите текущие чеки, выполните операцию восстановления и проверьте новые чеки. Избегайте повторного скачивания контента, который уже находится на устройстве во время этого процесса.

Apple также предоставила разработчикам код и пошаговый процесс для смягчения последствий проблемы:

Приведенные в этом документе списки кода и сопутствующие файлы иллюстрируют подход к реализации стратегии смягчения последствий, описанной в этом документе.

Примечание: В этом списке используются символы kSecTrustInfoExtendedValidationKey и SecTrustCopyInfo, которые не являются общедоступным API. Вашему приложению разрешено использовать их для этой конкретной цели.

Чтобы добавить этот код в ваш проект:

    1. Загрузите и распакуйте сопутствующие файлы этого документа. (Ссылка находится в правом верхнем углу этой страницы.)
    2. Добавьте файлы VerificationController.h и VerificationController.m в свой проект в Xcode и добавьте их в соответствующие цели.
    3. Свяжите свой проект с фреймворком Security.
    4. Предоставьте кодировщик base64, декодер base64 и действие, которое нужно выполнить при успешной проверке.

Ранее Apple отреагировала на эту проблему в заявлении:

«Безопасность App Store невероятно важна для нас и сообщества разработчиков», — заявила представитель Apple Натали Харрисон изданию The Loop. «Мы очень серьезно относимся к сообщениям о мошеннической деятельности и проводим расследование».

Мы впервые осветили эту проблему ровно неделю назад, отметив, что российским хакерам удалось обойти процесс внутриигровых покупок Apple всего за три шага. Ранее мы отмечали, что проблема затрагивает устройства iOS от iOS 3.0 до iOS 6.0, поэтому Apple, вероятно, выпустит исправление в следующих бета-версиях iOS 6 или дождется финального релиза этой осенью.

Через несколько дней после появления первых новостей о взломе Apple начала предпринимать шаги, чтобы остановить кражу внутриигровых покупок у разработчиков App Store. Первые попытки Apple остановить схему включали выдачу уведомлений о прекращении деятельности серверам, которые обеспечивали мошеннический взлом. Хакеры дали отпор, переместив свои серверы в менее доступные места.

Похоже, что iOS 6 станет единственным настоящим окончательным решением проблемы, а сегодняшнее обращение Apple к разработчикам — это временное решение. Похоже, что конец этой проблемы будет достигнут только совместной работой Apple и разработчиков. Apple готовится выпустить патч для iOS 6 этой осенью, а разработчикам необходимо лучше защищать свои внутриигровые покупки с помощью новых инструментов и руководств, выпущенных Apple сегодня.