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

55

Upload: logicaltrust-pl

Post on 29-May-2015

365 views

Category:

Software


0 download

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

Page 1: W każdym programie jest jeszcze jeden błąd... [SecurityBSides Warsaw 2014]
Page 2: W każdym programie jest jeszcze jeden błąd... [SecurityBSides Warsaw 2014]

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

Mateusz [email protected]

LogicalTrust

SecurityBsidesWarszawa, 11 października 2014 r.

Page 3: W każdym programie jest jeszcze jeden błąd... [SecurityBSides Warsaw 2014]

$ 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

Page 4: W każdym programie jest jeszcze jeden błąd... [SecurityBSides Warsaw 2014]

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

Page 5: W każdym programie jest jeszcze jeden błąd... [SecurityBSides Warsaw 2014]

Bugs

Źródło: http://upload.wikimedia.org/wikipedia/commons/8/8a/H96566k.jpg

Page 6: W każdym programie jest jeszcze jeden błąd... [SecurityBSides Warsaw 2014]

Grace Hopper

Źródło: http://www.digitalmediaacademy.org/wp-content/uploads/images/Harvard-Grace-Hopper.jpg

Page 7: W każdym programie jest jeszcze jeden błąd... [SecurityBSides Warsaw 2014]

Dziś...

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

Page 8: W każdym programie jest jeszcze jeden błąd... [SecurityBSides Warsaw 2014]

Dziś...

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

Page 9: W każdym programie jest jeszcze jeden błąd... [SecurityBSides Warsaw 2014]

Dziś...

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

Page 10: W każdym programie jest jeszcze jeden błąd... [SecurityBSides Warsaw 2014]

Dziś...

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

Page 11: W każdym programie jest jeszcze jeden błąd... [SecurityBSides Warsaw 2014]

Dziś...

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

Page 12: W każdym programie jest jeszcze jeden błąd... [SecurityBSides Warsaw 2014]

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.

Page 13: W każdym programie jest jeszcze jeden błąd... [SecurityBSides Warsaw 2014]

Jutro?

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

Page 14: W każdym programie jest jeszcze jeden błąd... [SecurityBSides Warsaw 2014]

A może to już dziś?

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

Page 15: W każdym programie jest jeszcze jeden błąd... [SecurityBSides Warsaw 2014]

Therac-25

I od 1985 r. do 1987 r. 6 przypadków poparzenia pacjentówI 3 pacjentów zmarło w następstwie wypadku

Page 16: W każdym programie jest jeszcze jeden błąd... [SecurityBSides Warsaw 2014]

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

Page 17: W każdym programie jest jeszcze jeden błąd... [SecurityBSides Warsaw 2014]

Therac-25 - maszyna

Źródło: Medical Devices: The Therac-25 - Nancy Leveson, University of Washington

Page 18: W każdym programie jest jeszcze jeden błąd... [SecurityBSides Warsaw 2014]

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

Page 19: W każdym programie jest jeszcze jeden błąd... [SecurityBSides Warsaw 2014]

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”

Page 20: W każdym programie jest jeszcze jeden błąd... [SecurityBSides Warsaw 2014]

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

Page 21: W każdym programie jest jeszcze jeden błąd... [SecurityBSides Warsaw 2014]

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

Page 22: W każdym programie jest jeszcze jeden błąd... [SecurityBSides Warsaw 2014]

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ę

Page 23: W każdym programie jest jeszcze jeden błąd... [SecurityBSides Warsaw 2014]

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

Page 24: W każdym programie jest jeszcze jeden błąd... [SecurityBSides Warsaw 2014]

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

Page 25: W każdym programie jest jeszcze jeden błąd... [SecurityBSides Warsaw 2014]

Therac-25 - race condition

Źródło: Medical Devices: The Therac-25 - Nancy Leveson, University of Washington

Page 26: W każdym programie jest jeszcze jeden błąd... [SecurityBSides Warsaw 2014]

Therac-25 - integer overflow

Źródło: Medical Devices: The Therac-25 - Nancy Leveson, University of Washington

Page 27: W każdym programie jest jeszcze jeden błąd... [SecurityBSides Warsaw 2014]

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

