Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

(automatizált sérülékenység felderítés)

Hasonló előadás


Az előadások a következő témára: "(automatizált sérülékenység felderítés)"— Előadás másolata:

1 (automatizált sérülékenység felderítés)
Fuzzing (automatizált sérülékenység felderítés) Előadók: Barta Csaba Major Marcell

2 Tartalom Definíció és egyszerű példák Történeti áttekintés
Hol állunk most? Saját fejlesztésű eszközök Eredmények

3 Egy kis assembly… 7C801000 ADC EAX,5D7C91A4
7C FICOM DWORD PTR DS:[EAX+90D6827C] 7C80100B JL SHORT kernel32.7C800FE1 7C80100D ADD EAX,43D7C91 7C XCHG EAX,ECX 7C JL SHORT kernel32.7C801012 7C FCOM QWORD PTR DS:[EAX+90DFDC7C] 7C80101B JL SHORT kernel32.7C800FA5 7C80101D FIST WORD PTR DS:[EAX+937C287C] 7C JL SHORT kernel32.7C801066 7C LOOPDE SHORT kernel32.7C800FB7 7C JL SHORT <&ntdll.NlsMbCodePageTag> 7C IN EAX,90 7C80102B JL SHORT kernel32.7C801017 7C80102D OUT 90,AL 7C80102F JL SHORT kernel32.7C80100A 7C IN EAX,90 7C JL SHORT kernel32.7C800FD6 7C XOR DL,BYTE PTR DS:[ECX+90D8E37C] 7C80103B JL SHORT kernel32.7C800FC3 7C80103D AAD 90 7C80103F JL SHORT kernel32.7C801017 7C ADC DL,BYTE PTR DS:[EAX+92AE7E7C] 7C JL SHORT kernel32.7C80101B 7C XCHG EAX,ECX 7C80104B JL SHORT kernel32.7C8010A7 7C80104D ADD EDX,DWORD PTR DS:[ECX C] 7C JL SHORT kernel32.7C80108F 7C AND EAX,E1FE7C90 7C80105A NOP 7C80105B JL SHORT kernel32.7C801099 7C80105D FST QWORD PTR DS:[EAX+90D9F47C] 7C JL SHORT kernel32.7C801021 7C OUT 90,EAX 7C JL SHORT kernel32.7C80103F 7C SALC 7C80106A NOP 7C80106B JL SHORT kernel32.7C8010AA 7C80106D STI 7C80106E NOP 7C80106F JL SHORT kernel32.7C8010E7 7C OR DWORD PTR DS:[ECX+933C777C],EDX 7C JL SHORT <&ntdll.NtCreateFile> 7C OR DL,BYTE PTR DS:[ECX+9130C67C] 7C80107F JL SHORT <&ntdll.CsrClientCallServer> 7C FCOM QWORD PTR SS:[EBP+97C0107C] 7C JL SHORT kernel32.7C8010D5 7C LOCK NOP 7C80108B JL SHORT kernel32.7C801026 7C80108D ADC DL,BYTE PTR DS:[EAX C] 7C JL SHORT kernel32.7C80101F 7C INC EDI 7C XCHG EAX,ECX 7C JL SHORT kernel32.7C8010E3 7C ADC DL,BYTE PTR DS:[EDX+92ED497C] 7C80109F JL SHORT kernel32.7C801031 7C8010A1 CMP BYTE PTR DS:[ECX+9141B17C],DL 7C8010A7 JL SHORT <&ntdll.RtlEqualUnicodeString> 7C8010A9 INC EBX 7C8010AA XCHG EAX,ECX 7C8010AB JL SHORT <&ntdll.RtlTimeToTimeFields> 7C8010AD LOOPDNE SHORT kernel32.7C80103F

4 Definíció és egyszerű példák

5 Mi is a „Fuzzing”? - Rövid definíció
Szoftvertesztelési módszer, amely a bemenetek folyamatos változtatásával vizsgálja, hogy a szoftver mennyire van felkészítve a „nem várt” adatok kezelésére. Alapvetően BlackBox jellegű megközelítés (csak a bemenetek helye és típusa ismert).

6 Hogyan működik: példa BMP formátum: header mezők Header mérete
BMP fájl méret Bitmap start offset Szélesség Magasság Egyszerű teszt esetek unsigned int-re: 0xFFFFFFFF 0x Érték +/- 1

7 Hogyan működik: példa HTTP válasz mezők Tartalom típusa Tartalom méret
HTTP/ OK Expires: Fri, 12 Sep :48:43 GMT Cache-Control: max-age=400 Content-Type: application/x-shockwave-flash Accept-Ranges: bytes Last-Modified: Thu, 29 May :39:19 GMT Content-Length: 66079 Date: Fri, 12 Sep :42:03 GMT Server: lighttpd/1.4.13 Age: 1 Connection: keep-alive Tartalom típusa Tartalom méret Egyszerű teszt esetek stringre: Üres (\0) AAAAA x 65534 %08x.%08x.%08x.%08x.%08x

