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



Hasonló dokumentumok
INFORMATIKA EGYRE NAGYOBB SZEREPE A KÖNYVELÉSBEN

Mozgásvizsgálati mérések internetes megjelenítése. Zemkó Szonja - Dr. Siki Zoltán

Hány komputer van a kezemben?

Szoftver labor III. Tematika. Gyakorlatok. Dr. Csébfalvi Balázs

Stack Vezérlés szerkezet Adat 2.

Veeam Agent for Windows and Linux

Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem

Adatbázisok elleni fenyegetések rendszerezése. Fleiner Rita BMF/NIK Robothadviselés 2009

S, mint secure. Nagy Attila Gábor Wildom Kft.

A webhelyhez kötődő szoftverek architektúrája

SZOFTVER = a számítógépet működtető és az azon futó programok összessége.

A hibát az alábbi Python program segítségével tudjuk előidézni:

Algoritmizálás és adatmodellezés tanítása beadandó feladat: Algtan1 tanári beadandó /99 1

Cookie-k használatának irányelve

Web-fejlesztés NGM_IN002_1

Felhasználói dokumentáció. a TávTagTár programhoz. Készítette: Nyíri Gábor, hdd@nc-studio.com GDF Abakusz regisztrációs kód: GDFAba43

Petőfi Irodalmi Múzeum. megújuló rendszere technológiaváltás

ELEKTRONIKUS MUNKABÉRJEGYZÉK MODUL

Automatikus tesztgenerálás modell ellenőrző segítségével

COMET webalkalmazás fejlesztés. Tóth Ádám Jasmin Media Group

Kedves Jelentkezők! A tanfolyamból kizárható továbbá:

Internet programozása. 1. előadás

Algoritmizálás és adatmodellezés tanítása beadandó feladat: Algtan1 tanári beadandó /99 1

Kedvenc Ingyenes editorok avagy milyen a programozó jobbkeze? PSPAD editor DEVPHP IDE

A Java EE 5 plattform

Programozási alapismeretek beadandó feladat: ProgAlap beadandó feladatok téma 99. feladat 1

Verifikáció és validáció Általános bevezető

Assembly Utasítások, programok. Iványi Péter

Bevezetés Működési elv AJAX keretrendszerek AJAX

PTE-PROXY VPN használata, könyvtári adatbázisok elérhetősége távolról

Nyilvántartási Rendszer

Fejlesztési tapasztalatok multifunkciós tananyagok előállításával kapcsolatban Nagy Sándor

Központi proxy szolgáltatás

Alkalmazások architektúrája

15.4.2a Laborgyakorlat: Böngésző beállítása

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

Fogalomtár Etikus hackelés tárgyban Azonosító: S2_Fogalomtar_v1 Silent Signal Kft. Web:

Végfelhasználói Applet kézikönyv

Memóriagazdálkodás. Kódgenerálás. Kódoptimalizálás

Moodle -egy ingyenes, sokoldalú LMS rendszer használata a felsőoktatásban

Osztott alkalmazások fejlesztési technológiái Áttekintés

<Insert Picture Here> Migráció MS Access-ről Oracle Application Express-re

Mobilizálódó OSZK. A nemzeti könyvtár mobileszközöket célzó fejlesztései az elmúlt időszakban. Garamvölgyi László. Networkshop, 2013.

Flash és PHP kommunikáció. Web Konferencia 2007 Ferencz Tamás Jasmin Media Group Kft

e-szignó Online e-kézbesítés Végrehajtási Rendszerekhez

Zimbra levelező rendszer

Internet-hozzáférések teljesítményvizsgálata webböngészőben

ÖSSZEGEZÉS AZ AJÁNLATOK ELBÍRÁLÁSÁRÓL

CCS Hungary, 2000 szeptember. Handling rendszer technikai specifikáció

Gigabit/s sebess«gű internetkapcsolatok m«r«se b ng«szőben

Microsoft SQL Server telepítése

Osztott jáva programok automatikus tesztelése. Matkó Imre BBTE, Kolozsvár Informatika szak, IV. Év 2007 január

Image Processor BarCode Service. Felhasználói és üzemeltetői kézikönyv

Tartalom. Alapelemek. Célok. Eszközök. Szerkezet. Alapelvek. Prezentáció. Folyamat

Hálózati architektúrák és Protokollok GI Kocsis Gergely

Unit Teszt. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Unit Teszt / 22

TELJESÍTÉNYMÉRÉS FELHŐ ALAPÚ KÖRNYEZETBEN AZURE CLOUD ANALÍZIS

szaporodásbiológiai és andrológiai továbbképzés-ünkről, a zökkenőmentes indulás és használat

Hálózati architektúrák és Protokollok GI Kocsis Gergely

SDL Trados szervermegoldások. Szekeres Csaba SDL Trados partner M-Prospect Kft.

WWW Kliens-szerver Alapfogalmak Technológiák Terv. Web programozás 1 / 31

A szoftverfejlesztés eszközei

Szoftver technológia. Projektmenedzsment eszközök. Cserép Máté ELTE Informatikai Kar 2019.

