» »

Napad z ničelno predpono na SSL/TLS certifikate že "v divjini"

Napad z ničelno predpono na SSL/TLS certifikate že "v divjini"

Slo-Tech - Konec julija je Moxie Marlinspike na konferenci BlackHat 09 in Defconu 17 predstavil nov napad na SSL in TLS certifikate. Gre za tim. napad z ničelno predpono (ang. null prefix attack), ki izkorišča ranljivosti pri obravnavi SSL in TLS certifikatov. Marlinspike je namreč odkril, da je mogoče registrirati certifikate v obliki www.banka.si\0zlonamernastran.si. CA (Certificate Authority) bo vse znake pred "\0" ignoriral in brez težav podpisal certifikat za zlonamernastran.si, saj bo lastnik zlonamerne strani svojo identiteto in lastništvo strani seveda brez težav dokazal.

Izkaže pa se, da pri uporabi takega certifikata brskalnik certifikat prepozna kot veljaven tudi, če je uporabljen na domeni www.banka.si. Tako ustvarjen zlonamerni certifikat je torej mogoče uporabiti pri prestrezanju s posrednikom (ang. man-in-the-middle napad). Napadalec, ki uspe prestreči komunikacije žrtve (za ta namen je bilo (za okolje Linux) razvito posebno orodje SSLsniff), le-tej sedaj podtakne lažen certifikat z ničelno predpono, ki ga pred tem registrira oz. podpiše pri zaupanja vrednem CA-ju. Brskalnik bo certifikat sprejel in ne bo izpisal obvestila o potencialnem napadu.

Ob predstavitvi na BlackHat konferenci so bile ranljive implementacije SSL/TLS v Mozillini knjižnici NSS (ta knjižnica je bila pravzaprav še najbolj "polomljena", saj je bilo na njej mogoče uporabiti en sam splošen ponarejen certifikat za vse domene (tim. wildcart certifikat) ter knjižnicah Microsoft CryptoAPI in GnuTLS. Posledično je bilo mogoče izvajati učinkovit MITM napad na Firefox, Internet Explorer, Chrome, Thunderbird, Outlook, Evolution, Pidgin, AIM, irssi ter številne druge programe, ki uporabljajo ranljive knjižnice.

Vendar pa je Mozilla Foundation napako v dobri odprtokodni maniri že v nekaj dneh odpravila, Microsoft pa popravka še ni uspel izdati.

Kljub resnosti je bil napad očitno precej "teoretičen". Vsaj do pred nekaj dnevi, ko je bil na poštnem seznamu "full disclosure" objavljen certifikat z ničelno predpono za paypal.com. Če vse skušaj seštejemo, se izkaže, da sedaj zlonamerni napadalci lahko izvajajo neopazne MITM napade na uporabnike, ki v okolju Windows uporabljajo brskalnike Microsoft Internet Explorer, Chrome ali Safari za obiskovanje spletišča PayPal.

Dodatno težavo predstavlja dejstvo, da je Moxie Marlinspike odkril tudi resno ranljivost v protokolu OCSP (Online Certificate Status Protocol), zaradi katere je ponarejene certifikate z ničelno predpono izredno težko preklicati.

Če se torej želite zaščititi pred tem, da bi vam spletni zlikovci ukradli podatke vašega PayPal računa je v okolju Windows zaenkrat edina razumna možnost uporaba spletnega brskalnika Firefox, po možnosti z dodatkom PetName Tool. Druga možnost je, da spletišča PayPal zaenkrat ne uporabljate oziroma ne uporabljate SSL/TLS zaščitenih komunikacij, saj imajo morda zlikovci podobne zlonamerne certifikate tudi za druge domene. Tretja možnost je, da počakate, da bo - ko bo - Microsoft izdal popravek za CryptoAPI.

41 komentarjev

Roadkill ::

Video prezentacije na DefCon: Kljik
Ü

techfreak :) ::

Kličejo jo Hacking Conference, pa ne vedo, da presledki ne spadajo v linke?

