Prednáška Samyho Kamkara v Bratislave - Nethemba

BLOG

Prednáška Samyho Kamkara v Bratislave

2010-10-13 23:17 Pavol Lupták

Predvčerom sa v Bratislave v A4 uskutočnila skutočne zaujímavá prezentácia svetového bezpečnostného experta organizovaná našim hackerspaceom Progressbar. Vzhľadom k tomu, že išlo o skutočne unikátnu prezentáciu na slovenské pomery (kde sa aj tí najväčši znalci bezpečnosti dozvedeli nové a zaujímavé veci), rád by som tejto prezentácii venoval pár slov.

Samy sa preslávil dosť netradične – publikovaním prvého XSS worma, ktorým nainfikoval behom pár hodín na myspace.com niekoľko miliónov používateľov. Išlo samozrejme len o jeho vtipný pubertálny pokus – worm zobrazoval každej infikovanej obeti hlášku “but most of all, Samy is my hero”. Napriek tomu, že Samy má momentálne len 24 rokov, je to už ostrieľaný profesionál, ktorý sa bezpečnosti venuje už takmer 10 rokov.

Názov jeho prednášky bol vtipný a trochu provokujúci – “How I Met Your Girlfriend” so zámerom demonštrovať úplne nové druhy webových útokov s cieľom stretnúť “Vašu” priateľku.

1 Útok na PHP session ID

Prvá časť Samyho prezentácie bola venovaná analýze spôsobu generovania PHP session ID ako aj analýze možnosti znižovania jeho prípadnej entropie v snahe realizovať úspešný útok na PHP session management hrubou silou a to v reálnom čase (!). Pri generovaní PHP session ID sa používa 32-bitová IP adresa klienta, 32-bitová epocha (čas a dátum prístupu), 32-bitový čas prístupu (v mikrosekundách) a 64-bitová pseudonáhodna PRNG hodnota (lcg_value). Všetky tieto informácie o veľkosti 160 bitov sú zahashované funkciou SHA-1 a výsledok predstavuje samotný PHP session ID. Vzhľadom k tomu, že IP adresa a presný čas/dátum sa posiela v každej GET/POST žiadosti, útočník dokáže uvedenú entropiu znížiť o 64 bitov. V prípade mikrosekúnd existuje len milión kombinácii (nakoľko 1 sekunda ma milión mikro sekúnd), takže entropiu je možné znížiť o ďalších 12 bitov. Výsledná entropia je potom 84 bitov (redukovaná o 74 bitov), čo stále ale nestačí na útok hrubou silou. Samy analyzoval PHP funkciu lcg_seed(), ktorá je využívaná funkciou php_combined_lcg() a je zodpovedná za generovanie pseudonáhodnej 64-bitovej PRNG hodnoty. Prišiel na to, že vďaka chybe, kedy sa 32-bitová hodnota XORuje s 20-bitovou sa výsledná entropia znižuje o ďalších 12 bitov. Vďaka použitiu 32-bitovej premennej pre 15-bitový PID PHP procesu (ktorý generuje danú nahodnú hodnotu a používa sa v tejto PRNG funkcii) sa entropia dá znížiť o ďalších 17 bitov, v prípade, že útočník má lokálny prístup na server alebo dokáže z PHP volať funkciu getmypid(), tak dokáže entropiu znižiť ešte aj o týchto 15 bitov. V ideálnom prípade sa celková entropia PHP session ID dá znižiť z pôvodných 160 bitov na 40. Vzhľadom k tomu, že pri výpočte 64-bitovej pseudonáhodnej PRNG hodnoty lcg_value sa používajú tiež mikrosekundy, ktorých entropia je len 12 bitov namiesto 32, je možné túto entropiu znížiť o ďalších 20 bitov. Suma sumárum – výslednú entropiu je teda možné zo 160-bitového čísla znížiť len na 20 bitov, čo predstavuje len milión (1048576) možností, ktoré sa už dajú samozrejme vyskúšať hrubou silou v reálnom čase. A čo to v praxi znamená? Že všetky verzie PHP staršie ako 5.3.2 sú na uvedený útok zraniteľné a bezpečné riešenie je použiť novšiu verziu PHP (aktuálna opravená verzia PHP je 5.3.3). Samotný koncept útoku je k dispozícii tu.

2 NAT Pinning: Protocol confusion

NAT pinning predstavuje ďalší zaujímavý útok na všetky firewally, ktoré umožňujú NAT a povoľujú tzv. “related” spojenia (to znamená, že firewall je schopný analyzovať napríklad riadiace ftp spojenie a na základe neho povoliť TCP prestup pre príslušné ftp dátové spojenie, resp. analyzovať irc spojenie a v prípade potreby povoliť TCP prestup pre DCC).

Vzhľadom k tomu, že HTTP servery môžu principiálne bežať na ľubovoľnom TCP porte, je možné odoslať na daný port jednoduchý POST formulár (napríklad cez AJAX), ktorý nakoľko je “newline-based”, tak dokáže prirodzene komunikovať so všetkými textovými “newline-based” protokolmi ako je telnet, ftp, smtp, irc atď.

