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.
Támadás KERESZTÜL…. Rég nem nevettem ilyen jót, kiadósat!
Bárhogy is legyen - én személy szerint úgy értem, hogy az APPLE üzenete minden felhasználónak - akár így, akár úgy (és nem hiszem, hogy a hiba előfordulásának az említett 2 lehetőségnél több valós), mindkettő egyszerű megcsúfolása az APPLE dolgok hétköznapi tulajdonosainak!
Hála Istennek igazad volt.
Azt hinném, hogy ez valódi hiba. El tudom képzelni, hogy két ág összevonásakor jött létre a verziószámító rendszerben, ha az egyik ág egy sorral hosszabb. Mindenesetre ez csak egy újabb eset, amely megerősíti, hogy van értelme a programozókat arra kényszeríteni, hogy akár egysoros testet is zárjanak be egy blokkban.
Köszönöm a részletes leírást!
Elnézést, hogy a vitán kívül írtam, de most olvastam az idne-en, hogy az állítólagos nagyobb iPhone-t iPhabletnek kellene hívni :-D Majdnem elvesztettem.. :-D Üdvözlet minden almabarátnak
….. Hú, a kreativitás nem tűnik el lassan… talán csak egy kacsa!
Szia! Problémák adódtak az akkumulátor élettartamával a frissítés után? Az iP5-tel kapcsolatos sok panasz után kaptam egy újat, így van egy új akkumulátorom, ami majdnem két napig bírta. Frissítés után 8 órán belül lemerült a telefonom és keveset használom.
Személy szerint nem regisztráltam semmilyen problémát a zseblámpával. A múltban azonban igen, és az iOS biztonsági mentése és tiszta újratelepítése mindig segített. Remélhetőleg segíteni fog.
Ma megcsináltam és sajnos nem változott :-/