5 худших багов в истории


5 худших багов в истории

Самая первый компьютерный баг в истории был обнаружен в 1945 г., когда инженеры нашли в корпусе компьютера Harvard Mark II мотылька. Этот мотылек закорачивал контакты — и компьютер сбоил. Инженеры сделали запись в журнале событий «Первый случай обнаружения бага» (по-английски «bug» означает «насекомое»). С тех пор компьютерные сбои принято называть багами.

По мере распространения цифровых устройств баги все глубже проникают в нашу жизнь. Они окружают нас повсюду — на мобильных телефонах, в бытовой технике, в автомобилях. К счастью, обычно баги не приносят никакого вреда, кроме морального. Но бывает и по-другому, когда баг вызывает огромные финансовые потери и даже забирает человеческие жизни. Журнал Wired посвятил этой проблеме целую тему номера и опубликовал список 10 худших багов в истории человечества, в хронологическом порядке.

28 июля 1962 г. Космический аппарат Mariner I стартовал по направлению к Венере. Из-за поломки антенны корабль потерял связь с земными службами управлениями и перешел на собственную систему пилотирования. Но эта система содержала обидный маленький баг. В результате аппарат полетел совсем не в ту сторону и его пришлось подорвать над Атлантическим океаном. Последующее расследование установило, что в процессе программирования системы навигации была совершена маленькая опечатка — при вводе одной из формул был пропущен один символ.

1982 г. Авария на Транссибирском трубопроводе. Оперативники ЦРУ внедрили баг (отчет в формате PDF) в канадское программное обеспечение, управлявшее газовыми трубопроводами. Советская разведка получила это ПО как объект промышленного шпионажа и внедрила на Транссибирском трубопроводе. Результатом стал самый большой неядерный взрыв в истории человечества.

1985-87 гг. Несколько человек получили смертельную дозу облучения во время сеансов радиационной терапии с медицинским ускорителем Therac-25. Основанная на предыдущей версии ускорителя, «улучшенная» модель Therac-25 могла генерировать два вида излучения: слабое электронное бета-излучение и нормальное рентгеновское излучение. Еще одно «улучшение» состояло в том, что вместо электромеханической защиты пациента в устройстве была реализована программная защита, якобы более надежная. Обе новые функции были некорректно реализованы неопытным программистом, результатом чего стали как минимум пять смертей и огромное количество несмертельных случаев переоблучения.

1988 г. Переполнение буфера в Berkeley Unix. Первый в мире компьютерный червь (так называемый червь Морриса) заразил от 2. 000 до 6. 000 компьютеров менее чем за сутки, эксплуатируя уязвимость в реализации функции gets(). В ОС Berkeley Unix эта функция ввода/вывода не имела ограничения на максимальную длину.

1988-96 гг. Генератор случайных чисел Kerberos в течение нескольких лет широко использовался в различных системах шифрования. Предполагалось, что программа должна выбирать ключ случайным образом из многих миллиардов чисел, но генератор случайных чисел выбирал из гораздо меньшего набора численностью примерно в миллион. Как результат, в течение восьми лет любой пользователь мог без труда проникнуть в компьютерную систему, которая использовала модуль Kerberos.

15 января 1990 г. Падение телефонной сети AT&T. Ошибка в новой версии прошивки междугородних коммутаторов привела к тому, что коммутатор перезагружался, если получал специфический сигнал от соседнего коммутатора. Но беда в том, что этот сигнал генерировался в тот момент, когда коммутатор восстанавливал свою работу после сбоя. В один прекрасный день, когда какой-то коммутатор в Нью-Йорке перезагрузился, он подал тот самый злополучный сигнал — и началось. Вскоре 114 соседних коммутаторов непрерывно перезагружались каждые 6 секунд, а 60 тыс. человек остались без междугородней связи на 9 часов, пока инженеры не установили на коммутаторы предыдущую версию прошивки.

1993 г. Широко разрекламированный процессор Intel Pentium неправильно производил деление с плавающей запятой, ошибаясь на 0, 006%. Хотя эта проблема реально коснулась немногих пользователей, но стала настоящим кошмаром для имиджа Intel. Поначалу фирма согласилась менять процессор только для тех пользователей, которые могли доказать, что им в вычислениях нужна подобная точность, но затем согласилась поменять процессор всем желающим. Этот баг стоил Intel около $475 млн.

1995-96 гг. Пинг смерти. Отсутствие проверки на ошибки при обработке IP-пакетов позволяла порушить практически любую операционную систему, отправив ей через интернет специальный пакет («пинг»).

4 июня 1996 г. Новая ракета-носитель Ariane 5, результат многолетней работы европейских ученых, гордость стран Евросоюза, взорвалась через 40 секунд после своего первого старта. Только научное оборудование на борту ракеты стоило около $500 млн, не говоря о множестве побочных финансовых последствий. Система автоподрыва ракеты сработала после остановки обоих процессоров в результате цепочки ошибок. Началом этой цепочки послужило переполнение буфера, поскольку система навигации подала недопустимо большое значение параметра горизонтальной скорости. Дело в том, что система управления Ariane 5 переделывалась из Ariane 4, а там такого большого значения не могло быть теоретически. В целях снижения нагрузки на рабочий компьютер инженеры сняли защиту от ошибок переполнения буфера в этом программном модуле, поскольку были уверены, что такого значения горизонтальной скорости не может быть в принципе — и просчитались.

Ноябрь 2000 г. Национальный институт рака, Панама. Здесь произошла целая серия инцидентов, вызванная тем, что ПО для планирования радиационной терапии производства американской компании Multidata Systems International неправильно рассчитывало дозы облучения для пациентов. Программа позволяла врачу нарисовать на компьютерном экране расположение защитных металлических щитов, которые защищают тело от радиации. Но программа позволяла манипулировать только четырьмя щитами, тогда как врачи хотели задействовать пять. Они нашли способ «обхитрить» программу, если нарисовать все пять щитов в виде единого блока с дыркой посередине. Единственное, чего они не знали, что программа рассчитывает разные дозы радиации в зависимости от того, как нарисована дырка. Если рисовать ее особым образом, то устройство выдавало двойную дозу радиации. Как минимум восемь человек погибли, а еще 20 получили переоблучение. Врачи, которые должны были вручную перепроверять расчеты программы, были осуждены за убийство.

10 худших багов в истории человечества

Если баги в программном обеспечении приводят к зависанию компьютера, то это ерунда. Гораздо хуже, если из-за ошибок в ПО ломаются автомобили, взрываются ракеты и погибают люди. Вот несколько историй о самых-самых-самых плохих компьютерных ошибках в истории – по мнению автора.

Самый первый компьютерный баг в истории был обнаружен в 1945 г., когда инженеры нашли в корпусе компьютера Harvard Mark II мотылька. Этот мотылек закорачивал контакты — и компьютер сбоил. Инженеры сделали запись в журнале событий «Первый случай обнаружения бага» (по-английски «bug» означает «насекомое»). С тех пор компьютерные сбои принято называть багами.

По мере распространения цифровых устройств баги все глубже проникают в нашу жизнь. Они окружают нас повсюду — на мобильных телефонах, в бытовой технике, в автомобилях. К счастью, обычно баги не приносят никакого вреда, кроме морального. Но бывает и по-другому, когда баг вызывает огромные финансовые потери и даже забирает человеческие жизни. Журнал Wired посвятил этой проблеме целую тему номера и опубликовал список 10 худших багов в истории человечества, в хронологическом порядке.

28 июля 1962 г. Космический аппарат Mariner I стартовал по направлению к Венере. Из-за поломки антенны корабль потерял связь с земными службами управлениями и перешел на собственную систему пилотирования. Но эта система содержала обидный маленький баг. В результате аппарат полетел совсем не в ту сторону и его пришлось подорвать над Атлантическим океаном. Последующее расследование установило, что в процессе программирования системы навигации была совершена маленькая опечатка — при вводе одной из формул был пропущен один символ.