8 Teszteset generálási módszerek
Előre generált teszteseteket PROTOS Test Suite Véletlenszerűen generált tesztesetek /dev/urandom Mutációs eljárással generált tesztesetek Az eredeti (működő) bemenet véletlenszerű módosítása Séma, vagy leírás alapján generált teszteseteket Valamilyen leírónyelv alapján generált tesztesetek Evolúciós megközelítés Genetikus algoritmus, populáció: tesztesetek

9 Rövid történeti áttekintés
1989 Fuzzing születése : Barton Miller professzor (University of Wisconsin-Madison) operációs rendszerek és alkalmazások automatikus tesztelése 1999 PROTOS Test Suite (University of Oulu) megjelenése 2002 A Microsoft támogatást ad a PROTOS fejlesztőinek SPIKE (David Aitel) megjelenése (nyílt forráskódú projekt)

10 SPIKE 0x04 0x01 02 03 04 Blokk alapú megközelítés Konstans/változó
Típus Hossz értékek automatikusak s_binary_block_size_halfword_bigendian_variable("connectpacket"); s_block_start("connectpacket"); s_binary(" "); s_block_end("connectpacket"); 0x x

11 Rövid történeti áttekintés/2
2003 A PROTOS fejlesztői elindítják az első ismert kereskedelmi fuzzer eszköz (DEFENSICS Test Suites) fejlesztését a Codenomicon cég berkein belül 2005 Több eszköz is napvilágot lát FileFuzz SPIKEFile notSPIKEFile

12 FileFuzz

13 Rövid történeti áttekintés/3
2006 ActiveX fuzzerek megjelenése COMRaider (David Zimmer) AxMan (H.D. Moore) BH Sidewinder (Embleton, Sparks, Cunningham) - Evolúciós megközelítés: a fuzzer tanulhat a múltbeli inputokból, code-coverage -> fitness – az eredményeket nem publikálták BH2006 – Win32 IPC fuzzer(Jesse Burns) 2007 BH2007 – Grey-box testing (Demott, J., Enbody, R., Punch, W.) Genetikus algoritmus, forráskód nélkül -> pstalker BH2007 –Fuzzbox (David Thiel) – médiafurmátum fuzzer

14 COMRaider

15 Mire használható A bemenetek ellenőrzéséért, kezeléséért és feldolgozásáért felelős kódrészletek hibáinak felderítésére API Kommunikációs protokoll Webalkalmazás (SQL injekció) Alkalmazás Felhasználói bemenet Bemenet ellenőrzés Feldolgozás Adatbázis kezelő

16 Mire használható/2 Az olyan kimeneteket előállító kódrészletek tesztelésére, amelyekben megjelenik, vagy valamilyen módon felhasználódik a bemenet Webalkalmazás (XSS) Alkalmazás Felhasználói bemenet Bemenet ellenőrzés Feldolgozás Kimenet Hálózati komm. Kimenet előállítás

17 Mire használható/3 Fuzzer által „észrevett” hibák lehetnek:
Buffer overflow Integer overflow Format string sérülékenység Memóriakezelési hibák (pl.: ellenőrizetlen allokáció) XSS, SQL injekció DoS (végtelen ciklus)

18 Mire nem használható A fuzzer nem ismeri a célpont logikai felépítését és működését, emiatt nem alkalmas többek között: A logikailag rossz működés felismerésére (pl.: rossz oldal jelenik meg a web alkalmazásban) Az olyan funkciók felismerésére, amelyeket a program rendeltetésszerű használata során nem hív meg a felhasználó (backdoor) A hozzáférés ellenőrzési rendszer hibás működésének felismerésére

19 Fuzzer keretrendszerek
Előnyei Általános megoldás Többféle célpont ellen bevethető Bővíthető Újrafelhasználható elemeket biztosít Hátrányai Mindig létezik olyan célpont amelyhez nem használható Speciális ellenőrző kódok

20 Fuzzer keretrendszerek/2
Peach GUI Python Moduláris (generator, transformer, publisher) COM/DCOM, RPC támogatás Fusil the fuzzer Python library Process indítás (memória, körny. változók) Kliens/szerver architektúra Figyeli a tesztelt program állapotát

21 Peach

22 Hol állunk most?

23 Csoportosítás a célpont és fuzzer helye szerint
Lokális Állományformátum fuzzerek Parancssor (commandline) fuzzerek Környezeti változó fuzzerek Távoli Protokoll fuzzerek Kiszolgáló és kliens alkalmazás fuzzerek Memóriarezidens (programkód módosításon alapuló) megoldások Bemenet-módosító ciklus beszúrás Pillanatkép készítés és visszaállítás

24 Bemenetet módosító ciklus beszúrás

25 Bemenetet módosító ciklus beszúrás

26 Bemenetet módosító ciklus beszúrás

27 Pillanatkép készítés és visszaállítás

28 Pillanatkép készítés és visszaállítás

29 Pillanatkép készítés és visszaállítás
Breakpoint kezelés Kivétel kezelés

