Techniky vyhýbania sa zneužitiu zraniteľností v MS Windows Marián Novotný ESET, spol. s r.o. O čom bude prezentácia • Niečo o mne • Softvérové zraniteľnosti • Príklady zraniteľností v jazyku C • Motivácia vyhýbania sa zneužitiu zraniteľností • Taktiky vyhýbania sa zneužitiu zraniteľností v MS WINDOWS • Záverečné zhrnutie Niečo o mne • Momentálne • Dizajnér bezpečnostných sieťových algoritmov Analýza, návrh a implementácia nových funkcionalit pre personálny firewall a systém detekcie útokov • Práca na produkte ESS pre Windows OS • Čiastočná spolupráca s Fl MUNI LABAK, záverečné práce • Vminulosti • Bezpečnostný konzultant • Výskum V oblasti bezpečnostných protokolov PhD práca"Návrh a analýza bezpečnostných protokolov" Softvérové zraniteľnosti • Zapríčinené ľudskou chybou - programátor, designer, správca • Rozlišujeme • Implementačně • návrhové • operačné • Klasifikácia podľa Seven Pernicious Kingdoms • Validácia a reprezentácia užívateľského vstupu • ZneužitieAPI • Bezpečnostné vlastnosti • Stav aplikácie v určitom čase • Ošetrenie chybových stavov • Kvalita kódu • Zapuzdrenie • Prostredie • Registrované v CVE - MITRE orgnizácia Životný cyklus softvérovej zraniteľnosti • Objavenie zraniteľnosti bezpečnostnými výskumníkmi • Publikovanie zraniteľnosti - POC • Vydanie záplaty MS Patch Tuesday - druhý utorok v mesiaci • Inštalovanie záplaty • Mnoho červov z minulosti využívali POC kód výskumníkov • ILOVEYOU, Code Red, Code Red II, Nimda, Sadmind, Slammer, Blaster, Sobig.F, Agobot, Bagle, Nachi • Súčasnosť Výskumníci koordinujú publikovanie zraniteľnosti so sw spoločnosťami Výpočet skóre zraniteľnosti • Common Vulnerability Scoring System (CVSS) • Otvorený štandard Výpočet na základe metrík ohodnotených expertom • Skóre o-io, critical, major, minor • Vsúčasnosti verzia 2, na verzii 3 sa pracuje • Metriky • Základné metriky Acces vector Acces complexity autentizácia • Časové metriky Existuje funkčný POC? Existuje záplata od vendora? Implementačné zraniteľnosti • Korupcia pamäte • pretečenie buffra - buffer overflow • Použitie pamäte po uvoľnení - use after free • Formátovanie stringov char s; //načítaj string s zo vstupu printf(s); • %ó%u%x%s%n • %n je vypnutý defaultne od Visual studio 2010 Príklady chyb v jazyku C • Celočíselné pretečenie, podtečenie Unsigned int a, b; a = o; a —; b=oxFFFFFFFF; b++; • Celočíselné pretečenie a korupcia pamäte v OPENSSH 3.1 ujnt n resp = packet_get_int(); if (nresp > o) { response = xmalloc(nresp * sizeof(char)); for (size_t i = o; i < nresp; i++){ response[i] = packet_get_string(NULL); } packet_check_eom(); Príklady chyb v jazyku C (2) • Znamienkové celé čísla int length = network_get_int(sockfd); if(length < o || length + 1 >= MAXCHARS){ //bad length } • length = ox7FFFFFFF? struct dummyStruct { intfirstField : 1; • Používanie nebezpečných funkcii char buffer[25]; printf("EnterText:"); gets(buffer); Príklady chýb v jazyku C - Konverzie typov • Explicitná konverzia Problém pri rozširovaní, zužovaní • Priradenie Pravý operand priradenia je skonvertovaný na ľavý typ operandu • Volanie funkcie Premenné zadané na vstup funkcie sú skonvertované podľa prototypu • Návratová hodnota funkcie Premenná, ktorú vracia funkcia je skonvertovaná podľa prototypu funkcie • Vyhodnocovanie výrazov Komplikované pravidlá pri vyhodnocovaní výrazov rôznych typov 'ešl Zneužitie zraniteľnosti - exploitovanie • Útočník má pod kontrolou vstupné dáta zraniteľného programu • Možnosti • Spustenie ľubovolného kódu • Prepísanie dôležitých časti pamäte • Zhodenie programu, služby • Ciele • šírenie malware • Kompromitácia počítača • Získanie privilégií • DOS útok Pamáť procesu x86- zjednodušený pohľad • Program má virtuálnu pamäť Každý byte má adresu Kernel, user- normálne (0X00000000-0X7FFFFFFF) boot.ini zmeniť Skladá sa z oblastí volných, rezervovaných a komitnutých Mapovanie virtuálnej na fyzickú MMU • Oblasti virtuálnej pamäte • Image — dli, PE súbory • PEB.TEB • HEAP • Dynamicky alokovaná pamäť (malloc) • Nízke adresy-> vysoké adresy • STACK • Pamäť počas vykonávania funkcií • Vysoké ad resy -> nízke ad resy • Registre EBP, ESP • Registre • ESP, EBP, EIP • EAX, EBX, ECX, EDX, ESI, EDI Zaujímavé oblasti pamätá • Stratégie alokácie pamäti v programe • Heap - malloc, free, new, delete • Stack • Stack • Pri volaní funkcie sa nakopírujú argumenty funkcie • Uloží sa IP, SP • Nasledujú lokálne premenné • HEAP • Dynamicky alokované dáta uložené v datových štruktúrach ako spájaný zoznam Buffer overflow - zjednodušený príklad finclude int Etacktest (char x:buf 1 f unaiq^ed char bufferA[40]; at rcpy f bu f f-e rA x bu f J; / / St aclc Ove rf 1 cv.1 ri-appe ns he r-e ret u rn O j > int main H'int a.rqc, char 4argv [ ] ] f if [argc J — Zt < printf j "\ri5tack-based buffer overflow test") ; p r i nt f i " \ nLTsaqe : atactcbo.exe atring\n\n" ) ; exit H 1 J i i stackte at 4 a r-gv [ 1 ] ) j ret u in O j > □ KtlDODOaOD Buf fcrlj local wariatile FroK pointer JEDF) BttuTTi paiiitir^EIi) Fantn11 on uaraniBtflra Motivácia pre vývoj techník na vyhýbanie sa exploitom • Zraniteľnosť neznamená, že sa vytvorí funkčný exploit • Náklady na vývoj sú determinované ziskom útočníka • Zraniteľnosti MS Windows priniesli obrovské škody MS, organizáciám, • MSCode Red (MS01-033) • SOLSIammer (MS02-039) • Blaster(MSo3-026) • Sasser (MS04-011) • Zraniteľnosti sú objavované aj automatizovane • fuzzing • Techniky vyhýbania sa exploitom na úrovni OS sa snažia Zvýšiť náklady na vývoj funkčného exploitu Znížiť nasaditeľnosť exploitu Zabrániť použitiu známych techník exploitovania Ochrana pre aplikácie spúštané v M S WINDOWS nielen pre samotný OS Data Execution Prevention (DEP) • Zabraňuje spúšťaniu kódu z určitých oblastí pamäte • Stack, heap,... • Procesor musí podporovať NX bit (No execute AMD) res Execute Disabled (XD Intel) + Physical Address Extension (PAE) mód • Linkovať pomoocou /NXCOM PAT vo visual studiu • Za runtime SetProcessDEPPolicy • Od windows xp sp 2 • Techniky na obchádzanie DEP ROP- return to libc- MS08-067 Confickervxpsp2 Address Space Layout Randomization (ASLR) • Exploity predpokladali presné adresy importovaných funkcií, knižníc • ALSR randomizujeadresy regiónovvo virtuálnej pamäti (32 bit) Stacki4 bitov • HEAP5bitov Images8 bitov • PEB.TEB štruktúry 4 bity Win 8 randomizuje ďalšie funkcie a pridáva entropiu • Je nastavený bit 0x40 v PE poli DLLCHARACTERISTICS • Linkovať pomocou/DYNAMICBASE • Vista + • Podpora dep na ochranu pred ROP • MS08-067 ConfickervsVISTA neúčinné, že existuje dll, ktorá nieje kompilovaná cez /DYNAM ICBASE Prvá verzia od MS visual studio C++ 2002 /GS prepínač Za dôležité lokálne premenné funkcie pridá prolog funkcie náhodné číslo Epilóg skontroluje pri návrate, či sa to číslo neprepísalo MS visual studio C++2005 Preusporiadanie lokálnych premenných a parametrov funkcie na stacku Záverečné zhrnutie • Ochrana na úrovni OS sťažuje vývoj a nasadzovanie exploitov • Mení sa charakter a spôsoby realizácie útokov • Množstvo features v OS, ktoré sme nespomenuli • SAFESEH/SEHOP • Heap ochrany Sandbox - app container vo windows 8 • Zaujímavá oblasť výskumu, kde dobré nápady sú cenené • Microsoft BlueHat Prize • 200 000$ pre víťaza • Vasilis Pappas - kBouncer - anti ROP Ďakujem za pozornosť