Jövőbe tekintő sorozat 5. rész: A világtörténelem legnagyobb bugjai

Link másolása
Nemrégiben olvastam a Wired magazin által összeállított listát a történelem legnagyobb szoftver bugjairól. Érdemesnek találtam a témát, hogy utánajárjak és ezen emlékezetes, fatális programhibákról egy – már megszokott módon – rendhagyó Jövőbe Tekintő részt írjak.
Talán sokatoknak nem kell magyaráznom, hogy mi az a szoftver bug, de azok kedvéért, akik nem tudják, miről van szó megpróbálom körbeírni. A programok írása közben előfordulhat, hogy a programozó tapasztalatlansága, figyelmetlensége, vagy egyszerűen csak másnapossága miatt nem jár el elég körültekintően és hiba marad a kódban. Legtöbbször ez szélsőséges esetekkor derül ki, tehát nem feltétlenül jönnek felszínre teszteléskor. Ilyen váratlan hibák lehetnek például memória túlcsorduláskor.
Következzen tehát az említett lista, a történelem legnagyobb bugjaival:

1962. Július 28. Mariner I űrpróba.
A rakéta koordinációs szoftverében maradt egy bug, ami miatt kilövés után a Mariner I eltért a tervezett útvonaltól. A misszió vezetősége az Atlanti Óceán felett felrobbantotta a rakétát. Későbbi vizsgálatok során kiderült, hogy egy papírra írt formula rosszul lett lekódolva és ez okozta a helyes pályáról való letérést.
Link: http://en.wikipedia.org/wiki/Mariner_1


1982. Szovjet gáz vezeték.
A CIA egy bugot helyezett annak a kanadai rendszernek a kódjába, amit a szovjetek vettek meg a szibériai gáz vezetékeik irányítására. A szovjeteknek ez a lépése része volt egy távolabbi elképzelésüknek, mi szerint felvásárolják, illetve ellopják a fejlett amerikai technológiákat. Miután ez a CIA tudomására jutott, aktiválta a bugot, melyet a szovjet mérnökök nem fedeztek fel, a hiba így be is következett. Ennek eredménye a történelem legnagyobb, nem nukleáris robbanása.
Link: http://www.msnbc.msn.com/id/4394002

1985-1987. Therac-25 orvosi műszer. Sok egészségügyi intézmény megkapta az akkoriban kifejlesztett új verziójú Therac sugárkezelőt. Az új eszköz kétféle irányított sugárzást volt képes kibocsátani: béta részecskéket, illetve röntgent. A röntgen elektronágyúja és a beteg közé egy fémlemezt helyzetek, mely védi a pácienst a sérüléstől. A nagy újítása a gépnek a számítógépesen pozícionálható lemez volt, ezt ugyanis megbízhatóbbnak találták, mint a régebbi 20-as széria lemez pozícionálóját. A mérnökök azzal nem számoltak, hogy mind a 20-as, mind a 25-ös gépnek az operációs rendszerét egy e téren tapasztalatlan programozó írta. Abban pedig olyan bug maradt, ami bizonyos esetekben jött csak elő, akkor viszont a röntgensugarat úgy bocsátotta ki a Therac, hogy közben a védő lemezt nem pozícionálta. Öten meghaltak, további betegek pedig súlyosan megsérültek.
Link: http://en.wikipedia.org/wiki/Therac-25



1988. Buffer túlcsordulás a Berkeley Unix finger daemon-jában.
Az első internetes féreg (Morris Worm) körülbelül 5000 gépet fertőzött meg kevesebb, mint egy nap alatt, kihasználva a buffer túlcsordulást. A rendszer standard input/output könyvtárában volt egy gets() nevű funkció, amit arra terveztek, hogy szöveget fogadjon hálózaton keresztül. A hiba abban rejlett, hogy nem szabtak felső korlátot a fogadható adatoknak, így egy kellőképpen nagy bemenetet küldve a célszámítógépnek, a féreg átvehette az irányítást a felett. A programozók eltávolították a gets() funkciót a rendszerből, a C programozási nyelv standard input/output könyvtárának viszont a mai napig része.
Link: http://www.eweek.com/article2/0,1895,1245602,00.asp

1988-1996 Kerberos véletlenszám-generátor.
A Kerberos védelmi rendszer készítői nem fordítottak elég figyelmet a rendszerük véletlenszám-generátorára, mely így nem valósan generált értéket adott vissza. 8 éven keresztül ennek a hibának köszönhetően könnyedén be lehetett jutni olyan rendszerekbe, amelyek megbíztak a Kerberos védelmében. Arról, hogy a hibát kijavították-e, máig nem tudni semmit.
Link: http://citeseer.ist.psu.edu/dole97misplaced.html

1990. Január 15. AT&T hálózati leállás.
Egy bug az AT&T #4ESS nagytávolságú hálózati switch-ek új szoftverében újraindulást eredményezett, ha egy szomszédjától újraindulás utáni helyreállás üzenetet kapott. Az említett napon New Yorkban leállt egy switch, helyreállás után a szomszédjával történt ugyanez. Ez így ment tovább 114 switchen keresztül, amik 6 másodpercenként újraindították egymást, ezzel 60 ezer embert hagyva 9 órán át nagytávolságú hálózati elérés nélkül. A megoldás: visszatöltötték az előző verziójú szoftvert mindegyikre.
Link: http://www.cs.berkeley.edu/~nikitab/courses/cs294-8/hw1.html

