C, PHP, VB, .NET

Дневникът на Филип Петров


* Най-големите софтуерни бъгове до сега

Публикувано на 20 март 2012 в раздел ОСУП.

„Бъговете“ в написването на софтуерен код съпътстват всеки един програмист. Едва ли има безгрешен човек, в това число едва ли има и безгрешен програмист. Някои от програмистките грешки обаче са довеждали до особено големи щети. Ето някои от най-известните досега, подредени по години.

1962г. – Експлозията на Маринер 1

Програмист преписва на компютър формула написана на ръка от математик? Нищо страшно, случва се и до ден днешен. Страшно става когато става въпрос за изстрелване на космически кораб и… програмистът сбърка „горна чертичка“ ‾ с обикновено тире ‐. Формулата била написана с молив на лист хартия и това подчертаване имало съвсем различен смисъл от това, което било интерпретирано.

Тази мъничка грешка впоследствие накарала софтуерния продукт да отчита нормални отклонения в траекторията като сериозни проблеми, след което да се опитва да ги коригира. В резултат космическия кораб Маринер 1 вместо да излети към Венера се отклонил толкова много, че от НАСА предпочели да го унищожат още над Атлантическия Океан. Това струвало 18,2 милиона долара.

1978г. – Пропадането на покрива на стадиона в Хартфорд

Малко след излизането на хиляди фенове от стадиона в Хартфорд, покрива пропада от натежалия мокър сняг. Проблемът се оказал от предоверяването на архитекта на CAD система, която не отчела възможните ефекти от счупването на отделни подпори. Защо ли не се очудваме – все пак става въпрос за компютри с изчислителна мощ от 78-ма?

1980г. – Блокажът на ARPANet

Цялата мрежа ARPANet (можете да го приемете за „интернета по онова време“) спира на 27 октомври 1980г. поради софтуерна грешка (и отчасти вирус, който се възползвал от нея). Щетите тогава били минимални, но това е една от първите сериозни аларми за възможните проблеми в сигурността, що се отнася до компютърни мрежи.

1982г. – Саботажът на Съветски газопровод в Сибир

Агенти на ЦРУ разкрили кражба на информационни технологии от страна на КГБ в Канада. Ставало дума за автоматизирана система за контрол над редица сложни операции по газопроводи, което съответно спестявало огромни суми пари. Вместо просто да прекъснат изтичането на информация, САЩ решили да отвърнат с удар – заложили „троянски кон“ вътре в софтуера, който бил продаден на агенти на СССР. Резултатът, който последвал по-късно през същата година е огромна, направо гигантска експлозия. Размерът на загубите остава засекретен.

1982г. – Потапянето на HMS Sheffield

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

1983г. – На прага на трета световна война?

На 26 септември 1983г. системата за ранно предупреждение за ядрена атака на СССР докладва изстрелването на 5 балистични ракети от САЩ към Русия. Лейтенант-полковник Станислав Евграфович Петров на своя отговорност приема сигналите за фалшиви и спасява света от трета световна война. Разследването по-късно показва, че сателитите са прихванали необичайно отражение на слънчеви лъчи в облаците и са го интерпретирали погрешно…

1985г. – Терак 25

Софтуер, проектиран за уред за радиационно облъчване на раково болни, който се използвал в много държави по света, довежда до смъртта на няколко души преди да бъде спрян от употреба (със съответните големи парични загуби на отговорните). Проблемът, който се появил е бил инцидентно превключване между двата режима на работа, което довело до облъчване на пациенти с над 100 пъти над допустимата норма радиация.

1987г. – Черният понеделник

На стоковите борси е имало (и все още има) компютърни програми, които следят пазара и автоматично продават акции при падане под критична точка. На 19 октомври 1987г. инвеститори направили неочакван дъмпинг на пазара в Хонг Конг, което довело до активиране на софтуерните тригери. Това довело до драстично падане на акциите на дадени компании, което от своя страна довело до изхвърляне на определени важни инвеститори от пазара, което пък довело до още активирани тригери. Естествено паниката последвала незабавно. Започнали безразборни купувания и продажби на акции по цял свят. Резултатите довели до падането на индекса Dow Jones с 22.6% и S&P с 20.4%. Това е и най-голямото сътресение на Уол Стрийт до ден днешен.