In zakaj bi jaz strani we-are-fake-paypal.com dajal moje PayPal informacije?

Zgodovina sprememb…

Kekec ::

V bistvu si si sam odgovoril, ti ne ker se spoznaš na te stvari jih je pa dosti ki niso pozorni in nasedejo na takšne fore.

Piston ::

sploh ni fora v tem, da bi dajal napačni strani informacije, fora je v tem da ti lahko nekdo pofejka tvoj certifikat in potem prijavi na paypal.
Kawaaabangaaa

Poldi112 ::

Naslednja novica je pa, da je paypal temu človeku pobrisal account.
Where all think alike, no one thinks very much.
Walter Lippmann, leta 1922, o predpogoju za demokracijo.

techfreak :) ::

Uporabljam Firefox, torej sem varen.

ender ::

In zakaj bi jaz strani we-are-fake-paypal.com dajal moje PayPal informacije?
Zato, ker bi nekdo izvedel MITM napad (npr. preusmeril DNS), in bi ti, ko bi šel na www.paypal.com dobil njegovo stran (ki bi izgledala identično, kot paypal.com), skupaj s certifikatom, ki bi ti pravil, da si na paypal.com. Kako boš vedel, da si res na www.paypal.com, in ne na neki drugi strani?
There are only two hard things in Computer Science:
cache invalidation, naming things and off-by-one errors.

denial ::

EV Cert saves the day. Sam tega itak nihče ne uporablja :D
SELECT finger FROM hand WHERE id=3;

poweroff ::

Kličejo jo Hacking Conference, pa ne vedo, da presledki ne spadajo v linke?

In zakaj bi jaz strani we-are-fake-paypal.com dajal moje PayPal informacije?

Ker ne veš kako deluje MITM napad. 8-)

V browser bi vpisal www.paypal.com, napadalec tvoj komunikacijski tok preusmeri na svojos tran, ki se ti v URL vrstici predstavi kot www.paypal.com (!). In ker je lažen še certifikat, (domnevno veljaven), bi pač nasedel.

Tako deluje MITM napad. Edina obramba je preverjanje SHA hasha certifikata. Ostalo so polovične rešitve.
sudo poweroff

techfreak :) ::

Se opravičujem, žal nisem v celoti prebral novice ... oz. se je nisem ravno trudil preveč razumeti. Ampak takrat nisem nič plačeval preko interneta, tako da sem varen.

poweroff ::

Zakaj že?

Zato, ker fake certifikati drugih strani pa še niso bili javno objavljeni? :D
sudo poweroff

techfreak :) ::

Saj green bar certifikata preko tega ne morejo dobiti ...

denial ::

Edina obramba je preverjanje SHA hasha certifikata. Ostalo so polovične rešitve.

Drži. Sam tega zaenkrat v praksi še ni, EV SSL pa so.
SELECT finger FROM hand WHERE id=3;

Matevžk ::

sploh ni fora v tem, da bi dajal napačni strani informacije, fora je v tem da ti lahko nekdo pofejka tvoj certifikat in potem prijavi na paypal.

Aja?
lp, Matevžk

Uros!no ::

Saj green bar certifikata preko tega ne morejo dobiti ...


Greenbara? Misliš https?

Bistri007 ::

Tako deluje MITM napad. Edina obramba je preverjanje SHA hasha certifikata. Ostalo so polovične rešitve.

Ne ni. Tako FF 3 kot IE 8 ti pokažeta na ime katerega podjetja je bil izdan certifikat.

Če ti na www.paypal.com namesto PayPal, Inc [US] napiše Lolek Bolek, Ltd [Nigeria] pač ne greš naprej, ne?

ROOT CA pa ne bo podpisal certifikata na ime drugega podjetja (domena je tu sekundarnega pomena), če ne, adijo njegova kredibilnost.
Največja napaka desetletja je bila narejena 4. novembra 2008
Oni so goljufali in Alah je goljufal, Alah je najboljši prevarant. (Koran 3:54)
Citiraj svetega očeta Benedikta XVI. in postani "persona rudis"...

