В пошуку безкоштовних квитків, дослідження гри Аерофлоту: Місія 2017

У переддень Нового Року, розгрібаючи тонни вітальних листів, я натрапив на пропозицію від Аерофлоту врятувати Новий Рік і отримати 150 000 миль за перше місце. Памятую про минулого їх промо акції, маючи схильність до зломуаналізу подібних заходів, я перейшов по посиланню.



Промо було зроблено у вигляді гри, суть якої полягала у відгадуванні точки на карті зображення Google StreetView і отримання за це все очок, кількість яких пропорційно точності відповіді. На все про все дається 6 хвилин. Також між раундами пропонується половити\покидати подарунки і політати на аероплані за додаткові очки. Шість хвилин можна збільшити до десяти, правильно відповівши на запитання вікторини. За хороші результати дають порядна кількість миль.

Просканив директорії(для заспокоєння душі) і не знайшовши нічого цікавого(крім стирчить в Інтернет phpmyadmin), я приступив до аналізу самої гри.

1) Перше, що знайшов це Replay атака. Раунд не позначається, як зіграний і один і той же запит можна посилати нескінченно, отримую профіт.

for i in {0..50}; 
do torify curl 'http://mission2017.aeroflot.ru/ajax/round' --data 'val1=49&val2=9&game=563058&round=4974078&atype=map' & done;

Однак, цю уразливість швидко закрили.

2) Міні-ігри реалізовували всю логіку на своїй стороні. І відправляли на сервер тільки підсумки. Відповідно дані запити можна було модифікувати і пролітати сотні тисяч км на своєму аероплані.

3) Вікторина до кінця промо була вразлива для Replay атак. Так що можна було накручувати собі час на гру. Мінус цього методу в тому, що за логікою творців, неможливо набрати більше 10 хвилин часу, тому результат вибивався б з рівного списку десятиминутников.

4) Але все перераховане вище — це хакі, які можна відстежити і покарати. Отже, настав час писати бота! Скрипт гри представляє з себе непоганий необфусцированный код, з досить зрозумілими назвами. Примітно, що у відповіді на запит до /ajax/round приходили вірні координати. Це обставина дозволяло замапить кожен url панорами на координати.

map = {"https://www.google.com/maps/embed/v1/streetview?pano=_EjgB69lOpQheNB4ldZWsA&key=AIzaSyAdpt2jitUXkLd8NtkNQ_Ee6THUA_DZ-K0" : {lat: 40.62, lon: 22.94},
"https://www.google.com/maps/embed/v1/streetview?pano=oIMBbAJeLJfwiwNtgiVl-g&key=AIzaSyAdpt2jitUXkLd8NtkNQ_Ee6THUA_DZ-K0" : {lat: 22.27, lon: 114.16},
...
}

Все подальше залишається лише справою техніки: визначаємо нову функцію через консоль розробника, яка автоматом правильно відповідає на всі запитання з деякою похибкою і затримкою, пропускає або відправляє гарні результати за підсумками міні-ігор і дозволяє відповісти на вікторину в мануальному режимі. В принципі і вікторина автоматизується, але просто було лінь реалізовувати.

Варто віддати повинно розробникам(а може бути модераторам), у них був непоганий антифрод і всі сумнівні учасники банились. Я не зміг з'ясувати всі параметри за якими проводився аналіз на фрод, але два з них мені відомий: швидкість і точність відповіді.

Правда, цих механізмів недостатньо для адекватного відсікання ботів. Що на мій погляд і відображає підсумкові рейтинг промо акції.

Перші три уразливості чисто логічні, недостатньо перевірок і тестів. Але залишається проблема ботоводства, яку треба вирішувати. Ось ті мінімальні заходи(практично калька з блогу), які б відсікли більшу частину ботоводов і зробили б світ чистішим:

1) STO — Security Through Obscurity, відсікає ледачих і школярів. Обфускація і шифрування — наше все!
2) Погана ідея повертати учаснику координати вірної точки в чистому вигляді. Вирішити проблему можна по-різному: повертати результат у вигляді зображення або маски над ним, перетворювати в іншу систему координат з меншою точністю.
3) Додати більше клієнт-серверної взаємодії, наприклад натискання клавіш, переміщення курсору, кліки. Дана міра ускладнить написання ботів для міні-ігор і додасть даних для проведення тесту Тьюринга.

Пункт три звичайно дорогий і складний, і в світі промо йому навряд чи знайдеться місце, але нехтувати пунктом два, а тим більше заходом один, я б не став, враховуючи ту кількість коштів, яке створене під ці цілі.

P. S. Всі дії зроблені мною носять дослідницький характер, а висновки сподіваюся послужать наукою розробникам промо.
Джерело: Хабрахабр

0 коментарів

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