Chiudi l'annuncio

Pochi giorni fa, Apple ha rilasciato il centesimo Aggiornamento iOS 7.0.6, del rilascio di cui vi abbiamo informato. Molti potrebbero essere rimasti sorpresi dal fatto che l'aggiornamento sia stato rilasciato anche per i vecchi iOS 6 (versione 6.1.6) e Apple TV (versione 6.0.2). Si tratta di una patch di sicurezza, quindi Apple non poteva permettersi di aggiornare solo una parte dei suoi dispositivi. Tra l'altro questo problema riguarda anche OS X. Secondo il portavoce di Apple Trudy Muller, al più presto verrà rilasciato un aggiornamento per OS X.

Perché c'è così tanto clamore attorno a questo aggiornamento? Un difetto nel codice del sistema consente di aggirare la verifica del server durante la trasmissione sicura a livello relazionale del modello di riferimento ISO/OSI. Nello specifico, l'errore è una cattiva implementazione SSL nella parte in cui avviene la verifica del certificato del server. Prima di addentrarmi in ulteriori spiegazioni, preferisco descrivere i concetti base.

SSL (Secure Socket Layer) è un protocollo utilizzato per la comunicazione sicura. Raggiunge la sicurezza mediante la crittografia e l'autenticazione delle parti comunicanti. L'autenticazione è la verifica dell'identità presentata. Nella vita reale, ad esempio, pronunci il tuo nome (identità) e mostri il tuo documento d'identità in modo che l'altra persona possa verificarlo (autenticarsi). L'autenticazione si divide poi in verifica, che è solo un esempio con la carta d'identità nazionale, o identificazione, quando la persona in questione può determinare la tua identità senza che tu gliela presenti in anticipo.

Ora vorrei brevemente arrivare al certificato del server. Nella vita reale, il tuo certificato potrebbe essere, ad esempio, una carta d'identità. Tutto si basa sulla crittografia asimmetrica, dove ogni soggetto possiede due chiavi: privata e pubblica. Tutta la bellezza sta nel fatto che il messaggio può essere crittografato con la chiave pubblica e decrittografato con la chiave privata. Ciò significa che solo il proprietario della chiave privata può decrittografare il messaggio. Allo stesso tempo, non è necessario preoccuparsi di trasferire la chiave segreta ad entrambe le parti comunicanti. Il certificato è quindi la chiave pubblica del soggetto integrata con le sue informazioni e firmata dall'autorità di certificazione. Nella Repubblica Ceca uno degli enti di certificazione è ad esempio Česká Pošta. Grazie al certificato l'iPhone può verificare che sta realmente comunicando con il server indicato.

SSL utilizza la crittografia asimmetrica quando stabilisce una connessione, la cosiddetta Stretta di mano SSL. In questa fase, il tuo iPhone verifica che sta comunicando con il server specificato e allo stesso tempo, con l'aiuto della crittografia asimmetrica, viene stabilita una chiave simmetrica, che verrà utilizzata per tutte le comunicazioni successive. La crittografia simmetrica è più veloce. Come già scritto, l'errore si verifica già durante la verifica del server. Diamo un'occhiata al codice che causa questa vulnerabilità del 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;
}

Nella seconda condizione if puoi vedere due comandi qui sotto andare a fallire;. E questo è l’ostacolo. Questo codice fa quindi sì che il secondo comando venga eseguito nella fase in cui il certificato deve essere verificato andare a fallire;. Ciò fa sì che la terza condizione venga saltata if e non ci sarà alcuna verifica del server.

Le implicazioni sono che chiunque sia a conoscenza di questa vulnerabilità può offrire al tuo iPhone un certificato falso. Tu oppure il tuo iPhone, penserai di comunicare crittografato, mentre c'è un utente malintenzionato tra te e il server. Viene chiamato un tale attacco attacco man-in-the-middle, che si traduce approssimativamente in ceco come attacco man-in-the-middle o uomo tra. Un attacco che sfrutta questa particolare falla in OS X e iOS può essere eseguito solo se l'aggressore e la vittima si trovano sulla stessa rete. Pertanto, è meglio evitare le reti Wi-Fi pubbliche se non hai aggiornato iOS. Gli utenti Mac dovrebbero comunque prestare attenzione a quali reti si connettono e quali siti visitano su tali reti.

È incredibile come un errore così fatale possa essere arrivato alle versioni finali di OS X e iOS. Potrebbe essere stato un test incoerente di un codice scritto male. Ciò significherebbe che sia il programmatore che i tester commetterebbero errori. Ciò può sembrare improbabile per Apple, quindi emergono speculazioni secondo cui questo bug è in realtà una backdoor, la cosiddetta. porta sul retro. Non per niente si dice che i migliori backdoor sembrino errori subdoli. Tuttavia, queste sono solo teorie non confermate, quindi supponiamo che qualcuno abbia semplicemente commesso un errore.

Se non sei sicuro che il tuo sistema o browser sia immune a questo bug, visita la pagina gotofail.com. Come puoi vedere nelle immagini sottostanti, Safari 7.0.1 in OS X Mavericks 10.9.1 contiene un bug, mentre in Safari in iOS 7.0.6 va tutto bene.

Risorse: iMore, Reuters
.