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


Повод для беспокойства


Есть такое приложение – iMazing, которое возволяет делать разные вещи, среди которых – создание резервных копий приложений и их настроек. Недавно нем появилась поддержка iOS9. Все бы ничего, но если раньше создание бэкапа в этом ПО формировало .IPA-файл, подписанный сертификатом пользователя, который его сделал, то в случае с iOS9 программа экспортирует файл .imazingapp, в котором отсутствует сам .IPA-файл, но зато хранятся данные приложения. В практически открытом виде. Такой файл данных приложения можно теперь восстановить на любое устройство с iOS9.

Теперь сами же создатели iMazing бьют тревогу и просят всех разработчиков проверить защиту данных в своих приложениях.

Пара слов о резервных копиях


Безусловно, создание/восстановление резервных копий iOS-устройства – не новость. Каждый владелец устройства на базе iOS делает его по нескольку раз за день, подключая устройство к iTunes. Однако раньше восстановить резервную копию было возможно только на устройство пользователя, который его сделал. Сам файл резервной копии пожат, зашифрован и проверяет контрольную сумму архива перед восстановлением, – все для того, чтобы защитить данные пользователя и его приложений в бэкапе. Восстановление такого бэкапа – это продолжительный процесс, который опять-таки, обеспечивает безопасность сохраненных данных приложений на всех этапах – от сохранения, до восстановления на устройство.


В случае с iMazing и iOS9 ситуация изменилась: при желании вы можете «выковырнуть» данные интересующего вас приложения из резервной копии iTunes в виде файла .imazingapp, а затем восстановить их на устройство за минуту. В любой момент. На любое устройство. Само приложение при этом не восстанавливается, но найти и заранее установить его через App Store – дело пяти минут.

Данные приложения, которые хранятся в файле .imazingapp защищены, кхм, несколько слабее, чем в полноценном бэкапе iTunes. Поэтому вскрыть его, а затем внести изменения в файлы, например, сохранений игры, не составляет особого труда. Описывать это процесс я не буду, потому что люди знающие разберутся сами, а обычным пользователям давать в руки подобную инструкцию было бы неуважением ко всем iOS-разработчикам, которые сейчас на пятой передаче ищут способы защитить данные своих приложений.

Вам это ничего не напоминает? Если вы когда-либо устанавливали на свои i-устройства Jailbreak, то, наверняка, знаете, как найти на системном разделе директорию с приложениями и их данными. И как просто эти данные менять, используя, например iFile из Cydia. Теперь и этого не нужно. Каждый пользователь iMazing имеет схожие возможности, да еще с бонусом в виде возможности восстановления данных на любой аппарат с iOS9, с джейлбрейком или без.

Это предыстория. А теперь прикинем, чем это чревато на примере одной популярной игры.

Хрестоматийный пример разгильдяйства


Все мы знаем компанию Rovio, которая год за годом клепает игры серии Angry Birds. Относительно недавно разработчик порадовал нас выпуском новой части эпопеи – Angry Birds 2, распространяемой по популярному принципу Free To Play. Игра представляет собой отличный пример того, как злоупотребление моделью F2P превращает любимые нами игры в пылесос для кошелька игрока – тут вам и «жизни», и «самоцветы», и реклама, в общем – всё, что только можно использовать для монетизации.


Но речь не об этом. Игра сделана на Unity и, как оказалось, хранит данные сохранений (и покупок!) в БД hash-записей PlayerPrefs. По умолчанию hashtable PlayerPrefs ничем не защищен и все данные хранятся в открытом виде. Безусловно, компания, которая имеет богатый опыт разработки на Unity, в курсе того, что сохранения нужно защищать, особенно, если на этом базируется экономическая модель. Так ведь?

Как оказалось – не так.

Для начала запустим Angry Birds 2 на устройстве с Jailbreak (в данном случае – iPod Touch 5G) и немного поиграем. Наигравшись вдоволь, оценим достижения:


423 самоцвета. Негусто… Исключительно ради академического интереса установим игру на устройство с Jailbreak и посмотрим, какие данные игра хранит в PlayerPrefs:


Вот те на. Вот они, родимые! Все четыреста двадцать три штуки.
Хеш-сумм не видать… ключей шифрования тоже. Попробуем изменить значение ключа «Gems»:


Запустим игру, и…


… и смеемся, и плачем.

Безобразие… Но людей, «рискнувших» установить Jailbreak немного, куда меньше, чем основной аудитории, верно?

А слабо без Jailbreak?


Вернем количество самоцветов в предыдущее значение, сделаем резервную копию нашего устройства через iTunes, а затем бэкап данных игры с нашего iPod Touch с помощью iMazing. Полученный файл резервной копии .imazingapp чуток «подправим», а затем восстановим его другой аппарат без Jailbreak (iPhone 5).

Взглянем на результат:


Комментарии излишни.

Мне сложно представить себе, о чем думала команда опытных разработчиков, поленившихся сделать хотя бы простейшее BASE64-хеширование сохранений игры, которая стоила десятки (сотни?) тысяч долларов в разработке и практически целиком и полностью монетизируется за счет встроенных покупок.

Что делать?


Защищаться!

Пользователь Habrahabr natexriver написал замечательную инструкцию о том, как можно реализовать защиту данных приложений Unity. Обратите внимание, как мало усилий требуется для того, чтобы обеспечить самую базовую защиту данных, и насколько она важна. Если лень делать свою защиту, обратитесь в Unity Asset Store. Подчеркну, что нет никаких причин не делать защиту, и надеяться на авось.