1982 г. Авария на Транссибирском трубопроводе. Оперативники ЦРУ внедрили баг (отчет в формате PDF) в канадское программное обеспечение, управлявшее газовыми трубопроводами. Советская разведка получила это ПО как объект промышленного шпионажа и внедрила на Транссибирском трубопроводе. Результатом стал самый большой неядерный взрыв в истории человечества.

1985-87 гг. Несколько человек получили смертельную дозу облучения во время сеансов радиационной терапии с медицинским ускорителем Therac-25. Основанная на предыдущей версии ускорителя, «улучшенная» модель Therac-25 могла генерировать два вида излучения: слабое электронное бета-излучение и нормальное рентгеновское излучение. Еще одно «улучшение» состояло в том, что вместо электромеханической защиты пациента в устройстве была реализована программная защита, якобы более надежная. Обе новые функции были некорректно реализованы неопытным программистом, результатом чего стали как минимум пять смертей и огромное количество несмертельных случаев переоблучения.

1988 г. Переполнение буфера в Berkeley Unix. Первый в мире компьютерный червь (так называемый червь Морриса) заразил от 2.000 до 6.000 компьютеров менее чем за сутки, эксплуатируя уязвимость в реализации функции gets(). В ОС Berkeley Unix эта функция ввода/вывода не имела ограничения на максимальную длину.

1988-96 гг. Генератор случайных чисел Kerberos в течение нескольких лет широко использовался в различных системах шифрования. Предполагалось, что программа должна выбирать ключ случайным образом из многих миллиардов чисел, но генератор случайных чисел выбирал из гораздо меньшего набора численностью примерно в миллион. Как результат, в течение восьми лет любой пользователь мог без труда проникнуть в компьютерную систему, которая использовала модуль Kerberos.

15 января 1990 г. Падение телефонной сети AT&T. Ошибка в новой версии прошивки междугородних коммутаторов привела к тому, что коммутатор перезагружался, если получал специфический сигнал от соседнего коммутатора. Но беда в том, что этот сигнал генерировался в тот момент, когда коммутатор восстанавливал свою работу после сбоя. В один прекрасный день, когда какой-то коммутатор в Нью-Йорке перезагрузился, он подал тот самый злополучный сигнал — и началось. Вскоре 114 соседних коммутаторов непрерывно перезагружались каждые 6 секунд, а 60 тыс. человек остались без междугородней связи на 9 часов, пока инженеры не установили на коммутаторы предыдущую версию прошивки.

1993 г. Широко разрекламированный процессор Intel Pentium неправильно производил деление с плавающей запятой, ошибаясь на 0,006%. Хотя эта проблема реально коснулась немногих пользователей, но стала настоящим кошмаром для имиджа Intel. Поначалу фирма согласилась менять процессор только для тех пользователей, которые могли доказать, что им в вычислениях нужна подобная точность, но затем согласилась поменять процессор всем желающим. Этот баг стоил Intel около $475 млн.

1995-96 гг. Пинг смерти. Отсутствие проверки на ошибки при обработке IP-пакетов позволяла порушить практически любую операционную систему, отправив ей через интернет специальный пакет («пинг»).


4 июня 1996 г. Новая ракета-носитель Ariane 5, результат многолетней работы европейских ученых, гордость стран Евросоюза, взорвалась через 40 секунд после своего первого старта. Только научное оборудование на борту ракеты стоило около $500 млн, не говоря о множестве побочных финансовых последствий. Система автоподрыва ракеты сработала после остановки обоих процессоров в результате цепочки ошибок. Началом этой цепочки послужило переполнение буфера, поскольку система навигации подала недопустимо большое значение параметра горизонтальной скорости. Дело в том, что система управления Ariane 5 переделывалась из Ariane 4, а там такого большого значения не могло быть теоретически. В целях снижения нагрузки на рабочий компьютер инженеры сняли защиту от ошибок переполнения буфера в этом программном модуле, поскольку были уверены, что такого значения горизонтальной скорости не может быть в принципе — и просчитались.

Ноябрь 2000 г. Национальный институт рака, Панама. Здесь произошла целая серия инцидентов, вызванная тем, что ПО для планирования радиационной терапии производства американской компании Multidata Systems International неправильно рассчитывало дозы облучения для пациентов. Программа позволяла врачу нарисовать на компьютерном экране расположение защитных металлических щитов, которые защищают тело от радиации. Но программа позволяла манипулировать только четырьмя щитами, тогда как врачи хотели задействовать пять. Они нашли способ «обхитрить» программу, если нарисовать все пять щитов в виде единого блока с дыркой посередине. Единственное, чего они не знали, что программа рассчитывает разные дозы радиации в зависимости от того, как нарисована дырка. Если рисовать ее особым образом, то устройство выдавало двойную дозу радиации. Как минимум восемь человек погибли, а еще 20 получили переоблучение. Врачи, которые должны были вручную перепроверять расчеты программы, были осуждены за убийство.

Все эти примеры, а особенно последний, еще раз показывают, что никогда нельзя в полной мере доверять компьютерам. Ведь программы для компьютеров создают люди, а людям свойственно ошибаться.

10 худших багов в истории человечества

Сменить шрифт на обычный короткая ссылка на новость:
следующая новость | предыдущая новость Если баги в программном обеспечении приводят к зависанию компьютера, то это ерунда. Гораздо хуже, если из-за ошибок в ПО ломаются автомобили, взрываются ракеты и погибают люди.

Самая первый компьютерный баг в истории был обнаружен в 1945 г., когда инженеры нашли в корпусе компьютера Harvard Mark II мотылька. Этот мотылек закорачивал контакты — и компьютер сбоил. Инженеры сделали запись в журнале событий «Первый случай обнаружения бага» (по-английски «bug» означает «насекомое»). С тех пор компьютерные сбои принято называть багами.

По мере распространения цифровых устройств баги все глубже проникают в нашу жизнь. Они окружают нас повсюду — на мобильных телефонах, в бытовой технике, в автомобилях. К счастью, обычно баги не приносят никакого вреда, кроме морального. Но бывает и по-другому, когда баг вызывает огромные финансовые потери и даже забирает человеческие жизни. Журнал Wired посвятил этой проблеме целую тему номера и опубликовал список 10 худших багов в истории человечества, в хронологическом порядке.

28 июля 1962 г. Космический аппарат Mariner I стартовал по направлению к Венере. Из-за поломки антенны корабль потерял связь с земными службами управлениями и перешел на собственную систему пилотирования. Но эта система содержала обидный маленький баг. В результате аппарат полетел совсем не в ту сторону и его пришлось подорвать над Атлантическим океаном. Последующее расследование установило, что в процессе программирования системы навигации была совершена маленькая опечатка — при вводе одной из формул был пропущен один символ.

1982 г. Авария на Транссибирском трубопроводе. Оперативники ЦРУ внедрили баг (отчет в формате PDF) в канадское программное обеспечение, управлявшее газовыми трубопроводами. Советская разведка получила это ПО как объект промышленного шпионажа и внедрила на Транссибирском трубопроводе. Результатом стал самый большой неядерный взрыв в истории человечества.

1985–87 гг. Несколько человек получили смертельную дозу облучения во время сеансов радиационной терапии с медицинским ускорителем Therac-25. Основанная на предыдущей версии ускорителя, «улучшенная» модель Therac-25 могла генерировать два вида излучения: слабое электронное бета-излучение и нормальное рентгеновское излучение. Еще одно «улучшение» состояло в том, что вместо электромеханической защиты пациента в устройстве была реализована программная защита, якобы более надежная. Обе новые функции были некорректно реализованы неопытным программистом, результатом чего стали как минимум пять смертей и огромное количество несмертельных случаев переоблучения.

Мастер Йода рекомендует:  Как обойтись без использования SSI

1988 г. Переполнение буфера в Berkeley Unix. Первый в мире компьютерный червь (так называемый червь Морриса) заразил от 2.000 до 6.000 компьютеров менее чем за сутки, эксплуатируя уязвимость в реализации функции gets(). В ОС Berkeley Unix эта функция ввода/вывода не имела ограничения на максимальную длину.

