Zatvori oglas

Prije nekoliko dana Apple je objavio stoti iOS 7.0.6 ažuriranje, o čijem izlasku smo Vas obavijestili. Mnogi su možda bili iznenađeni što je ažuriranje objavljeno i za stariji iOS 6 (verzija 6.1.6) i Apple TV (verzija 6.0.2). Ovo je sigurnosna zakrpa, tako da Apple nije mogao priuštiti da ažurira samo dio svojih uređaja. Štaviše, ovaj problem također utiče na OS X. Prema riječima glasnogovornice Applea Trudy Muller, ažuriranje OS X će biti objavljeno što je prije moguće.

Zašto postoji tolika reklama oko ovog ažuriranja? Greška u sistemskom kodu omogućava da se zaobiđe verifikacija servera pri bezbednom prenosu na relacionom sloju ISO/OSI referentnog modela. Konkretno, greška je loša implementacija SSL-a u dijelu gdje se vrši provjera certifikata servera. Prije nego što krenem u dalje objašnjenje, radije bih opisao osnovne koncepte.

SSL (Secure Socket Layer) je protokol koji se koristi za sigurnu komunikaciju. Postiže sigurnost putem enkripcije i autentifikacije strana koje komuniciraju. Autentifikacija je provjera prikazanog identiteta. U stvarnom životu, na primjer, izgovarate svoje ime (identitet) i pokazujete svoju ličnu kartu kako bi druga osoba mogla to potvrditi (autentificirati). Autentifikacija se zatim dijeli na verifikaciju, što je samo primjer sa nacionalnom ličnom kartom, ili identifikaciju, kada dotična osoba može utvrditi vaš identitet, a da mu to ne predočite unaprijed.

Sada bih ukratko došao do certifikata servera. U stvarnom životu, vaš certifikat može biti, na primjer, lična karta. Sve je bazirano na asimetričnoj kriptografiji, gdje svaki subjekt posjeduje dva ključa - privatni i javni. Cijela ljepota leži u činjenici da se poruka može šifrirati javnim ključem i dešifrirati privatnim ključem. To znači da samo vlasnik privatnog ključa može dešifrirati poruku. U isto vrijeme, nema potrebe da brinete o prijenosu tajnog ključa na obje strane u komunikaciji. Certifikat je tada javni ključ subjekta dopunjen njegovim informacijama i potpisan od strane sertifikacionog tijela. U Češkoj, jedno od certifikacijskih tijela je, na primjer, Česká Pošta. Zahvaljujući certifikatu, iPhone može potvrditi da stvarno komunicira sa datim serverom.

SSL koristi asimetričnu enkripciju prilikom uspostavljanja veze, tzv SSL rukovanje. U ovoj fazi vaš iPhone potvrđuje da komunicira sa datim serverom, a istovremeno se uz pomoć asimetrične enkripcije uspostavlja simetrični ključ koji će se koristiti za svu narednu komunikaciju. Simetrična enkripcija je brža. Kao što je već napisano, greška se već javlja tokom verifikacije servera. Pogledajmo kod koji uzrokuje ovu ranjivost sistema.

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

U drugom stanju if možete vidjeti dvije komande ispod goto fail;. I to je kamen spoticanja. Ovaj kod zatim uzrokuje da se druga naredba izvrši u fazi kada certifikat treba provjeriti goto fail;. Ovo uzrokuje preskakanje trećeg uvjeta if i neće biti verifikacije servera uopšte.

Implikacije su da svako ko zna za ovu ranjivost može ponuditi vašem iPhone-u lažni certifikat. Vi ili vaš iPhone, mislit ćete da komunicirate šifrirano, dok između vas i servera postoji napadač. Takav napad se zove napad čovjeka u sredini, što se otprilike prevodi na češki kao napad čovjeka u sredini ili čovjek među. Napad koji koristi ovu konkretnu grešku u OS X i iOS-u može se izvršiti samo ako su napadač i žrtva na istoj mreži. Stoga je bolje izbjegavati javne Wi-Fi mreže ako niste ažurirali svoj iOS. Korisnici Maca i dalje bi trebali paziti na koje mreže se povezuju i koje stranice posjećuju na tim mrežama.

Nevjerovatno je kako je takva fatalna greška mogla dospjeti u finalne verzije OS X i iOS-a. Moglo je biti nekonzistentno testiranje loše napisanog koda. To bi značilo da bi i programer i testeri pravili greške. Ovo se može činiti malo vjerojatnim za Apple, pa se pojavljuju spekulacije da je ova greška zapravo backdoor, tzv. stražnja vrata. Nije uzalud što kažu da najbolji backdoors izgledaju kao suptilne greške. Međutim, to su samo nepotvrđene teorije, pa ćemo pretpostaviti da je neko jednostavno pogriješio.

Ako niste sigurni da li je vaš sistem ili pretraživač imun na ovu grešku, posjetite stranicu gotofail.com. Kao što možete vidjeti na slikama ispod, Safari 7.0.1 u OS X Mavericks 10.9.1 sadrži grešku, dok je u Safariju u iOS 7.0.6 sve u redu.

Resursi: iMore, Reuters
.