Hai uns días, Apple lanzou a centésima Actualización de iOS 7.0.6, sobre o lanzamento do que vos informamos. Moitos se sorprenderon de que a actualización tamén se publicase para iOS 6 (versión 6.1.6) e Apple TV (versión 6.0.2) máis antigas. Este é un parche de seguridade, polo que Apple non podía permitirse o luxo de actualizar só unha parte dos seus dispositivos. Ademais, este problema tamén afecta a OS X. Segundo a portavoz de Apple, Trudy Muller, lanzarase unha actualización de OS X o antes posible.
Por que hai tanto bombo ao redor desta actualización? Unha falla no código do sistema permite evitar a verificación do servidor na transmisión segura na capa relacional do modelo de referencia ISO/OSI. En concreto, o fallo é unha mala implementación SSL na parte onde se realiza a verificación do certificado do servidor. Antes de entrar en máis explicacións, prefiro describir os conceptos básicos.
SSL (Secure Socket Layer) é un protocolo usado para a comunicación segura. Conséguese a seguridade mediante o cifrado e a autenticación das partes que se comunican. A autenticación é a verificación da identidade presentada. Na vida real, por exemplo, di o teu nome (identidade) e mostras o teu DNI para que a outra persoa poida verificalo (autenticar). A autenticación divídese entón en verificación, que é só un exemplo cun documento nacional de identidade, ou identificación, cando a persoa en cuestión pode determinar a súa identidade sen que lla presente con antelación.
Agora chegaría brevemente ao certificado do servidor. Na vida real, o teu certificado pode ser, por exemplo, unha tarxeta de identificación. Todo está baseado na criptografía asimétrica, onde cada suxeito posúe dúas claves: privada e pública. Toda a beleza reside no feito de que a mensaxe pode ser cifrada coa clave pública e descifrada coa clave privada. Isto significa que só o propietario da clave privada pode descifrar a mensaxe. Ao mesmo tempo, non hai que preocuparse por transferir a chave secreta ás dúas partes que se comunican. O certificado é entón a clave pública do suxeito complementada coa súa información e asinada pola autoridade de certificación. Na República Checa, unha das autoridades de certificación é, por exemplo, Česká Pošta. Grazas ao certificado, o iPhone pode verificar que realmente se está comunicando co servidor indicado.
SSL utiliza cifrado asimétrico ao establecer unha conexión, o chamado Apretón de mans SSL. Nesta fase, o teu iPhone verifica que se está comunicando co servidor determinado e, ao mesmo tempo, coa axuda do cifrado asimétrico, establécese unha clave simétrica, que se utilizará para todas as comunicacións posteriores. O cifrado simétrico é máis rápido. Como xa se escribiu, o erro xa ocorre durante a verificación do servidor. Vexamos o código que causa esta vulnerabilidade do 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;
}
Na segunda condición if podes ver dous comandos a continuación ir a fallar;. E ese é o escollo. Este código fai que se execute o segundo comando na fase na que se debe verificar o certificado ir a fallar;. Isto fai que se salte a terceira condición if e non haberá ningunha verificación do servidor.
As implicacións son que calquera que teña coñecemento desta vulnerabilidade pode ofrecer ao teu iPhone un certificado falso. Ti ou o teu iPhone, pensarás que te estás comunicando cifrado, mentres hai un atacante entre ti e o servidor. Un ataque así chámase ataque do home do medio, que se traduce aproximadamente ao checo como ataque do home do medio ou home entre. Un ataque que utilice esta falla particular en OS X e iOS só se pode executar se o atacante e a vítima están na mesma rede. Polo tanto, é mellor evitar as redes Wi-Fi públicas se non actualizou o teu iOS. Os usuarios de Mac aínda deben ter coidado coas redes ás que se conectan e os sitios que visitan nesas redes.
Non se pode crer como un erro tan fatal puido chegar ás versións finais de OS X e iOS. Podería ser unha proba inconsistente de código mal escrito. Isto significaría que tanto o programador como os probadores cometerían erros. Isto pode parecer pouco probable para Apple, polo que afloran as especulacións de que este erro é en realidade unha porta traseira, a chamada. porta traseira. Non por nada din que as mellores portas traseiras parecen erros sutís. Non obstante, estas son só teorías sen confirmar, polo que asumiremos que alguén simplemente cometeu un erro.
Se non estás seguro de se o teu sistema ou navegador é inmune a este erro, visita a páxina gotofail.com. Como podes ver nas imaxes de abaixo, Safari 7.0.1 en OS X Mavericks 10.9.1 contén un erro, mentres que en Safari en iOS 7.0.6 todo está ben.
Atacar A TRAVÉS de... Hai moito tempo que non me botaba unha risa tan boa e de corazón!
Sexa como for -eu persoalmente enténdoo como unha mensaxe de APPLE a todos os usuarios- se fose dun xeito ou doutro (e non creo que sexan reais máis das 2 posibilidades mencionadas de que se produza este erro), ambos son unha simple burla aos propietarios comúns de cousas de APPLE!
Grazas a Deus tiñas razón.
Creo que isto é un verdadeiro erro. Podo imaxinar que se creou ao combinar dúas ramas no sistema de versións, se unha rama era unha liña máis longa. De todos os xeitos, este é só outro caso que confirma que obrigar aos programadores a encerrar ata unha liña se o corpo nun bloque ten sentido.
Grazas pola descrición detallada!
Perdón por escribir fóra da discusión, pero agora lin en idnes que o suposto iPhone máis grande debería chamarse iPhablet :-D Case o perdo. :-D Saúdos a todos os amantes da mazá
..... Vaia, a creatividade non está a desaparecer lentamente... quizais só sexa un pato!
Ola, tes problemas de duración da batería despois da actualización? Recibín unha nova despois de moitas queixas sobre o iP5, así que teño unha batería nova que durou case dous días. Despois da actualización, o meu teléfono morreu en 8 horas e non o uso moito.
Persoalmente, non rexistrei ningún problema coa lanterna. Si no pasado, e unha copia de seguridade e unha reinstalación limpa de iOS sempre axudou. Esperemos que che axude.
Eu fixen iso hoxe e, por desgraza, non cambiou :-/