1988–96 гг. Генератор случайных чисел Kerberos в течение нескольких лет широко использовался в различных системах шифрования. Предполагалось, что программа должна выбирать ключ случайным образом из многих миллиардов чисел, но генератор случайных чисел выбирал из гораздо меньшего набора численностью примерно в миллион. Как результат, в течение восьми лет любой пользователь мог без труда проникнуть в компьютерную систему, которая использовала модуль Kerberos.

15 января 1990 г. Падение телефонной сети AT&T. Ошибка в новой версии прошивки междугородних коммутаторов привела к тому, что коммутатор перезагружался, если получал специфический сигнал от соседнего коммутатора. Но беда в том, что этот сигнал генерировался в тот момент, когда коммутатор восстанавливал свою работу после сбоя. В один прекрасный день, когда какой-то коммутатор в Нью-Йорке перезагрузился, он подал тот самый злополучный сигнал — и началось. Вскоре 114 соседних коммутаторов непрерывно перезагружались каждые 6 секунд, а 60 тыс. человек остались без междугородней связи на 9 часов, пока инженеры не установили на коммутаторы предыдущую версию прошивки.

1993 г. Широко разрекламированный процессор Intel Pentium неправильно производил деление с плавающей запятой, ошибаясь на 0,006%. Хотя эта проблема реально коснулась немногих пользователей, но стала настоящим кошмаром для имиджа Intel. Поначалу фирма согласилась менять процессор только для тех пользователей, которые могли доказать, что им в вычислениях нужна подобная точность, но затем согласилась поменять процессор всем желающим. Этот баг стоил Intel около $475 млн.

1995–96 гг. Пинг смерти. Отсутствие проверки на ошибки при обработке IP-пакетов позволяла порушить практически любую операционную систему, отправив ей через интернет специальный пакет («пинг»).

4 июня 1996 г. Новая ракета-носитель Ariane 5, результат многолетней работы европейских ученых, гордость стран Евросоюза, взорвалась через 40 секунд после своего первого старта. Только научное оборудование на борту ракеты стоило около $500 млн, не говоря о множестве побочных финансовых последствий. Система автоподрыва ракеты сработала после остановки обоих процессоров в результате цепочки ошибок. Началом этой цепочки послужило переполнение буфера, поскольку система навигации подала недопустимо большое значение параметра горизонтальной скорости. Дело в том, что система управления Ariane 5 переделывалась из Ariane 4, а там такого большого значения не могло быть теоретически. В целях снижения нагрузки на рабочий компьютер инженеры сняли защиту от ошибок переполнения буфера в этом программном модуле, поскольку были уверены, что такого значения горизонтальной скорости не может быть в принципе — и просчитались.

Ноябрь 2000 г. Национальный институт рака, Панама. Здесь произошла целая серия инцидентов, вызванная тем, что ПО для планирования радиационной терапии производства американской компании Multidata Systems International неправильно рассчитывало дозы облучения для пациентов. Программа позволяла врачу нарисовать на компьютерном экране расположение защитных металлических щитов, которые защищают тело от радиации. Но программа позволяла манипулировать только четырьмя щитами, тогда как врачи хотели задействовать пять. Они нашли способ «обхитрить» программу, если нарисовать все пять щитов в виде единого блока с дыркой посередине. Единственное, чего они не знали, что программа рассчитывает разные дозы радиации в зависимости от того, как нарисована дырка. Если рисовать ее особым образом, то устройство выдавало двойную дозу радиации. Как минимум восемь человек погибли, а еще 20 получили переоблучение. Врачи, которые должны были вручную перепроверять расчеты программы, были осуждены за убийство.

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

Ещё совсем свежа память об уязвимости Heartbleed в Open SSL, поставившей под удар сотни тысяч приложений по всему миру. Пока дотошные багоискатели продолжают исследовать код Open SSL в поисках новой ошибки, способной с не меньшей силой заставить сердца специалистов по безопасности ныть от тревожного предчувствия, мы решили оглянуться назад и вспомнить самые дорогостоящие и ужасные по последствиям технологические катастрофы, случившиеся из-за ошибок разработчиков программного обеспечения. От потерянных в глубинах космоса спутников, стоимостью в годичный ВВП небольшого островного государства, до печально известного червя Морриса, мутировавшего из безобидного эксперимента в напасть года, что, кстати, не помешало его автору стать уважаемым человеком – профессором MIT и сооснователем Y Combinator.

Momento bagus, software engineer!

В 1998 году агентство NASA потеряло в космосе спутник «Mars Climate Orbiter». Эта катастрофа озадачила инженеров – удивительно, как такое могло поизойти. В результате оказалось, что субподрядчик, который работал над многими инженерными задачами, не выполнил простейшего преобразования английских единиц измерения в метрическую систему. Из-за фатальной ошибки аппарат стоимостью 125 миллионов долларов оказался слишком близко к поверхности Марса. Диспетчеры пришли к выводу, что спутник на большой скорости вошел в марсианскую атмосферу, где из-за возникших перегрузок его системы связи вышли из строя. Неуправляемый Mars Climate Orbiter попал на околосолнечную орбиту, миссия была провалена.

На новейшей французской беспилотной ракете-носителе «Ariane 5» решили использовать то же программное обеспечение, которое было разработано для более ранней модели – Ariane 4. К сожалению, более мощный двигатель Ariane 5 спровоцировал баг, не встречавшийся в предыдущих версиях ПО. Через тридцать шесть секунд после первого запуска ракеты пришлось активировать систему самоуничтожения, так как возникла целая череда программных ошибок. В сущности, программа попыталась записать 64-разрядное число в 16-разрядное пространство. Возникло переполнение, в результате которого отказал и основной, и резервный компьютер (поскольку на обоих компьютерах выполнялись одни и те же программы). На разработку Ariane 5 было потрачено около 8 миллиардов долларов. Общая стоимость спутников, которые должна была вывести на орбиту эта ракета, составляла 500 миллионов долларов. В следующем ролике мы видим ошеломленного инженера, наблюдающего взрыв ракеты. Затем специалист записывает на бумажке какое-то короткое слово – F…A…I…L , вероятно .

В 2004 году компания EDS разработала сложную компьютерную систему по выплате пособий для британского агентства помощи детям (CSA). В то же время Министерство труда и пенсионного обеспечения (DWP) приняло решение реорганизовать это агентство. Две программные системы оказались полностью несовместимы, в результате были спровоцированы необратимые ошибки. Система переплатила 1,9 миллионам человек и недоплатила семистам тысячам. В итоге накопилось 7 миллиардов долларов, не попавших на социальные счета, 239 000 нерассмотренных дел, 36 000 новых дел, «застрявших» в системе. Все эти ошибки обошлись британским налогоплательщикам в сумму более 1 миллиарда долларов.

Советская газотранспортная система была настолько сложной, что управлять ею можно было лишь с помощью продвинутого автоматизированного ПО. Которого в стране, конечно, не было. В ЦРУ узнали, что советские агенты собираются украсть планы подобной системы, и вышли на контакт с канадской компанией, разрабатывавшей ПО такого рода. Сотрудникам компании было поручено специально внести в код определённые ошибки, чтобы СССР получил дефектную программу. В июне 1982 года на участке газопровода произошел мощный взрыв, который, по некоторым данным, был крупнейшим неядерным взрывом в истории планеты.


Незадолго до открытия пятого терминала в аэропорту Хитроу персонал тестировал новейшую систему для транспортировки больших объемов багажа, поступающего в аэропорт ежедневно. Перед открытием терминала она была тщательно протестирована на 12 000 пробных «единицах» багажа. Все испытания прошли безупречно, но в день открытия терминала оказалась, что система неработоспособна. Вероятно, причиной тому стали непредусмотренные практические ситуации. Например, пассажир мог забыть в сумке какой-то важный предмет, и багаж вручную забирали из транспортной системы. Весь процесс обработки нарушался, и система отказывала. В течение следующих десяти дней около 42 000 мест багажа не были доставлены владельцам, из-за этого пришлось отменить более 500 рейсов.