Nyílt forráskódú irodai programkomponensek vállalati környezetbe való integrációjának vizsgálata és implementációja

Windows XP. és Ubuntu. mi a különbség? Mátó Péter <mato.peter@fsf.hu> Windows XP vs Ubuntu Mátó Péter <mato.peter@fsf.

Flex: csak rugalmasan!

3 A hálózati kamera beállítása LAN hálózaton keresztül

Operációs rendszerek. Az X Window rendszer

Elektronikus Szolgáltatások Hirdetménye. Érvényes: május 24-től

Intelligens biztonsági megoldások. Távfelügyelet

Produktív környezetben használt, nyílt forráskódú komplex térinformatikai megoldások dr. Siki Zoltán

Élő webes alkalmazások rendszerfelügyelete cím- és tartalomteszteléssel

Webapp (in)security. Gyakori hibákról és azok kivédéséről fejlesztőknek és üzemeltetőknek egyaránt. Veres-Szentkirályi András

TELEPÍTÉSI ÉS FELHASZNÁLÓI ÚTMUTATÓ

Simon Balázs Dr. Goldschmidt Balázs Dr. Kondorosi Károly. BME, Irányítástechnika és Informatika Tanszék

Oracle GoldenGate Studio Nagyon rövid bemutató. Quick Talk. Gollnhofer Gábor

Tanúsítvány igénylése sportegyesületek számára

Programrendszerek tanúsítása szoftverminőség mérése

Miért van szükség fordítóprogramokra? Fordítóprogramok célja és szerkezete. Miért van szükség fordítóprogramokra?

Internetes térkép publikálási technikák, szabványok, trendek, nyílt forráskódú megoldások

JSF alkalmazások teljesítményhangolása JMeter és dynatrace segítségével

TELE-OPERATOR UTS v.14 Field IPTV műszer. Adatlap

Oracle Containers for Java - j2ee alkalmazás szerver funkciók. Molnár Balázs Oracle Hungary

Web programoz as

Valós idejű információk megjelenítése web-alapú SCADA rendszerben Modbus TCP protokollon keresztül

SZÁMÍTÓGÉPES ADATBÁZIS-KEZELÉS. A MySQL adatbáziskezelő PHP folytatás JDBC, ODBC

Mintavételes szabályozás mikrovezérlő segítségével

WebService tesztelés. SOAPui Pro, GreenPepper és Confluence használatával. Verhás & Verhás Szoftver Manufaktúra KNOW-HOW

Dinamikus terhelés hatására létrejövő deformáció mérése. Dr. Siki Zoltán Moka Dániel BME Általános- és Felsőgeodézia tanszék

A fordítóprogramok szerkezete. Kódoptimalizálás. A kódoptimalizálás célja. A szintézis menete valójában. Kódoptimalizálási lépések osztályozása

1. Szolgáltatásaink. Adatok feltöltése és elemzése. Digitális feltöltés. Analóg korong feltöltés

Széchenyi István Szakképző Iskola

Tesztelés és hibajavítás Microsoft Visual Studio 2005 fejlesztőkörnyezetben

Intervenciós röntgen berendezés teljesítményszabályozójának automatizált tesztelése

Böngészők, böngészőmotorok

Felhívjuk a figyelmet, hogy az MS Windows XP operációs rendszer támogatását a Microsoft már év április 8-án megszüntette!

Projekt beszámoló. Könyvelési Szakértői Rendszer Kifejlesztése Repetitív Könyvelési Feladatok Szabályalapú Feldolgozására

ParkIT ANPR Kamera LetUgo Beléptető Rendszerrel

Folyamatok rugalmas irányítása. FourCorm Kft.

Szolgáltatás Orientált Architektúra és több felhasználós adatbázis használata OKF keretein belül. Beke Dániel

Átírás:

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

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

