Майбутнє безпеки мобільних додатків, або чому нас можуть навчити покемони

З моменту появи 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 was down 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, які розуміють, наскільки корисно дати гравцям можливість впливати на загальний ігровий світ і доопрацьовувати його.

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


Посилання
  1. Подробности з реддита про розбір нового API


Ще?
Можу розповісти ще кілька історій, якщо ви вкажете в коментарях, що вони вам цікаві:
  1. Повна історія злому нової версії API покемонів співтовариством реддита. Вона захоплююча і повчальна!
  2. Чому Apache HttpComponents стали deprecated, де брешуть розробники Google, і чому вам варто продовжувати використовувати HttpComponents (і як це робити).
  3. Поточна реалізація SSL в браузерах вводить в оману користувача, даючи ілюзію безпеки.
  4. Чому вам не варто прямо зараз бігти розробляти свою програму з доповненою реальністю, пам'ятниками і Петром Першим.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.