Пример, конечно же, актуален не только для игр на Unity. Любое приложение (особенно неигровое) должно обеспечивать безопасность данных, а не рассчитывать на то, что пользователей с Jailbreak мало, и все обойдется. С выходом iOS9 ситуация кардинально меняется. Теперь пользователи iMazing могут обмениваться файлами резервных копий данных своих игр и приложений и вытворять с этими данными все то, для чего ранее требовалась установка Jailbreak.

Дисклеймер


Вся информация в данном посте представлена в сугубо ознакомительных целях. Andry Birds – торговая марка Rovio Entertainment Ltd.

Опрос

Как вы защищаете данные своих приложений?

Проголосовало 65 человек. Воздержалось 79 человек.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Комментарии (13)


  1. fraggjkee
    03.10.2015 11:37
    +3

    Я один первый раз слышу про этот… iMazing?


    1. silvansky
      03.10.2015 12:17
      +3

      Вообще, пост попахивает слегка рекламой этого iMazing… Он ведь не дёшев: 35 баксов за лицензию на одного пользователя.


      1. isden
        03.10.2015 12:40
        +1

        Меня уже в почте рекламой этого iMazing просто завалили, чуть ли не по 2 раза в день на разные ящики валится :( Причем не какой-то левый спам, а с, казалось бы, приличных ресурсов.


      1. SerpantiN
        03.10.2015 13:19
        -3

        Уверяю вас, что рекламы в посте нет.


  1. silvansky
    03.10.2015 12:12
    +2

    Собственно, до iOS 9 это всё делалось с помощью iFunBox.


    1. entze
      03.10.2015 12:25
      +1

      Возможность доступа к данным приложений прикрыли ещё в 8.3 или в 8.4.

      Слышал, что Apple вообще планирует прикрыть возможность сохранять данные приложения локально, даже в шифрованную копию iTunes.


      1. silvansky
        03.10.2015 12:33

        Да, в 8.4 прикрыли. Но iMazing, судя по всему, эту защиту как-то обходит. Поставил и покрутил триальную версию: действительно, можно после процедуры копирования поковырять данные. Восстанавливать пока не пробовал.


        1. SerpantiN
          03.10.2015 13:32

          От самого осознания факта, что Apple зачем-то открыли (возможно, пока недокументированный) доступ к остальным директориям приложения, кроме Documents, мороз по коже.
          Неясно только, зачем? Может, кто-то встречал пресс-релиз или объявление на Apple Developer с аргументацией решения?


  1. Disasm
    03.10.2015 13:34
    +2

    Поправьте меня, но это же какой-то бред. Зачем защищать данные приложений, когда на самом деле нужно чинить систему безопасности, которая должна защищать эти данные? Да и очевидно, что закрыть уязвимость в одном месте лучше, чем в миллионе других.


  1. SBKarr
    03.10.2015 13:46
    +2

    Если следовать правилам, при разработке сперва нужно оценить, какие данные подлежат защите, а какие — нет.

    Если говорить о «приватности» — защите подлежат даже сохранённые списки покупок, избранные статьи и веб-страницы и конечно же данные геолокации. Но чаще всего речь идёт о коммерческой эффективности, защищать нужно только то, что стоит денег. Есть и другие критерии, в их числе особенно часто появляется быстродействие, ибо доступ к защищённым данным дело не быстрое.

    У каждой платформы есть свои встроенные методы защиты, проверенные и задокументированые. И любой специалист по безопасности скажет, что придумывать свою защиту без должного опыта равносильно отсутствию этой защиты. Для iOS, например, есть условно-безопасный iCloud key-value.

    Что меня раз за разом раздражает, так это безграмотность разработчиков при создании архитектуры приложения. В данном случае, архитектуры данных. Это было и есть в веб, и, покуда порог вхождения для приложений снижается, теперь это просачивается и туда.

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

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


  1. PHmaster
    03.10.2015 15:52
    -2

    Я правильно понял, что возможность читать данные одного приложения другим появилась в iOS 9? Если так — то это вызывает некоторое удивление и единственный вопрос — зачем? Зачем разработчики iOS эту возможность добавили? Куда делся sandboxing и все такое? Особенно учитывая недавние новости об AppStore.
    А если принять во внимание последнее нововведение в Xcode 7 — Free On-Device Development, то можно прийти к выводу, что при сохранении тенденций очень скоро Jailbreak таки станет не нужен. Похоже, вот таким незамысловатым способом Apple решила с ним бороться — просто вобрать в себя его функциональность и тем самым сделать его ненужным.


  1. Nomad1
    03.10.2015 19:21
    +1

    Если игрок готов читерить, то он это сделает. Не важно даже как — джейлбрейком, подменой In-App серверов, другими утилитами, в конце-концов, просто бросит игру. Его можно в любом случае вычеркивать из категории «клиентов, приносящих деньги» и заносить в категорию «массовки», а что уже он сделает на своем устройстве со своими конфигами — не важно, он все-равно не станет покупать кристаллики или что-либо еще. Я таким игрокам могу и бесплатно что-то подарить, вроде бонусов или промо-кодов на HD версию игры, хуже все-равно не станет.
    Этот принцип не работает только в ММО, но там и данные на сервере хранятся, в конфигах ничего не исправить.


  1. grishkaa
    03.10.2015 20:35

    Вы советуете применять DRM и другие аналогичные по принципу действия технологии, которые сломаны ещё до своего изобретения, т.к. полностью работают на устройстве пользователя. Не надо так.