W każdym programie jest jeszcze jeden błąd
Mateusz [email protected]
LogicalTrust
SecurityBsidesWarszawa, 11 października 2014 r.
$ whoami
I pentester w LogicalTrustI open source:
I PHP - bug fixingI NetBSD - libsaslc(3)
I bezpieczeństwo:I PHP - CVE-2010-1868, CVE-2010-1917, CVE-2010-4150,
CVE-2010-4156, CVE-2011-1938, ...I stunnel - CVE-2013-1762I OpenSSH - CVE-2011-0539I Apache - CVE-2014-0117, CVE-2014-0226
∀P∃x : P (x) = crash
Prawo Murphy’ego: w każdym programie (dłuższym niż 100 linijek)jest jeszcze jeden błąd.
Chcemy nauczyć się na błędach innych jak zminimalizować ryzykoprawdziwości powyższego ”prawa” dla naszych programów.
Bugs
Źródło: http://upload.wikimedia.org/wikipedia/commons/8/8a/H96566k.jpg
Grace Hopper
Źródło: http://www.digitalmediaacademy.org/wp-content/uploads/images/Harvard-Grace-Hopper.jpg
Dziś...
Błędy są wszędzie:I ...bo oprogramowanie jest wszędzie?I ...trend się raczej nie będzie zmniejszał...I ...co nas czeka?
Prawo Murphy’ego: Gdyby budowniczowie budowali swoje budynki,tak jak programiści piszą swoje programy, to pojawienie się pierwszegodzięcioła doprowadziłoby do upadku cywilizacji.
Therac-25
I od 1985 r. do 1987 r. 6 przypadków poparzenia pacjentówI 3 pacjentów zmarło w następstwie wypadku
Therac-25
I od 1985 r. na rynkuI koszt produkcji 1 mln USDI stworzony przez AECL (Atomic Energy of Canada Limited,
Kanada) oraz CSR (Francja)I PDP-11 + terminalI sprzęt następnej generacji (Therac-6, Therac-20)I dwa tryby pracy: X-Ray oraz ElectronI moc 25 MeVI jeden programistaI oprogramowanie napisane w assemblerze
Therac-25 - maszyna
Źródło: Medical Devices: The Therac-25 - Nancy Leveson, University of Washington
Therac-25 - incydent I
I czerwiec 1985 r., Marietta, GA, USAI pacjentka po zabiegu informuje operatora o oparzeniuI szpital szacuje, że zaaplikowano ok. 100 razy mocniejszą dawkęI AECL twierdzi, że to niemożliwe i nie podejmuje dalszych krokówI pacjentka traci pierś oraz czucie w ręce
Therac-25 - incydent II
I lipiec 1985 r., Ontario, KanadaI podczas zabiegu maszyna zatrzymuje się z błędem ”H-tilt”I maszyna zgłasza, że nie wykonano zabieguI operator wciska magiczny klawisz P kontynuacji leczeniaI po piątej próbie maszyna zatrzymuje się i wymaga restartuI pacjent zgłasza pieczenie w udzieI wezwany technik nie jest w stanie zdiagnozować co się stałoI pacjent umiera trzy miesiące później w wyniku nowotworuI AECL naprawia jakieś błędy - nie mając pojęcia co się wydarzyłoI AECL wysyła informacje do czterech klientów, żeby przerywać
leczenie jeżeli pojawi się błąd ”H-tilt”
Therac-25 - incydent III
I styczeń 1986 r., Yakima, WA, USAI pacjentka zgłasza dolegliwość uda, na skórze pojawiają się zmianyI lekarze decydują się na kontynuację leczeniaI rok później lekarze orientują się, że pacjentka otrzymała za dużą
dawkęI AECL twierdzi, że to niemożliwe oraz, że nie było podobnych
przypadkówI pacjentka została zoperowana i ma się dobrze (podobno do
dziś...)
Therac-25 - incydent IVI marzec 1986 r., Tyler, TX, USAI operator myli się i wprowadza opcję X-Ray zamiast ElectronI szybko koryguje błądI maszyna przerywa zabieg z komunikatem Malfunction 54I operator był przyzwyczajony do dziwnych zachowań maszyny,
ponieważ na ekranie pojawia się informacja o niskiej dawcekontynuuje leczenie przyciskiem P
I maszyna ponownie informuje o błędzieI aparatura audio-video monitorująca pokój zabiegowy jest
niesprawna, operator nie widzi cierpienia pacjentaI po drugiej dawce pacjent uderza w drzwi, operator przerywa
zabiegI pacjent traci czucie w nogach i rękach, ledwo może mówićI AECL twierdzi, że pacjent został porażony prądem przez złe
podłączenie maszynyI niezależna firma nie potwierdza oskarżeń AECLI AECL twierdzi, że to niemożliwe oraz, że nie było podobnych
przypadkówI po pięciu miesiącach od zdarzenia pacjent umiera
Therac-25 - incydent V
I kwiecień 1986 r., Tyler, TX, USAI operator myli się i wprowadza opcję X-Ray zamiast ElectronI szybko koryguje błądI maszyna przerywa zabieg z komunikatem Malfunction 54I operator kontynuuje zabieg przyciskiem PI operator słyszy krzyk pacjentaI operator przerywa leczenieI pracownicy szpitala w wyniku śledztwa ustalają tragiczną
sekwencjęI FDA orientuje się, że Therac-25 ma defekty i wymusza na AECL
korekcję
AECL wprowadza poprawki
I nie wprowadzono zabezpieczeń sprzętowychI wyłączono możliwość wznowienia leczenia przyciskiem PI poprawiono komunikaty błędówI FDA wymusza zmiany w procesie wytwarzania oprogramowania
przez AECLI QA manager z AECL przyznaje, że:
I wykonali ”małą liczbę” testów oprogramowaniaI później przyznał, że testami było 2700 godzin pracy urządzenia...
I FDA zmusza AECL do dokładnych testów
Therac-25 - incydent VI
I styczeń 1987 r., Yakima, WA, USAI incydent wydarzył się przed wdrożeniem poprawek AECLI operator ustawia dawkęI maszyna wyświetla błąd, operator kontynuuje leczenieI maszyna twierdzi, że pacjent otrzymał dawkę ”7 rad”I pacjent skarży się na poparzenieI pacjent umiera trzy miesiące później w następstwie incydentu
Therac-25 - race condition
Źródło: Medical Devices: The Therac-25 - Nancy Leveson, University of Washington
Therac-25 - integer overflow
Źródło: Medical Devices: The Therac-25 - Nancy Leveson, University of Washington
Therac-25 - co zrobiono źle?
I błędy w projekcieI brak formalnych wymagań i testówI decyzja o usunięciu sprzętowych zabezpieczeń
I błędy w dokumentacjiI brak szczegółów dot. błędówI brak opisu sytuacji awaryjnych
I błędy w oprogramowaniuI operatorzy uodpornili się na sytuacje krytyczneI programowanie wielowątkowe jest trudneI brak testów
I błędy w reagowaniu na incydentyI ignorowanie błędów zgłaszanych przez użytkownikówI ignorowanie incydentów
Patriot
I 25 lutego 1991 r. podczas wojny w Zatoce Perskiej nie zestrzeliłirackiej rakiety scud
I Rakieta uderza w amerykańskie baraki zabijając 28 osób i raniącponad 100
Patriot
I system powstał w latach 70. do operacji w Europie przeciwkorakietom, którymi dysponował ZSSR
I typowe dla ZSSR rakiety osiągały prędkość 2 MACHI sprzęt z lat 70. - ograniczona precyzja wykonywania operacji
zmiennoprzecinkowychI aktualizacja oprogramowania trwa ok. 1-2 godzinyI restart urządzenia trwał ok. 60-90 sekundI sprzęt przeznaczony do krótkiego operowania (do 8 godzin) i
przewożenia w następne miejsceI system wsławił się pierwszym aktywnym zwalczaniem rakiet
balistycznych wroga...I ...rakiet widmo
Patriot - Jak działa?
Źródło: GAO/IMTEC-92-26 Patriot Missle Software Problem
Patriot - Incydent
I 25 lutego 1991 r., Dhahran, Arabia Saudyjska - wojna w ZatocePerskiej
I Baza lotnicza w Dhahran chroniona jest przez 6 instalacjisystemu Patriot
I Irackie Scudy osiągają prędkość 5 MACHI System Patriot działał bez restartu ponad 100 godzinI Jedna z rakiet trafia w amerykańskie baraki zabijając żołnierzyI Kilka tygodni wcześniej Izrael (jeden z użytkowników systemu)
donosi o nieprawidłowościachI Poprawione oprogramowanie pojawia się w bazie w Dhahran
dzień po incydencie...
Patriot - Błąd
I do wyliczenia następnej pozycji wrogiej rakiety używany był czaspracy urządzenia w sekundach
I czas pracy wyliczany był przez inkrementowany co 0.1s licznikI ...aby otrzymać liczbę sekund od włączenia urządzenia mnożono
licznik przez liczbę 0.1I Patriot miał 24 bitową jednostkę liczb zmiennoprzecinkowychI dec (0.1) = bin (0.00011001100 (1100))I W rejestrze urządzenia pojawiała się wartość ok. 0.099999905
Patriot - Błąd
Źródło: GAO/IMTEC-92-26 Patriot Missle Software Problem
Patriot - Błąd
Źródło: GAO/IMTEC-92-26 Patriot Missle Software Problem
Patriot - Co zrobiono źle?
I poinformowano użytkowników systemu, że może działać źle przydługim czasie pracy, ale nie wskazano konsekwencji
I nie wzięto pod uwagę nietypowego użycia systemuI urządzenia do logowania nie były użyte ze względu napotencjalną destabilizację pracy, w którą wierzyli dowódcy
I operacje na liczbach zmiennoprzecinkowych są trudne...
Ariane-5
I Projekt Europejskiej Agencji KosmicznejI budowa zajęła 10 lat i pochłonęła 7 miliardów dolarówI następca Ariane-4I oprogramowanie w języku ADAI szybsza, większa, lepsza od poprzedniczki...
Ariane-5
Źródło: The Bug That Destroyed a Rocket, Mordechai Ben-Ari, STWIS
Ariane-5 - krok po kroku...
I system autodestrukcji niszczy rakietę w wyniku komendy zmianyparametrów lotu o ponad 20 stopni
I komputer pokładowy wydaje polecenie korekcji lotu o ponad 20stopni
I komputer pokładowy otrzymuje dziwne dane od wew. systemunawigacji
I wew. system nawigacji wysyła błąd do komputera pokładowegoI wew. system nawigacji nie może przełączyć się na zapasowy, bo
ten już nie działaI wew. system nawigacji zgłasza wyjątek - rzutowanie double na
short int poza zakresem (Operand Error)
Ariane-5 - wstydliwe fakty
I programiści uważali, że nie będzie błędu konwersji...I funkcja, która zgłosiła błąd, była bezużyteczna podczas lotu
rakietyI ...to pozostałość po Ariane-4, zbędna w Ariane-5...
Ariane-5 - Co zrobiono źle?
I nie sprawdzono dokładnie założeń oprogramowania Ariane-4I nie przeprowadzono symulacji programowejI nie było systemu testówI błędy projektowe
Nasa - Mars Climate Orbiter
25 września 1999 r. NASA ogłasza niepowodzenie misji MCO
Nasa - Mars Climate Orbiter
Jedyne wykonane zdjęcie przez sondę... Źródło: NASA
NASA - Mars Climate Orbiter - incydent
I po ok. 10 miesiącach sonda dociera do MarsaI 23 września 1999 r.:
I 08:41 (UTC) - sonda zaczyna proces wejścia na orbitęI 08:50 (UTC) - przygotowanie do włączenia głównego silnikaI 09:00 (UTC) - silnik sondy włączonyI 09:04 (UTC) - utrata łączności z sondą (Ziemia została
przysłonięta przez Marsa)I 09:27 (UTC) - oczekiwane wznowienie łączności...
I 25 września 1999 r. - NASA ogłasza niepowodzenie misjiI śledztwo wykazało, że sonda spaliła się w atmosferze MarsaI koszt misji szacowany jest na ok. 700 mln USD
NASA - Mars Climate Orbiter - błąd
Źródło: Xession, wikipedia.orgSystem przetwarzania instrukcji kontroli naziemnej używał innych jednostek niż reszta sondy.
NASA - Mars Climate Orbiter - co zrobiono źle?
I zignorowano wątpliwości pracowników dot. lotu sondyI problemy komunikacyjne między zespołamiI brak szczegółowych testów
Morris Worm
I Robert Morris 2 listopada 1988 r. uwalnia pierwszego robakainternetowego
I pierwsza infekcja następuje ok. 20:00I 3 listopada ok. 0:30 pierwszy administrator wykrywa podejrzany
proces w sytemieI dwie godziny później większość administratorów nie może
zalogować się do systemuI restart systemu nie pomagałI robak zainfekował ok. 10% komputerów w ówczesnym internecieI normalne funkcjonowanie sieci przywrócono 10 listopada 1988 r.I straty ok. 100 tys. - 10 mln USD
Morris Worm - błąd
I wykorzystano błędy w rsh, sendmail oraz fingerdI błąd w fingerd polegał na użyciu funkcji gets(3)I Morris zaszył w robaku kod sprawdzający czy dana maszyna jest
już zainfekowana...I ...ale raz na siedem razy (losowo) infekował komputer jeszcze raz
Robert Morris
I przyznał się do napisania robakaI sąd skazał Morrisa na 10 tys. dolarów grzywny, 3 letni dozór
sądowy i 400 godzin prac społecznychI pierwsza osoba skazana na mocy Computer Fraud and Abuse ActI Morris dziś jest profesoremI zainspirował powstanie pierwszego zespołu CERT (CMU)
Co zrobiono źle?
Morris przyznał: ”mogłem napisać symulator...”
Ku przestrodze - Toyota
Źródło: Bookout vs. Toyota - Michael Barr
I samochody same zaczynają przyśpieszaćI ranni oraz zabici w wyniku błęduI strata: ok. 1,5 mld USD
Intel - FDIV
Źródło: wikipedia.org
I błąd w dokładności operacji dzielenia (już na 4 miejscu poprzecinku!)
I błąd spowodowany przez użycie niezainicjalizowanych komórektablicy
I Intel decyduje się na wymianę procesorówI strata: 450 mln USD
Słowo na niedzielę...
I kontrola podstawą zaufaniaI jeżeli coś może się wydarzyć, to na pewno się wydarzy (expect
unexpected)I wytwarzanie oprogramowania nie jest łatweI co robić, jak żyć?
Czas na pytania (i odpowiedzi)
Q&A