Zgodovina sprememb…

ender ::

ROOT CA pa ne bo podpisal certifikata na ime drugega podjetja (domena je tu sekundarnega pomena), če ne, adijo njegova kredibilnost.
Seveda ne, saj VeriSign ni nikoli izdal dveh certifikatov na Microsoftovo ime kar nekomu.
There are only two hard things in Computer Science:
cache invalidation, naming things and off-by-one errors.

MrStein ::

Kličejo jo Hacking Conference, pa ne vedo, da presledki ne spadajo v linke?

Saj v linku ni presledkov ;)
(poglej source, če ne verjameš)


ROOT CA pa ne bo podpisal certifikata na ime drugega podjetja (domena je tu sekundarnega pomena), če ne, adijo njegova kredibilnost.

Matthai, daj linkaj v povezanih novicah še tisto, kak en CA podpiše karkoli mu pomoliš pod nos.
Motiti se je človeško.
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!

Zgodovina sprememb…

  • spremenil: MrStein ()

Bistri007 ::

\0 pomeni null terminated string

Sicer pa ne razumem zakaj \0 v www.banka.si\0zlonamernastran.si ne pomeni samo www.banka.si ampak še dodatno začetek zlonamernastran.si

8-O
Največja napaka desetletja je bila narejena 4. novembra 2008
Oni so goljufali in Alah je goljufal, Alah je najboljši prevarant. (Koran 3:54)
Citiraj svetega očeta Benedikta XVI. in postani "persona rudis"...

fiction ::

In zakaj bi jaz strani we-are-fake-paypal.com dajal moje PayPal informacije?
Ce nekdo nasede na phishing in gre na neko fake stran, mu noben certifikat ne pomaga vec. Tista stran se bo cisto lepo predstavila s certifikatom kot we-are-fake-paypal.com in vse bo izgledalo ok.

Point je v tem, da user zavestno hoce na paypal.com. Svojemu racunalniku lahko zaupa, medtem ko "mrezi" zunaj tipicno ne more. Mogoce lokalnemu omrezju lahko, ampak potem je se ISP, pa drugo omrezje s katerim si ISP izmenjuje podatke in tako naprej. Vsak na tej poti do paypal.com streznika se teoreticno lahko dela kot da je on paypal.com. Lahko te zafrkne tudi DNS server, ki bi moral biti trusted itd itd. Ampak fora je potem to, da ima samo pravi paypal.com certifikat s katerim zaupanja vreden CA potrjuje lastnik tega je paypal.com.

Se pravi s certifikatom preveris, ce je druga stran res tista za katero mislis, da je. Ce mislis, da mora biti hostname paypal.com.lame.domain.cc potem bos samo preveril to, ne pa ce je tisto "pravi" Paypal. Sej niti ni neke definicije kaj je pravi Paypal.

Potrebno je tudi paziti pri CA-ju. Ce nekdo rece jaz potrjujem, da sem res jaz (self-signed certifikat) je to v bistvu precej brezveze.

Greenbara? Misliš https?
EV certifikata najbrz.
Kolikor to razumem tukaj preverjajo se, da si ti res podjetje XYZ in da si lastnik domene xyz.com. Ampak takoj ko prides do nekih podobnih imen podjetij, si ze v tezavah. Sej ne morejo npr. vedeti, da je PaypalX namenjeno goljufijam :)

Seveda ne, saj VeriSign ni nikoli izdal dveh certifikatov na Microsoftovo ime kar nekomu.
;)

Matevžk ::

Potrebno je tudi paziti pri CA-ju. Ce nekdo rece jaz potrjujem, da sem res jaz (self-signed certifikat) je to v bistvu precej brezveze.

V trenutku, ko ustrezno podkupiš MS in se znajdeš v IE-jevi trusted listi, to kar naenkrat ni več brezveze. :)
lp, Matevžk

fiction ::