В 1962 году космический корабль «Mariner 1» должен был отправиться к Венере. Однако едва ракета успела оторваться от космодрома на мысе Канаверал, как угрожающе отклонилась от курса. Возникла угроза падения на землю. Инженеры NASA, управлявшие полетом с Земли, активировали систему самоуничтожения ракеты. Позже ревизионная комиссия пришла к выводу: авария возникла из-за того, что в программных инструкциях был пропущен дефис. В результате корабль получал неверные управляющие сигналы. Стоимость ракеты составляла 18 миллионов долларов без учёта инфляции.

Червь Морриса – под таким названием стала известна программа, разработанная в 1988 году аспирантом Корнеллского университета Робертом Тэппеном Моррисом. Автор утверждал, что задумал его как «безобидный эксперимент», но из-за ошибки в коде она вышла из-под контроля и начала стремительно распространяться, выводя из строя тысячи компьютеров. Общая стоимость устранения ущерба составила около 100 миллионов долларов. Роберта Морриса обвинили в компьютерном преступлении и оштрафовали на 10 000 долларов. На суде адвокат заявил, что созданная подзащитным программа помогла усовершенствовать компьютерную безопасность. Стоит отметить, что Моррис был сооснователем инкубатора стартапов Y Combinator, а в настоящее время является адъюнкт-профессором Массачусетского технологического института. Дискета с исходным кодом червя Морриса хранится в Бостонском университете.

В феврале 1991 года американский комплекс противоракетной обороны «Patriot», установленный в Саудовской Аравии, пропустил ракетный удар по армейским казармам. Правительственная комиссия обнаружила, что это произошло из-за программного сбоя, который привел к «неточности в процедуре отслеживания, усугубившейся в ходе долговременной эксплуатации системы». К моменту катастрофической ошибки комплекс «Patriot» беспрерывно проработал в течение более 100 часов. Накопилась достаточно серьезная погрешность, в результате которой комплекс ПВО неправильно вычислил курс атакующей ракеты. В результате прямого попадания погибли 28 американских солдат. Ещё до инцидента американские инженеры успели исправить в программе баг, из-за которого в работе «Patriot» возникали неточности. Исправленная версия ПО была доставлена на пострадавшую военную базу на следующий день после атаки.

В 1994 году профессор математики обнаружил баг в популярном процессоре Intel от Pentium и опубликовал об этом статью. Компания Intel в ответ на это замечание заявила, что готова заменять процессоры по требованию пользователей, которые смогли бы доказать, что пострадали в результате этой ошибки. По расчетам Intel, вероятность её возникновения была столь низкой, что подавляющее большинство пользователей даже не заметили бы её. Возмущённые клиенты потребовали заменить процессоры всем желающим, и Intel пришлось на это пойти. Финансовые потери Intel в результате составили около 475 миллионов долларов.

Компания Knight, один из ключевых игроков американского фондового рынка, едва не обанкротилась в результате одной программной ошибки. Из-за возникшего бага компания всего за полчаса потеряла около 440 миллионов долларов. В течение 2 дней, когда неисправное ПО наводнило рынок незапланированными сделками, котировки акций компании упали на 75 процентов. Предполагается, что содержавший ошибку биржевой алгоритм Knight стал совершать незапланированные сделки примерно на 150 торговых площадках, просто парализовав их.

Список был бы неполным без упоминания о спутнике NOAA-19 – ещё одной аварии, которая, правда, не связана с программными ошибками. 6 сентября 2003 года в ходе сборки на заводе Lockheed Martin Space Systems был сильно поврежден спутник. Аппарат рухнул на пол, когда техники устанавливали его в горизонтальное положение. Расследование этого происшествия показало, что случившееся было вызвано плохой производственной дисциплиной. Как оказалось, из тележки, которую использовали в этой процедуре, ранее техник извлёк 24 болта, закреплявших переходную платформу, но не задокументировал этого. Рабочие, которые воспользовались этой тележкой при изменении положения спутника, не проверили болты, хотя обязаны были это сделать. Стоимость ремонта спутника составила 135 миллионов долларов.

Десятка самых страшных багов за всю историю человечества

Если баги в программном обеспечении приводят к зависанию компьютера, то это ерунда. Гораздо хуже, если из-за ошибок в ПО ломаются автомобили, взрываются ракеты и погибают люди.

Самая первый компьютерный баг в истории был обнаружен в 1945 г., когда инженеры нашли в корпусе компьютера Harvard Mark II мотылька. Этот мотылек закорачивал контакты — и компьютер сбоил. Инженеры сделали запись в журнале событий «Первый случай обнаружения бага» (по-английски «bug» означает «насекомое»). С тех пор компьютерные сбои принято называть багами.

По мере распространения цифровых устройств баги все глубже проникают в нашу жизнь. Они окружают нас повсюду — на мобильных телефонах, в бытовой технике, в автомобилях. К счастью, обычно баги не приносят никакого вреда, кроме морального. Но бывает и по-другому, когда баг вызывает огромные финансовые потери и даже забирает человеческие жизни. Журнал Wired посвятил этой проблеме целую тему номера и опубликовал список 10 худших багов в истории человечества, в хронологическом порядке.

28 июля 1962 г. Космический аппарат Mariner I стартовал по направлению к Венере. Из-за поломки антенны корабль потерял связь с земными службами управлениями и перешел на собственную систему пилотирования. Но эта система содержала обидный маленький баг. В результате аппарат полетел совсем не в ту сторону и его пришлось подорвать над Атлантическим океаном. Последующее расследование установило, что в процессе программирования системы навигации была совершена маленькая опечатка — при вводе одной из формул был пропущен один символ.

1982 г. Авария на Транссибирском трубопроводе. Оперативники ЦРУ внедрили баг ( отчет в формате PDF ) в канадское программное обеспечение, управлявшее газовыми трубопроводами. Советская разведка получила это ПО как объект промышленного шпионажа и внедрила на Транссибирском трубопроводе. Результатом стал самый большой неядерный взрыв в истории человечества.

1985–87 гг. Несколько человек получили смертельную дозу облучения во время сеансов радиационной терапии с медицинским ускорителем Therac-25 . Основанная на предыдущей версии ускорителя, «улучшенная» модель Therac-25 могла генерировать два вида излучения: слабое электронное бета-излучение и нормальное рентгеновское излучение. Еще одно «улучшение» состояло в том, что вместо электромеханической защиты пациента в устройстве была реализована программная защита, якобы более надежная. Обе новые функции были некорректно реализованы неопытным программистом, результатом чего стали как минимум пять смертей и огромное количество несмертельных случаев переоблучения.

1988 г. Переполнение буфера в Berkeley Unix. Первый в мире компьютерный червь (так называемый червь Морриса) заразил от 2.000 до 6.000 компьютеров менее чем за сутки, эксплуатируя уязвимость в реализации функции gets(). В ОС Berkeley Unix эта функция ввода/вывода не имела ограничения на максимальную длину.

1988–96 гг. Генератор случайных чисел Kerberos в течение нескольких лет широко использовался в различных системах шифрования. Предполагалось, что программа должна выбирать ключ случайным образом из многих миллиардов чисел, но генератор случайных чисел выбирал из гораздо меньшего набора численностью примерно в миллион. Как результат , в течение восьми лет любой пользователь мог без труда проникнуть в компьютерную систему, которая использовала модуль Kerberos.

15 января 1990 г. Падение телефонной сети AT&T. Ошибка в новой версии прошивки междугородних коммутаторов привела к тому, что коммутатор перезагружался, если получал специфический сигнал от соседнего коммутатора. Но беда в том, что этот сигнал генерировался в тот момент, когда коммутатор восстанавливал свою работу после сбоя. В один прекрасный день, когда какой-то коммутатор в Нью-Йорке перезагрузился, он подал тот самый злополучный сигнал — и началось. Вскоре 114 соседних коммутаторов непрерывно перезагружались каждые 6 секунд, а 60 тыс. человек остались без междугородней связи на 9 часов, пока инженеры не установили на коммутаторы предыдущую версию прошивки.

