Hirdetés bezárása

Néhány nappal ezelőtt az Apple kiadta a századik iOS 7.0.6 frissítés, amelynek megjelenéséről tájékoztattuk Önt. Sokan meglepődhettek, hogy a frissítés a régebbi iOS 6-ra (6.1.6-os verzió) és az Apple TV-re (6.0.2-es verzió) is megjelent. Ez egy biztonsági javítás, így az Apple nem engedheti meg magának, hogy eszközeinek csak egy részét frissítse. Sőt, ez a probléma az OS X-et is érinti. Trudy Muller, az Apple szóvivője szerint az OS X frissítése a lehető leghamarabb megjelenik.

Miért van akkora hype a frissítés körül? A rendszer kódjának hibája lehetővé teszi a szerver ellenőrzésének megkerülését az ISO/OSI referenciamodell relációs rétegében a biztonságos átvitel során. Pontosabban, a hiba egy rossz SSL implementáció abban a részben, ahol a szervertanúsítvány ellenőrzése történik. Mielőtt belemennék a további magyarázatba, inkább leírom az alapfogalmakat.

Az SSL (Secure Socket Layer) a biztonságos kommunikációra használt protokoll. A biztonságot a kommunikáló felek titkosításával és hitelesítésével éri el. A hitelesítés a bemutatott személyazonosság ellenőrzése. A való életben például kimondja a nevét (személyazonosságát), és felmutatja az azonosítóját, hogy a másik személy ellenőrizhesse (hitelesíthesse). A hitelesítés ezután ellenőrzésre oszlik, amely csak egy példa a személyi igazolvánnyal, vagy azonosítással, amikor az érintett személyazonosságát anélkül tudja megállapítani, hogy azt előzetesen bemutatná.

Most röviden kitérnék a szervertanúsítványra. A való életben a tanúsítványa lehet például egy személyi igazolvány. Minden az aszimmetrikus titkosításon alapul, ahol minden alanynak két kulcsa van - privát és nyilvános. Az egész szépség abban rejlik, hogy az üzenet titkosítható a nyilvános kulccsal és visszafejthető a privát kulccsal. Ez azt jelenti, hogy csak a privát kulcs tulajdonosa tudja visszafejteni az üzenetet. Ugyanakkor nem kell aggódnia amiatt, hogy mindkét kommunikáló félnek átadja a titkos kulcsot. A tanúsítvány ekkor az alany nyilvános kulcsa, kiegészítve annak információival és a hitelesítésszolgáltató által aláírva. Csehországban az egyik tanúsító hatóság például a Česká Pošta. A tanúsítványnak köszönhetően az iPhone ellenőrizni tudja, hogy valóban kommunikál-e az adott szerverrel.

Az SSL a kapcsolat létesítésekor aszimmetrikus titkosítást, ún SSL kézfogás. Ebben a szakaszban az iPhone ellenőrzi, hogy kommunikál-e az adott szerverrel, és ezzel egyidejűleg az aszimmetrikus titkosítás segítségével létrejön egy szimmetrikus kulcs, amelyet minden további kommunikációhoz használni fog. A szimmetrikus titkosítás gyorsabb. Ahogy már írtuk, a hiba már a szerver ellenőrzése során jelentkezik. Nézzük meg azt a kódot, amely ezt a rendszer sebezhetőségét okozza.

static OSStatus
SSLVerifySignedServerKeyExchange(SSLContext *ctx, bool isRsa,
SSLBuffer signedParams, uint8_t *signature, UInt16 signatureLen)

{
   OSStatus err;
   …

   if ((err = SSLHashSHA1.update(&hashCtx, &serverRandom)) != 0)
       goto fail;
   if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0)
       goto fail;
       goto fail;
   if ((err = SSLHashSHA1.final(&hashCtx, &hashOut)) != 0)
       goto fail;
   …

fail:
   SSLFreeBuffer(&signedHashes);
   SSLFreeBuffer(&hashCtx);
   return err;
}

A második állapotban if lentebb két parancsot láthat megbukott;. És ez a buktató. Ez a kód ezután a második parancs végrehajtását eredményezi abban a szakaszban, amikor a tanúsítványt ellenőrizni kell megbukott;. Ez a harmadik feltétel kihagyását okozza if és egyáltalán nem lesz szerverellenőrzés.

Ennek következménye az, hogy bárki, aki ismeri ezt a sérülékenységet, hamis tanúsítványt ajánlhat fel iPhone-jának. Te ill iPhone-ján azt fogja gondolni, hogy titkosítva kommunikál, miközben támadó van közted és a szerver között. Az ilyen támadást úgy hívják ember-közepén támadás, ami nagyjából csehre fordítva, mint ember a középső támadásban vagy férfi között. Az OS X és iOS ezen hibáját használó támadás csak akkor hajtható végre, ha a támadó és az áldozat ugyanazon a hálózaton vannak. Ezért jobb elkerülni a nyilvános Wi-Fi hálózatokat, ha nem frissítette az iOS-t. A Mac-felhasználóknak továbbra is ügyelniük kell arra, hogy mely hálózatokhoz csatlakoznak, és milyen webhelyeket keresnek fel ezeken a hálózatokon.

Hihetetlen, hogy egy ilyen végzetes hiba hogyan kerülhetett be az OS X és az iOS végső verziójába. Lehet, hogy a rosszul megírt kód következetlen tesztelése volt. Ez azt jelentené, hogy a programozó és a tesztelők is hibáznának. Ez valószínűtlennek tűnhet az Apple számára, és így felszínre kerülnek a találgatások, hogy ez a hiba valójában egy hátsó ajtó, az ún. hátsó ajtó. Nem hiába mondják, hogy a legjobb hátsó ajtók finom hibáknak tűnnek. Ezek azonban csak meg nem erősített elméletek, ezért feltételezzük, hogy valaki egyszerűen hibázott.

Ha nem biztos abban, hogy rendszere vagy böngészője immunis-e erre a hibára, látogassa meg az oldalt gotofail.com. Ahogy az alábbi képeken is látható, az OS X Mavericks 7.0.1-es Safari 10.9.1 hibát tartalmaz, míg az iOS 7.0.6-os Safariban minden rendben van.

Erőforrások: Én több, Reuters
.