Page 28: W każdym programie jest jeszcze jeden błąd... [SecurityBSides Warsaw 2014]

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

Page 29: W każdym programie jest jeszcze jeden błąd... [SecurityBSides Warsaw 2014]

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

Page 30: W każdym programie jest jeszcze jeden błąd... [SecurityBSides Warsaw 2014]

Patriot - Jak działa?

Źródło: GAO/IMTEC-92-26 Patriot Missle Software Problem

Page 31: W każdym programie jest jeszcze jeden błąd... [SecurityBSides Warsaw 2014]

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

Page 32: W każdym programie jest jeszcze jeden błąd... [SecurityBSides Warsaw 2014]

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

Page 33: W każdym programie jest jeszcze jeden błąd... [SecurityBSides Warsaw 2014]

Patriot - Błąd

Źródło: GAO/IMTEC-92-26 Patriot Missle Software Problem

Page 34: W każdym programie jest jeszcze jeden błąd... [SecurityBSides Warsaw 2014]

Patriot - Błąd

Źródło: GAO/IMTEC-92-26 Patriot Missle Software Problem

Page 35: W każdym programie jest jeszcze jeden błąd... [SecurityBSides Warsaw 2014]

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

Page 36: W każdym programie jest jeszcze jeden błąd... [SecurityBSides Warsaw 2014]

Ariane-5

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

Page 37: W każdym programie jest jeszcze jeden błąd... [SecurityBSides Warsaw 2014]

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

Page 38: W każdym programie jest jeszcze jeden błąd... [SecurityBSides Warsaw 2014]

Ariane-5

Źródło: The Bug That Destroyed a Rocket, Mordechai Ben-Ari, STWIS

Page 39: W każdym programie jest jeszcze jeden błąd... [SecurityBSides Warsaw 2014]

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)

Page 40: W każdym programie jest jeszcze jeden błąd... [SecurityBSides Warsaw 2014]

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

Page 41: W każdym programie jest jeszcze jeden błąd... [SecurityBSides Warsaw 2014]

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

Page 42: W każdym programie jest jeszcze jeden błąd... [SecurityBSides Warsaw 2014]

Nasa - Mars Climate Orbiter

25 września 1999 r. NASA ogłasza niepowodzenie misji MCO

Page 43: W każdym programie jest jeszcze jeden błąd... [SecurityBSides Warsaw 2014]

Nasa - Mars Climate Orbiter

Jedyne wykonane zdjęcie przez sondę... Źródło: NASA

Page 44: W każdym programie jest jeszcze jeden błąd... [SecurityBSides Warsaw 2014]

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

Page 45: W każdym programie jest jeszcze jeden błąd... [SecurityBSides Warsaw 2014]

NASA - Mars Climate Orbiter - błąd

Źródło: Xession, wikipedia.orgSystem przetwarzania instrukcji kontroli naziemnej używał innych jednostek niż reszta sondy.

Page 46: W każdym programie jest jeszcze jeden błąd... [SecurityBSides Warsaw 2014]

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

Page 47: W każdym programie jest jeszcze jeden błąd... [SecurityBSides Warsaw 2014]

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

Page 48: W każdym programie jest jeszcze jeden błąd... [SecurityBSides Warsaw 2014]

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

Page 49: W każdym programie jest jeszcze jeden błąd... [SecurityBSides Warsaw 2014]

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)

Page 50: W każdym programie jest jeszcze jeden błąd... [SecurityBSides Warsaw 2014]

Co zrobiono źle?

Morris przyznał: ”mogłem napisać symulator...”

Page 51: W każdym programie jest jeszcze jeden błąd... [SecurityBSides Warsaw 2014]

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

Page 52: W każdym programie jest jeszcze jeden błąd... [SecurityBSides Warsaw 2014]

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

Page 53: W każdym programie jest jeszcze jeden błąd... [SecurityBSides Warsaw 2014]

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ć?

Page 54: W każdym programie jest jeszcze jeden błąd... [SecurityBSides Warsaw 2014]

Czas na pytania (i odpowiedzi)

Q&A

Page 55: W każdym programie jest jeszcze jeden błąd... [SecurityBSides Warsaw 2014]