Heartbleed, jedno z największych naruszeń bezpieczeństwa w historii internetu

heartbleed

Na początku tygodnia wykryto krytyczną lukę w zabezpieczeniach, która istnieje od dwóch lat i może dotyczyć 2/3 internetu. Nazwano ją Heartbleed, o tym dlaczego – będzie zaraz. Zagrożenie jest naprawdę poważne, zaprezentowała to firma Fox IT, która była w stanie na żywo przejmować loginy, hasła i prywatne klucze szyfrowania (i o ile log i hasło nie przeraża, to utrata kluczy i certyfikatów powinno) użytkowników usług Yahoo!.

Co to oznacza? Za kilka dni będziecie mieli mnóstwo pracy ze zmienianiem haseł. Najlepiej do wszystkiego. Serio. // przygotowałem zresztą dla was krótki poradnik, jak wybrać dobre hasło//

Skąd przyszło zagrożenie? Chodzi o drobny i bardzo, bardzo głupi błąd programistyczny w OpenSSL, który pozwalał na niezauważone wykradanie 64-kilobajtowych pakietów danych. W trakcie połączenia serwer i użytkownik nieustannie porozumiewają się, żeby sprawdzić, czy druga strona wciąż żyje, to tzw. heartbeat’y. Standard i nic groźnego. Ale kawałek kodu, a dokładnie ta linijka:

memcpy(bp, pl, payload);

sprawiła, że można było uzyskać dostęp do pamięci operacyjnej serwera. Jeśli jesteście zainteresowani techniczną stroną tego, co się stało, możecie przeczytać artykuł na Gizmodo. Tutaj przedstawię tylko analogię, która pozwala zrozumieć błąd laikom, jak ja sam. Co do zasady – problem dotyczy tego, w jaki sposób funkcjonuje pamięć komputerowa.

Zła analogia, czas start! //jest naprawdę zła, osoby mające jakiekolwiek kompetencje programistyczne niech klikają na link wyżej//

Wyobraźcie sobie zautomatyzowaną publiczną drukarkę. Po jednej stronie wkładamy papier oraz pliki do wydrukowania, a po drugiej odbieramy wydruk. Ale na wydruk równocześnie czeka wiele osób, czyli w pamięci drukarki znajduje się równocześnie wiele dokumentów od wielu ludzi.

Ok, idziemy dalej. Wyobraźcie sobie, że drukarka na wejściu jest bardzo ufna, nie liczy ilości stron w pliku, a wyłącznie ilość włożonych kartek. Po drugiej stronie jest liczydło – jeśli weszło 50 czystych kartek, musi wyjść 50 zapisanych kartek. Oznacza to, że jeśli położycie 50 kartek, ale wgracie dokument, w którym jest tylko jedna zapisana strona, to drukarka (żeby spełnić wymaganie 50 pustych wchodzi, 50 zadrukowanych wychodzi) musi pobrać plik kolejnej osoby w kolejce, żeby mieć jak dodrukować kolejne 49 stron.

Dzięki temu odbieracie 50 kartek, na których 49 stanowią strony zapisane przez kogoś innego. Nie macie pojęcia, co dostaniecie, nie możecie wybrać osoby, której wydruki chcecie przejąć. Wiecie tylko, że otrzymacie cudze informacje, które akurat znajdują się w pamięci drukarki. Może to być poezja złej jakości, ale możecie trafić również na wyciągi z banku, kopie zapasowe kluczy szyfrowania, plan jak ukraść kosiarkę sąsiada. Przy okazji osoby, których dokumenty otrzymaliśmy nigdy się o tym nie dowiedzą – w końcu plik pozostaje w drukarce, ilość wypuszczonych i włożonych kartek się zgadza, jedyne ślady operacji znajdują się w rękach złodzieja.

Pamiętajcie, że operację wykradania możecie powtarzać w nieskończoność, więc po pewnym czasie ilość informacji zaczyna składać się w bardzo sensowną całość.

Koniec bardzo, bardzo koślawej analogii. //Za to Randall z XKCD przygotował wytłumaczenie idealne, kliknijcie, kliknijcie, kliknijcie//

Co to oznacza? Osoby, które wykorzystywały ten błąd były w stanie dostać się do informacji, które pozwolą sfałszować certyfikat SSL, do danych użytkownika, na żywo podsłuchiwać komunikację. Dotyczy to tylko stron, które korzystały z OpenSSL (bardzo ważna informacja: OpenSSL jest już bezpieczny i bezpieczniejszy niż kiedykolwiek, do tego otrzyma bonusowe finansowanie na jeszcze lepszą pracę). Czyli ta zielona, bezpieczna kłódeczka na pasku adresu przestaje być taka bezpieczna. Luka została załatana, ale warto zachować ostrożność. Jeśli prowadzacie na jakąś stronę ważne dane upewnijcie się (klikając na kłódeczkę/https://), że strona posiada certyfikat wydany po 8 kwietnia 2014. Wtedy wszystko będzie ok.

Przy okazji – OpenSSL to oprogramowanie o otwartym kodzie, oznacza to, że każdy ma do niego wgląd. Okazało się to bardzo ważne z punktu widzenia odnalezionego błędu. Oprogramowanie OpenSource uznaje się za bezpieczniejsze od tego o zamkniętym kodzie, ponieważ można być pewnym, że nie zostały do niego wprowadzone żadne tylne furtki. Każdy użytkownik może poddać kod lustracji w poszukiwaniu zagrożeń. Dziurę w OpenSSL odkryli programiści z Google, ponieważ mogli. Gdyby OpenSSL miał zamknięty kod – prawdopodobnie tylko kilka, kilkanaście osób na Ziemi mogłoby w nim grzebać. Błąd OpenSSL nie był wprowadzony celowo, to prosta (wręcz groteskowa) programistyczna pomyłka.

źródła: Wired, Gizmodo, The Verge, Heartbleed, existentialize

3 myśli nt. „Heartbleed, jedno z największych naruszeń bezpieczeństwa w historii internetu

  1. Pingback: Jak stworzyć bezpieczne hasło? | Dystopijna przyszłość, w której miasta zostały zniszczone przez potwory

  2. laik

    a może jakaś instrukcja dla debili jak w takim układzie wypie#dolić te certyfikaty z przed 8.04.2014 i zaopatrzyć się w te poprawne?

    Odpowiedz
    1. dnak Autor wpisu

      Niestety, aż tam mądry nie jestem, to robota dla adminów, a tam moja wannabe-security wiedza nie sięga ;)

      Odpowiedz

Dodaj komentarz