Будущее безопасности мобильных приложений, или чему нас могут научить покемоны

    С момента появления Pokemon Go, я с большим любопытством отслеживаю всё, касающееся этой игрушки. Как ни странно, она даёт безумное количество интересной информации — в первую очередь относительно разработки мобильных приложений. Казалось бы, занимаетесь вы разработкой банковских приложений — в чём тут может быть связь? А нет, вам тоже найдётся, чему научиться у покемонов.

    Сегодня хотелось бы остановиться всего лишь на одном из интересных наблюдений — а именно — на защищённости мобильного приложения. Не то чтобы Niantic являлся иконой для всех мировых разработчиков, но давайте исходить из того, что их уровень разработки довольно высок, и их ошибки и недочёты будут справедливы и для большинства других мобильных приложений. Постараюсь излагать так, чтобы было интересно и понятно всем разработчикам, а не только тем, кто играл или читал что-то про игрушку.

    Акт первый. Боты для всех, и никто не уйдёт обиженным


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

    Да, глаза вас не обманули. 1644 репозитория. Наверное, стоит уточнить, что там:

    • Боты — куда же без них;
    • Чистые варианты реализации API на любых языках и платформах;
    • Подборки данных и механик, вытянутые из приложения;
    • Приложения для поиска покемонов вокруг;
    • Приложения для автоматизации действий вроде массовой эволюции покемонов;
    • Приложения для просмотра спрятанных свойств покемонов (IV);
    • Приложения для просчёта оптимальных боёв;
    • Просто версии игры с пониженными системными требованиями.

    Следует отметить, что многие приложения обязаны своим появлением тому, что в игре очень плохо реализованы или объяснены многие моменты — вполне естественно, что находчивые разработчики решили на скорую руку сколотить себе несколько костылей.

    Акт второй. Робкая попытка защиты


    В какой-то момент приложение резко перестало показывать удалённость покемонов (ранее были показаны три степени удалённости). Как вы думаете, с чем это связано? Подумайте пару минут. Ваше самое худшее предположение окажется правдой — удалённость рассчитывалась в клиентском приложении, которому передавались координаты находящихся рядом покемонов — что изрядно увеличивало радиус обнаружения для резвящихся ботов. Не совсем понятно, по какой причине Niantic решил полностью убрать эту фичу вместо того, чтобы перенести рассчёт на сторону сервера… Ну да ладно, это мы вряд ли когда-нибудь узнаем. Возможно, они решили не добавлять дополнительной нагрузки на и без того трещащие от натуги сервера. В эту статью не входит вопрос о том, как дочерняя компания Google так облажалась с масштабированием игры с настолько малой связностью данных, но всё же…

    Акт третий. Смешная попытка защиты


    Чуть позже время обнаружения покемонов после появления игрока в локации увеличилось вдвое — насколько я помню, с 5 до 10 секунд. Похоже на какие-то панические меры защиты, которые, конечно, не могли принести внятных результатов — боты точно так же увеличили вдвое таймаут.

    Акт четвёртый. Защита!


    Наконец настал день, когда боты и сканеры разом перестали работать. Честные игроки вздохнули с облегчением — конкурировать с ботами, многие из которых набрали недоступный игроку 30+ уровень, было очень утомительно, да и просто грустно. Но что же… Облегчение длилось всего трое суток. Энтузиасты с реддита за это время разобрали нативную C++ библиотеку, входящую в состав приложения, подобрали необходимые данные и шифрование и вновь выкатили работающую версию API, которую в течении суток подхватили боты и сканеры.

    Акт пятый. Нападение!


    Справедливости ради стоит заметить, что пятый и четвёртый акт шли параллельно, но мне хотелось их логически разделить.

    В этом акте Google начал банить без разбору любые приложения на Google Play, которые имели хоть какое-то отношение к покемонам. Банхаммер работал без отдыха и разбора. Как пример неправедно пострадавших приложений, можно привести

    • Приложение для вычисления спрятанных характеристик покемонов. Забанено за «violating the device and network abuse». Что является откровенной ложью, поскольку принцип работы приложения — распознавание картинки из игры и анализ показателей. У приложения даже нет прав на то, чтобы отправлять данные в интернет…

    • Простенький калькулятор для просчёта оптимального покемона для борьбы с выбранным. Забанено потому что “violates the impersonation policy”. Что вообще является любимой фразой от Google, поскольку понять и исправить ошибку невозможно (поверьте, я пытался сделать это с другим приложением).


    Акт шестой и последний. Позор.


    Сложно назвать этот акт иначе. После того, как популярные приложения были убраны с google play, разработчики дружно выложили их в open source на github. Вообще, инфраструктура мобильных приложений на гитхабе довольно интересна — 2016 год позволяет делать автоматическое обновление с гитхаба, отправлять куда угодно сообщения об ошибках и в целом довольно неплохо жить без Google Play. Более того, доверие к приложению становится не меньше, а больше, чем если бы оно было выложено на Google Play…

    И что же произошло? Довольно ожидаемая, но от этого не менее печальная вещь. Niantic пошёл жаловаться на репозитории. В результате большинство авторов удалили свой код (надо сказать, не полностью, а просто затёрли его последним коммитом) с примерно таким сообщением:

    I've received a notice to cease and desist from Niantic Labs, and I've decided to comply with their requests. I'd like to clarify that the main reason I chose to shut it down was because I’ve lost interest rather than legal concerns. Niantic’s actions towards 3rd party developers have been very off-putting and it has killed my personal motivation to work on this project. This was a fun weekend project for a game I enjoyed, and now I’ve lost interest in both. I won’t resume development, but there are active forks of this project you could use.

    Не то чтобы авторы испугались обращений Niantic, но их политика просто огорчила разработчиков до глубины души. Код приложений остался на гитхабе, форки множатся, и злонамеренное использование по-прежнему процветает. Niantic не смогли ни предоставить собственного адекватного инструментария для работы с игрой, ни защитить игру от стороннего вмешательства. И просто пошли строчить жалобы. Ну что же… Не так чтобы это было неожиданно в свете аналогичной судьбы гораздо менее популярного Ingress, но жалко, что компания, которая претендует на революцию в игровой индустрии, не учится на своих ошибках, и даже не признаёт их. Хотя радует, что есть ребята вроде Blizzard, которые понимают, насколько полезно дать игрокам возможность влиять на общий игровой мир и дорабатывать его.
    UPDATE. В комментариях говорят, что я не совсем прав, или даже совсем не прав. Но Blizzard таки даёт возможность влиять хотя бы на пользовательский интерфейс. Мотив закрытия альтернативных серверов и клиентов довольно понятен — это прямая потеря прибыли.

    Выводы.


    Что мы можем вынести из этой печальной истории?

    1. Код мобильного приложения невозможно защитить. В лучшем случае, вы окажетесь просто никому не нужны — тогда вам не о чём заботиться. В ином случае, при выкладывании приложения лучше считать, что вы выложили его исходники в open source — с этой позиции гораздо проще оценивать последствия и возможные меры противодействия взлому.
    2. Мобильные приложения без Google Play могут существовать, и, судя по всему, в будущем их будет всё больше.
    3. Вы можете приобрести огромное количество помощников, если выложите своё приложение в open source. Вы боитесь? Ну что же, тогда продолжайте тешить себя иллюзией защиты. И ваши потенциальные помощники окажутся по другую сторону баррикад.


    Ссылки


    Подробности с реддита про разбор нового API

    Ещё?


    Update. Сначала стормозил и не сделал опроса с вариантами того, о чём рассказать ещё, поэтому в комментариях появились соответствующие пункты. Теперь можно просто проголосовать.

    Update 2. Добавлен перевод истории взлома.

    Only registered users can participate in poll. Log in, please.

    Могу рассказать ещё несколько историй, если вы укажете в комментариях, что они вам интересны:

    Support the author
    Share post
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 58

      +20
      Текущая реализация SSL в браузерах вводит в заблуждение пользователя, давая иллюзию безопасности.

      Очень интересно.
        0
        Поддерживаю
          0
          +1
            0
            Тоже очень интересно.
            +9
            Интересен второй пункт про HttpComponents
              +1
              Поддерживаю!
                +1
                Да, раскажите пожалуйста!
                  0
                  Очень интересно!
                    0
                    Мне тоже интересно
                      +1
                      Выложил, приятного чтения!
                      0
                      Чуть позже время обнаружения покемонов после появления игрока в локации увеличилось вдвое — насколько я помню, с 5 до 10 секунд.

                      Таймаут увеличили, чтобы ловить покемонов в едущей машине было проблематично (успеваешь проехать локацию до появления покемона), но при этом пешей/велосипедной прогулке этот таймаут не мешает.
                        +1
                        Странная мера защиты, с учётом того, что приложение разрешает тебе ловить покемонов будучи пассажиром (вспоминаем соответствующее предупреждение). Кроме того, ловля покемонов на скорости вообще имеет довольно мало смысла — при езде по магистрали ты встретишь гораздо меньше покемонов, чем если бы просто гулял где-то по парку. Так что непонятно, зачем дополнительно обрезать хоть какое-то развлечение для скучающего пассажира.
                          0
                          Причем работает это не всегда
                          Уже после последнего обновления спокойно ловил покемонов из поезда, идущего явно за 100 км/ч.
                          Понятно, что их там не очень много — пути идут вдали от более-менее значимых дорог — но все же
                        +1
                        Интересно, спасибо. Хотя я бы с радостью увидел здесь больше технических деталей.
                        Если вы это и имели ввиду с «полной историей взлома новой версии API покемонов», то пишите обязательно!

                        А еще, можно по-подробнее вот про это?
                        Вообще, инфраструктура мобильных приложений на гитхабе довольно интересна — 2016 год позволяет делать автоматическое обновление с гитхаба


                          0
                          Да, технические подробности я могу описать в полной истории.

                          Про автоматическое обновление — всё просто. Гитхаб позволяет выкладывать релизы и даёт апи, которое позволяет проверить, последний ли у вас релиз. Если не последний, то нужно просто скачать новую версию и перенаправить пользователя на установку. Всё это можно было реализовать и раньше где-нибудь у себя на сервере, но теперь это совсем просто, прозрачно для пользователя, и гарантирует установку обновления из доверенного источника (если вы первый раз установили приложение из репозитория, то вы таки доверяете разработчику).
                            0
                            Ясно, а то я подумал может существует какая-то возможность автообновления без переустановки.
                              0
                              Вот мне кстати интересно, как переустанавливает без запросов сам Гугл Плей? Нельзя ли сделать самим также?
                                0
                                У плея рутовые права вроде как.
                                  0
                                  Права системного приложения, а не рутовые.
                                    0
                                    Всё так, используется доступное только для Google Play разрешение android.permission.INSTALL_PACKAGES. Тому же Yandex.Store приходится скачивать приложение на ваше устройство, после чего перенаправлять на его apk при помощи стандартного Intent Intent.ACTION_VIEW для установки. Однако, выигранный иск в ФАС может теперь многое изменить…
                                    .
                                  0
                                  А вопрос в целом хороший. Может кто знает, существуют ли альтернативные сторы которые умеют обновлять приложения без переустановок (в частности без действий пользователя)? Хотя бы на девайсах с рутом.
                                    0
                                    Существуют. Тот же яндексовый. У меня даже публикация есть на эту тему на хабре. Проблема в том, что вы задаете этот вопрос — это показывает, насколько эти сторы популярны…
                              0
                              +6
                              Хотя радует, что есть ребята вроде Blizzard, которые понимают, насколько полезно дать игрокам возможность влиять на общий игровой мир и дорабатывать его
                              Очень плохое сравнение с Blizzard, компания которая годами плевала на мнение игроков по поводу баланса в World of Warcraft, закрывала все возможное моды для своих игр, судилась с обладателями пиратских серверов со старыми версиями патчей. С выходом нового патча в Heartstone ещё одно подтверждение того, что они не интересуются что волнует сообщество, факты и статистики, ничего. Даже переименование всего в Dota 2 только благодаря искам от Blizzard. Нет, эти ребята не понимают.
                                0
                                Из известных мне примеров — в wow есть аж Lua для кастомизации интерфейсов. И то что можно выкладывать на battle.net карты для StarCraft 2. И вроде что-то слышал про официальное использование пользовательских модов в wow. Хотя тут я не специалист, для меня Diablo закончилась на второй версии, как и Warcraft, а StarCraft на первой… Интересно, если кто-то расскажет развёрнуто.
                                  0
                                  По каждой игре близард можно найти иск в котором они судились с сообществом. Сообщество с радостью создавало неимоверное количество патчей для игр, багфиксы, аддоны, приводило статистику, аргументы, чтобы они модифицировали свои игры для общего блага. Blizzard при этом всё игнорировало или запрещало при этом сама ничего не собирается делать. К сожалению нет всех ссылок на проекты, которые сообщество пыталось продвинуть в продукты этой компании их было очень много, но безуспешно. Пара ссылок как пример:
                                  Blizzard банит игроков Diablo III за использование Wine
                                  Судебные хроники. Blizzard Entertainment
                                  Blizzard закрывает классические фанатские сервера World Of Warcraft
                                    +1

                                    Думаю, автор поста имел ввиду, что разработчики Blizzard дают достаточно много свободы для игроков в плане различных модификаций, чем разработчики тех же Pokemon Go.


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


                                    Тот же, интерфейс, например, касательно которого, как я понял, и были в основном претензии к pokemon go.

                                  +1
                                  Пример игры, разработчики которой слушают комьюнити — Parg of Exile. Было много случаев изменения баланса, допила полезных фич и прочего. Реддит — много примеров, разработчики, кстати, его мониторят и часто отвечают.

                                  Справедливости ради стоит заметить, что игра не настолько популярна и является почти инди. Возможно это влияет.
                                  0
                                  Вам повезло, что нинатик — это не метелица. Метелица разработчиков ботов ставит на счётчик. Ибо недополученная прибыль священна.
                                    0
                                    Вообще niantic начав активную борьбу с ботами, тоже начали юридически давить на разработчиков ботов и добиваться реального закрытия репозиториев на github.
                                    https://www.reddit.com/r/pokemongobotting/comments/4vf5g9/necrobot_is_dead_what_happened/

                                    А вот ребята из Bossland GMBH которые разрабатывают самых популярных ботов для WoW и Diablo 3 и имеют многолетний опыт судебных тяжб с Blizzard своего бота для pokemon go удержали на плаву http://blog.bossland-gmbh.com/2016/blizzard-devastated-clutching-at-any-straw
                                    0
                                    > В результате большинство авторов удалили свой код (надо сказать, не полностью, а просто затёрли его последним коммитом) с примерно таким сообщением
                                    Но делаем HEAD-1 и вот он, код… Из более удобных вариантов — в мастере оставляем заглушку, а новый код выкладываем в бранче. Не так понятно, но соблюдается формальность.
                                    А вообще, нужен аналог GitHub но как минимум с проверкой каждого из обращений и смелостью судиться, а как максимум не в США, чтобы можно было забивать на DMCA. Вроде такие страны и в Европе есть.
                                      0
                                      Развернуть свой gitlab на хостинге в абузоустойчивой стране уже предлагали?
                                        0
                                        Да зачем так сложно. Просто делаете приватный форк и раздаёте всем, кому интересно.
                                      0
                                      Хотя радует, что есть ребята вроде Blizzard, которые понимают, насколько полезно дать игрокам возможность влиять на общий игровой мир и дорабатывать его.

                                      Это вы называете пониманием?
                                        +3
                                        Честно говоря, все 4 истории, предложенные в «Ещё?», кажутся мне весьма интересными! Буду рад, если автор найдёт силы на несколько новых статей! :)
                                          +1
                                          Было бы очень интересно услышать подробности на тему «Полная история взлома новой версии API покемонов сообществом реддита. Она увлекательна и поучительна!». Т.к. сам был в их Discord и наблюдал, как они старательно разбираются и решают эту проблему, но многого не понял.

                                            +1
                                            Вы можете приобрести огромное количество помощников, если выложите своё приложение в open source. Вы боитесь? Ну что же, тогда продолжайте тешить себя иллюзией защиты. И ваши потенциальные помощники окажутся по другую сторону баррикад.

                                            Как быть инди разработчикам? Если весь доход приложения на рекламе, зачем выставлять его код на обозрение?
                                              0
                                              А вы не выкладывайте ресурсы
                                                0
                                                В смысле? картинки что ли?
                                                  0
                                                  Картинки, уровни, звуки…
                                                  Далеко за примерами ходить не надо:
                                                  DOOM
                                                    0
                                                    У меня системное приложение, без картинок не соберется, да и картинки там только иконки. Так что не вижу смысла в открытости, хотя я всей душой болею за опен сорс
                                                      0
                                                      Ну в дум тоже не поиграть без ресурсов.
                                                      Вы же в опен сорс не выкладываете приватные ключи от сторонних sdk(социалки, метрики, «крашлитики»...)?
                                                      Можно сделать, чтобы приложение собиралось и работало, но только только для debug, а для релиза нужны будут ключи.
                                              0
                                              2. Почему Apache HttpComponents стали deprecated, где лгут разработчики Google, и почему вам стоит продолжать использовать HttpComponents (и как это делать).

                                              3. Текущая реализация SSL в браузерах вводит в заблуждение пользователя, давая иллюзию безопасности.


                                              Оба интересны, хотя про третий я догадываюсь, но с удовольствием прочитаю
                                                +1
                                                Статья интересная, и хочется к ней дополнений в таком же порядке.
                                                1. Полная история взлома новой версии API покемонов сообществом реддита. Она увлекательна и поучительна!

                                                4. Почему вам не стоит прямо сейчас бежать разрабатывать своё приложение с дополненной реальностью, памятниками и Петром Первым.
                                                  0
                                                  Я вот несколько не понял из контекста статьи. Боты всего лишь упрощают поиски покемонов при реальном передвижении по городу? А что мешает подсовывать фейковые данные геолокации и «ходить» по городу, оставаясь на рабочем месте?
                                                    0
                                                    Ничего не мешает. Но во-первых, многие любят искать покемонов ногами, а во-вторых сложно поймать редких покемонов, просто слоняясь по городу, даже если ботом.
                                                      +1
                                                      Так и делают. Есть приложение джойстик, которое подсовывает фейковые GPS данные. Ты сидишь на месте, тыкаешь в джойстик и персонаж ходит по какому-то городу на другом континенте.
                                                      0
                                                      4. Начинать разработку приложений дополненной, виртуальной и смешанной реальностей нужно было вчера.
                                                      А то можно не успеть на поезд.
                                                        0
                                                        Да, вам как раз была бы адресована четвёртая статья. Многие ошибочно видят внезапный поезд, в который надо прыгать любой ценой.
                                                          0
                                                          Лично у меня складывается впечатление, что разработчики рассматривают эти смешные трёхмерные штучки как нишевый продукт.
                                                          И уверены, что поезд не внезапный, а стоит на месте больше пятнадцати лет и ещё стоять будет, куда торопиться.
                                                        0
                                                        С Impersonation, на самом деле, все просто. Как правило, достаточно заменить "%brandname% %что-то там%" на "%что-то там% для %brandname%". Могут еще попросить удалить спорные скриншоты (если на них используется контент, принадлежащий третьим лицам).

                                                        У нас уже удаляли приложение по одной популярной игре (база знаний, новости и т.д.), после недолгой переписки и вышеописанных изменений в сторе восстановили. НО, по-видимому, наложили некий «АГС-фильтр», потому что приложение очень резко просело в позициях (было топ 1-10 по тематическим запросам, стало 30+). Постепенно, похоже, фильтр сняли, сейчас позиции восстанавливаются.

                                                        Что интересно, Apple такой ерундой не страдает. В App Store заставили переименоваться вышеуказанным способом, но до скринов докапываться не стали.
                                                          0
                                                          У меня с Impersonation был крайне негативный опыт с приложением для обхода блокировки рутрекера. Когда я исправил даже то, что уже нельзя было исправить, мне просто сказали, что моё приложение ничего не делает… Ну и даже если оставить в сторону этот случай, второй с GoIV уже ни в какие ворота не лезет. Так что банили всех подряд под любой подходящей причиной.
                                                            0
                                                            Да, у гугла, к сожалению, есть такие косяки. У модератора плохое настроение — он берет и удаляет приложение с десятками тысяч активных и довольных юзеров, которое ничего не нарушает по факту. И при этом не обращает внимания на кучу похожих приложений, которые зачастую что-то нарушают :)
                                                          0
                                                          Не совсем понятно, по какой причине Niantic решил полностью убрать эту фичу вместо того, чтобы перенести рассчёт на сторону сервера…

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

                                                              А потом перемещаться туда с помощью фейк-gps и ловить, сидя дома в кресле? Я не считаю это правильным и честным по отношению к другим игрокам.
                                                                –1
                                                                Да нет, я вот с работы ногами бегал, когда радар в радиусе километра что-то интересное засекал… Хотя когда радар перестал работать, оказалось, что без него играть веселее — и я не стал его ставить вновь, когда его починили.

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

                                                            Only users with full accounts can post comments. Log in, please.