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

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

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

Промпт:

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

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

Ариан-5

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

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

829e687c21585864a632107c8c29e45f.jpg

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

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

Ошибка в PS3

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

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

1a74fc7aa9d9b669da593ef56ab4e025.jpg

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

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

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

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

Маринер-1

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

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

d967190e52292698a82d05633362a901.jpg

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

Ошибка в Facetime

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

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

92758eeff79c3fc792a98d5367bd2f93.jpeg

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

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

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

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

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

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

113997e2e5407321a31868868b829f2e.jpg

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

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

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

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

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

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

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

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

aa47b9ddf99b0799238fec06f4232eff.jpg

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

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

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

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

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

68d5972120dfe055ce7eea9939517731.jpg

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

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

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

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

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

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

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

ПВО «Patriot»

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

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

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

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

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

© Habrahabr.ru