Sule kuulutus

Mõni päev tagasi andis Apple välja sajanda iOS 7.0.6 värskendus, mille avaldamisest teavitasime teid. Paljud võisid olla üllatunud, et värskendus ilmus ka vanemale iOS 6-le (versioon 6.1.6) ja Apple TV-le (versioon 6.0.2). Tegemist on turvapaigaga, mistõttu Apple ei saanud endale lubada vaid osa oma seadmetest värskendamist. Veelgi enam, see probleem mõjutab ka operatsioonisüsteemi OS X. Apple'i pressiesindaja Trudy Mulleri sõnul antakse OS X-i värskendus välja niipea kui võimalik.

Miks on selle värskenduse ümber nii palju reklaami? Süsteemi koodi viga võimaldab ISO/OSI võrdlusmudeli relatsioonikihil turvalise edastuse korral serveri kontrollimisest mööda minna. Täpsemalt on viga halvas SSL-i juurutamises osas, kus toimub serveri sertifikaadi kontrollimine. Enne kui lähen edasi selgitustesse, eelistan kirjeldada põhimõisteid.

SSL (Secure Socket Layer) on turvaliseks suhtluseks kasutatav protokoll. See saavutab turvalisuse suhtlevate osapoolte krüptimise ja autentimise abil. Autentimine on esitatud identiteedi kontrollimine. Reaalses elus näiteks ütled oma nime (identiteedi) ja näitad oma isikut tõendavat dokumenti, et teine ​​inimene saaks seda kontrollida (autentida). Autentimine jaguneb seejärel kontrollimiseks, mis on vaid näide riikliku isikutunnistusega ehk identifitseerimisest, kui kõnealune isik saab kindlaks teha teie isiku ilma, et te seda talle ette esitaksite.

Nüüd jõuaksin lühidalt serveri sertifikaadi juurde. Reaalses elus võib teie tunnistus olla näiteks ID-kaart. Kõik põhineb asümmeetrilisel krüptograafial, kus igal subjektil on kaks võtit – privaatne ja avalik. Kogu ilu seisneb selles, et sõnumit saab krüpteerida avaliku võtmega ja dekrüpteerida privaatvõtmega. See tähendab, et ainult privaatvõtme omanik saab sõnumi dekrüpteerida. Samal ajal ei pea muretsema salajase võtme edastamise pärast mõlemale suhtlevale poolele. Sertifikaat on siis subjekti avalik võti, millele on lisatud selle teave ja millele on alla kirjutanud sertifitseerimisasutus. Tšehhis on üheks sertifitseerimisasutuseks näiteks Česká Pošta. Tänu sertifikaadile saab iPhone kontrollida, kas see tõesti suhtleb antud serveriga.

SSL kasutab ühenduse loomisel asümmeetrilist krüptimist, nn SSL-käepigistus. Selles etapis kontrollib teie iPhone, et see suhtleb antud serveriga, ja samal ajal luuakse asümmeetrilise krüptimise abil sümmeetriline võti, mida kasutatakse kogu järgnevaks suhtluseks. Sümmeetriline krüptimine on kiirem. Nagu juba kirjutatud, ilmneb viga juba serveri kontrollimise ajal. Vaatame koodi, mis selle süsteemi haavatavuse põhjustab.

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

Teises seisundis if allpool näete kahte käsku saama ebaõnnestuda;. Ja see on komistuskivi. Seejärel käivitab see kood teise käsu sertifikaadi kontrollimise etapis saama ebaõnnestuda;. See põhjustab kolmanda tingimuse vahelejätmise if ja serveri kinnitust ei toimu üldse.

See tähendab, et igaüks, kes on sellest haavatavusest teadlik, võib pakkuda teie iPhone'ile võltssertifikaati. Sina või oma iPhone'is, arvate, et suhtlete krüpteeritult, samas kui teie ja serveri vahel on ründaja. Sellist rünnakut nimetatakse mees-keskel-rünnak, mis tõlgib umbkaudu tšehhi keelde kui mees-keskrünnak või mees seas. Rünnak, mis kasutab seda konkreetset viga OS X-is ja iOS-is, saab sooritada ainult siis, kui ründaja ja ohver on samas võrgus. Seetõttu on parem vältida avalikke WiFi-võrke, kui te pole iOS-i värskendanud. Maci kasutajad peaksid siiski olema ettevaatlikud selle suhtes, milliste võrkudega nad ühenduse loovad ja milliseid saite nendes võrkudes külastavad.

On uskumatu, kuidas selline saatuslik viga võis jõuda OS X-i ja iOS-i lõppversioonidesse. See võis olla halvasti kirjutatud koodi ebajärjekindel testimine. See tähendaks, et nii programmeerija kui ka testijad teeksid vigu. See võib Apple'i jaoks tunduda ebatõenäoline ja nii levivad spekulatsioonid, et see viga on tegelikult tagauks, nn. tagauks. Ega asjata öeldakse, et parimad tagauksed näevad välja kui peened vead. Need on siiski vaid kinnitamata teooriad, seega eeldame, et keegi tegi lihtsalt vea.

Kui te pole kindel, kas teie süsteem või brauser on selle vea suhtes immuunne, külastage lehte gotofail.com. Nagu näete allolevatel piltidel, sisaldab Safari 7.0.1 operatsioonisüsteemis OS X Mavericks 10.9.1 viga, samas kui Safari versioonis iOS 7.0.6 on kõik korras.

Ressursid: iMore, Reuters
.