1988г. – Червеят Морис

Студентът Робърт Морис написва първият компютърен червей (вид вирус), който довежда до сериозни последици. Около 6000 компютри били заразени. Морис използвал недоглеждане при използването на функцията gets() в C при комерсиално използван софтуер. Така той се възползвал от buffer overflow уязвимост, а инсталираният червей всъщност целял съвсем безобидно „да преброи компютрите в интернет“. Това, което всъщност се получило било неочаквана DoS атака (породена от грешка в алгоритъма на червея за проверка дали даден компютър вече е заразен или не е), която сринала множество университетски компютърни мрежи. Студентът бил глобен с $10 000 и 400 часа общественополезен труд, а щетите, които е нанесъл са спорни.

1988г. – Свален пътнически самолет на иранските авиолинии

Пътнически самолет Ейрбъс на Иранските авиолинии, пълен с цивилни хора бил свален погрешка от американски изстребител… заради грешка в софтуера (твърдят американските власти…). Проблемът бил в това, че идентификационният код, който самолета изпратил бил прекалено дълъг и не се побрал на дисплея на компютъра на изстребителя, поради което бил объркан с боен самолет F14. Загинали 290 невинни хора.

1989г. – Разбит ЕйрБъс 320

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

1990г. – AT&T срив във мрежата

Софтуерен бъг в инсталиран фърмуеър на суич на AT&T прави така, че хиляди потребители остават без междуградски разговори. На 15 януари суич в Ню Йорк забива и се рестартира. Вместо това да го „поправи“, довежда до забиване на всичките негови съседни суичове. Което пък довежда до забиване на „съседите на съседите“. В крайна сметка над 100 суича започват да се саморестартират непрекъснато, което довежда до отказ на услуга на над 60 хиляди потребителя за повече от 9 часа. Грешката е поправена като… е върната старата версия на фърмуеъра във всички суичове.

1991г. – Софтуерният бъг на ракетите Пейтриът

Пейтриът са ракети „земя – въздух“. По време на операция „Пустинна буря“ такива ракети са разположени в Израел и Саудитска Арабия със защитна цел. Софтуерът управляващ ракетата записвал скоростта и времето като цели числа, но алгоритъмът, който трябвало да предсказва следващото положение на самолета е работил с числа с плаваща запетая. Закръгленията при деленето (алгоритимът работил с точност до десета от секундата) довели до загуба на точност, като освен всичко друго грешката се увеличавала с напредване на времето. Когато ракетите били разработвани се очаквало да се оперира с тях за не повече от няколко часа и затова грешката дотогава не била открита. Но в „Пустинна буря“ се наложило установките да работят с дни, а освен всичко друго да се борят със самолети и ракети с много по-високи скорости.

Резултатът – 28 загинали американски войници и около 100 ранени от ракета Скъд изпратена от Иракската армия. Последващите изследвания показали, че грешката в софтуера водила до загуба на точност от 20% след 8 часова работа.

1992г. – Закръгляването и Зелената Партия в Германия

Грешка в закръгляването на софтуера довела до това Зелената Партия да вземе 4,97% на изборите вместо реално спечелени 5,00%. Познахте ли? Прагът за влизане в парламента там е точно 5%!

Подобна, но необвързана със софтуерна грешка (а по-скоро с хитра политическа маневра) е и една тема от българските избори за европарламент и за това как Синята Коалиция вкара евродепутат вместо партия Лидер [*].

1994г. – Плаващата запетая на Интел Пентиум

Професор Томас Найсли от колежа Линчбърг написал софтуер, който правил изчисления използвайки хардуера на наличната му компютърна мрежа. През юни 1994г. той открил някои проблеми в резултатите от свои изчисления, и то малко след като бил добавил нов компютър с процесор Пентуим в мрежата. Откритата впоследствие грешка била свързана с числа с плаваща запетая – имало около 0,006% отклонение в очакваната точност и то не при всички числа и операции. И въпреки, че подобен бъг не би затруднил ежедневната работа на никой нормален потребител – грешката става истински кошмар за Интел. Изтеглянето на дефектните чипове от пазара струвала към 475 милиона долара на компанията