Egy kis assembly J 7C801000 ADC EAX,5D7C91A4 7C801005 FICOM DWORD PTR DS:[EAX+90D6827C] 7C80100B JL SHORT kernel32.7c800fe1 7C80100D ADD EAX,43D7C91 7C801012 XCHG EAX,ECX 7C801013 JL SHORT kernel32.7c801012 7C801015 FCOM QWORD PTR DS:[EAX+90DFDC7C] 7C80101B JL SHORT kernel32.7c800fa5 7C80101D FIST WORD PTR DS:[EAX+937C287C] 7C801023 JL SHORT kernel32.7c801066 7C801025 LOOPDE SHORT kernel32.7c800fb7 7C801027 JL SHORT <&ntdll.nlsmbcodepagetag> 7C801029 IN EAX,90 7C80102B JL SHORT kernel32.7c801017 7C80102D OUT 90,AL 7C80102F JL SHORT kernel32.7c80100a 7C801031 IN EAX,90 7C801033 JL SHORT kernel32.7c800fd6 7C801035 XOR DL,BYTE PTR DS:[ECX+90D8E37C] 7C80103B JL SHORT kernel32.7c800fc3 7C80103D AAD 90 7C80103F JL SHORT kernel32.7c801017 7C801041 ADC DL,BYTE PTR DS:[EAX+92AE7E7C] 7C801047 JL SHORT kernel32.7c80101b 7C801049 XCHG EAX,ECX 7C80104B JL SHORT kernel32.7c8010a7 7C80104D ADD EDX,DWORD PTR DS:[ECX+9701067C] 7C801053 JL SHORT kernel32.7c80108f 7C801055 AND EAX,E1FE7C90 7C80105A NOP 7C80105B JL SHORT kernel32.7c801099 7C80105D FST QWORD PTR DS:[EAX+90D9F47C] 7C801063 JL SHORT kernel32.7c801021 7C801065 OUT 90,EAX 7C801067 JL SHORT kernel32.7c80103f 7C801069 SALC 7C80106A NOP 7C80106B JL SHORT kernel32.7c8010aa 7C80106D STI 7C80106E NOP 7C80106F JL SHORT kernel32.7c8010e7 7C801071 OR DWORD PTR DS:[ECX+933C777C],EDX 7C801077 JL SHORT <&ntdll.ntcreatefile> 7C801079 OR DL,BYTE PTR DS:[ECX+9130C67C] 7C80107F JL SHORT <&ntdll.csrclientcallserver> 7C801081 FCOM QWORD PTR SS:[EBP+97C0107C] 7C801087 JL SHORT kernel32.7c8010d5 7C801089 LOCK NOP 7C80108B JL SHORT kernel32.7c801026 7C80108D ADC DL,BYTE PTR DS:[EAX+9135917C] 7C801093 JL SHORT kernel32.7c80101f 7C801095 INC EDI 7C801096 XCHG EAX,ECX 7C801097 JL SHORT kernel32.7c8010e3 7C801099 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 7C8010A9 INC EBX 7C8010AA XCHG EAX,ECX 7C8010AB JL SHORT <&ntdll.rtltimetotimefields> 7C8010AD LOOPDNE SHORT kernel32.7c80103f

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

Mi is a Fuzzing? - Rövid definíció Fuzzing: 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).

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

Hogyan működik: példa HTTP válasz mezők HTTP/1.0 200 OK Expires: Fri, 12 Sep 2008 07:48:43 GMT Cache-Control: max-age=400 Content-Type: application/x-shockwave-flash Accept-Ranges: bytes Last-Modified: Thu, 29 May 2008 11:39:19 GMT Content-Length: 66079 Date: Fri, 12 Sep 2008 07: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

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

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 2002 PROTOS Test Suite (University of Oulu) megjelenése A Microsoft támogatást ad a PROTOS fejlesztőinek SPIKE (David Aitel) megjelenése (nyílt forráskódú projekt)

SPIKE 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("01 02 03 04"); s_block_end("connectpacket"); 0x04 0x01 02 03 04

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

FileFuzz

Rövid történeti áttekintés/3 2006 ActiveX fuzzerek megjelenése COMRaider (David Zimmer) AxMan (H.D. Moore) BH 2006 - 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

COMRaider

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ó) Felhasználói bemenet Alkalmazás Bemenet ellenőrzés Feldolgozás Adatbázis kezelő

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) Felhasználói bemenet Alkalmazás Bemenet ellenőrzés Feldolgozás Kimenet Hálózati komm. Kimenet előállítás

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)

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

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

Peach Fuzzer keretrendszerek/2 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

Peach

Hol állunk most?

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

Bemenetet módosító ciklus beszúrás bemenet_fogad() feldolgoz_1() call feldolgoz() feldolgoz_2() feldolgoz_3()

Bemenetet módosító ciklus beszúrás Ugrás a feldolgozó függvény elé bemenet_fogad() Ugrás ide bemenetmódosítás után call feldolgoz() Ugrás a módosító ciklusra feldolgoz_1() feldolgoz_2() feldolgoz_3() Bemenet módosító ciklus Ugrás a módosító ciklusra main: call bemenet_fogad() call feldolgoz() jmp mod_ciklus ------------------------- mod_ciklus: jmp [call feldolgoz()]

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

Pillanatkép készítés és visszaállítás bemenet_fogad() call feldolgoz() feldolgoz_1() feldolgoz_2() feldolgoz_3()

Pillanatkép készítés és visszaállítás bemenet_fogad() Pillanatkép készítés (debugger breakpoint) Memória módosítás a bemenetet tároló területen call feldolgoz() feldolgoz_1() Pillanatkép visszaállítás (debugger breakpoint) feldolgoz_2() feldolgoz_3()

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

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

Hibadetektálás

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

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]

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

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

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

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

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

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

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

FuzzIT Besorolás 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

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

FuzzIT/3 DEMO

BrowserWave Besorolás 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#

BrowserWave/2 Architektúra Szerver HTTP/TCP Kliens Plugin1 Plugin2... Ablak figyelő Processz figyelő Debugger TCP Browser Windowing Messages Debugging API

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

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

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

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

BrowserWave/7 DEMO

Eredmények avagy akik rá fuzz tak

Fuzzit FuzzIT ACDSee 1 Gimp >30 IrfanView 2

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

Kérdések - Válaszok

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

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