История одного бага в автомате для видеопокера
В программировании ошибка (сленговый синоним — баг — от англ. bug — первичные значения: клоп, любое насекомое, вирус) — жаргонное слово, обычно обозначающее ошибку в программе или системе, из-за которой программа выдает неожиданное поведение и, как следствие, результат. Большинство багов возникают из-за ошибок, допущенных разработчиками программы в её исходном коде, либо в её дизайне. Также некоторые баги возникают из-за некорректной работы компилятора, вырабатывающего некорректный код. Программу, которая содержит большое число багов и/или баги, серьёзно ограничивающие её работоспособность, называют нестабильной или, на жаргонном языке, «глючной», «глюкнутой», «забагованной», «бажной», «баг(а)нутой»).
Баги в некоторых программах остаются незамеченными годами. Другие тихо исправляются. Но встречаются баги, которые становятся объектом всеобщего внимания и даже судебного разбирательства. Именно такая история произошла с ошибкой в игровом автомате Game King Multi-Game. Обнаруживший её игрок не сообщил разработчикам о найденной уязвимости, а начал снимать джекпоты в разных казино. Расследование ФБР показало, что он снял из игровых автоматов более $500 тыс.
Давайте узнаем, как это было...
Первые автоматы для видеопокера появились в американских казино в 70-е годы и их сразу ждал большой успех. Игрокам нравилось, что они могут влиять на результат (выбирать карты), а не тупо крутить барабан. Владелец патента International Game Technology провела IPO и вышла на биржу в 1981 году.
Главным козырем IGT было использование компьютерных технологий в игровых автоматах. Компания добилась идеальной формулы в 1996 году, с выпуском модели Game King Multi-Game, которая предлагала несколько вариантов покера. Казино закупили эти автоматы, а производитель продавал им новые прошивки с новыми играми. 25 сентября 2002 года вышла пятая версия прошивки — Game King 5.0.
Как выяснилось, в код Game King 5.0 закралась ошибка. Точнее, ряд небольших багов в программе под номером G0001640. Им удалось избежать обнаружения во время тестирования.
Баг оставался незамеченным в течение следующих 7 лет, переходя в каждую новую версию прошивки. В результате копирования кода он проник в 99 разных программ на тысячах игровых автоматов IGT. Насколько известно, никто не воспользовался им до апреля 2009 года, когда его случайно обнаружил Джон Кейн (на фото).
Баг проявился случайно. Джон Кейн проводил за игрой огромное количество времени. Однажды в одном из игровых автоматов возле китайской закусочной на окраине Лас-Вегаса он пробовал разные варианты покера, но потом решил заказать кэшаут и поискать удачи в другом автомате. Как только он нажал кнопку “Cash Out”, экран неожиданно заблокировался, автомат заморгал, зазвенел и сообщил о джекпоте более чем на $1000. Джон даже не начинал играть новую руку. Он сообщил подошедшему сотруднику о глюке, но тот посчитал это шуткой и выдал выигрыш.
Джон Кейн позвонил другу Андре Нестору (Andre Nestor), они вместе засели за автоматы и начали проводить тестирование игровой системы, пробуя разные игры, лимиты и последовательность действий.
Суть бага скрывалась в том, что машина позволяла менять размер ставки на низких лимитах от 1 до 50 центов, при этом ошибочно позволяла изменить размер ретроактивно. То есть после выигрыша на ставке 1 цент можно было изменить номинал до 50 центов и получить выигрыш в 50 раз больше положенного.
Спустя семь часов тестирования друзья смогли установить точную пошаговую последовательность действий, чтобы воспроизвести баг.
К сожалению, по какой-то причине баг проявлял себя только в автоматах Game King, установленных в одном маленьком районе Лас-Вегаса — во Фремонте. Тем не менее, за 5 недель упорного труда Кейн сумел снять в этом районе более $100 тыс.
Менеджеры заметили неладное и отключили на проигрышных банкоматах функцию удвоения ставки “Double Up”, после чего всё перестало работать. И тут на «хакеров» снизошло озарение: ведь эта функция отключена по умолчанию во всех автоматах, на которых они пробовали её в прошлый раз. Таким образом, они могли зайти в любое казино, попросить включить функцию — и получить джекпот. Друзья договорились не снимать с казино более $20 тыс. в день.
Более того, со временем выяснилось, что после получения джекпота повторение определённой комбинации действий позволяло повторить джекпот точно с теми же картами. Собственно, на этом их, в конце концов, и поймали.
После очередного джекпота игровые автоматы опечатали и отправили на экспертизу в технический отдел Агентства по регулированию деятельности казино в Неваде. Расследование поручили 25-летнему Джону Ластуски (John Lastusky), недавнему выпускнику факультета информатики университета Южной Каролины. Тот изучил логи, затем скопировал содержимое EPROM и не нашёл признаков внешнего вмешательства и бэкдоров. Тем не менее, повторяя выигрышные действия, через несколько дней Ластуски всё-таки смог воспроизвести нужную последовательность. Он сообщил о находке руководству, и вскоре функцию “Double Up” деактивировали на всех игровых автоматах.
Прокуратура предъявила Андре Нестору обвинение по 698 пунктам, от воровства до преступного сговора. В 2011 году дело передали в министерство юстиции, и обвиняемым выдвинули обвинение по новой статье о компьютерном взломе (закон Computer Fraud and Abuse Act). Но закончилось всё хэппи-эндом. Друзья отказались давать показания друг против друга, и министерство юстиции было вынуждено снять обвинения, а в марте 2014 года дело закрыли.
Нестор потратил все деньги на адвоката, а вот Кейн сохранил выигрыши. Судя по судебным записям, они не были конфискованы, так что бывший пианист сейчас ведёт тихую спокойную жизнь, нигде не работая.
Андре Нестору запретили вход во все казино Пенсильвании, и он теперь тратит время, играя в Candy Crush на Android-планшете. За два месяца Нестор прошёл 515 уровней, используя чит, найденный в интернете.
Комментарии
Отправить комментарий