Zavrieť reklamu

Pred niekoľkými dňami vydal Apple stotinovú aktualizáciu iOS 7.0.6, o ktorej uvoľnení sme vás informovali. Mnohých mohlo prekvapiť, že aktualizácia vyšla aj pre starší iOS 6 (verzia 6.1.6) a Apple TV (verzia 6.0.2). Ide o bezpečnostnú záplatu, a tak si Apple nemohol dovoliť updatovať iba časť svojich zariadení. Čo viac, tento problém sa týka aj OS X. Podľa hovorkyne Applu Trudy Mullerovej bude aktualizácia OS X vydaná čo najskôr.

Prečo je okolo tejto aktualizácie toľko humbuku? Chyba v kóde systému dovoľuje na zabezpečenom prenose na relačnej vrstve referenčnej modelu ISO/OSI preskočiť verifikáciu servera. Konkrétne je na vine zlá implementácia SSL v časti, kde prebieha overovanie certifikátu servera. Než sa pustím do ďalšieho vysvetľovania, radšej popíšem základné pojmy.

SSL (Secure Socket Layer) je protokol slúžiaci na zabezpečenú komunikáciu. Bezpečnosti dosahuje pomocou šifrovania a autentizácie komunikujúcich strán. Autentizácia je potom overenie predkladanej identity. V reálnom živote napríklad poviete svoje meno (identitu) a ukážete svoj občiansky preukaz, aby ju mohol druhý človek overiť (vykonať autentizáciu). Autentizácia sa potom delí na verifikáciu, čo je práve príklad s občianskym preukazom, alebo identifikáciu, kedy vašu identitu dokáže dotyčný určiť bez toho, aby ste mu ju vopred predkladali.

Teraz by som sa krátko dostal k certifikátu servera. V reálnom živote by sa za váš certifikát dal považovať napríklad občiansky preukaz. Všetko je založené na asymetrickej kryptografii, keď každý subjekt vlastní dva kľúče – súkromný a verejný. Celá krása tkvie v tom, že verejným kľúčom je možné správu zašifrovať a súkromným dešifrovať. To znamená, že správu dešifruje iba vlastník súkromného kľúča. Zároveň odpadá starosť s prenosom tajného kľúča k obom komunikujúcim stranám. Certifikát je potom verejný kľúč subjektu doplnený o jeho informácie a podpísaný certifikačnou autoritou. V Českej republike je jednou z certifikačných autorít napríklad Slovenská Pošta. Vďaka certifikátu si tak môže iPhone overiť, že skutočne komunikuje s daným serverom.

Asymetrické šifrovanie využíva SSL pri ustanovení spojenia, tzv. SSL handshake. V tejto fáze si váš iPhone overí, že komunikuje s daným serverom, a zároveň dôjde pomocou asymetrického šifrovania k ustanoveniu symetrického kľúča, ktorý bude používaný pre celú nasledujúcu komunikáciu. Symetrické šifrovanie je totiž rýchlejšie. Ako už bolo napísané, chyba nastáva už pri verifikácii servera. Poďme sa pozrieť na kód, ktorý je príčinou tejto zraniteľnosti systému.

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;
}

V druhej podmienke if môžete vidieť pod sebou dva príkazy goto fail;. A to je onen kameň úrazu. Tento kód potom spôsobuje to, že vo fáze, kedy by malo dôjsť k overeniu certifikátu, sa vykoná druhý príkaz goto fail;. To spôsobí fakt, že je preskočená tretia podmienka if a vôbec nedôjde k verifikácii servera.

Dôsledky sú také, že ktokoľvek so znalosťou tohto zraniteľného miesta môže ponúknuť vášmu iPhonu podvrhnutý certifikát. Vy, resp. váš iPhone, si budete myslieť, že komunikujete šifrovane, a pritom sa medzi vami a serverom nachádza útočník. Takémuto útoku sa hovorí man-in-the-middle útok, čo sa do slovenčiny prekladá kostrbate ako útok prostredníkom alebo človek medzi. Útok využívajúci túto konkrétnu chybu v OS X a iOS je možné realizovať, iba ak sa útočník a obeť nachádza v rovnakej sieti. Preto sa radšej vyhýbajte verejným Wi-Fi sieťam, pokiaľ ste svoj iOS neaktualizovali. Používatelia Macov by mali byť ešte chvíľu obozretní, na ktoré siete sa pripájajú a aké stránky budú na týchto sieťach navštevovať.

Je až na neuverenie, ako sa takáto fatálna chyba mohla dostať do finálnych verzií OS X a iOS. Mohlo sa jednať o nedôsledné testovanie zle napísaného kódu. To by znamenalo, že by pochybili programátor aj testeri. To sa u spoločnosti Apple môže javiť ako málo pravdepodobné, a tak sa na povrch dostávajú špekulácie, že táto chyba sú v skutočnosti zadné dvierka, tzv. zadné dvere. Nie nadarmo sa hovorí, že najlepšie zadné dvierka vyzerajú ako nenápadné chyby. To sú však iba nepotvrdené teórie, preto budeme predpokladať, že niekto urobil jednoducho chybu.

Pokiaľ si nie ste istí, či je váš systém alebo prehliadač voči tejto chybe imúnny, navštívte stránku gotofail.com. Ako môžete na obrázkoch nižšie vidieť, Safari 7.0.1 v OS X Mavericks 10.9.1 chybu obsahuje, kým v Safari v iOS 7.0.6 už je všetko v poriadku.

zdroje: Imora, Reuters
.