30 Egy jó fuzzer-rel szemben támasztott követelmények
Reprodukálhatóság A tesztesetek bármikor megismételhetőek Újra felhasználhatóság A legenerált tesztesetek, vagy az azokat generáló kód más célpont ellen is felhasználható Dokumentálhatóság A tesztesetek bevitelekor keletkező hibák, illetve azok körülményeinek minél részletesebb dokumentálása Magának a fuzzer-nek a részletes dokumentációja Hibadetektálás!!! A tesztesetek bevitelekor keletkező hibák detektálása, esetleg automatikus vizsgálata Flexibilitás és bővíhetőség Bővítmények készítésének és használatának lehetősége Részletes, sok részletre kiterjedő konfigurálhatóság

31 Hibadetektálás

32 Hibadetektálás/2 Talán a legfontosabb követelmény
Automatizált esetben nem hagyatkozhatunk az emberi logikára A fuzzer-nek kell felismerni a hiba előfordulását Folyamatos, ciklikus ellenőrzésekre van szükség

33 Hibadetektálás/3 Egyszerű megoldások
Naplóállomány, eseménynapló figyelés „Polling” (hálózati esetekben) [folyamatos csatlakozási próbálkozások]

34 Hibadetektálás/4 Egyszerű megoldások
Futó folyamatok listájának figyelése

35 Hibadetektálás/5 Egyszerű megoldások
Megjelenő dialógusablakok figyelése

36 Hibadetektálás/6 Egyszerű megoldások
Jellemző hibajelentő (bug reporting) folyamatok figyelése

37 Hibadetektálás/7 Egyszerű megoldások
Külső debugger használata

38 Hibadetektálás/8 Bonyolultabb megoldások
Beépített debugger használata (állandó kivétel figyelés, és kezelés / Windows Debugging API, PTrace/) Fuzzer tracking (a célpont nyomon követése assembly szinten) utasítás, ciklus, függvény, vagy eljárás meghívásának figyelése, naplózása Dynamic Binary Instrumentation használata Valgrind, PIN

39 Saját fejlesztésű eszközök
FuzzIT BrowserWave

40 Saját fejlesztésű eszközök
FuzzIT Állományformátum fuzzer BrowserWave Böngésző fuzzer

41 FuzzIT Besorolás Teszteset generálási módszer Programozási nyelv
Lokális, állományformátum fuzzer Teszteset generálási módszer Séma, vagy leírás alapján generált tesztesetek Programozási nyelv Perl Platformok Microsoft Windows Linux XML alapú leírónyelv az állományformátumokhoz Kezelt adatreprezentációk (encoder és decoder plugin-ek) Formátumleírásba ágyazható kódrészletek Egyszerű parancssori kezelhetőség

42 FuzzIT/2 Generálás közben meghívott kód

43 FuzzIT/3 DEMO

44 BrowserWave Besorolás Teszteset generálási módszer (pluginek)
Távoli, kiszolgáló/kliens alkalmazás fuzzer Teszteset generálási módszer (pluginek) Séma, vagy leírás alapján generált tesztesetek Véletlenszerű tesztesetek Mutáción alapuló teszteset generálás Programozási nyelv(ek) Perl Python C#

45 BrowserWave/2 Architektúra

46 BrowserWave/3 Platformok
Szerver Microsoft Windows Linux Kliens Microsoft Windows (elsődleges platform) Microsoft Windows Mobile (5,6)

47 BrowserWave/4 Fontosabb tulajdonságok
Pluginekkel bővíthető (perl) Hibadetektálás Folyamat és folyamatlista figyelés Beépített debugger (Python) Dialógusablakok figyelés Jellemző hibajelentő (bugreporting) folyamatok indulásának figyelése Dokumentálás Szerver, kliens, debugger (crash) naplók Futás után a legenerált tesztesetek és naplók tömörítése

48 BrowserWave/5 FuzzIT modul meghívása HTML generálás

49 BrowserWave/6 „Támogatott” böngészők
Microsoft Internet Explorer (6,7, Mobile) Mozilla Firefox (2,3, Minimo) Opera, (Windows, Linux, Windows Mobile) Apple Safari Maxthon Browser (1,2) KDE Konqueror Gnome Epiphany Google Chrome

50 BrowserWave/7 DEMO

51 Eredmények avagy akik rá”fuzz”tak

52 Fuzzit FuzzIT ACDSee 1 Gimp >30 IrfanView 2

53 Internet Explorer Mobile
BrowserWave BrowserWave Fuzzing közben… Apple Safari 5 Perl 6 Mozilla Firefox 2 ActiveSync 1 Internet Explorer Mobile PGP Google Chrome

54 Kérdések - Válaszok

55 Rövid összefoglalás Fuzzing története és működése Jelenlegi eszközök
Saját fejlesztések Eredmények

56 Elérhetőségek Barta Csaba Major Marcell csaba.barta@gmail.com


Letölteni ppt "(automatizált sérülékenység felderítés)"

Hasonló előadás


Google Hirdetések