1993. Intel Pentium lebegőpontos osztás.
Szilikon hiba miatt az Intel híres Pentium chipje hibákat produkált egy adott tartományba eső lebegőpontos számok osztásakor. Például az 4195835.0/3145727.0 1.33374-at adott eredményül 1.33382 helyett, ami 0.006% hibát jelent. Ez ugyan nem sok felhasználónak okozott gondot, de miután kiderült, hogy 3 és 5 millió közötti darab, eme hibával küszködő Pentium került forgalomba, közfelháborodást váltott ki az eset. Az Intel első ajánlata az volt, hogy kicseréli a chipeket azoknak, akik bizonyítani tudják, hogy feltétlenül nagy pontosságú számításokra van szükségük. Aztán megenyhült a cégóriás és kicserélte mindenkinek, aki kérte. Mindez 475 millió dollár veszteséget jelentett az Intelnek.
Link: http://www.willamette.edu/~mjaneba/pentprob.html



1995-1996. A Ping halál.
A ping hibakezelő kódjában lévő hiba miatt több operációs rendszer is veszélyben volt, ha egy rosszul megformázott ping csomagot küldtünk neki bárhonnan az internetről. Leginkább a Windows-t használók voltak veszélyben, ugyanis a hibás csomag értelmezésekor megjelent a jól ismert kék halál. Kisebb arányban ugyan, de a Macintosh és Unix rendszerek sem lehettek biztonságban.
Link: http://www.cert.org/advisories/CA-1996-26.html

1996. Június 4. Ariane 5 501-es járat.
Az Ariane 4 rakétahajtómű vezérlő szoftverét, mely már akkor bizonyított, felhasználták az 5-ös sorozatnál is. Az Ariane 5 gyorsabb hajtóműve azonban aritmetikai hibát okozott a gép központi számítógépében. A hiba a 64 bites lebegőpontos számokról 16 bites előjeles integerre való konvertáláskor jelentkezett. Az Ariane 5 nagyobb számokra konvertált, mint tette azt a 4, így túlcsordulás következtében a repülés-vezérlő gép összeomlott. Az 501-es járat másodlagos számítógépe 0.05 másodperccel az elsődleges után omlott össze. Ezeknek következtében pedig indulás után 40 másodperccel a túlterhelt hajtóművek működésképtelenné váltak.
Link: http://en.wikipedia.org/wiki/Ariane_5_Flight_501
http://homepages.inf.ed.ac.uk/perdita/Book/ariane5rep.html



2000. November. National Cancer Institute, Panama City.
A betegek daganatos elváltozásait egy speciális készülékkel kezelték. A gép sugárzást bocsát ki, mely elpusztítja a rosszindulatú sejteket. A Multidata Systems International ehhez készített egy vezérlő szoftvert, mely kiszámolja a szükséges adagot, valamint lehetővé teszi a technikusoknak, hogy egy képernyőre rajzoljanak un. blokkokat. Ahova blokkokat rajzoltak oda a gép automatikusan elhelyez egy védőlemezt, hogy az egészséges szöveteket megkímélje a sugárzástól. Az eszközt panamai doktorok is használták, noha eredetileg azt csak technikusok kezelhetté volna. A doktorok rájöttek, hogy gyorsabban haladnak, ha a kezelendő területet nem körberajzolják blokkokkal, egyenként, hanem rajzolnak egy nagyobb méretű blokkot és a közepébe egy kicsit, ahol át lesz eresztve a sugárzás. Arra azonban nem számítottak, hogy a programban felejtett bug miatt ha belső, kisebb blokk vonalait az egyik irányból rajzolják, akkor helyes dózist számol a gép, míg ha ellenkező irányban rajzolják meg, akkor dupla mennyiségűt javasol. Nyolc halálos áldozatról tudunk, további húsz személy szenvedett súlyos sérüléseket a túlzott sugárzástól. Az eset óta előírás, hogy kézzel utána kell számolni a számítógép által javasolt erősségnek.

Link: http://www.baselinemag.com/article2/0,1397,1544403,00.asp

Sokat lehetne vitatkozni, hogy valóban mi számít a legnagyobb bugok közé. Például az y2k problémáról nem is esett szó, de fentebb említett esetek kimenetele legtöbbször tragikus, emberáldozatokat követelt. Mielőtt elítélnénk a számítógépeket, melyek egyre több területen végzik ember helyett a munkát, érdemes figyelembe venni azt, hogy ezeket a hibákat gépek követték el ugyan, de a bugok eredete emberi hibára vezethető vissza. Hibátlan programot nehéz írni, de ha nem a ma oly divatos „időre készítünk" munkastílust követnék sokan, akkor kellő odafigyeléssel nem lehetetlen.

Kapcsolódó cikkek

Hozzászólás írásához be kell jelentkezned!
Ha nem vagy még tag, regisztrálj! 2 perc az egész.
Egy kis türelmet kérünk...