\0 tukaj je jasno ASCII 0 znak - to je tisti znak, ki stoji na koncu niza znakov v C-ju, ker je le-ta lahko poljubno velik.

www.banka.si\0.zlonamernastran.si je prav. Za CA, ki uporablja neko svojo kodo, ki lahko pohendla znak '\0' kot del stringa to v bistvu pomeni neka cudna (www.banka.si\0) poddomena od zlonamernastran.si. In CA potem rece bah, ni treba dokazovati da si to, dokazi samo da si res lastnik od zlonamernastran.si pa je. In to lahko naredis ter tako dobis certifikat.

Browser, ki je napisan tipicno v C-ju pa pogleda v certifikat in vidi aha gre za "www.banka.si". '\0' oznacuje konec niza, tako da je tisto naprej v bistvu en junk po koncu niza. Vsaka primerjava domene s tisto napisano v certifikatu zato cisto lepo uspe.

Sej to z ASCII 0 ni prva stvar, kako to abusati. Recimo %00 je precej uporaben pri kaksnih PHP file inclusion bugih. V bistvu gre za tipicen problem tega, da ima en kontrolni znak nekje tak pomen, drugje pa drugacnega. In ko to dvoje zamesas je konec.

MrStein ::


Sej to z ASCII 0 ni prva stvar, kako to abusati. Recimo %00 je precej uporaben pri kaksnih PHP file inclusion bugih. V bistvu gre za tipicen problem tega, da ima en kontrolni znak nekje tak pomen, drugje pa drugacnega. In ko to dvoje zamesas je konec.

Ah, o tem bi lahko knjige pisali ... :(

encoding/handling bugov je malo morje. (sem včeraj naletel na enga, zato pišem)
Motiti se je človeško.
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!

Matevžk ::

@fiction: hvala za pojasnilo; iz članka nisem dojel, kako CA pravzaprav interpretira prvi del niza (to vključno \0). Zdaj mi je jasno -- kot poddomeno. Ampak v primeru najbrž potem manjka še kakšna pika za \0?
lp, Matevžk

fiction ::

Potrebno je tudi paziti pri CA-ju. Ce nekdo rece jaz potrjujem, da sem res jaz (self-signed certifikat) je to v bistvu precej brezveze.

V trenutku, ko ustrezno podkupiš MS in se znajdeš v IE-jevi trusted listi, to kar naenkrat ni več brezveze. :)
Sej to skos pravim. Root CA-ji so tisti, ki jim _ti_ zaupas. Tisti seznam je samo nek default za to, da je tebi (oz. predvsem bolj neukim uporabnikom) lazje. Ampak v koncni fazi se vedno lahko reces, ta CA pa tako in tako preverja istovetnost in mu zato ne zaupam vec ter ga lepo zbrises. Da prides na tisti "default seznam" rabis najbrz kar nekaj denarja. "trust == money". Ce bi imel zle namene, se ti verjetno sploh ne splaca toliko vlagati v to da prides na seznam.

Matevžk ::

Ce bi imel zle namene, se ti verjetno sploh ne splaca toliko vlagati v to da prides na seznam.

Skoraj bi rekel, da prej velja obratno. :D
lp, Matevžk

darkolord ::

Je neranljivost Opere namenoma izpuščena iz novice?

fiction ::

Ampak v primeru najbrž potem manjka še kakšna pika za \0?
Ja, v tekstu dejansko manjka pika za \0, zato tudi meni najprej ni bilo cisto jasno kako vse skupaj poteka. Tako da sem moral prebrati tisti PDF. Da ne govorimo o tem, da iz teksta tukaj tudi ni bilo cisto jasno ali sta \0 dva znaka ali je to samo C-style notation za ASCII 0. Sem se nagibal k prvemu, samo potem bi moralo pisati '\0' (kot 1 znak) ne pa "\0".

Zgodovina sprememb…

  • spremenil: fiction ()

Looooooka ::

