Не пропатчили: как один маленький баг угробил 28 американцев

[ Версия для печати ]
Добавить в Telegram Добавить в Twitter Добавить в Вконтакте Добавить в Одноклассники
Страницы: (6) [1] 2 3 ... Последняя »  К последнему непрочитанному [ ОТВЕТИТЬ ] [ НОВАЯ ТЕМА ]
УрусШайтанъ
21.01.2018 - 10:47
Статус: Offline


Бомбарлитровщик

Регистрация: 11.10.15
Сообщений: 7073
315
via

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

Не пропатчили: как один маленький баг угробил 28 американцев
 
[^]
Yap
[x]



Продам слона

Регистрация: 10.12.04
Сообщений: 1488
 
[^]
УрусШайтанъ
21.01.2018 - 10:48
Статус: Offline


Бомбарлитровщик

Регистрация: 11.10.15
Сообщений: 7073
Вечером 25 февраля 1991 года, уже под самый конец операции «Буря в пустыне», на американскую авиабазу в саудовском Дахране свалился иракский «Скад». Вот, казалось бы, причём здесь округление дробей?

Ракета разнесла казарму 475-го отряда квартирмейстерской службы армии США, ответственного за очистку воды. Взрыв убил 28 человек — это пятая часть всех погибших американцев за всё время войны в Заливе. Ещё около сотни получили ранения.

«Скад» был обнаружен радаром дежурной батареи зенитного ракетного комплекса Patriot, прикрывавшей Дахран. Ракету засекли… и ничего не сумели сделать. Осталось только наблюдать, как она валится на казарму.

Как выяснилось, вину за смерть 28 человек взял на себя софт зенитного комплекса.

Последствия от попадания "скада"

Не пропатчили: как один маленький баг угробил 28 американцев
 
[^]
УрусШайтанъ
21.01.2018 - 10:50
Статус: Offline


Бомбарлитровщик

Регистрация: 11.10.15
Сообщений: 7073
Давай округлим это по-быстрому

Баг в нём был простой, как кирпич. Не баг даже, а математическая фича: разработчики и военные о ней знали, и все на неё плевали, как на чепуховину ничего не значащую.

Внутренний таймер ЗРК Patriot устроен как счетчик количества интервалов времени, прошедшего с момента включения системы. Длина такого интервала — 0,1 секунды. Чтобы перевести количество этих отрезков в секунды, его, понятное дело, нужно разделить на 10. Что для этого предложили разработчики? Естественно, умножить на 0,1.

В машинной арифметике деление часто подменялось умножением на обратное число, так было проще проектировать вычислительные устройства и работали они быстрее. Метод умножения на обратное число, к слову, стар, как сама математика: его применяли ещё в древнем Вавилоне.

Теперь вторая часть Марлезонского кодирования. Числа-то двоичные.

Цитата
Точного представления десятичной дроби 0,1 в двоичном виде не существует — оно может быть только приблизительным.


Поэтому бодрые наследники древнего Вавилона из корпорации Raytheon вместо десятичного 0,1 загнали в систему двоичное число 0,00011001100110011001100. Оно немногим меньше требуемых 0,1 — примерно на одну десятимиллионную. Вот на это число радостно и умножили, полагая, что проблема решена.

Кодеры действительно были правы, когда клеили этот «лейкопластырь». При расчёте параметров движения цели система оперирует близкими значениями времени с единой и очень небольшой систематической погрешностью. Поэтому никаких проблем быть не должно. Ситуацию признали нормальной для использования в реальных условиях — и забили. В таком виде комплекс и приняли на вооружение в 1982 году.

Не пропатчили: как один маленький баг угробил 28 американцев
 
[^]
УрусШайтанъ
21.01.2018 - 10:51
Статус: Offline


Бомбарлитровщик

Регистрация: 11.10.15
Сообщений: 7073
Если вчера война

А дальше? Дальше Саддам Хусейн более не смог выносить собственной крутости в одиночку и решил поделиться ею с окружающими, захватив летом 1990 года Кувейт. Саддам пацан был мутный и дерзкий, но не папуас какой, а вполне упакованный. Имелись у него и оперативно-тактические ракеты, самостоятельно модернизированные, а также химическое оружие.