Мастер Йода рекомендует:  5 ключевых вопросов для Javascript-разработчика

1993 г. Широко разрекламированный процессор Intel Pentium неправильно производил деление с плавающей запятой, ошибаясь на 0,006%. Хотя эта проблема реально коснулась немногих пользователей, но стала настоящим кошмаром для имиджа Intel. Поначалу фирма согласилась менять процессор только для тех пользователей, которые могли доказать, что им в вычислениях нужна подобная точность, но затем согласилась поменять процессор всем желающим. Этот баг стоил Intel около $475 млн.

1995–96 гг. Пинг смерти . Отсутствие проверки на ошибки при обработке IP-пакетов позволяла порушить практически любую операционную систему, отправив ей через интернет специальный пакет («пинг»).

4 июня 1996 г. Новая ракета-носитель Ariane 5, результат многолетней работы европейских ученых, гордость стран Евросоюза, взорвалась через 40 секунд после своего первого старта. Только научное оборудование на борту ракеты стоило около $500 млн, не говоря о множестве побочных финансовых последствий. Система автоподрыва ракеты сработала после остановки обоих процессоров в результате цепочки ошибок. Началом этой цепочки послужило переполнение буфера, поскольку система навигации подала недопустимо большое значение параметра горизонтальной скорости. Дело в том, что система управления Ariane 5 переделывалась из Ariane 4, а там такого большого значения не могло быть теоретически. В целях снижения нагрузки на рабочий компьютер инженеры сняли защиту от ошибок переполнения буфера в этом программном модуле, поскольку были уверены, что такого значения горизонтальной скорости не может быть в принципе — и просчитались.

Ноябрь 2000 г. Национальный институт рака, Панама. Здесь произошла целая серия инцидентов, вызванная тем, что ПО для планирования радиационной терапии производства американской компании Multidata Systems International неправильно рассчитывало дозы облучения для пациентов. Программа позволяла врачу нарисовать на компьютерном экране расположение защитных металлических щитов, которые защищают тело от радиации. Но программа позволяла манипулировать только четырьмя щитами, тогда как врачи хотели задействовать пять. Они нашли способ «обхитрить» программу, если нарисовать все пять щитов в виде единого блока с дыркой посередине. Единственное, чего они не знали , что программа рассчитывает разные дозы радиации в зависимости от того, как нарисована дырка. Если рисовать ее особым образом, то устройство выдавало двойную дозу радиации. Как минимум восемь человек погибли, а еще 20 получили переоблучение. Врачи, которые должны были вручную перепроверять расчеты программы, были осуждены за убийство.

Все эти примеры, а особенно последний, еще раз показывают, что никогда нельзя в полной мере доверять компьютерам. Ведь программы для компьютеров создают люди, а людям свойственно ошибаться.

Подписывайтесь на каналы «SecurityLab» в Telegram и Яндекс.Дзен, чтобы первыми узнавать о новостях и эксклюзивных материалах по информационной безопасности.

5 багов, которые привели к самым большим проблемам в истории


Перевод статьи Дэвида Поуга «5 Most Embarrassing Software Bugs in History».

Большая часть современного программного обеспечения поставляется со множеством мелких багов. Более значительные сбои в работе ПО могут привести (и приводили) к большим проблемам, например, к потере космического аппарата.

В моей колонке в Scientific American я уже «прошелся» по отношению к нам компаний, производящих ПО. Они считают, что мы горим желанием выступать в качестве бесплатных бета-тестеров для их продуктов. Они ведь теперь могут обновлять программы через интернет, так зачем им утомлять себя своевременной чисткой кода для самой первой версии ПО?

Написание совершенных программ практически невозможно. Я часто говорил, что нет таких программ, в которых не было бы ни единого бага. Но тогда, возможно, нам стоит посочувствовать компаниям, выпускающим огромные, амбициозные, состоящие из миллионов строк кода программы-монстры, в которых затем обнаруживается непрекращающийся поток багов?

Вот несколько самых известных, разрушительных (или просто самых интересных) багов в недавней истории:

AT&T – сбой в предоставлении услуг на длительных расстояниях (1990)

(AT&T – крупнейшая в мире телекоммуникационная компания, базируется в США, – прим. перев.). В январе 1990 года в течение 9 часов никто из пользователей AT&T не мог совершать телефонные звонки на дальние расстояния. Проблема была в недавно обновленном программном обеспечении, которое управляло коммутаторами компании. В денежном выражении AT&T потеряла 60 миллионов долларов. Это был очень дорогой баг.

Математическая ошибка чипа Pentium (1993)

Благодаря программной ошибке у Pentium, известного чипа компании Intel, появились проблемы с математикой. Допускаемые ошибки были довольно незначительными (где-то в восьмом знаке после запятой в дробных числах) и происходили только в некоторых случаях.

Но ирония – и какая ирония! – была в том, что проблема компьютерного чипа, допускающего математические ошибки, раздулась до пиар-катастрофы огромного масштаба. Сначала компания пыталась преуменьшить серьезность проблемы, но это было воспринято общественностью еще хуже. В конечном итоге Intel, наконец, согласилась предоставить любому обратившемуся исправленный чип.

В космосе разваливается Mars Climate Orbiter (1998)

Космический зонд НАСА стоимостью в 655 млн. долларов вошел в верхнюю атмосферу Марса под неправильным углом и сгорел в процессе. Из-за чего? Из-за программного обеспечения. В компьютерах, запущенных на Земле, тяга двигателей вычислялась с неправильными единицами измерения. Были использованы фунто-секунды вместо ньютоно-секунд, предусмотренные контрактом между NASA и Lockheed. К счастью, в последующих миссиях на Марс в программах уже использовались правильные измерения.

Windows блокирует не-пиратское ПО (2007)

24 августа 2007 года в течение 19 часов любой, кто пытался установить Windows, получал сообщение от антипиратской программы Microsoft, что он устанавливает пиратскую копию. То есть, купив Windows Vista, вы обнаруживали, что в качестве наказания у вас отключены некоторые функции. Здесь сыграл роль и человеческий фактор (помимо технических проблем). Кто-то установил на сервера Microsoft раннюю версию программы Genuine Advantage, содержащую баги.

Apple Maps направляет нас в никуда (2012)

В ходе соперничества с Google, Apple решила избавиться от популярного приложения Google Maps. Это приложение всегда появлялось на новых iPhone. Компания заменила его новым, собственным картографическим приложением.

Но в Картах Apple целые озера, вокзалы, мосты и туристические достопримечательности были пропущены или неправильно обозначены. Монумент Вашингтона переместился на другую сторону улицы. В Джексонвилле (штат Флорида) появился Риверсайдский госпиталь, хотя он еще 11 лет назад превратился в супермаркет Publix. В 3D-просмотре в этом приложении мосты и дамбы, казалось, тают в воде, а главный вокзал новозеландского Окленда был посреди океана.

Данные, на которых основаны картографические приложения, поступают из десятков различных специализированных баз данных. Т.е., отдельных баз по дорогам, фотографиям спутников, достопримечательностям и т. д. Но для их объединения нужны не только умные программы, но и тысячи человеко-часов ручного труда. У Google на выполнение этой работы были годы, а у Apple – нет. Понемногу компания Apple исправила эти проблемы, но у нее могут возникнуть трудности с восстановлением доверия пользователей к этим Картам.

Худшие компьютерные баги в истории

В прошлом месяце Тойота объявила об
отзыве 160.000 гибридных автомобилей Prius из-за
необъяснимого включения света и остановки
бензиновых двигателей. Но в отличии от
множества отзывов последних лет проблема
Prius-а заключалась вовсе не в железе — это
была программная ошибка в программном
обеспечении автомобиля. Prius имел
программный баг.

С этим отзывом Prius вошел в элитный клуб
бажных компьютеров — в клуб, который открыл
свои двери в шестьдесят лет назад, в 1945 году,
когда инженеры нашли моль, перемкнувшую
реле в компьютере Harvard Mark II. Моль была
выловлена, а системный журнал получил новую
запись: «первый реальный случай
обнаружения бага».