No paniko zdej zganjat je precej brezveze...ker bi nekdo mogu kr neki truda vlozit, da se ti zalima med tvojo povezavo.
Razen ce naenkrat ne zaupamo ne internet providerju ne svojmu adminu...ne adminu dns streznikov, ki jih uporabljamo...v tem primeru je mogoce lazje sploh ne hodit na internet.(ceprav se je ta scenarij pri nas ze zgodil...(nlb klik) ampak OK)
Kar se pa tice certifikatov so pa kar se tice idiotov tako ali tako neuporabni.Verisign bo men za dovolj denarja prodal certifikat s katerim lahko podpisem kar hocem(tud trojanca)...in bebci bojo samo zato, ker bo pisalo da je certifikat veljaven zadevo instalirali.
V tem primeri si ze bl varn z selfsigned certifikatom od soseda Mihca za katerga ves, da ti ne bo dal neke zlonamerne kode.

Zgodovina sprememb…

fiction ::

Meni osebno se drugace ne zdi, da gre za ranljivost v programih oz. knjiznicah. Program samo normalno dela in intepretira niz znakov tako kot ga mora. CA bi moral paziti na razne cudne znake v domeni, preden tisto podpise.

Je neranljivost Opere namenoma izpuščena iz novice?
Pise kateri program so ranljivi (ker je ocitno ta mnozica manjsa). Ce Opere na tem spisku ni, potem ni ranljiva. Res ne vem zakaj bi moral kdo to oznanjati. Potemtakem bi moral napisati tudi MS Office - NOT VULNERABLE. Sej nima nobene veze tukaj, samo toliko, da bo jasno da je ta bug v tem kontekstu offtopic :)

No paniko zdej zganjat je precej brezveze...ker bi nekdo mogu kr neki truda vlozit, da se ti zalima med tvojo povezavo.
V bistvu niti ni potrebno vloziti prevec truda, ce gredo paketi lepo sami "mimo tebe". Vse skupaj je priblizno tako kot ce posljes razglednico po posti. Katerikoli postar jo lahko vzame pogleda in kaj svojega dopise gor. Sej lahko reces pa kaj, ampak resne stvari se vedno posljes v kuverti, ceprav teoreticno lahko reces, da zaupas vsem postam in vsem postarjem po celem svetu.

fiction ::

Kar se pa tice certifikatov so pa kar se tice idiotov tako ali tako neuporabni.Verisign bo men za dovolj denarja prodal certifikat s katerim lahko podpisem kar hocem(tud trojanca)...in bebci bojo samo zato, ker bo pisalo da je certifikat veljaven zadevo instalirali.
To je zaradi tega, ker povprecnega uporabnika naucijo samo: http = BAD, https = GOOD, nepodpisana koda = BAD, podpisana koda = GOOD in v bistvu sploh ne razmislja kaj dosti :)

Razen ce naenkrat ne zaupamo ne internet providerju ne svojmu adminu...ne adminu dns streznikov, ki jih uporabljamo...v tem primeru je mogoce lazje sploh ne hodit na internet
Problem je v tem, da so lahko vsi OK razen enega pa si screwed. Tvoj paket gre lahko cez n omrezij. In samo v enem od teh je npr. zloben admin. Sej ti ne ves v naprej po kaksni poti bo sel paket oz. kateri ljudje so zaposleni pri ISP x v Ameriki. Ali pa je v tistem mreznem segmentu shekan streznik pa je. Glede na to koliko masin je dandanes ownanih verjetnost za to ni tako zanemarljiva. In z vsakim hopom je slabse.

Looooooka ::

se ena glede certifikatov...
preden sm sel na windows 7 sm vidu, da se je nekdo na posti slovenije zelo zelo najebal in jim zrihtal da so med root CA-ji...pri posti se jim vec kot ocitno sanjal ni kaj to pomen, ker niso nikol prodajal nic v zvezi s tem...
anyway na windows 7 jih kokr vidm ni vec na spisku.
lahko se kdo potrdi? :)

ah never mind...ocitno so sam zelo skriti...njihov certifikat je veljaven, izdan pa iz postarce.Se zmer root CA zgleda.