Весь этот арсенал создавал проблему. Потребовалось срочно переделывать батареи Patriot для Ближнего Востока, чтобы те могли перехватывать баллистические цели, идущие со значительной скоростью — 1700 м/с и больше. А это, считай, гиперзвук; и среди аэродинамических целей, под которые первые версии Patriot рассчитывались, такие скорости не встречаются. Им больше самолёты подавай или крылатые ракеты.

Цитата
Евгений Башин-Разумовский
Эксперт по историческим вопросам
В общей сложности на театре военных действий было развёрнуто 33 батареи Patriot. В том числе 22 батареи со 132 пусковыми установками — в Саудовской Аравии; четыре (из них две американские и две датские с 26 пусковыми установками) — в Турции; а начиная с 19 января, дополнительные силы ПВО были развёрнуты и в Израиле. Всего территорию Израиля прикрывали семь батарей: две израильские, четыре американские и одна датская, с 48 пусковыми установками.


Raytheon начал спешно улучшать систему. И, как оно бывает, доулучшался. Некое кодирующее туловище невыясненного системно-аналитического образования придумало устранить баг с неточным определением 0,1 и написало новую процедуру умножения.

Это была хорошая новость, потому что погрешность удалось снизить ещё больше. Плохая новость состояла в том, что туловище, когда переписывало старый код, вставило вызов этой процедуры не во всех случаях, где требовалось. Кое-где остался старый расчёт времени.

Цитата
Вуаля! В системе завелось ДВА внутренних значения времени, используемых при расчёте РАЗНЫХ параметров. Различие между ними накапливалось тем сильнее, чем больше времени прошло с момента включения.


Теперь погрешности в математике ЗРК уже начали что-то решать, но об этом никто не думал. Потому что штатные проверки комплекса после переделки показывали, что всё ОК. Согласно программе испытаний: «Пункт 1: включили систему. Пункт 2: выставили режимы. Пункт 3: всё работает. Пункт 4: выключили. Переходим к следующему разделу».

Но никто не проводил «endurance test»: проверку на длительное дежурство на одном месте да против скоростных целей. А оно и зачем, если Patriot — это мобильный войсковой ЗРК для прикрытия боевых порядков? На одном месте ему по всем наставлениям стоять не следует, в том числе, в интересах собственной выживаемости.

Первыми за аномалию в работе комплекса зацепились не в США, а в Израиле. Развёртывающиеся боевые порядки страна прикрывать особо не собиралась, а вот собственная территория Израиль интересовала. Ну и по причине обычной национальной запасливости.

У ЗРК Patriot нет своих собственных накопителей для «логов» работы, поэтому комплексам полагались внешние. Но в армии США накопители не любили. Ходило вполне обоснованное мнение, что их софт какая-то очередная вавилонская ключница делала, и накопители периодически вешают всю систему. Поэтому операторы американских ЗРК на Ближнем Востоке их обычно не подключали, а вот в ЦАХАЛе всё сделали по инструкции.

Не пропатчили: как один маленький баг угробил 28 американцев
 
[^]
УрусШайтанъ
21.01.2018 - 10:52
Статус: Offline


Бомбарлитровщик

Регистрация: 11.10.15
Сообщений: 7073
Какой шлемазл это сделал?

Первые иракские «Скады» стартовали в сторону Израиля 18 января 1991 года. Израильские офицеры, однако, нашли время отсмотреть «логи». Уже 11 февраля от них в США прилетел первый «багрепорт»: после нескольких часов непрерывной работы ЗРК наблюдается необъяснимый дрейф параметров при переходе от режима обнаружения к сопровождению цели.

Радар при работе «на сопровождение» смотрит во вполне определенную узкую область пространства, где должна быть цель — так называемую «Range Gate Area», RGA. А ракета «Скада» быстрая, и надо чётко понимать, где она будет на следующем такте работы. Положение RGA определяется опережающим расчётом в зависимости от координат и скорости цели. А эта математика прямо завязана на точный отсчёт времени. А время у нас отсчитывается… ну, вы уже видели, как.

Это сообщение отредактировал УрусШайтанъ - 21.01.2018 - 10:53

Не пропатчили: как один маленький баг угробил 28 американцев
 
[^]
УрусШайтанъ
21.01.2018 - 10:54
Статус: Offline


Бомбарлитровщик

Регистрация: 11.10.15
Сообщений: 7073
И с каждым часом отсчитывается всё косячнее. Израильтяне увидели, что границы окна, обсчитанные на этом косячном времени, начали ехать. Цель уже не посередине RGA, а ближе к краю, за 8 часов смещение процентов на 20 от центра окна.

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


