Zatvori oglas

Prije nekoliko dana Apple je izbacio stotu Ažuriranje za iOS 7.0.6, o čijem smo vas izlasku obavijestili. Mnogi su se možda iznenadili da je ažuriranje objavljeno i za stariji iOS 6 (verzija 6.1.6) i Apple TV (verzija 6.0.2). Ovo je sigurnosna zakrpa, pa si Apple nije mogao priuštiti ažuriranje samo dijela svojih uređaja. Štoviše, ovaj problem također utječe na OS X. Prema glasnogovornici Applea Trudy Muller, ažuriranje OS X bit će objavljeno što je prije moguće.

Zašto postoji tolika pompa oko ovog ažuriranja? Greška u kodu sustava omogućuje zaobilaženje provjere poslužitelja pri sigurnom prijenosu na relacijskom sloju ISO/OSI referentnog modela. Konkretno, greška je loša implementacija SSL-a u dijelu gdje se odvija provjera certifikata poslužitelja. Prije nego krenem u daljnje objašnjenje, radije ću opisati osnovne koncepte.

SSL (Secure Socket Layer) je protokol koji se koristi za sigurnu komunikaciju. Sigurnost postiže pomoću enkripcije i autentifikacije strana koje komuniciraju. Autentikacija je provjera prikazanog identiteta. U stvarnom životu, na primjer, kažete svoje ime (identitet) i pokažete svoj ID kako bi ga druga osoba mogla potvrditi (autentificirati). Autentifikacija se zatim dijeli na verifikaciju, što je samo primjer s osobnom iskaznicom, ili identifikaciju, kada dotična osoba može utvrditi vaš identitet, a da mu ga prethodno ne predočite.

Sada bih nakratko došao do serverskog certifikata. U stvarnom životu, vaš certifikat može biti, na primjer, osobna iskaznica. Sve se temelji na asimetričnoj kriptografiji, gdje svaki subjekt posjeduje dva ključa – privatni i javni. Sva 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 brinuti o prijenosu tajnog ključa na obje strane u komunikaciji. Certifikat je tada javni ključ subjekta dopunjen svojim informacijama i potpisan od strane certifikacijskog tijela. U Češkoj je jedno od certifikacijskih tijela, primjerice, Česká Pošta. Zahvaljujući certifikatu, iPhone može potvrditi da stvarno komunicira s danim poslužiteljem.

SSL koristi asimetričnu enkripciju prilikom uspostavljanja veze, tzv SSL rukovanje. U ovoj fazi vaš iPhone provjerava komunicira li s danim serverom, a istovremeno se uz pomoć asimetrične enkripcije uspostavlja simetrični ključ koji će se koristiti za svu daljnju komunikaciju. Simetrična enkripcija je brža. Kao što je već napisano, greška se javlja već tijekom provjere poslužitelja. Pogledajmo kod koji uzrokuje ovu ranjivost sustava.

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 ispod možete vidjeti dvije naredbe goto fail;. I to je kamen spoticanja. Ovaj kod zatim uzrokuje izvršenje druge naredbe u fazi kada se certifikat treba provjeriti goto fail;. To uzrokuje preskakanje trećeg uvjeta if i uopće neće biti provjere poslužitelja.

Implikacije su da svatko tko zna za ovu ranjivost može ponuditi vašem iPhoneu lažni certifikat. ti ili vaš iPhone, mislit ćete da komunicirate šifrirano, dok je između vas i poslužitelja napadač. Takav napad naziva se napad čovjeka u sredini, što se na češki otprilike prevodi kao napad čovjeka u sredini ili čovjek među. Napad koji koristi ovaj određeni nedostatak u OS X i iOS može se izvesti 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 Mac računala i dalje bi trebali paziti na koje se mreže povezuju i koja mjesta posjećuju na tim mrežama.

Nevjerojatno je kako je tako kobna pogreška mogla dospjeti u konačne verzije OS X i iOS. To je moglo biti nedosljedno testiranje loše napisanog koda. To bi značilo da bi i programer i testeri griješili. Ovo se može činiti malo vjerojatnim za Apple, pa se pojavljuju spekulacije da je ovaj bug zapravo backdoor, tzv. stražnja vrata. Ne kažu uzalud da najbolji backdoori izgledaju kao suptilne greške. No, to su samo nepotvrđene teorije pa ćemo pretpostaviti da je netko jednostavno pogriješio.

Ako niste sigurni je li vaš sustav ili preglednik imun na ovaj bug, 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
.