Tweets by @buherablog
profile for buherator at IT Security Stack Exchange, Q&A for IT security professionals

A BitBetyár Blog

Túljártál a nagyokosok eszén? Küldd be a mutatványodat! (e-mail a buherator gmailkomra jöhet)

Full-Disclosure / Névjegy / Coming out


Promó

H.A.C.K.

Címkék

0day (110) adobe (87) adobe reader (21) anonymous (26) apple (60) az olvasó ír (49) blackhat (20) botnet (22) bug (200) buherablog (44) buhera sörözés (39) bukta (49) deface (38) dns (22) dos (29) esemény (82) facebook (26) firefox (64) flash (33) gondolat (31) google (59) google chrome (36) hacktivity (37) hírek (117) incidens (224) internet explorer (88) iphone (35) java (50) jog (22) kína (21) kriptográfia (68) kultúra (21) linux (24) malware (43) microsoft (142) móka (48) mozilla (23) office (26) oracle (40) os x (43) patch (197) php (20) politika (31) privacy (58) programozás (22) safari (34) sql injection (62) windows (85) xss (77) Címkefelhő

Licensz

Creative Commons Licenc

DNS Pinning

2007.07.12. 10:41 | buherator | Szólj hozzá!

Íme az első bejegyzés, melyet christ1an blogja alapján készítettem. A téma bár elég régi, úgy tűnik nagy hype van körülötte mostanában, én azonban nem emiatt, hanem a módszer szépsége és agyafúrtsága miatt választottam ezt a trükköt az első rendes bejegyzés témájának.

Vágjunk bele:

A same origin policy egy modern böngészőkben implementált hozzáférés szabályozás, amely megakadályozza, hogy az egyik helyen lévő script egy másik helyen lévő dokumentumhoz férhessen hozzá. Ennélfogva nem lehetséges egy távoli helyről információt szerezni, vagy ott információt megváltoztatni. Ezen megkötés áthágásával természetesen sokáig kísérleteztek, az eredmények egyike az ún. Anti DNS-Pinning illetve az Anti-Anti-Anti DNS Pinning.

Érdemes tehát megnézni, hogy mi is tulajdonképpen maga a DNS Pinning. Ha valaki meglátogatja mondjuk a www.example.com weboldalt, a böngésző először egy DNS lookupot kell hogy végrehajtson, hogy megtudja a domainhez rendelt IP címet. A továbbiakban a böngésző az ezen az IP címen található géppel kommunikál.

Tegyük fel, hogy a DNS lookup eredménye szerint a www.example.com-hoz tartozó IP cím a 111.111.111.111! A böngésző által az oldalnak küldött kérés valahogy így nézhet ki:

GET / HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.4) Gecko/20070515 Firefox/2.0.0.4
Accept: */*
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Cookie: secret authentication token 12345


Itt jön be a képbe a DNS Pinning. A böngésző úgy kísérli meg kivédeni az Anti DNS Pinninget, hogy az ablaka bezárásáig eltárolja a hostnév-IP párost, függetlenül a DNS szerveren beállított TTL-től. Az alábbi ábrán az a forgatókönyv látható, amely ellen a DNS pinning véd. Ebben az esetben a támadó a 222.222.222.222 IP című attacker.com-ot futtatja.

Teljes hozzáférése van ezen kívül a DNS bejegyzéshez is, melynek TTL-je 1 másodpercre van állítva. Az oldal megtekintésekor egy JavaScript töltődik be, amely utasítja a böngészőt, hogy 2 másodperc múlva kapcsolódjon újra a jelenlegi oldalhoz, majd a visszakapott adatokat töltse át egy másik, a támadó által irányított szerverre.


1) A felhasználó böngészője csatlakozik a www.attacker.com-hoz és DNS lekérdezést hajt végre, megkapva a 222.222.222.222-es IP címet 1 másodperces TTL-lel
2) Két másodperccel ez után a JavaScript utasítja a böngészőt, hogy kapcsolódjon újra a www.attacker.com-hoz (a TTL lejárt!)
3) Mivel a DNS már nem érvényes, a böngésző újabb DNS lookupot hajt végre
4) A DNS szerver azonban ezúttal 111.111.111.111-el válaszol, ami a www.example.com IP címe
5) A böngésző kapcsolódik a www.example.com-hoz, és egy ilyesmi fejlécet küld:

GET / HTTP/1.1
Host: www.attacker.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.4) Gecko/20070515 Firefox/2.0.0.4
Accept: */*
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive

Érdemes észrevenni, hogy a host www.attacker.com-ra változott www.example.com helyett, valamint hogy eltűnt a süti. A cache-elt hostnév-IP párok segítségével a DNS Pinning megakadályozza az IP cím újbóli lekérését, és ezzel ellehetetleníti ez a támadást.