Zaujímavé na tomto nie je len to, že útočník prinútením obete kliknutím na linku a zaslaním takéhoto formulára ju dokáže bez jej vedomia prihlásiť na ľubovoľný irc server, telnet server či iný textový “newline-based” server, ale hlavne to, že sa dokáže opakovane cez viacnásobne zasielanie takéhoto formuláru prihlasovať na nejaký vonkajší ftp server a v takto vytváraných riadiacich ftp spojeniach enumerovať všetky porty pre požadované dátové ftp spojenia tak, že samotný firewall s NATom, ktorý podporuje “related” spojenie postupne vytvorí TCP prestupy na firewalle pre všetky dôležité porty zvonku na klientskú mašinu obete v intranete! Ak daná obeť na svojom počítači nepoužíva lokálny firewall a má spustené veľké množstvo neudržiavaných alebo inak nezabezpečených služieb (ako napríklad SMB server alebo lokálny webový server), tak útočník dokáže kompletne preraziť daný firewall a realizovať portscan z Internetu priamo na porty intranetového počítača a samozrejme jeho prípadné odhalené zraniteľné služby zneužiť. “Proof-of-concept” tohto útoku je možné nájsť na Samyho stránke.

Samy tiež demonštroval, že je možné realizovať “overflow” na čísla cieľových portov, ktoré sú v niektorých prehliadačoch zakázané a pristupovať napríklad na port 65536 + 6667, čím je možné obísť prípadné ochrany prehliadača, ktoré porovnávajú priamo cieľový port 6667.

Riešenie voči tomuto útoku je nastaviť striktný firewall tak, aby nepovoľoval “related” spojenia a na strane klienta pokým je to možné použivať NoScript plugin a mať zapnutý lokálny firewall, ktorý znemožní útočníkovi, ktorý prerazí cez firewall, pristupovať na porty danej klientskej stanice.

3 Google geolocation pomocou XSS

Posledná pre mňa najzaujímavejšia téma, ktorej sa Samy venoval bola fyzická lokalizácia ľudí cez XSS zraniteľnosti ich domácich wifi routerov. Ak si myslíte, že ide o žart, tak odporúčam Vám otvoriť nasledujúcu stránku a zadať MAC adresu Vášho wifi routera. Skúsil som zadať svoju MAC adresu môjho domáceho wifi routera ako aj MAC adresu wifi routerov mojich klientov a Google s presnosťou na pár desiatok metrov presne zobrazil, kde sa daný wifi router fyzicky nachádza! Priznám sa, že toto zistenie ma vyslovene vyšokovalo. Pýtate sa – a ako sa to dá zneužiť? Veľmi jednoducho – stačí, keď webové rozhranie Vášho domáceho routera obsahuje XSS zraniteľnosť (čo je v prípade wifi routerov celkom bežná vec) alebo používa “default” login a heslo (veľa ľudí si nastaví silný WPA2 kľúč, ale nastaviť silné heslo k admin rozhraniu svojhou wifi routera zabudnú). V oboch prípadoch útočník dokáže získať MAC adresu Vášho routera, ktorý používate, zaslať ju cez oficiálnu (nijako nelimitovanú) Google službu a okamžite získa vaše presné GPS koordináty, kde sa fyzicky nachádzate. Na demonštráciu prikladám XSS odkaz s injektovaným javascriptom, ktorý umožňuje útočníkovi získať MAC adresu zraniteľného webového rozhrania Verizon FiOS Routera.

Na mieste je otázka – odkiaľ má Google zoznamy všetkých wifi sietí s MAC adresami a príslušnými GPS koordinátmi po celom svete?

Samozrejme z viacerých zdrojov (Google autíčka, ktoré mapujú a fotia ulice, rôzni dobrovoľníci, ktorí so špeciálnou aplikáciou v telefóne pomáhajú vytvárať Google Maps, ..), ale o jednom najdôležitejšom a zrejme najspoľahlivejšom zdroji Google mapovania som ale nevedel – áno, sú to všetky Android telefóny v štandardnej konfigurácií! Znie to možno šokujúco, ale každý vlastník Android telefónu je Google agent, ktorý scanuje v svojom okolí všetky wifi siete (jedno či sú šifrované alebo nie) a MAC adresy wifi AP (zachytených beacon rámcov posielaných broadcastom z každého AP v okolí) posiela rovno do Google, ktorý si na základe toho vytvára úplne dokonalú mapu. Toto správanie ide zrejme v Android telefóne vypnúť (Settings / Location / Use wireless networks), väčšina bežných používateľov tohto telefónu to ale určite nespraví, takže vlastníci Google Androidu budú naďalej úspešne pomáhať Google v mapovaní wifi terénu… Viac informácii Android is Google’s Agent Smith.

 

Záver Samyho prednášky bol smutný a výstižný – YOUR PRIVACY IS DEAD.

 

Linky na Samyho prednášku z tohtoročného Blackhatu:

http://www.youtube.com/watch?v=XQcW1zYiqdU
http://www.youtube.com/watch?v=Mi1Z2iJZPs4

http://www.youtube.com/watch?v=jMWEZn1_O3Y

http://www.youtube.com/watch?v=kS4MFq3QDS4