Программист озолотился за считанные часы из-за малюсенькой ошибки в коде. Деньги отобрала служба безопасности
Программист случайно перепутал всего несколько символов в коде внутреннего ПО оператора связи, в котором он работал, и за пару часов стал очень богатым – на его счет поступила внушительная сумма. Но деньги пришлось вернуть под пристальным взором службы безопасности, а опечатку в коде – исправить.
Богач по ошибке
Программист в небольшом операторе сотовой связи перевел на свой счет гигантскую сумму, допустив всего одну ошибку в программном коде. Его историю, произошедшую в начале XXI века, приводит издание The Register, называя его Треем (Trey).
В тот период Трей работал в небольшой телекоммуникационной компании, название которой не раскрывается. Фирма активно строила сотовые сети третьего поколения (3G), и ей требовался специализированный внутренний софт для обработки данных – что-то, напоминающее биллинговую систему базового уровня.
Трей работал в команде, разрабатывавшей это ПО. Однажды Трей заметил, что платежный шлюз ведет себя некорректно, поэтому он написал программное обеспечение для отправки на его счет тестовых транзакций с промежутком в пять минут до тех пор, пока шлюз не восстановится. Но, планировав установить размер одной транзакции на уровне $0,01, он перепутал и написал $100. Это и привело его к проблемам со службой безопасности оператора.
Руководство не возражало
Написанный им софт для проверки работы шлюза Трей перед внедрением показал руководителю, и тому он так понравился, что он потребовал немедленной его интеграции в систему оператора. Его не смутило ни то, что это было самописное ПО, разработанное без указания, ни тот факт, что это была лишь его ранняя нестабильная версия, о чем Трей предупредил начальника.
В коде программы Трея было три серьезные ошибки, две из которых он не успел обнаружить в ходе очень кратковременного тестирования, а третью не успел исправить. Первая ошибка была в значении тестовых транзакций. Значение должно было быть целым числом, за которым следовал модификатор.
Задумка Трея заключалось в том, что целое число в значении было равно 1, а модификатор был равен -2, что привело бы к созданию тестовой транзакции на сумму $0,01. Но показатель степени случайно был установлен на не на -2, а просто на 2, в результате чего каждая транзакция стоила $100.
Вторая ошибка заключалась в отсутствии так называемой «проверки на жизнеспособность» (liveness check). Когда один из платежных шлюзов выходил из строя, программа не засыпала на пять минут после каждой неудачной транзакции, а просто немедленно пыталась провести транзакцию снова, что выливалось в бесконечное количество транзакций.
Третья ошибка, о которой Трей знал, но сделал мысленную заметку исправить ее позже, заключалась в том, что выбор кредита или дебета в тестовых транзакциях должен был быть случайным, но по какой-то причине всегда выпадал кредит. Трей решил, что это не будет такой уж большой проблемой, учитывая, что транзакции должны были составлять всего $0,01 каждые пять минут, но не учел наличие предыдущих двух ошибок.
С безопасниками лучше не спорить
Однажды ночью, когда тестовая программа уже работала внутри инфраструктуры оператора, один из платежных шлюзов перестал функционировать. Небольшая утилита Трея отреагировала мгновенно и начала пополнять его тестовый счет на $100 практически без остановки в течение следующих нескольких часов.
Когда Трей пришел на работу на следующее утро, его встретили сотрудники службы безопасности оператора, и выражения их лиц были очень серьезными. Поприветствовав его, они поинтересовались, какие мошеннические схемы он пытается провернуть за спиной у работодателя. К тому моменту на тестовом счету Трея скопилось целое состояние, пишет The Register, не раскрывая сумму.
Спасти Трея от целой вереницы проблем смог его непосредственный руководитель. Он объяснил сотрудникам службы безопасности ситуацию и рассказал, как сам санкционировал развертывание непроверенной программы. Издание не сообщает, какие санкции в итоге были применены против Трея и его начальника, но тестовый счет Трея был принудительно опустошен.