Несмотря на прошедшие шестьдесят лет
компьютерные баги по прежнем с нами и,
собственно, совсем не торопятся вымирать.
Более того, ошибки в программном
обеспечении все больше влияют и на наши
реальные жизни. Сейчас уже они населяют не
только наши операционные системы и
программы — сегодня они в наших сотовых
телефонах и микроволнововках, в наших
атомных станциях и медицинском
оборудовании. Ну и автомобилях конечно.

Но какие самые страшные?

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

Многие думаю что самые трагичные ошибки
те, которые стоили жизни людям. Безусловно
таких не много, но те, что существуют,
лишь в очередной раз предупреждают нас о
недопустимости бездумного развертывания
программного обеспечения в критических
приложениях. Эксперты, изучающие такие
системы, тем не менее говорят — да, баги
могут убивать людей, но видеть только это
опасно, не внедрение программ в
областях, где они критически необходимы,
может убить гораздо больше людей.


Так что так или иначе, но баги наши
останутся при нас. Мы приводим, в
хронологическом порядке, список 10 худших
программных ошибок в истории человечества.

28 Июля 1962 года

Ошибка в программном обеспечении ракеты
Mariner 1

привела к отклонению от курса и
дистанционному подрыву всей системы над
Атлантическим океаном. Расследование
показало, что формула, записанная на
бумаге, была неправильно переведена в
машинные коды, что привело к неправильному
вычислению компьютером траектории ракеты.

Подрыв советского трубопровода.
Скорее всего оперативники ЦРУ намеренно
разместили баг в канадской компьютерной
системе, украденной СССР для контроля
работы транссибирского газопровода. Эта
программа была лишь частью кампании
Союза по покупке или краже важнейших
технологий США. Управление узнало об этой
программе и решила нанести ответный удар —
оборудование благополучно прошло
советские тесты и затем, уже в процессе
работы, разрушилось, нанеся огромный урон.
Результат — самый крупный в истории
человечества неядерный взрыв.

Медицинская система облучения Therac-25.
Из-за летальных доз радиации погибло
несколько человек. Therac-25 стала
усовершенствованной системой, способной
работать сразу с двумя видами облучения —
маломощным электронным излучением (бета
частицы) и рентгеновскими лучами. Вторым
улучшением, по сравнению с Therac-20, стала
программная защита, вместо старой,
электромеханической. Тогда казалось, что
программа более надежна. Однако
операционная система аппарата оказалась
написана неквалифицированным
программистом, что могло привести к
облучению пациентов мощными бета-лучами без
размещения защиты над ним. Как минимум 5
пациентов умерли, многие были серьезно
ранены.

Переполнение буфера в операционной
системе Unix
. Первый интернет
червь (Morris Worm) заразил от 2 до 6 тысяч
компьютеров менее чем за день. Функция gets()
не проверяла размерность передаваемой
строки и слишком длинный ввод позволял
вызвать переполнение буфера со всей
последующей радостью. Программисты
ограничили функцию ввода строки, но
отказались убирать ее из стандартной
библиотеки ввода/вывода языка С, где она и
существует по нынешний день.

Генератор случайных чисел в Kerberos.
Неправильная реализация генератора
привела к тому, что в течении 8 лет системы с
аутентификацией Kerberos были практически
беззащитны. Был ли баг использован для
реальных взломов до сих пор неизвестно.

15 Января 1990 года

Глобальный сбой в сети AT&T. Баг в
новом программном обеспечении телефонных
свичей, работающих на междугородней связи,
заключался в том, что они просто падали при
получении определенного сигнала от одной
из ближайших машин. И все бы ничего, но
сигнал этот свич высылал тогда, когда
поднимался от предыдущего падения. В один
из дней Нью-Йоркский свич завис,
перегрузился и разослал всем этот самый
сигнал. Дальше последовала цепная реакция,
в ходе которой 114 телефонных свичей
перегружались каждые 6 секунд, оставив 60
тысяч человек без дальней связи на
протяжении 9 часов. Инженеры загрузили
предыдущую версию программного
обеспечения и только тогда работа
восстановилась.

Ошибка в Pentium. Известный баг, когда
процессоры Intel неправильно выполняли
деление числе с плавающей точкой. Например,
деление 4195835.0 на 3145727.0 давало 1.33374, вместо
1.33382, ошибку в 0.006 процента. После возникшего
общественного возмущения Intel была
вынуждена заменить процессоры всем
желающим. Ошибка стоила компании около 475
миллионов долларов.

Знаменитый Ping of Death. Как ни странно,
когда-то злобные хакеры валили хосты именно
с помощью пинга. Дело в том, что некоторые
операционки были уязвимы для атак типа Ping of
death. Их смысл прост: машинке с дырявой
операционкой посылался пинг длиной больше
стандартных 65535 байтов. Системы, вроде Solaris
2.4, Minix, MacOS 7, Windows 3.11 и 95, от этого пучило, они
падали, перезагружались и висли. В 1996 году POD
помог славно повеселиться многим товарищам.

Падение Ariane 5. Программный код Ariane 5 был
перенесен с Ariane 4, однако новые двигатели
ракеты вызвали ошибку в арифметической
операции полетного компьютера — когда
64-битное число с плавающей точкой
конвертировалось в 16-битное целое. Более
мощные двигатели вызвали переполнение — оба
компьютера зависли и ракета
самоуничтожилась после 40 секунд полета.

Национальный институт рака в Панаме.
Программа по расчету доз облучения,
созданная в США, неправильно рассчитала
дозы радиации для пациентов. Софт позволял
рассчитывать дозы с учетом четырех
металлических щитов, защищающих здоровую
ткань, однако доктора хотели использовать
пять. Техники обнаружили, что они могут
обмануть программу заменив все щиты одним,
с отверстием посередине. Что они не учли,
так это то, что программа учитывает как нарисована
дырка: в одном направлении — и ответ
будет правильным, в другом — и доза будет
удвоена. Восемь пациентов умерли, 20
получили передозировку с последующими
огромными проблемами со здоровьем. Врачи,
которые вручную должны были перепроверять
результаты расчетов обвинены в убийстве.

Худшие баги в истории игр #4 — Ядерный Ганди Civilization [Игры\Обзор]

Автор Сообщение

Стаж: 9 лет 8 месяцев

Дуализм этой игровой личности стал источником мемов и примером экстремальной иронии или лицемерия — смотря как посмотреть.

Речь идет о Махатме Ганди, который больше известен под именем:

«Ядерный Ганди» Civilization — поистине гениальная серия игр, созданная Сидом Мейром. Это классический пример 4X-стратегии, где игрок берет на себя роль лидера одной из цивилизаций. В процессе развития — от примитивных времен до полетов в космос игрок стремится стать победителем, будь то в отношении культуры, военной мощи, научных или других достижений.

