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

MS10-012: Egy kis kriptó

2010.02.12. 18:30 | buherator | 4 komment

echo 'keysym XF86Back=Backspace' > ~/.Xmodmap

# A lelki békém érdekében...

Akik közelebbről ismernek tudják, hogy - bár nem vagyok kellően okos hozzá - a kriptográfia a szívem csücske, a mostani MS frissítés pedig egy remek kriptográfiai témájú sebezhetőséget is napvilágra hozott, melyről nem tudom megállni, hogy ne írjak pár sort. A probléma önmagában nem túl bonyolult, de ez jó alkalom ad egy kis kriptográfiai-protokoll gyorstalpalóra, valamint arra, hogy megmutassam, miért olyan marha nagy probléma, ha nem tudunk kellően megjósolhatatlan (ál)véletlenszámot generálni.

A sebezhetőség teljes analízisét az expertek itt találják meg, a többieknek a továbbra érdemes kattintani.

Szóval, aki visszalapozott, már tudhatja, hogy a probléma az SMB protkoll NTLM autentikációt megvalósító részének véletlenszámgenerátorát érnitette. Jó sok volt a rövidítés, de a Wikipedia mindenre tudja a választ. A lényeg a mi szempontunkból az, hogy az NTLM egy kihívás-válasz alapú autentikációs protokoll, magyarul a szerver küld nekem valamilyen véletlen értéket, amit nonce-nak szoktak hívni (Not Only Once - magyarul ezt illene csak egyszer felhasználni, hogy miért az mindjárt kiderül), én meg a saját titkomat (jelszavamat) felhasználva előállítok ebből egy választ. Matekosok kedvéért:

Válasz=NTLM(nonce,titok)

Ebben egyrészt az a jó, hogy ha egy támadó lehallgatja a hálózatot (és miért ne tenné?), akkor nem kaparintja meg a jelszavamat, csak annak valamilyen transzformáltját, amiből (jó esetben) nem tudja visszaállítani a titkomat (hash algoritmusok, ugye). A nonce azért kell, mert nélküle ez a transzformált minden esetben ugyanaz lenne, így visszajátszással (újraküldéssel) bárki bejelentkezhetne, aki egyszer elkapott egy ilyet. Az NTLM esetében viszont a szerver elméletileg minden bejelentkezési kísérletre más nonce-t ad, ami más válaszokat eredményez, így gyakorlatilag a támadó megőszül, mire pont egy olyat dob neki a gép, amire az elkapott válaszok bármelyikét vissza tudná játszani.

És itt keletkezik a baj, ha a gép gyakran dobja ugyanazt a számot, hiszen így a a támadó potenciális várakozási ideje drasztikusan lerövidül. Pontosan ez a helyzet az MS10-012 esetében is, persze a hibakihasználáshoz most is kell trükközni egy kicsit:

A véletlenszámgenerátor akkor "bolondul meg" (pontosabban szedi össze magát), ha egy speciális Flags mezővel ellátott 'SMB Negotiate Protocol Request' üzenetet kap, ilyeneket viszont az elterjedt kliensek nem küldenek. Mi viszont küldhetünk, és küldönk is, jó sokat, mire a célpont szerver hozzánkvág néhány ezer kihívást. Ezután keresünk egy felhasználót, akinek van hozzáférése a szerverhez, és mondjuk megnyittatunk vele egy weboldalt, ami egy halom képet próbálna letölteni egy SMB megosztásról, ami történetesen szintén a mi gépünkön futhat. A felhazsnáló SMB kliense természetesen meg fog próbálkozni a bejelentkezéssel,amihez mi elküldjük neki a célponttól kapott nonce-okat. Ezekre a kliens szépen válaszolni is fog, ezeket a válaszokat a célpont felé újraküldve pedig egy kis szerencsével - hiszen gyakran generálódik ugyanaz a nonce- bejelentkezhetünk a felhasználó nevében a célpont kiszolgálóra.

Ugyanazok a speciális SMB csomagok, amelyek a duplikált kihívásgenerálást előidézték alkalmasak még arra is, hogy segítségükkel megjósoljuk a szerver által kiküldendő nonce-ok értékeit. A véletlenszámgenerátor ugyanis alapvetően három paraméterből táplálkozik:

  • Egy belső változó értékéből, amely kezdetben 0, és gyakorlatilag csak a mi speciális üzeneteink hatására inkrementálódik.
  • Az  adott pillanatig indult folyamatok számából.
  • A rendszeridőből, melynek felhasznált értékét visszakapjuk a speciális csomagunk válaszában (ez rámutat, hogy kriptográfiai alkalmazások esetében kritikus lehet pusztán a rendszeridő ismerete is!)

Három paraméterből kettőt tehát gyakorlatilag ismerünk, csak úgy mint a véletlenszámgenerátor algoritmusát (hála a reverse-engineeringnek), így meghatározható egy értékhalmaz, melybe a kövekező nonce-ok értéke várhatóan esni fog (hogy ez pontosan hogyan történik, az a mellékelt forráskódokból derül ki). Erre a halmazra már eljátszható az előzőekben bemutatott, hamis SMB szervert alkalmazó trükk, és készen vagyunk.

Remélem hasznosnak találtátok az írást, ne habozzatok kérdezni/éleményezni a kommentekben! Házifeladat megnézni, hogy a Kerberos protokollt milyen védelmi vonalak erősítik egy hasonló hibával/támadással szemben :)

Címkék: kriptográfia smb ntlm

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.

loolek · http://loolek.tumblr.com 2010.02.14. 23:28:44

Elsőként egy idézet ->

"Bárki, aki aritmetikai módszerekkel akar előállítani egy véletlenszámot, a bűn állapotában leledzik."
- Neumann János

Olvasni pedig ezt a három papírt ajánlanám (a második, egyből az itt linkelt előzmény) ->

Over a year ago, I published a whitepaper titled "Strange Attractors and TCP/IP Sequence Number Analysis" - an attempt to evaluate TCP/IP sequence number generators in several mainstream operating systems by mapping the dynamics of the generated sequence numbers into a three-dimensional phase space. We demonstrated how this approach can be used to find many non-trivial correlations, and discussed why the results can be directly used to perform actual ISN prediction.

lcamtuf.coredump.cx/newtcp/

"The generation of random numbers is too important to be left to chance."
-Robert Coveyou

It is often said that mathematics is about understanding patterns and that these patterns are what makes mathematics beautiful. This article, however, is about how mathematics may be used to create, or at least simulate, randomness, the lack of patterns. Suprisingly, we will see that it is difficult to create random behavior (in fact, the words "create randomness" may sound a little jarring) and to determine when we have successfully done it.

www.ams.org/featurecolumn/archive/random.html

finally {
web.archive.org/web/20011027002011/http://dilbert.com/comics/dilbert/archive/images/dilbert2001182781025.gif
}

loolek · http://loolek.tumblr.com 2010.02.14. 23:46:15

A klasszikus eset amit a fenti papir is megemlít 1994 -ben történt és egy új szót adott a szcénának 'sequence number guessing'

"Just after two o'clock in the afternoon, Shimomura's home systems were probed, then successfully attacked using something new in Internet attacks, sequence number guessing."

www.networkcomputing.com/unixworld/security/001.txt.html

buherator · http://buhera.blog.hu 2010.02.15. 08:49:45

@loolek: Hasznos linkek köszi! A dilbert mellé ez azért még kötelező: xkcd.com/221/