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

Зачастую сложности возникают из-за ошибок, которые программисты допускают в своей работе. И даже одна небольшая ошибка может привести к потере большого количества денег или даже трагедиям. Такое происходит далеко не редко и многие примеры известны всему миру.

Промпт: "код программирования который пылает"
Промпт: "код программирования который пылает"

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

Ариан-5

Событие, которое произошло в 1996 году, было связано со запуском ракеты-носителя "Ариан-5" на космодроме Гвиана во Французской Гвиане. Ракету-носитель разработали компании Aérospatiale и DASA, главным заказчиком которых было европейское космическое агентство ESA.

Задача ракеты-носителя состояла в том, чтобы поместить два спутника на орбиту Земли. Ракета успешно взлетела и двигалась по заданной траектории. Однако, спустя несколько секунд полета, ракета-носитель начала разваливаться на части из-за программной ошибки.

Оказалось, что программное обеспечение, которое использовалось на предыдущей версии ракеты-носителя "Ариан-4", было использовано вновь на "Ариан-5", не доработано для работы с более высокими скоростями и большим объемом данных. В результате, компьютер корабля начал перегружаться и переполняться значениями, которые не умещались в выделенную память. На 36-й секунде полета, навигационная система сбила ракету с курса и начала переводить ее на новый курс, который противоречил плану полета. В итоге, ракета взорвалась через несколько секунд после сбоя. Ущерб, причиненный взрывом, достиг 500 миллионов долларов.

Случай показал, насколько важно правильно разрабатывать, отлаживать и тестировать программное обеспечение перед его использованием. Он также поставил на повестку дня вопрос о необходимости разработки специфичного оборудования и ПО для каждого нового проекта в космической индустрии, а не просто копирования кода из предыдущих проектов, как было в случае с "Ариан-5".

Ошибка в PS3

История началась в 2011 году, когда компания Sony выпустила обновление прошивки для своей игровой приставки PlayStation 3. Это обновление обещало улучшенные функции и исправления ошибок, однако, вместо этого, оно привело к серьезной проблеме.

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

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

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

Пользователи начали выражать свое недовольство в социальных сетях и на форумах, требуя от Sony исправить проблему. Компания пыталась решить проблему, выпуская корректирующие обновления, однако, это затянулось на месяцы, что привело к тому, что многие пользователи потеряли интерес к приставке.

В конечном итоге, Sony выпустила специальное обновление прошивки, которое исправило проблему и позволило пользователям снова играть в свои любимые игры. Однако, ущерб был уже нанесен, а репутация Sony пострадала.

Маринер-1

Катастрофа Маринер-1 произошла в 1962 году и связана с запуском космического аппарата "Маринер-1", который должен был отправиться на орбиту Венеры. Аппарат находился под контролем компьютера, который обрабатывал данные о его траектории, и уже после 293 секунды полета, на высоте около 16 километров, аппарат вышел с траектории и был уничтожен.

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

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

Ошибка в Facetime

В конце января 2019 года Facebook-пользователи стали обмениваться информацией о том, что в приложении "Facetime" от Apple присутствует ошибка, которая позволяет людям слышать друг друга, даже если другой человек еще не ответил на звонок. Как оказалось, ошибка заключалась в том, что при вызове блокировки экрана, вызывающий человек мог прослушивать собеседника. Более того, если нажать кнопку громкой связи в этот момент, то можно было услышать даже то, что происходит в комнате собеседника.

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

Эта ошибка в "Facetime" стала серьезной проблемой для Apple, находившейся в середине его попыток увеличить продажи iPhone до конца финансового года. Apple быстро отреагировала на эту проблему и в течение дня запустила сервис FaceTime. Компания настоятельно советовала пользователям отключить функцию FaceTime до тех пор, пока проблема не будет устранена.

В конечном итоге, ошибка в "Facetime" была исправлена компанией Apple, и пользователи продолжают использовать приложение для связи со своими друзьями и близкими.

Взлом компании Equifax

История взлома компании Equifax началась в конце лета 2017 года. В начале сентября, компания вынуждена была сообщить о взломе своей системы, который произошел месяцем ранее.

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

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

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

В ходе расследования выяснилось, что Equifax не взяла достаточной меры предосторожности, чтобы защитить информацию клиентов. Компания использовала устаревшие системы безопасности и не отслеживала активность в своих сетях.

Ситуация стала объектом расследования множества агентств, в том числе и Конгресса США. В результате компания выплатила 575 миллионов долларов в судебных и внесудебных сделках, а также улучшила свою информационную безопасность.

Ошибка на фондовой бирже NASDAQ

История ошибки на фондовой бирже NASDAQ началась 18 мая 2012 года, когда произошло одно из самых ожидаемых событий в мире финансов - IPO компании Facebook. Исходя из прогнозов, IPO Facebook должен был стать самым большим в истории IT-компаний.