1995г. – Пингът на смъртта

Това вече са истински спомени от моето детство. По времето когато влизахме в интернет през аналоговия телефон чрез модеми и висяхме с часове в IRC… Еххх…

Та точно тогава бяха известни т.нар. „nuke“ атаки, които използваха уязвимости в управлението на мрежовия поток в операционната система на даден човек и позволяваха да бъде изхвърлен от IRC, да му забие компютъра в следствие на DoS атака и дори да бъде повреден (да има нужда от преинсталация на операционната система) с атаки, които бяха изцяло дистанционни.

Най-известната от тях по онова време се наричаше „the ping of death“ (изпращане на прекалено голям ping пакет, който довеждаше до buffer overflow). Не само защото караше да забият всички компютри с Windows 95 (съвсем стандартно за nuke програмите), но и защото работеше и върху Linux/Unix машини (които ползваха „гъзарите“, които се правиха на неуязвими). И всичко това се дължеше на един „прецакан“ пакет с ping заявка към съответната машина. „Пачовете“ за въпросния бъг бяха спорни и подобни техники просъществуваха за доста дълго време. В един момент през 97ма излезе Windows 98, върху който въпросните атаки вече мистериозно не работеха. Хората се фокусираха върху по-сериозни модели за хакване…

1996г. – Ариана 5, полет 501

Ракетата е била предназначена за изстрелване на сателит. Ариана 5 преизползвала софтуер от предшественика си Ариана 4. За съжаление на разработчиците се оказало така, че софтуерът на едно място се опитал да запише 64 битово число с плаваща запетая на място определено за 16 битово цяло. Първо забил бекъп компютъра, а секунди по-късно и главния. Това докарало до префорсиране на двигателите на ракетата. Резултатът бил впечатляващо огнено кълбо, в което загинало оборудване за над 300 милиона евро.

1999г. – Орбиталния изследовател на климата на Марс

Въпросният спътник е изпратен в орбитата на Марс през 1998г. За съжаление на 23 септември 1999 НАСА губи връзка с него поради грешки в навигацията. И по-точно грешката била в това, че софтуерът на спътника очаквал конкретни данни подадени в Нютони (N), а наземната система изпратила данни в мерни единици английски паундове (lbf).

2000г. – Нови проблеми с медицинско оборудване и дози радиация

Американската фирма Мултидата Системс Интернейшънъл направила софтуер, който изчислявал пределната доза радиация, която пациентите можели да поемат по време на лъчетерапия. Софтуерът позволявал на докторите да чертаят интерактивни диаграми, като част от тях били важни метални щитове. Софтуерът позволявал да се поставят не повече от 4 щита, но на панамските доктори им трябвали 5. Поради тази причина те „заобиколили защитата“ като обединявали щитовете в един цял с дупка в средата (не питайте, не знам, но се считало за нормално действие, което било позволено и от системата, и от практиката). Бъг в софтуера обаче направил така, че в зависимост от точната позиция на дупката в щита се получавали коренно различни и неочаквани резултати. В резултат на това 8 пациенти умряли, а 20 получили свръх доза радиация и имали тежки усложнения. Докторите, които трябвало да водят паралелни изчисления „на ръка“ били осъдени на смърт.

2000г. – Унищожен спътник от платформата Sea Launch

Sea Launch е уникална платформа за изстрелване на ракети, която се намира в океана. Не само, че за първи път започва да осъществява изстрелване на сателити от море, но е разработена от много широк международен колектив, който обединява руснаци, американци, британци, норвежци и др. Проблемите са много – от двигатели фиксиращи платформата с GPS, секретността на използваните технологии (и несподелянето им с други участници в проекта), дистанционното управление чрез кораб „Командир“ в съседство, до евакуацията на екипажа непосредствено преди изстрелване чрез твърда връзка (тунел между платформата и кораба).

На 12 март 2000г. Sea Launch се намирала на положение 154 градуса на Екватора и била в готовност да изстреля третата си поредна ракета, носеща ICO сателит за мобилни комуникации струващ милиони долари. Малко преди изстрелването обаче софтуерна грешка прави така, че един от клапаните на пневматична система, отговаряща за движението на ракетата. В резултат тя изгубила близо 60% от налягането си, което довело до загуба на мощност в двигателите на ракетата и така тя не успяла да набере необходимата височина и скорост, за да достигне целта си. Ракетата Zenit 3SL задействала автоматичната система за прекратяване на мисията и оборудването паднало в Тихия океан.

