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.
Napad KROZ…. Odavno se nisam tako dobro, od srca nasmijao!
Bilo kako bilo - ja to osobno shvaćam kao poruku APPLE-a svim korisnicima - bilo ovako ili onako (i ne mislim da je realno više od spomenute 2 mogućnosti nastanka ove greške), oboje je obična sprdnja običnih vlasnika APPLE stvari!
Hvala Bogu da si bio u pravu.
Vjerovao bih da je to prava pogreška. Mogu zamisliti da je nastao spajanjem dviju grana u sustavu verzija, ako je jedna grana bila redak duža. U svakom slučaju, ovo je samo još jedan slučaj koji potvrđuje da ima smisla prisiljavanje programera da prilože čak i jedan redak tijela u blok.
Hvala na detaljnom opisu!
Oprostite što pišem izvan rasprave, ali sad sam pročitao na idnesu da bi se navodno veći iPhone trebao zvati iPhablet :-D Skoro sam ga izgubio.. :-D Pozdrav svim ljubiteljima jabuka
….. Wow, kreativnost ne nestaje polako ….. možda je to samo patka!
Bok, imaš li problema s trajanjem baterije nakon ažuriranja? Dobio sam novi nakon mnogo pritužbi na iP5, tako da imam novu bateriju koja je trajala skoro dva dana. Nakon ažuriranja telefon mi je crkao u roku od 8 sati i ne koristim ga puno.
Osobno nisam registrirao nikakav problem sa svjetiljkom. Da, ali u prošlosti, a sigurnosna kopija i čista ponovna instalacija iOS-a uvijek su pomagale. Nadamo se da će vam pomoći.
Danas sam to napravio i nažalost nema promjena :-/