Однако, вскоре после начала торгов на бирже, стало ясно, что что-то пошло не так. Цена акций Facebook начала резко расти, превышая цену, которую компания рассчитывала получить при проведении IPO. Это привело к тому, что инвесторы были вынуждены покупать акции по неадекватной цене, а компания Facebook получила чрезмерно высокую стоимость на свои акции.

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

Компания NASDAQ утверждала, что проблема была вызвана технической ошибкой в системе, а именно связанной с проблемой алгоритма "кросс-матчинга".

После этого инцидента, организация, которая контролировала биржевые операции - Securities and Exchange Commission (SEC) - начала свое расследование и оштрафовала NASDAQ на 10 миллионов долларов за техническую ошибку. Кроме того, многие инвесторы подали в суд на биржу, которые также получили компенсацию за убытки.

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

Лондонская скорая помощь

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

Катастрофа произошла весной того же года, когда звонки от людей, нуждающихся в медицинской помощи, начали поступать со страшной задержкой, а в некоторых случаях вообще не поступали. Были случаи, когда пациенты умирали, не дожидаясь приезда скорой помощи. Из-за проблем в системе планирования маршрутов, скорая помощь не могла быстро прибыть на место происшествия. Такая ошибка привела к смерти от 30 до 45 человек.

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

Кибер-атака на "KT Corporation"

В 2015 году на южнокорейскую компанию "KT Corporation", одного из крупнейших поставщиков интернет-услуг в стране, была совершена кибератака. На тот момент компания обслуживала около 20 миллионов пользователей, что делало ее одной из самых крупных в Южной Корее.

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

Кибератака на KT Corporation длилась несколько дней и стала одним из самых крупных кибератак на корпоративную IT-инфраструктуру в истории. Среди технических причин атаки бил уязвимый эксплоит, связанный с коммутатором серверов, который мог быть использован хакерами для неблаговидных целей.

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

Меры были приняты незамедлительно для устранения проблемы. После этого инцидента KT Corporation начала проводить периодические проверки системы безопасности и обеспечения защиты от кибератак. Пошаговая инструкция по всему процессу была разработана и предоставлена компании. А вся система была сборщиком, который избавил ее от уязвимости, обнаруженной в программном обеспечении на этапе предыдущих тестов.

ПВО "Patriot"

В ходе первой войны в Персидском заливе, 25 февраля 1991 года, силы Саддама Хусейна выпустили ракету "Скад" на цель в Саудовской Аравии. Для защиты военных объектов американские войска использовали систему ПВО Patriot. Однако система не смогла перехватить ракету, что привело к трагедии - ракета упала на барак, где находились американские военнослужащие. В результате погибли 28 человек.

При расследовании возникшей ситуации выяснилось, что основной причиной неудачного перехвата ракеты была ошибка в программном обеспечении системы Patriot. Программное обеспечение системы было спроектировано для расчета полета объектов, и отслеживания их местоположения в реальном времени. Однако, при переводе времени с учетом временной задержки в 24-битном двоичном отображении, происходила ошибка, которая накапливалась с каждым часом и проявлялась в погрешностях. Процессор не мог обрабатывать дробные значения, что привело к вычислениям с ограниченной точностью. В период продолжительного нахождения ПВО в работе (более 100 часов) привело к тому, что координаты положения цели вычислялись с большой погрешностью, около 600 метров. Именно такая погрешность сыграла роковую роль в трагедии.

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


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

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

Комментарии (9)


  1. redbeardster
    10.04.2023 19:03
    +14

    Про Терак-25 забыли еще и Тойоту с "Пентиумом". Набившие оскомину примеры багов из книг и материалов про формальную верификацию и ФП.


  1. TigerClaw
    10.04.2023 19:03
    +5

    Муха Цеце (баг прошивки сеагейтов) тоже программная ошибка.


    1. DrGluck07
      10.04.2023 19:03

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


  1. Daniyar94
    10.04.2023 19:03
    +2

    “IPO Facebook должен был стать самым большим в истории IT-компаний”

    ChatGPT это ты?


    1. y_so_serious
      10.04.2023 19:03
      +2

      Мы и не заметили, как с появлением ChatGPT перестали всё валить на мальчиков-стажёров и девочек-дизайнеров.


  1. Dimaasik
    10.04.2023 19:03

    Как программный код привел к потерям большого количества денег и даже трагедиям

    - Мои расходы на кофе и энергетики из-за того что вместо подготовки к модульной контрольной я сижу на хабре)


  1. Stas911
    10.04.2023 19:03
    +1

    Еще был какой-то торговый робот, который обанкротил хедж-фонд за несколько минут.


  1. buratino
    10.04.2023 19:03
    +6

    аппарат вышел с траектории и был уничтожен.

    пешком вышел, ага

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

    что за бред? что за черта над математическим символом? И таки где - в "компьютерной инструкции", в уравнении, в программе или в спецификации программы?

    "Начерти пару формул" какое-то


  1. Altaev
    10.04.2023 19:03
    +1

    «уязвимый эксплоит» - это пять!????