«Да ну, фигня, — отмахнулись генералы в Штатах. — У системы нормальный аптайм всего несколько часов. Зачем её вообще держать включённой постоянно? Ладно, по мере сил всё пропатчим и заапдейтим».

Надо заметить, что софтину ЗРК Patriot за тот нервный период с осени 1990 года перепатчивали уже аж шесть раз. Причем в пожарном порядке: надо было обучить аппарат противостоять иракским «Скадам» и «Аль-Хусейнам», и какая-то идиотская проблема многочасовой работы никого не волновала. Тем более, что накатывался один такой патч пару часов минимум, и всё это время комплекс должен стоять мёртвым куском железа. Кому это надо прямо во время войны?

Но 16 февраля патч таки написали и начали помаленьку ставить на комплексы. 21 февраля военное начальство, испытав нехорошее предчувствие в области собственных кресел, дополнительно разослало дежурную инструкцию для операторов ЗРК. Она состояла из одной фразы: не держите систему включённой «слишком долго», а то будут проблемы с захватом цели.

Но сколько это — «долго» — до разъяснений не снизошли.

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

… Дежурная батарея «Альфа», принадлежавшая батальону, что прикрывал авиабазу Дахран, на вечер 25 февраля 1991 года имела аптайм больше четырёх суток. За этот период накопленная ошибка составляла уже 0,343 секунды. Для баллистической цели типа «Скада» это означало смещение центра RGA почти на 700 метров относительно реального положения ракеты. И это при габарите самого RGA около 300 метров.

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


Ракета «Скад» своё дело сделала.

А утром 26 февраля на Дахран приехали совершенно ничего не подозревавшие офицеры с накопителями. Они привезли… патч, исправляющий ошибку. Ну, просто по планам командования именно 26 февраля батарея «Альфа» должна была получить обновку. Раньше было никак: все борта на Ближний Восток забиты — всем что-то надо.


Не пропатчили: как один маленький баг угробил 28 американцев
 
[^]
УрусШайтанъ
21.01.2018 - 10:55
Статус: Offline


Бомбарлитровщик

Регистрация: 11.10.15
Сообщений: 7073
Борьба с дятлами

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

Во-первых, если вы склеили софт слюнями, и он заработал, отдавайте себе в этом отчёт. Умейте видеть пределы прочности ваших заплаток.

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

В-третьих, когда вы что-то исправляете в уже работающей системе, посмотрите на её устройство сверху и подумайте, как ваши действия отразятся на том, что она ДО ВАС делала ВРОДЕ БЫ нормально.

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

Цитата
Антон Железняк
Эксперт по техническим и инженерным вопросам
В общей сложности в ходе первой войны в заливе вооруженные силы Ирака запустили 88 ракет «Скад». 12 из них были выпущены по Израилю до развёртывания на его территории ЗРК Patriot, из 76 оставшихся 47 были обстреляны с расходом 158 зенитных ракет. При этом, по данным комиссии конгресса, только 86 ракет были запущены по реальным целям, а 72 — по ложным, либо по обломкам уже подбитых «Скадов», принятых за ракеты. Точное число сбитых «Скадов» оспаривается до сих пор, равно как и критерии подсчёта.


Не пропатчили: как один маленький баг угробил 28 американцев
 
[^]
УрусШайтанъ
21.01.2018 - 10:55
Статус: Offline


Бомбарлитровщик

Регистрация: 11.10.15
Сообщений: 7073
Конец
 
[^]
Kukurus
21.01.2018 - 10:57
390
Статус: Online


Ярила

Регистрация: 23.11.15
Сообщений: 5217
В тему про кодеров:

Буратино дали три яблока. Два он съел. Сколько яблок осталось у Буратино? Думаете одно? Ничего подобного. Никто не знает сколько у него уже было яблок до этого. Мораль — всегда обнуляйте переменные!
 
[^]
Garret
21.01.2018 - 11:01
37
Статус: Offline


Орк

Регистрация: 14.01.12
Сообщений: 2960
Тема знакома как прогеру) Иногда еще удивляются клиенты, типа почему вот такую мелочь поправить требует столько времени (для него денег)... а то что когда меняешь процедуру, то это еще одно, в определенных случаях ее нужно прописать в разных местах кода и если пропустить хоть в одном...
 
