w każdym programie jest jeszcze jeden błąd... [securitybsides warsaw 2014]

Post on 29-May-2015

366 Views

Category:

Software

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Błędy w oprogramowaniu dosięgają nas każdego dnia, w postaci rebootujących się telefonów, zawieszających się komputerów czy programów niespodziewanie kończących swoje działanie. Przyjrzymy się błędom, które miały znacznie gorsze konsekwencje (Therac-25, Patriot, Ariane 5, ...) i postaramy się nauczyć na pomyłkach innych jak pisać kod, który działa.

TRANSCRIPT

W każdym programie jest jeszcze jeden błąd

Mateusz Kocielskim.kocielski@logicaltrust.net

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ś...

Źródło: https://www.atlassian.com

Dziś...

Źródło: http://wikipedia.org

Dziś...

Źródło: http://wikipedia.org

Dziś...

Źródło: http://wikipedia.org

Dziś...

Źródło: http://wikipedia.org

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.

Jutro?

Źródło: http://wikipedia.org

A może to już dziś?

Źródło: http://wikipedia.org

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

https://www.youtube.com/watch?v=gp_D8r-2hwk

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

top related