В прошлом месяце Тойота объявила об
отзыве 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
получили передозировку с последующими
огромными проблемами со здоровьем. Врачи,
которые вручную должны были перепроверять
результаты расчетов обвинены в убийстве...
Источник: http://wired.com/