[^]
Blondin559
21.01.2018 - 11:01
5
Статус: Offline


Хохмач

Регистрация: 15.03.16
Сообщений: 606
Математика - она такая...
 
[^]
kon4550
21.01.2018 - 11:02
3
Статус: Offline


бабай-хохотун

Регистрация: 24.09.11
Сообщений: 2256
да у всех такое распиздяйство может быть.
 
[^]
ramzay1
21.01.2018 - 11:02
74
Статус: Offline


Хохмач

Регистрация: 16.05.14
Сообщений: 736
Цитата
Не пропатчили: как один маленький баг угробил 28 американцев

28 американцев угробил не баг, а охуевание их правительства. Влезая в войну нужно чётко осознавать, что на войне есть жертвы.
 
[^]
Zeitplan
21.01.2018 - 11:04
59
Статус: Offline


Шутник

Регистрация: 16.01.18
Сообщений: 87
Ошибки в программах часто приводят к отказам. Вот, например:
Цитата
В 1997 американский ракетный крейсер «Йорктаун» (CG-48), на котором были установлены 27 компьютеров (Pentium-Pro на 200 МГц), решил поделить на ноль и полностью вышел из строя.
Компьютеры работали на Windows NT — и работали они ровно так, как вы и ожидаете, узнав название оси. В то время ВМФ США старался максимально широко использовать коммерческое ПО с целью снижения стоимости военной техники. Компьютеры же позволяли автоматизировать управление кораблем без участия человека.

На компьютеры «Йорктауна» поставили новую программу, управляющую двигателями. Один из операторов, занимавшийся калибровкой клапанов топливной системы, записал в одну из ячеек расчетной таблицы нулевое значение. 21 сентября 1997 года программа запустила операцию деления на этот самый ноль, началась цепная реакция, и ошибка быстро перекинулась на другие компьютеры локальной сети. В результате отказала вся компьютерная система «Йорктауна». Потребовалось почти три часа, чтобы подключить аварийную систему управления.

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

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

Двенадцать F-22 Raptor (истребитель пятого поколения, состоящий на вооружении США), стоимостью $ 140 млн за штуку, отправились в первый международный вылет в Окинаву. Все шло замечательно, пока эскадрилья не пересекла линию перемены даты, на западной стороне которой дата сдвинута на один день вперед относительно восточной. После пересечения условной линии все 12 истребителей одновременно выдали сообщение об ошибке, эквивалентной синему экрану смерти.

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

Так в чем же была ошибка? Проектировщики из Lockheed Martin даже не рассматривали вопрос о возможности пересечения линии перемены дат — им просто не пришло в голову, что где-то понадобится либо прибавлять, либо вычитать одни сутки.

https://geektimes.ru/company/mailru/blog/285672/

Это сообщение отредактировал Zeitplan - 21.01.2018 - 11:06
 
[^]
andrew1969
21.01.2018 - 11:06
18
Статус: Offline


Ярила

Регистрация: 4.06.17
Сообщений: 1868
Тема известная, но написано прикольно.
 
[^]
saurak
21.01.2018 - 11:10
12
Статус: Offline


Ярила

Регистрация: 27.12.14
Сообщений: 2331
Вот только сравнение архитекторов и программистов (кодеров) неуместно...
Скорее если бы строители работали как программисты...ой так они так и работают: то цемент украдут, то температурный режим не выдержат. И ведь тоже косяки не сразу вылазят.

 
[^]
schweps2
21.01.2018 - 11:11
-2
Статус: Offline


Тру ЯПовец - 45см

Регистрация: 3.07.13
Сообщений: 432
и поделом.

Отправлено с мобильного клиента YAPik+
 
[^]
Azazelius
21.01.2018 - 11:15
2
Статус: Offline


Шутник

Регистрация: 4.04.11
Сообщений: 93
Ну как бы всегда на ряды раскладывали, к примеру x/10 = x/16+x/32+x/256... и до необходимой точности...
Что-то я сомневаюсь в этом баге-фиче....

Это сообщение отредактировал Azazelius - 21.01.2018 - 11:18
 
[^]
АГСчик
21.01.2018 - 11:23
6
Статус: Offline


Ярила

Регистрация: 15.07.14
Сообщений: 5842
Помню, тогда писали, на перехват одного СКАДа расход Пэтриотов - 3-4 шт.
 
[^]
Zeitplan
21.01.2018 - 11:32
2
Статус: Offline