Разследването проведено от компанията Боинг доказало, че причината за проблема е бил именно „софтуерна грешка“. Руските им партньори от Энергия и украинските от Южное потвърдили същата експертиза в независимо разследване.

2004г. – Фиаското с майчинските помощи в Обединеното Кралство

През въпросната година софтуерния гигант EDS внедрили софтуерна система за социални услуги, която целяла главно уреждане на плащанията на „майчински“. По същото време отдела за работа и пенсии (DWP) решили да преструктурират цялата агенция са социално подпомагане. Новата структура на агенцията и току що внедрения софтуер се оказали напълно несъвместими и последвали титанични грешки (общо над 500 официално рапортувани). В резултат системата дала погрешно повече пари на над 1,9 милиона души и платила по-малко на над 700 хиляди. После се оказало, че останали над 7 милиона долара нераздадени майчински, като резултат на което последвали около 240 000 жалби. Общите загуби от внедряването на системата към днешна дата се оценяват на 1 милиард долара.

2007г. – Голямото приземяване на самолети

Съвсем „незначителна грешка“ във фърмуеър на една мрежова карта довела до изпращане на грешна информация до компютърната система за защита на границите на САЩ, което довело до „забиване“ на цялата им система. В резултат около 50 полета били отменени, а други 50 забавени. За около 3 часа не е имало полети въобще, а повечето пътници са били засегнати за около 8 часа.

2010г. – Отстраняване на грешни органи от донори

Софтуерен бъг в система за менажиране на донорска програма в Англия довежда до това, че грешни органи са извадени с операция от общо 25 пациенти. След спирането на системата впоследствие са открити грешки в обработката на над 800 000 документа.

2010г. – Спирането на 10 000 GPS приемника

Около 10 000 GPS приемника не са могли да работят за около 2 седмици заради лошо написан софтуер от фирма работеща за министерството на отбраната на САЩ. Проблемът остава далеч от публичното пространство, защото засягал само военните.

2010г. – Голямото закъснение за работа

Е, да – това е смешно в сравнение с останалите споменати досега. Но наистина хиляди хора са закъснели за работа поради смяната на часовото време в комбинация с бъг в Apple iPhone 4, който сменил времето на часовника на телефона автоматично, но будилника останал да работи по старото време…

2011г. – Банкомати дават безплатно пари в Австралия

Цяла вълна от хора заляла банкомати в Австралия поради бъг в софтуера, който позволил да се изтеглят повече пари, отколкото човек имал налични в акаунта си. Двама младежи дори били арестувани. Е, в крайна сметка се оказало, че безплатните пари не били непроследими, поради което в крайна сметка почти всички върнали взетото „по един или друг начин“.

2011г. – Хонда изтеглила 1 милион автомобила от пазара

Автомобилният гигант Хонда изтегли над 1 милион автомобила от пазара, за да поправи в тях две независими грешки. Единият проблем бил механичен – некачествени контактори в ключа за сваляне на страничното стъкло. Другият обаче бил софтуерна грешка свързана с управлението на скоростната кутия. Може да звучи деструктивно, но софтуерът позволявал при определени условия да включи скоростната кутия на задна скорост докато автомобилът се движи… напред.

2011г. – Делото срещу AXA Rosenberg

Фирмата загубила $217 000 000 поради софтуерна грешка в инвестиционния модел на системата си. Не само, че се наложило да върнат парите, но им наложили допълнително $25 000 000 за това, че се опитали да прикрият проблема.

2011г. – Банкоматите в Япония

Бъг в софтуера на банката Мизухо довела до блокиране на хиляди банкомати в страната. В резултат били забавени плащания за над 9 милиарда долара…

2011г. – Облакът на американската армия… не работи

Системата за комуникация на армията на САЩ в Ирак и Афганистан, която струва 2,7 милиарда долара… се оказва, че не успявала да върши успешно работата, за която е предназначен (главно размяна на криптирани съобщения). Освен това системата често забивала и не работела.