Anti DNS Pinning

2006. augusztus 14-én Martin Johns egy új ötlettel állt elő. Felfedezte, hogy a DNS Pinning csak akkor működik, ha a kérdéses webkiszolgáló online és elérhető. Ez azért érdekes, mert ha a kiszolgáló nem elérhető, új DNS lekérdeuzést kell végrehajtani, hogy kiderüljön, hogy valamilyen módon más helyre került-e a szerver. A támadó pedig bármikor "leállíthatja" a szerverét, és ezzel új DNS lookupra kényszerítheti a célpont böngészőt. Ábrával szemléltetve:


1) A felhasználó böngészője csatlakozik a www.attacker.com-hoz és DNS lekérdezést végez, melynek eredményeként a 222.222.222.222 IP címet kapja 1 másodperces TTL-lel.
2) Egy JavaScript két másodperc után újratölteti a böngészővel az oldalt. Ezután a szerver tűzfalazza magát.
3) Így a DNS Pinning nem működik, mivel a DNS bejegyzés érvényét vesztette (az adott IP címen nem található gép), a böngésző tehát újra a DNS kiszolgálóhoz fordul, hogy lekérdezze a www.attacker.com címét. (Gyönyörű :)
4) A támadó DNS szervere ezután a 111.111.111.111 címet adja vissza, ami természetesen a www.example.com címe.
5) A böngésző csatlakozik a 111.111.111.111-es című géphez, és a következő fejlécet küldi:

GET / HTTP/1.1
Host: www.attacker.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.4) Gecko/20070515 Firefox/2.0.0.4
Accept: */*
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive


Mivel az IP megváltozott a támadó XMLHttpRequest parancsa most már egy másik weboldalt olvas (www.example.com), bár a böngésző azt hiszi, hogy ez az oldal még mindig ugyanaz. Emiatt került elő a cikk elején a same origin policy. Láthatjuk, hogy az Anti DNS Pinning segítségével áthághatjuk.

Azért van néhány dolog amit meg kell jegyeznünk. Először is, a host megint www.attacker.com-ra változott, és a sütik is elvesztek. Ezt figyelembe véve elgondolkozhatunk, hogy miért is használna bárki is Anti DNS Pinninget a www.example.com sima lekérdezése helyett.

Nos, az Anti DNS Pinning semmit sem segít a támadónak, hacsak nem intranetekről, vagy más IP cím alapú hozzáféréskorlátozással rendelkező célpontról beszélünk. Ekkor válik az Anti DNS Pinning igazán veszélyessé, mivel a www.example.com helyett az intranet.example.com-ot támadhatjuk, amelyet egy céges túzfal mögötti biztonságos zónának tartanak.

Nem csak adatokat olvashatunk a védett oldalakról, de akár CSRF támadást is intézhetünk az intraneten futó alkalmazások felé.

Anti Anti DNS Pinning

Természetesen megszületett a védekezés módszere is az Anti DNS Pinning ellen: ellenőrizni kell a fejléc Host részét, és csak azokat a biztonságos domainekre mutató kéréseket szabad engedélyezni.

Anti Anti Anti DNS Pinnging

Sajnos azonban a fejlécet több féle képpen is könnyedén lehet hamisítani, ezért az előző tehnika nem tűnik túlzottan hatékonynak. Amit Klein küldött egy üzenetet a Bugtraq-ra, melyben leírja, hogy hogyan lehet a fejlécet meghamisítani Internet Explorer alatt az XMLHttpRequest vagy Flash segítségével:


<*script>
var x = new ActiveXObject("Microsoft.XMLHTTP");
x.open(
"GET\thttp://attacker.com/\tHTTP/1.0\r\nHost:\twww.example.com
\r\n\r\n,
"http://www.attacker.com/",
false
);

x.send();
alert(x.responseText);
<*/script>

Ha az eddigiek nem voltak elég meggyőzőek, további érdekes példákat és működő scripteket találhatsz a következő helyeken:
ha.ckers.org
sla.ckers.org
Death by 1000 Cuts

Nos, nagyjából eddig tartott az eredeti cikk, remélem tanulságos volt. Próbáltam törekedni az érthetőségre és a szöveghűségre, de elképzelhető, hogy nem végeztem mindenhol tökéletes munkát, ezért elnézést kérek. A következő néhány napban belenyúlok egy kicsit a designba, és megpróbálom még áttekinthetőbbé tenni a posztot. Megjegyzéseket és építő jellegű kritikát most és ezentúl mindig a kommentek közé várok szeretettel.

Címkék: dns dns pinning csrf

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.