Zamknij reklame

Kilka dni temu Apple wypuściło setny Aktualizacja iOS 7.0.6, o wydaniu, o którym Was informowaliśmy. Wielu mogło być zaskoczonych, że aktualizacja ukazała się także dla starszego iOS 6 (wersja 6.1.6) i Apple TV (wersja 6.0.2). Jest to poprawka bezpieczeństwa, dlatego Apple nie mogło sobie pozwolić na aktualizację tylko części swoich urządzeń. Co więcej, problem ten dotyczy także OS X. Według rzeczniczki Apple Trudy Muller, aktualizacja OS X zostanie wydana tak szybko, jak to możliwe.

Dlaczego wokół tej aktualizacji jest tyle szumu? Luka w kodzie systemu pozwala na ominięcie weryfikacji serwera przy bezpiecznej transmisji w warstwie relacyjnej modelu referencyjnego ISO/OSI. W szczególności przyczyną jest zła implementacja protokołu SSL w części, w której odbywa się weryfikacja certyfikatu serwera. Zanim przejdę do dalszych wyjaśnień, wolę opisać podstawowe pojęcia.

SSL (Secure Socket Layer) to protokół używany do bezpiecznej komunikacji. Bezpieczeństwo osiąga poprzez szyfrowanie i uwierzytelnianie komunikujących się stron. Uwierzytelnienie to weryfikacja okazanej tożsamości. W prawdziwym życiu na przykład mówisz swoje imię i nazwisko (tożsamość) i pokazujesz dowód osobisty, aby druga osoba mogła je zweryfikować (uwierzytelnić). Uwierzytelnianie dzieli się wówczas na weryfikację, która jest tylko przykładem z dowodem osobistym, czyli identyfikację, gdy dana osoba może ustalić Twoją tożsamość bez konieczności jej wcześniejszego przedstawiania.

Teraz na krótko przejdę do certyfikatu serwera. W prawdziwym życiu Twoim certyfikatem może być na przykład dowód osobisty. Wszystko opiera się na kryptografii asymetrycznej, gdzie każdy podmiot posiada dwa klucze – prywatny i publiczny. Całe piękno polega na tym, że wiadomość można zaszyfrować kluczem publicznym i odszyfrować kluczem prywatnym. Oznacza to, że tylko właściciel klucza prywatnego może odszyfrować wiadomość. Jednocześnie nie ma potrzeby martwić się o przekazanie tajnego klucza obu komunikującym się stronom. Certyfikat jest wówczas kluczem publicznym podmiotu uzupełnionym o jego informacje i podpisanym przez urząd certyfikacji. W Czechach jednym z urzędów certyfikacji jest na przykład Česká Pošta. Dzięki certyfikatowi iPhone może zweryfikować, czy rzeczywiście komunikuje się z danym serwerem.

SSL wykorzystuje szyfrowanie asymetryczne podczas nawiązywania połączenia, tzw Uzgadnianie SSL. Na tym etapie Twój iPhone sprawdza, czy komunikuje się z danym serwerem, a jednocześnie za pomocą szyfrowania asymetrycznego ustalany jest klucz symetryczny, który będzie używany przy całej dalszej komunikacji. Szyfrowanie symetryczne jest szybsze. Jak już napisano błąd pojawia się już podczas weryfikacji serwera. Przyjrzyjmy się kodowi powodującemu tę lukę w systemie.

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

W drugim warunku if poniżej możesz zobaczyć dwa polecenia muszę ponieść porażkę;. I to jest przeszkoda. Kod ten powoduje następnie wykonanie drugiego polecenia na etapie weryfikacji certyfikatu muszę ponieść porażkę;. Powoduje to pominięcie trzeciego warunku if i nie będzie żadnej weryfikacji serwera.

Konsekwencje są takie, że każda osoba posiadająca wiedzę o tej luce może zaoferować Twojemu iPhone'owi fałszywy certyfikat. Ty albo na swoim iPhonie, będziesz myślał, że komunikujesz się w sposób zaszyfrowany, podczas gdy pomiędzy Tobą a serwerem znajduje się osoba atakująca. Taki atak nazywa się atak man-in-the-middle, co z grubsza przekłada się na język czeski jako atak typu man-in-the-middle lub człowiek wśród. Atak wykorzystujący tę konkretną lukę w systemach OS X i iOS można przeprowadzić tylko wtedy, gdy atakujący i ofiara znajdują się w tej samej sieci. Dlatego lepiej unikać publicznych sieci Wi-Fi, jeśli nie zaktualizowałeś systemu iOS. Użytkownicy komputerów Mac powinni nadal uważać na to, z którymi sieciami się łączą i jakie witryny w tych sieciach odwiedzają.

Nie do wiary, jak tak fatalny błąd mógł przedostać się do ostatecznych wersji OS X i iOS. Mogło to być niespójne testowanie źle napisanego kodu. Oznaczałoby to, że zarówno programista, jak i testerzy popełnialiby błędy. Może się to wydawać mało prawdopodobne w przypadku Apple, dlatego pojawiają się spekulacje, że ten błąd jest w rzeczywistości backdoorem, tzw. tylne drzwi. Nie bez powodu mówi się, że najlepsze backdoory wyglądają jak subtelne błędy. Są to jednak tylko niepotwierdzone teorie, dlatego założymy, że ktoś się po prostu pomylił.

Jeśli nie masz pewności, czy Twój system lub przeglądarka jest odporna na ten błąd, odwiedź tę stronę gotofail.com. Jak widać na poniższych obrazkach, Safari 7.0.1 w OS X Mavericks 10.9.1 ma błąd, natomiast w Safari w iOS 7.0.6 wszystko jest w porządku.

Źródła: iMore, Reuters
.