2012г. – Камерите на ТрендНет

Над 50 000 потребителя на охранителните системи на ТрендНет в САЩ са станали жертва на доста срамен за компанията (и някои хора) бъг. Била открита грешка във фърмуеъра на камерите за видеонаблюдение, която позволявала на неоторизирани лица да наблюдават хората в техните къщи свободно чрез интернет. Делата срещу компанията и евентуалните ѝ загуби тепърва престоят да бъдат уточнени.

2012г. – Високосната година на Windows Azure

На 29 февруари тази година редица услуги от „облакът“ на Майкрософт „забиват“.  Проблемът е между виртуалната машина и операционните системи на физическите сървъри. Виртуалната машина трябва да генерира сертификат, с който се криптират съобщенията, който е винаги с валидност 1 година. На 29 февруари 2012г. една от машините генерирала сертификат до… 29 февруари 2013г., което е невалидна дата. С това въпросният сървър забил. Автоматизираната система за контрол над хостовете се опитала да рестартира машината три пъти през интервал от 25 минути – естествено все неуспешно. За нещастие системата не рестартира само проблемната машина, но и други свързани с нея… за които се наложило също да се генерират нови сертификати, които също били с грешна дата. В резултат огромна част от облака на Microsoft е засегнат и остава неработещ за цели 12 часа докато се напише и внедри кръпка, която да поправиа грешката. Щетата е частично ограничена поради друга система за сигурност, която спряла всякакви автоматизирани действия в облака при повече от предварително зададен брой грешки, но отзвукът в публичното пространство остава огромен.

А вие се притеснявахте за нашите родни софтуерни премреждия? Как ви се струва „DoS атаката“ на сайта на детските градини, изтичането на данни от sofia.bg и продължаващото изтичане на данни от недонаправения ни търговски регистър? На фона на горните май смешно…

П.П. Идеята за статията, както и голяма част от информацията е взаимствана от тук.

 



9 коментара


  1. Dimitar Georgiev каза:

    Има и хакване на заводите на Мерцедес, което обаче не получава толкова популярност. В последствие са изтеглени хиляди автомобили А-класа…промените са засегнали техническите параметри на автомобилите, като ги правят нестабилни при натоварвания в завои …според лична информация, с която разполагам има и българска следа ;)

  2. Иван каза:

    Това беше интересно.

    Като прочетох за IRC и модемите се сетих за нещо друго – CTCP пинг със стринга +++ATH0. Трите плюса вкарваха модема в команден режим и караха буквите след него да се интерпретират като команда, а ATH0 е командата на модема за „затваряне на телефона“ :)

  3. mertol каза:

    Ракетите се казват Ариана.

  4. Божо каза:

    “Най-известната от тях по онова време се наричаше „the ping of death“ (изпращане на прекалено голям ping пакет, който довеждаше до buffer overflow). Не само защото караше да забият всички компютри с Windows 95 (съвсем стандартно за nuke програмите), но и защото работеше и върху Linux/Unix машини (които ползваха „гъзарите“, които се правиха на неуязвими). „

    Нормално. В случая проблемът беше грешка в tcp/ip стека, разработен от bsd, който и microsoft ползват :D Всъщност, понеже MS бяха вградили доста стара версия на bsd-стека, повториха всички грешки, вече отстранени в юникс системите, като номера с двата слаша например.

  5. mertol – кои ракети?

  6. hack каза:

    1995 в БНБ сменят сетълментът извършващ автоматизиран между банков клиринг. За нещастие ситуацията е същата като 1982, когато ЦРУ бъгнало газопровода. Краден български софтуер със защита тип троянски кон, довежда до резултати подобни на фиаското с майчинските 2004. 16 банки фалират, тъй като само малък процент от парите са в наличност, другите са числа в компютър. Интересно какво е българското участие в случая от 2004 :) някоя фирма да е работила на „ишлеме“?

  7. mertol каза:

    1996г. – Airlane 5, полет 501

  8. Владо каза:

    „Черният понеделник“ е проблем на хората, не на софтуера.

  9. Добавих информация за софтуерния бъг на платформата Sea Launch от 2000г.

Добави коментар

Адресът на електронната поща няма да се публикува


*