Когда ПО убивает. 6 смертельных багов

По сюжетам отдельных случаев из подборки можно было бы снимать шпионские блокбастеры. Однако все это произошло на самом деле. Причиной реальных и виртуальных трагедий стали баги в ПО. Рассказываем, как ошибки в коде могут привести к фатальным последствиям, а незнание законов оптики — к Третьей мировой. 

Оставить комментарий
Когда ПО убивает. 6 смертельных багов

По сюжетам отдельных случаев из подборки можно было бы снимать шпионские блокбастеры. Однако все это произошло на самом деле. Причиной реальных и виртуальных трагедий стали баги в ПО. Рассказываем, как ошибки в коде могут привести к фатальным последствиям, а незнание законов оптики — к Третьей мировой. 

Облучение по ошибке

Один из самых известных случаев, связанных с передозировками во время лучевой терапии. Медицинский ускоритель Therac-25 стал причиной смерти и серьезных проблем со здоровьем как минимум у шести пациентов. С 1983 по 1987 годы 11 таких устройств использовали в США и Канаде. Ускорители подобного типа применяют для высокоточного облучения опухолей. Однако некоторые пациенты получили дозы радиации не в несколько сотен рад, как требовалось для лечения, а в 20 000. При этом 1000 рад уже считается смертельной дозой. 

Сперва баги просто не замечали и списывали все на аппаратные сбои. Компания-производитель изучала каждый инцидент, однако никак не могла найти причину неполадок. На расследование, которое проводилось уже после подачи судебных исков по причине смерти пациентов, ушло несколько лет, в нём были заняты сторонние эксперты. В ПО аппарата лучевой терапии нашли сразу несколько ошибок.    

Тестировщикам советуют внимательно изучить этот случай, уже ставший классическим для разработки и тестирования медицинского ПО. Начать рекомендуют с материала в wiki. Затем можно перейти к этой статье

Пользовательский интерфейс Therac-25

Toyota и непроизвольное ускорение

89 погибших и более 50 серьезно пострадавших — к стольким жертвам за десятилетие привел баг в электронике автомобилей Toyota. Пользователи неоднократно жаловались на неконтролируемое ускорение, при этом машина не реагировала на нажатие педалей. 

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

Годы спустя к расследованию, по требованию властей США, привлекли большое количество сторонних специалистов. Позвали даже экспертов NASA. Компания Barr Group, занимающаяся экспертизой электроники и софта, пришла к выводу, что причина кроется в «кривом» ПО. Бортовой компьютер выдавал некорректные значения, что в свою очередь и приводило к непроизвольному ускорению. При этом ошибок и ляпов в кодах было найдено столько, что, по словам экспертов, все их изучать не было смысла.

После совместного расследования Министерства юстиции США и ФБР, в 2014 году компания согласилась выплатить $1, 2 млрд на урегулирование досудебных исков. Деньги ушли пострадавшим, а также семьям погибших в авариях.

«Великий блэкаут» 

27 августа 2003 года, с девяти вечера и до восьми утра, без света в США и Канаде оставались 55 миллионов человек. Были обесточены жилые дома, больницы и вся инфраструктура в целом. Сбой парализовал аэропорты двух стран, в том числе международные. Из метро пришлось эвакуировать людей. Мобильная связь работала плохо, у телефонных автоматов на улицах выстраивались гигантские очереди. В отдельных местах были перебои с водоснабжением. Температура в Нью-Йорке в этот день достигла 33 °C, однако кондиционеры не работали. 

Результат аварии — как минимум 100 смертей и $6 миллиардов ущерба.

Причин блэкаута было несколько. В том числе нашли ошибку в ПО системы мониторинга работы оборудования General Electric Energy. Из-за нее о сбое не были извещены другие центры управления, а также произошло каскадное отключение 100 электростанций.  

Мертвые души 

Необычный случай произошел в 2003 году в больнице в американском Гранд-Рапидс, штат Мичиган. Баг в базе данных пациентов одномоментно «убил» 8500 человек. Все эти люди были живы, но выяснилось это только после расследования страховых компаний.

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

Сбой произошел после обновления ПО для мониторинга пациентов: вместо кода «01», что означало «выбыл» (т. е. выздоровел, выписан), многим был присвоен код «20» — «умер».

Мор в World of Warcraft

13 сентября 2005 года разработчики World of Warcraft, сами того не подозревая (во всяком случае, по официальной версии), запустили в виртуальной вселенной пандемию. В новом патче для игры было спроектировано подземелье Зул’Гуруб с драконом Хаккар. Демонический персонаж мог накладывать на своих противников заклятие «Порченой крови», которое забирало у них определенное количество очков жизненной энергии. Сражение могли спокойно перенести прокаченные игроки, новички с небольшим уровнем силы погибали. 

