В прошлом месяце Тойота объявила об отзыве 160.000 гибридных автомобилей Prius из-за необъяснимого включения света и остановки бензиновых двигателей. Но в отличии от множества отзывов последних лет проблема Prius-а заключалась вовсе не в железе — это была программная ошибка в программном обеспечении автомобиля. Prius имел программный баг...
С этим отзывом Prius вошел в элитный клуб бажных компьютеров — в клуб, который открыл свои двери шестьдесят лет назад, в 1945 году, когда инженеры нашли моль, перемкнувшую реле в компьютере Harvard Mark II. Моль была выловлена, а системный журнал получил новую запись: «первый реальный случай обнаружения бага».
Несмотря на прошедшие шестьдесят лет компьютерные баги по прежнем с нами и, собственно, совсем не торопятся вымирать. Более того, ошибки в программном обеспечении все больше влияют и на наши реальные жизни. Сейчас уже они населяют не только наши операционные системы и программы — сегодня они в наших сотовых телефонах и микроволнововках, в наших атомных станциях и медицинском оборудовании. Ну и автомобилях конечно...
Но какие самые страшные?
Легко перечислить баги, принесшие хаос в нашу жизнь. Труднее определить их важность. Что важнее — уязвимость, используя которую черви могут убить интернет за пару дней или забытый символ в телефонной программе который может привести к многодневному простою национальной телефонной сети? Ответ зависит прежде всего от вас, от того что надо было сделать — отправить почту или позвонить бабушке.
Многие думают что самые трагичные ошибки те, которые стоили жизни людям. Безусловно таких не много, но те, что существуют, лишь в очередной раз предупреждают нас о недопустимости бездумного развертывания программного обеспечения в критических приложениях. Эксперты, изучающие такие системы, тем не менее говорят — да, баги могут убивать людей, но видеть только это опасно, не внедрение программ в областях, где они критически необходимы, может убить гораздо больше людей.
Так что так или иначе, но баги наши останутся при нас. Мы приводим, в хронологическом порядке, список 10 худших программных ошибок в истории человечества.
28 Июля 1962 года
Ошибка в программном обеспечении ракеты Mariner 1 привела к отклонению от курса и дистанционному подрыву всей системы над Атлантическим океаном. Расследование показало, что формула, записанная на бумаге, была неправильно переведена в машинные коды, что привело к неправильному вычислению компьютером траектории ракеты.
1982
Подрыв советского трубопровода. Скорее всего оперативники ЦРУ намеренно разместили баг в канадской компьютерной системе, украденной СССР для контроля работы транссибирского газопровода. Эта программа была лишь частью кампании Союза по покупке или краже важнейших технологий США. Управление узнало об этой программе и решила нанести ответный удар — оборудование благополучно прошло советские тесты и затем, уже в процессе работы, разрушилось, нанеся огромный урон. Результат — самый крупный в истории человечества неядерный взрыв.
1985-1987
Медицинская система облучения Therac-25. Из-за летальных доз радиации погибло несколько человек. Therac-25 стала усовершенствованной системой, способной работать сразу с двумя видами облучения — маломощным электронным излучением (бета частицы) и рентгеновскими лучами. Вторым улучшением, по сравнению с Therac-20, стала программная защита, вместо старой, электромеханической. Тогда казалось, что программа более надежна… Однако операционная система аппарата оказалась написана неквалифицированным программистом, что могло привести к облучению пациентов мощными бета-лучами без размещения защиты над ним. Как минимум 5 пациентов умерли, многие были серьезно ранены.
1988
Переполнение буфера в операционной системе Unix. Первый интернет червь (Morris Worm) заразил от 2 до 6 тысяч компьютеров менее чем за день. Функция gets() не проверяла размерность передаваемой строки и слишком длинный ввод позволял вызвать переполнение буфера со всей последующей радостью… Программисты ограничили функцию ввода строки, но отказались убирать ее из стандартной библиотеки ввода/вывода языка С, где она и существует по нынешний день.
1988-1996
Генератор случайных чисел в Kerberos. Неправильная реализация генератора привела к тому, что в течении 8 лет системы с аутентификацией Kerberos были практически беззащитны. Был ли баг использован для реальных взломов до сих пор неизвестно.
15 Января 1990 года
Глобальный сбой в сети AT&T.; Баг в новом программном обеспечении телефонных свичей, работающих на междугородней связи, заключался в том, что они просто падали при получении определенного сигнала от одной из ближайших машин. И все бы ничего, но сигнал этот свич высылал тогда, когда поднимался от предыдущего падения… В один из дней Нью-Йоркский свич завис, перегрузился и разослал всем этот самый сигнал. Дальше последовала цепная реакция, в ходе которой 114 телефонных свичей перегружались каждые 6 секунд, оставив 60 тысяч человек без дальней связи на протяжении 9 часов. Инженеры загрузили предыдущую версию программного обеспечения и только тогда работа восстановилась.
1993
Ошибка в Pentium. Известный баг, когда процессоры Intel неправильно выполняли деление числе с плавающей точкой. Например, деление 4195835.0 на 3145727.0 давало 1.33374, вместо 1.33382, ошибку в 0.006 процента. После возникшего общественного возмущения Intel была вынуждена заменить процессоры всем желающим. Ошибка стоила компании около 475 миллионов долларов.
1995-1996
Знаменитый Ping of Death. Как ни странно, когда-то злобные хакеры валили хосты именно с помощью пинга. Дело в том, что некоторые операционки были уязвимы для атак типа Ping of death. Их смысл прост: машинке с дырявой операционкой посылался пинг длиной больше стандартных 65535 байтов. Системы, вроде Solaris 2.4, Minix, MacOS 7, Windows 3.11 и 95, от этого пучило, они падали, перезагружались и висли. В 1996 году POD помог славно повеселиться многим товарищам.
4 Июня 1996.
Падение Ariane 5. Программный код Ariane 5 был перенесен с Ariane 4, однако новые двигатели ракеты вызвали ошибку в арифметической операции полетного компьютера — когда 64-битное число с плавающей точкой конвертировалось в 16-битное целое. Более мощные двигатели вызвали переполнение — оба компьютера зависли и ракета самоуничтожилась после 40 секунд полета.
Ноябрь 2000
Национальный институт рака в Панаме. Программа по расчету доз облучения, созданная в США, неправильно рассчитала дозы радиации для пациентов. Софт позволял рассчитывать дозы с учетом четырех металлических щитов, защищающих здоровую ткань, однако доктора хотели использовать пять. Техники обнаружили, что они могут обмануть программу заменив все щиты одним, с отверстием посередине. Что они не учли, так это то, что программа учитывает как нарисована дырка: в одном направлении — и ответ будет правильным, в другом — и доза будет удвоена. Восемь пациентов умерли, 20 получили передозировку с последующими огромными проблемами со здоровьем. Врачи, которые вручную должны были перепроверять результаты расчетов обвинены в убийстве...
4 комментария