Zgodovina sprememb…

McMallar ::

Pise kateri program so ranljivi (ker je ocitno ta mnozica manjsa). Ce Opere na tem spisku ni, potem ni ranljiva. Res ne vem zakaj bi moral kdo to oznanjati.


To je tudi meni padlo v oči. Verjetno zaradi tega:

je v okolju Windows zaenkrat edina razumna možnost uporaba spletnega brskalnika Firefox,
Why can't a programmer tell the difference between Halloween and Christmas?
Because OCT31 = DEC25

poweroff ::

Ne ni. Tako FF 3 kot IE 8 ti pokažeta na ime katerega podjetja je bil izdan certifikat.

Sploh, če uporabljaš MD5, ja. :D
sudo poweroff

cryptozaver ::

Lahko bi se imenovala vsaj greyHat konferenca, saj darkerji svojih odkritij ne publicirajo...

8-O

MrStein ::

Meni osebno se drugace ne zdi, da gre za ranljivost v programih oz. knjiznicah. Program samo normalno dela in intepretira niz znakov tako kot ga mora. CA bi moral paziti na razne cudne znake v domeni, preden tisto podpise.

Gre za očitno napako.
A je zdaj že vsak drugi okužen z izgivoritisom?
Če program ne dela prav, ima napako. Fertik. Razen seveda če si politik/filozof/trol/len_developer/...
Motiti se je človeško.
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!

fiction ::

Gre za očitno napako.
Imas prav, se popravljam. Tocno je definirano, da najprej pride dolzina potem pa posamezni znaki. Se pravi bi moral program prebrati tocno tistih n znakov. Ce potem strlen() na nizu, ki ga sestavi ni n bi to lahko odkril in rekel, da je nekaj hudo narobe oz. bi to lahko ugotovil ze takoj ko prebere "cuden" znak 0. Ali pa pac za primerjavo ne bi uporabljal nizov znakov ampak byte array (saj ve koliko bajtov je treba primerjati).

Ampak se vedno je praksa raznih CA-jov, da samo na slepo podpisejo karkoli jim poturis (po moznosti celo avtomatizirano) malo vprasljiva.

Če program ne dela prav, ima napako.
Velikokrat samo izgleda kot da nekaj ne dela na koncu pa se izkaze, da je problem uporabnik. Ampak ja, tole je ze malo prevec filozofsko in offtopic.

MrStein ::

fiction:

..., da je problem uporabnik.

Zelo pogost izgovor.

Ampak ja, tole je ze malo prevec filozofsko in offtopic.

Zelo filozofsko. ;)
Motiti se je človeško.
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!

Zgodovina sprememb…

  • spremenil: MrStein ()

denial ::

SELECT finger FROM hand WHERE id=3;

poweroff ::

Je pa trajalo. Pa še par mesecev, da se poupdata po vseh mašinah po svetu...
sudo poweroff

McMallar ::

Pa eno opozorilo:
Popravka MS09-056 ne nameščati na sisteme, kjer teče LCS ali OCS. Povzroči namreč, da strežnik javlja, da mu je potekla licenca. Če je bil nameščen je edina rešitev odstranitev popravka.

Če bo imel kdo takšne težave...
Why can't a programmer tell the difference between Halloween and Christmas?
Because OCT31 = DEC25


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

C# davčno potrjevanje

Oddelek: Programiranje
163882 (3351) windigo
»

Država: Kakšna zasebnost in varnost na internetih, samo plačajte že davke!!! (strani: 1 2 3 4 5 )

Oddelek: Novice / NWO
20180411 (54606) MrStein
»

V letu 2016 bistveno več šifriranega prometa

Oddelek: Novice / Zasebnost
258337 (6207) Lonsarg
»

Šifrirani telefonski pogovori za Android platformo

Oddelek: Novice / Android
4811795 (9965) poweroff
»

Napad z ničelno predpono na SSL/TLS certifikate že "v divjini"

Oddelek: Novice / Varnost
415921 (4299) McMallar

Več podobnih tem