Zavřít reklamu

Před několika dny vydal Apple setinovou aktualizaci iOS 7.0.6, o jejíž uvolnění jsme vás informovali. Mnohé mohlo překvapit, že aktualizace vyšla také pro starší iOS 6 (verze 6.1.6) a Apple TV (verze 6.0.2). Jedná se o bezpečnostní záplatu, a tak si Apple nemohl dovolit updatovat pouze část svých zařízení. Co víc, tento problém se týká také OS X. Podle mluvčí Applu Trudy Mullerové bude aktualizace OS X vydána co nejdříve.

Proč je kolem této aktualizace tolik humbuku? Chyba v kódu systému dovoluje na zabezpečeném přenosu na relační vrstvě referenční modelu ISO/OSI přeskočit verifikaci serveru. Konkrétně je na vině špatná implementace SSL v části, kde probíhá ověřování certifikátu serveru. Než se pustím do dalšího vysvětlování, raději popíšu základní pojmy.

SSL (Secure Socket Layer) je protokol sloužící k zabezpečené komunikaci. Bezpečnosti dosahuje pomocí šifrování a autentizace komunikujících stran. Autentizace je pak ověření předkládané identity. V reálném životě například řeknete své jméno (identitu) a ukážete svůj občanský průkaz, aby ji mohl druhý člověk ověřit (provést autentizaci). Autentizace se pak dělí na verifikaci, což je právě příklad s občanským průkazem, nebo identifikaci, kdy vaši identitu dokáže dotyčný určit, aniž byste mu ji předem předkládali.

Nyní bych se krátce dostal k certifikátu serveru. V reálném životě by se za váš certifikát dal považovat například občanský průkaz. Vše je založeno na asymetrické kryptografii, kdy každý subjekt vlastní dva klíče – soukromý a veřejný. Celá krása tkví v tom, že veřejným klíčem lze zprávu zašifrovat a soukromým dešifrovat. To znamená, že zprávu dešifruje pouze vlastník soukromého klíče. Zároveň odpadá starost s přenosem tajného klíče k oběma komunikujícím stranám. Certifikát je pak veřejný klíč subjektu doplněný o jeho informace a podepsaný certifikační autoritou. V České republice je jednou z certifikačních autorit například Česká Pošta. Díky certifikátu si tak může iPhone ověřit, že skutečně komunikuje s daným serverem.

Asymetrického šifrování využívá SSL při ustanovení spojení, tzv. SSL handshake. V této fázi si váš iPhone ověří, že komunikuje s daným serverem, a zároveň dojde za pomocí asymetrického šifrování k ustanovení symetrického klíče, který bude používán pro celou následující komunikaci. Symetrické šifrování je totiž rychlejší. Jak již bylo napsáno, chyba nastává už při verifikaci serveru. Pojďme se podívat na kód, který je příčinou této zranitelnosti 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 druhé podmínce if můžete vidět pod sebou dva příkazy goto fail;. A to je onen kámen úrazu. Tento kód pak způsobuje to, že ve fázi, kdy by mělo dojít k ověření certifikátu, se vykoná druhý příkaz goto fail;. To způsobí fakt, že je přeskočena třetí podmínka if a vůbec nedojde k verifikaci serveru.

Důsledky jsou takové, že kdokoliv se znalostí tohoto zranitelného místa může nabídnout vašemu iPhonu podvržený certifikát. Vy, resp. váš iPhone, si budete myslet, že komunikujete šifrovaně, a přitom se mezi vámi a serverem nachází útočník. Takovému útoku se říká man-in-the-middle attack, což se do češtiny překládá kostrbatě jako útok prostředníkem nebo člověk mezi. Útok využívající tuto konkrétní chybu v OS X a iOS lze realizovat, pouze pokud se útočník a oběť nachází ve stejné síti. Proto se raději vyhýbejte veřejným Wi-Fi sítím, pokud jste svůj iOS neaktualizovali. Uživatelé Maců by měli být ještě chvíli obezřetní, na které sítě se připojují a jaké stránky budou na těchto sítích navštěvovat.

Je až k neuvěření, jak se takováto fatální chyba mohla dostat do finálních verzí OS X a iOS. Mohlo se jednat o nedůsledné testování špatně napsaného kódu. To by znamenalo, že by pochybili programátor i testeři. To se u společnosti Apple může jevit jako málo pravděpodobné, a tak se na povrch dostávají spekulace, že tato chyba jsou ve skutečnosti zadní vrátka, tzv. back door. Ne nadarmo se říká, že nejlepší zadní vrátka vypadají jako nenápadné chyby. To jsou však jen nepotvrzené teorie, proto budeme předpokládat, že někdo udělal jednoduše chybu.

Pokud si nejste jistí, zda je váš systém nebo prohlížeč vůči této chybě imunní, navštivte stránku gotofail.com. Jak můžete na obrázcích níže vidět, Safari 7.0.1 v OS X Mavericks 10.9.1 chybu obsahuje, kdežto v Safari v iOS 7.0.6 už je vše v pořádku.

Zdroje: iMore, Reuters
.