Самое интересное заключалось в том, что заражение от заклятия передавалось всем персонажам поблизости. Виртуальный вирус подхватывали в том числе питомцы. Предполагалось, что болезнь в игре не выйдет за пределы подземелья, т. к. вирус перестает «работать» после смерти персонажа. 

Баг состоял в том, что разработчики не добавили функцию излечения тех самых животных-помощников (в игре это вспомогательные персонажи, они появляются после вызова игроком). И питомцы, вызываемые персонажами за пределами пещеры с драконом, продолжали распространять заразу. 

Виртуальные города быстро становились чумными. В World of Warcraft начался настоящий мор: виртуальные персонажи умирали сотнями. Издатели предлагали решение — зараженные должны были переждать болезнь в карантине. Однако, некоторые, подхватив вирус, специально шли в места скопления персонажей, чтобы инфицировать как можно больше участников. 

С чумой справились через несколько недель, выпустив новый патч. Инцидент заинтересовал научное сообщество. Игровое поведения могло служить моделью происходящего в реальном мире. Виртуальную пандемию в последующем неоднократно сравнивали с ситуацией с птичьим гриппом и COVID-19.

Неслучившийся Армагеддон

И в завершение — о случае, который мог бы стать началом Третьей мировой войны и вызвать масштабные разрушения и жертвы.  

В сентябре 1983 советский спутник системы «Око» сообщил о запуске с территории США в сторону советских границ пяти баллистических ракет. В это время холодная война между двумя странами находилась в стадии обострения. В Советском союзе действовало правило: о замеченных системой «Око» опасных объектах нужно было докладывать руководству страны, там в случае атаки принимали бы решение об ответном ударе. 

Незадолго до этого СССР сбили пассажирский южнокорейский Boeing-747 — по невыясненным причинам самолет сильно отклонился от курса и вместо того, чтобы лететь над нейтральными водами Тихого океана, вошел в закрытое воздушное пространство СССР. 

На этот раз система сообщала о запуске ракет с американской межконтинентальной базы. Дежуривший на смене подполковник Станислав Петров проанализировал ситуацию и понял, что видимое на экране не может быть атакой со стороны США. Во-первых, следов от ракет было всего четыре — в случае нападения Штаты применили бы куда больший арсенал. К тому же наблюдающие за космическим и воздушным пространством военные не зафиксировали объектов, летящих к границам СССР. Подполковник доложил своему руководству о ложном срабатывании системы. 

Как выяснилось, при определенном взаимном положении спутника и Солнца свет отражается от облаков и оставляет инфракрасное излучение, которое компьютеры принимают за следы от ракет. До этого инцидента «Око» проработало меньше года, о таком возможном поведении системы не знали. 

Огласку случай получил только в 1991 году, когда с информации был снят гриф секретности. В 2006 году в штаб-квартире ООН в Нью-Йорке Станиславу Петрову вручили награду «Ассоциации граждан мира». На хрустальной статуэтке «Рука, держащая земной шар» было выгравировано: «Человеку, который предотвратил ядерную войну».

Источники

The Worst Computer Bugs in History: Race conditions in Therac-25/bugsnag.com

The Most Expensive Software Bugs In History/u-tor.com

History’s Worst Software Bugs/wired.com

Epic failures: 11 infamous software bugs/computerworld.com

List of software bugs/en.wikipedia.org

10 самых дорогих ошибок в разработке ПО
10 самых дорогих ошибок в разработке ПО 
По теме
10 самых дорогих ошибок в разработке ПО

Хотите сообщить важную новость?

Пишите в наш Телеграм

Читайте также

Смартфоны в России запретят продавать без российского ПО
Смартфоны в России запретят продавать без российского ПО
Смартфоны в России запретят продавать без российского ПО
3 комментария
Uber получил ещё $1 млрд
Uber получил ещё $1 млрд
Uber получил ещё $1 млрд
Toyota вложила $500 млн в Uber для совместной работы над автопилотом
Toyota вложила $500 млн в Uber для совместной работы над автопилотом
Toyota вложила $500 млн в Uber для совместной работы над автопилотом
Такси-сервис Grab получил $1 млрд от Toyota
Такси-сервис Grab получил $1 млрд от Toyota
Такси-сервис Grab получил $1 млрд от Toyota

Обсуждение

Комментариев пока нет.
Спасибо! 

Получать рассылки dev.by про белорусское ИТ

Что-то пошло не так. Попробуйте позже