Шутник

Регистрация: 16.01.18
Сообщений: 87
Цитата (АГСчик @ 21.01.2018 - 11:23)
Помню, тогда писали, на перехват одного СКАДа расход Пэтриотов - 3-4 шт.

С-300 тоже сразу парой ракет по одной цели шмаляет. И вероятность поражения цели при этом 0.8 что ли. Могу ошибаться.
 
[^]
KunaTakker
21.01.2018 - 11:33
8
Статус: Offline


Юморист

Регистрация: 23.05.11
Сообщений: 562
Цитата (Azazelius @ 21.01.2018 - 11:15)
Ну как бы всегда на ряды раскладывали, к примеру x/10 = x/16+x/32+x/256... и до необходимой точности...
Что-то я сомневаюсь в этом баге-фиче....

ну так баг в том, что точность времени разная оказалась нескольких в компонентах ПО.
тут сами алгоритмы не причем.
 
[^]
Zeitplan
21.01.2018 - 11:38
4
Статус: Offline


Шутник

Регистрация: 16.01.18
Сообщений: 87
Цитата (KunaTakker @ 21.01.2018 - 11:33)
Цитата (Azazelius @ 21.01.2018 - 11:15)
Ну как бы всегда на ряды раскладывали, к примеру x/10 = x/16+x/32+x/256... и до необходимой точности...
Что-то я сомневаюсь в этом баге-фиче....

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

Ну так израильтяне сами виноваты. Если о баге было известно и избавиться очень просто: перезагружай комплекс раз в 4 часа, то почему они держали его четверо суток включенным? Он же не один там на дежурстве стоял. Поочередная перезагрузка и всё пучком.
 
[^]
dvladimirov
21.01.2018 - 11:46
21
Статус: Offline


Весельчак

Регистрация: 12.04.14
Сообщений: 166
русских хакеров уже обвиняли? :)
 
[^]
Answer34
21.01.2018 - 11:47
5
Статус: Offline


Ярила

Регистрация: 8.09.16
Сообщений: 3425
Цитата (Zeitplan @ 21.01.2018 - 11:32)
Цитата (АГСчик @ 21.01.2018 - 11:23)
Помню, тогда писали, на перехват одного СКАДа расход Пэтриотов - 3-4 шт.

С-300 тоже сразу парой ракет по одной цели шмаляет. И вероятность поражения цели при этом 0.8 что ли. Могу ошибаться.

какая модификация С-300? "П" , " В" или "Ф"?
расxод ЗУР от типа цели назначается
 
[^]
KunaTakker
21.01.2018 - 11:48
15
Статус: Offline


Юморист

Регистрация: 23.05.11
Сообщений: 562
Цитата (Zeitplan @ 21.01.2018 - 11:38)
Цитата (KunaTakker @ 21.01.2018 - 11:33)
Цитата (Azazelius @ 21.01.2018 - 11:15)
Ну как бы всегда на ряды раскладывали, к примеру x/10 = x/16+x/32+x/256... и до необходимой точности...
Что-то я сомневаюсь в этом баге-фиче....

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

Ну так израильтяне сами виноваты. Если о баге было известно и избавиться очень просто: перезагружай комплекс раз в 4 часа, то почему они держали его четверо суток включенным? Он же не один там на дежурстве стоял. Поочередная перезагрузка и всё пучком.

согласен полностью.
это не вина прогера - свою задачу он выполнил по поставленному ТЗ.

у меня недавно была схожая ситуация, когда сопрягались двумя железяшками (а на одной из них было мой код) - счетчик тактов 12 бит и он гарантированно переполнится через 48 часов работы. этот счетчик мной передается еще многим вышестоящим. 100% будет у кого-нибудь ошибка перехода через 0.
так всегда бывает - опыт имеется соответственный.
Заказчик сказал - "похер, протокол утвержден, изделие должно работать по ТУ 24 часа".

и кто тут дятел? я или заказчик?
 
[^]
Понравился пост? Еще больше интересного в Телеграм-канале ЯПлакалъ!
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии. Авторизуйтесь, пожалуйста, или зарегистрируйтесь, если не зарегистрированы.
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) Просмотры темы: 66720
0 Пользователей:
Страницы: (6) [1] 2 3 ... Последняя » [ ОТВЕТИТЬ ] [ НОВАЯ ТЕМА ]


 
 



Активные темы






Наверх