Наша история начинается со времен оригинальной Civilization, где у игрока были следующие способы одержать победу:

    Глобальное завоевание и подчинение всех цивилизаций себе

  • К 2100 году иметь самый высокий счет

  • Лидер каждой цивилизации в Civilization представлен известной исторической личностью, отражающей характеристики реального человека. Такой подход позволил сделать игру разнообразнее, так как у каждого лидера были свои черты. Один лидер мог хвалить вас за ваши действия, другой срамил бы вас.

    У каждого лидера цивилизации был набор фундаментальных особенностей: агрессия, скорость экспансии, научные предрасположенности и многое другое. Дабы иметь унифицированную систему оценки, каждая черта имела значение от 1 до 10. К примеру, если у лидера научная предрасположенность на 10, то он пойдет на все, чтобы добиться научной победы. То же было в случае и с Ганди. Подобно его реальной личности, программисты сделали цифровую копию лидера миролюбивым, установив агрессию на 1/10. Если Ганди был вашим соседом, то можно было не волноваться за его вмешательство в ваши дела. Однако Ганди в Civilization был вовсе не так прост, как вам кажется. Все, что вы видели и ожидали от него, было лишь маской, одной из ролей этого хитреца.

    Во второй половине игровой сессии лидеры цивилизаций могут выбрать новую форму правительства, вроде демократии, анархии, монархии и тому подобных. Устройство государственной системы слегка изменяло характеристики лидеров, отражая их выбор правительства. Как положено, Ганди всегда выбирал демократию в качестве своей формы правления. Отличительной особенностью демократии было то, что она снижала агрессию лидера на 2 пункта.

    В теории, выбор демократии должен был сделать Ганди еще миролюбивее, так как его уровень агрессии и без того был на отметке в 1/10. Однако тут закралась катастрофическая проблема. Оригинальная игра не была рассчитана на наличие негативных цифр, так что вместо ожидаемых -1/10 его характер переходил в конец максимального значения для данного поля — 255/10.

    Такая кардинальная перемена характера привела к неожиданному результату. С переходом на демократию любое дуновение ветра или косой взгляд в сторону Ганди пробуждал в нем геноцидного маньяка. Ситуацию делало еще неприятнее открытие ядерного оружия как раз в эпохе перехода на демократию. В скором времени новая перспектива на жизнь и развитие цивилизации, а также доступ к непревзойденному оружию массового уничтожения приводили к печальному итогу. Любая цивилизация в области охвата ядерными бомбами Ганди становилась объектом бомбардировки. И не важно, что армия Ганди была в десять раз слабее противников. Любая сессия, в которой принимал участие Ганди, заканчивалась ядерной войной, независимо от того, насколько хорошими были отношения.

    Разработчики Civilization были удивлены, что проглядели столь серьезную ошибку, которая стала примером того, какие проблемы могут возникать в геймплее, если невнимательно подходить к балансу и механикам ИИ. Однако Ядерный Ганди стал своего рода символом Civilization. Абсурд и ирония ситуации сделали Ядерного Ганди популярной фигурой среди геймеров. Даже сами разработчики полюбили этого маниакального лидера. Настолько, что они даже решили оставить Ганди его ядерное оружие в последующих частях Civilization.

    Разработчики исправили агрессию Ганди, вернув ее на прежний уровень, однако они оснастили его чертами, способствующими накоплению и применению ядерных бомб в случае, если другого варианта просто нет.

    Дмитровский Форум V2

    (18+) Во времена всеобщей лжи говорить правду — это экстремизм

    • Список форумовОбщение ДмитроваСети, программы и железо
    • Изменить размер шрифта
    • Версия для печати
    • FAQ
    • Регистрация
    • Вход

    10 худших багов в истории человечества

    10 худших багов в истории человечества

    gosha » Сб ноя 19, 2005 15:02 pm

    Если баги в программном обеспечении приводят к зависанию компьютера, то это ерунда. Гораздо хуже, если из-за ошибок в ПО ломаются автомобили, взрываются ракеты и погибают люди.

    Самая первый компьютерный баг в истории был обнаружен в 1945 г., когда инженеры нашли в корпусе компьютера Harvard Mark II мотылька. Этот мотылек закорачивал контакты — и компьютер сбоил. Инженеры сделали запись в журнале событий «Первый случай обнаружения бага» (по-английски «bug» означает «насекомое»). С тех пор компьютерные сбои принято называть багами.


    По мере распространения цифровых устройств баги все глубже проникают в нашу жизнь. Они окружают нас повсюду — на мобильных телефонах, в бытовой технике, в автомобилях. К счастью, обычно баги не приносят никакого вреда, кроме морального. Но бывает и по-другому, когда баг вызывает огромные финансовые потери и даже забирает человеческие жизни. Журнал Wired посвятил этой проблеме целую тему номера и опубликовал список 10 худших багов в истории человечества, в хронологическом порядке.

    28 июля 1962 г. Космический аппарат Mariner I стартовал по направлению к Венере. Из-за поломки антенны корабль потерял связь с земными службами управлениями и перешел на собственную систему пилотирования. Но эта система содержала обидный маленький баг. В результате аппарат полетел совсем не в ту сторону и его пришлось подорвать над Атлантическим океаном. Последующее расследование установило, что в процессе программирования системы навигации была совершена маленькая опечатка — при вводе одной из формул был пропущен один символ.

    1982 г. Авария на Транссибирском трубопроводе. Оперативники ЦРУ внедрили баг (отчет в формате PDF) в канадское программное обеспечение, управлявшее газовыми трубопроводами. Советская разведка получила это ПО как объект промышленного шпионажа и внедрила на Транссибирском трубопроводе. Результатом стал самый большой неядерный взрыв в истории человечества.

    1985–87 гг. Несколько человек получили смертельную дозу облучения во время сеансов радиационной терапии с медицинским ускорителем Therac-25. Основанная на предыдущей версии ускорителя, «улучшенная» модель Therac-25 могла генерировать два вида излучения: слабое электронное бета-излучение и нормальное рентгеновское излучение. Еще одно «улучшение» состояло в том, что вместо электромеханической защиты пациента в устройстве была реализована программная защита, якобы более надежная. Обе новые функции были некорректно реализованы неопытным программистом, результатом чего стали как минимум пять смертей и огромное количество несмертельных случаев переоблучения.

    1988 г. Переполнение буфера в Berkeley Unix. Первый в мире компьютерный червь (так называемый червь Морриса) заразил от 2.000 до 6.000 компьютеров менее чем за сутки, эксплуатируя уязвимость в реализации функции gets(). В ОС Berkeley Unix эта функция ввода/вывода не имела ограничения на максимальную длину.

    1988–96 гг. Генератор случайных чисел Kerberos в течение нескольких лет широко использовался в различных системах шифрования. Предполагалось, что программа должна выбирать ключ случайным образом из многих миллиардов чисел, но генератор случайных чисел выбирал из гораздо меньшего набора численностью примерно в миллион. Как результат, в течение восьми лет любой пользователь мог без труда проникнуть в компьютерную систему, которая использовала модуль Kerberos.

    15 января 1990 г. Падение телефонной сети AT&T. Ошибка в новой версии прошивки междугородних коммутаторов привела к тому, что коммутатор перезагружался, если получал специфический сигнал от соседнего коммутатора. Но беда в том, что этот сигнал генерировался в тот момент, когда коммутатор восстанавливал свою работу после сбоя. В один прекрасный день, когда какой-то коммутатор в Нью-Йорке перезагрузился, он подал тот самый злополучный сигнал — и началось. Вскоре 114 соседних коммутаторов непрерывно перезагружались каждые 6 секунд, а 60 тыс. человек остались без междугородней связи на 9 часов, пока инженеры не установили на коммутаторы предыдущую версию прошивки.

    1993 г. Широко разрекламированный процессор Intel Pentium неправильно производил деление с плавающей запятой, ошибаясь на 0,006%. Хотя эта проблема реально коснулась немногих пользователей, но стала настоящим кошмаром для имиджа Intel. Поначалу фирма согласилась менять процессор только для тех пользователей, которые могли доказать, что им в вычислениях нужна подобная точность, но затем согласилась поменять процессор всем желающим. Этот баг стоил Intel около $475 млн.

    1995–96 гг. Пинг смерти. Отсутствие проверки на ошибки при обработке IP-пакетов позволяла порушить практически любую операционную систему, отправив ей через интернет специальный пакет («пинг»).

    4 июня 1996 г. Новая ракета-носитель Ariane 5, результат многолетней работы европейских ученых, гордость стран Евросоюза, взорвалась через 40 секунд после своего первого старта. Только научное оборудование на борту ракеты стоило около $500 млн, не говоря о множестве побочных финансовых последствий. Система автоподрыва ракеты сработала после остановки обоих процессоров в результате цепочки ошибок. Началом этой цепочки послужило переполнение буфера, поскольку система навигации подала недопустимо большое значение параметра горизонтальной скорости. Дело в том, что система управления Ariane 5 переделывалась из Ariane 4, а там такого большого значения не могло быть теоретически. В целях снижения нагрузки на рабочий компьютер инженеры сняли защиту от ошибок переполнения буфера в этом программном модуле, поскольку были уверены, что такого значения горизонтальной скорости не может быть в принципе — и просчитались.

    Ноябрь 2000 г. Национальный институт рака, Панама. Здесь произошла целая серия инцидентов, вызванная тем, что ПО для планирования радиационной терапии производства американской компании Multidata Systems International неправильно рассчитывало дозы облучения для пациентов. Программа позволяла врачу нарисовать на компьютерном экране расположение защитных металлических щитов, которые защищают тело от радиации. Но программа позволяла манипулировать только четырьмя щитами, тогда как врачи хотели задействовать пять. Они нашли способ «обхитрить» программу, если нарисовать все пять щитов в виде единого блока с дыркой посередине. Единственное, чего они не знали, что программа рассчитывает разные дозы радиации в зависимости от того, как нарисована дырка. Если рисовать ее особым образом, то устройство выдавало двойную дозу радиации. Как минимум восемь человек погибли, а еще 20 получили переоблучение. Врачи, которые должны были вручную перепроверять расчеты программы, были осуждены за убийство.

    Все эти примеры, а особенно последний, еще раз показывают, что никогда нельзя в полной мере доверять компьютерам. Ведь программы для компьютеров создают люди, а людям свойственно ошибаться.

    Тема: 10 худших багов в истории человечества

    Опции темы
    Отображение
    • Линейный вид
    • Комбинированный вид
    • Древовидный вид

    10 худших багов в истории человечества

    Если баги в программном обеспечении приводят к зависанию компьютера, то это ерунда. Гораздо хуже, если из-за ошибок в ПО ломаются автомобили, взрываются ракеты и погибают люди.

    Самая первый компьютерный баг в истории был обнаружен в 1945 г., когда инженеры нашли в корпусе компьютера Harvard Mark II мотылька. Этот мотылек закорачивал контакты — и компьютер сбоил. Инженеры сделали запись в журнале событий «Первый случай обнаружения бага» (по-английски «bug» означает «насекомое»). С тех пор компьютерные сбои принято называть багами.

    По мере распространения цифровых устройств баги все глубже проникают в нашу жизнь. Они окружают нас повсюду — на мобильных телефонах, в бытовой технике, в автомобилях. К счастью, обычно баги не приносят никакого вреда, кроме морального. Но бывает и по-другому, когда баг вызывает огромные финансовые потери и даже забирает человеческие жизни. Журнал Wired посвятил этой проблеме целую тему номера и опубликовал список 10 худших багов в истории человечества, в хронологическом порядке.

    28 июля 1962 г. Космический аппарат Mariner I стартовал по направлению к Венере. Из-за поломки антенны корабль потерял связь с земными службами управлениями и перешел на собственную систему пилотирования. Но эта система содержала обидный маленький баг. В результате аппарат полетел совсем не в ту сторону и его пришлось подорвать над Атлантическим океаном. Последующее расследование установило, что в процессе программирования системы навигации была совершена маленькая опечатка — при вводе одной из формул был пропущен один символ.

    1982 г. Авария на Транссибирском трубопроводе. Оперативники ЦРУ внедрили баг (отчет в формате PDF) в канадское программное обеспечение, управлявшее газовыми трубопроводами. Советская разведка получила это ПО как объект промышленного шпионажа и внедрила на Транссибирском трубопроводе. Результатом стал самый большой неядерный взрыв в истории человечества.

    1985–87 гг. Несколько человек получили смертельную дозу облучения во время сеансов радиационной терапии с медицинским ускорителем Therac-25. Основанная на предыдущей версии ускорителя, «улучшенная» модель Therac-25 могла генерировать два вида излучения: слабое электронное бета-излучение и нормальное рентгеновское излучение. Еще одно «улучшение» состояло в том, что вместо электромеханической защиты пациента в устройстве была реализована программная защита, якобы более надежная. Обе новые функции были некорректно реализованы неопытным программистом, результатом чего стали как минимум пять смертей и огромное количество несмертельных случаев переоблучения.

    1988 г. Переполнение буфера в Berkeley Unix. Первый в мире компьютерный червь (так называемый червь Морриса) заразил от 2.000 до 6.000 компьютеров менее чем за сутки, эксплуатируя уязвимость в реализации функции gets(). В ОС Berkeley Unix эта функция ввода/вывода не имела ограничения на максимальную длину.

    1988–96 гг. Генератор случайных чисел Kerberos в течение нескольких лет широко использовался в различных системах шифрования. Предполагалось, что программа должна выбирать ключ случайным образом из многих миллиардов чисел, но генератор случайных чисел выбирал из гораздо меньшего набора численностью примерно в миллион. Как результат, в течение восьми лет любой пользователь мог без труда проникнуть в компьютерную систему, которая использовала модуль Kerberos.

    15 января 1990 г. Падение телефонной сети AT&T. Ошибка в новой версии прошивки междугородних коммутаторов привела к тому, что коммутатор перезагружался, если получал специфический сигнал от соседнего коммутатора. Но беда в том, что этот сигнал генерировался в тот момент, когда коммутатор восстанавливал свою работу после сбоя. В один прекрасный день, когда какой-то коммутатор в Нью-Йорке перезагрузился, он подал тот самый злополучный сигнал — и началось. Вскоре 114 соседних коммутаторов непрерывно перезагружались каждые 6 секунд, а 60 тыс. человек остались без междугородней связи на 9 часов, пока инженеры не установили на коммутаторы предыдущую версию прошивки.

    1993 г. Широко разрекламированный процессор Intel Pentium неправильно производил деление с плавающей запятой, ошибаясь на 0,006%. Хотя эта проблема реально коснулась немногих пользователей, но стала настоящим кошмаром для имиджа Intel. Поначалу фирма согласилась менять процессор только для тех пользователей, которые могли доказать, что им в вычислениях нужна подобная точность, но затем согласилась поменять процессор всем желающим. Этот баг стоил Intel около $475 млн.

    1995–96 гг. Пинг смерти. Отсутствие проверки на ошибки при обработке IP-пакетов позволяла порушить практически любую операционную систему, отправив ей через интернет специальный пакет («пинг»).

    4 июня 1996 г. Новая ракета-носитель Ariane 5, результат многолетней работы европейских ученых, гордость стран Евросоюза, взорвалась через 40 секунд после своего первого старта. Только научное оборудование на борту ракеты стоило около $500 млн, не говоря о множестве побочных финансовых последствий. Система автоподрыва ракеты сработала после остановки обоих процессоров в результате цепочки ошибок. Началом этой цепочки послужило переполнение буфера, поскольку система навигации подала недопустимо большое значение параметра горизонтальной скорости. Дело в том, что система управления Ariane 5 переделывалась из Ariane 4, а там такого большого значения не могло быть теоретически. В целях снижения нагрузки на рабочий компьютер инженеры сняли защиту от ошибок переполнения буфера в этом программном модуле, поскольку были уверены, что такого значения горизонтальной скорости не может быть в принципе — и просчитались.

    Ноябрь 2000 г. Национальный институт рака, Панама. Здесь произошла целая серия инцидентов, вызванная тем, что ПО для планирования радиационной терапии производства американской компании Multidata Systems International неправильно рассчитывало дозы облучения для пациентов. Программа позволяла врачу нарисовать на компьютерном экране расположение защитных металлических щитов, которые защищают тело от радиации. Но программа позволяла манипулировать только четырьмя щитами, тогда как врачи хотели задействовать пять. Они нашли способ «обхитрить» программу, если нарисовать все пять щитов в виде единого блока с дыркой посередине. Единственное, чего они не знали, что программа рассчитывает разные дозы радиации в зависимости от того, как нарисована дырка. Если рисовать ее особым образом, то устройство выдавало двойную дозу радиации. Как минимум восемь человек погибли, а еще 20 получили переоблучение. Врачи, которые должны были вручную перепроверять расчеты программы, были осуждены за убийство.

    Все эти примеры, а особенно последний, еще раз показывают, что никогда нельзя в полной мере доверять компьютерам. Ведь программы для компьютеров создают люди, а людям свойственно ошибаться.

    Мастер Йода рекомендует:  Как написать бриф на разработку сайта
    Добавить комментарий