Jak załatać błąd Heartbleed (CVE-2014-0160) w OpenSSL?

152

Na dzień dzisiejszy znaleziono błąd w OpenSSL dotyczący wersji 1.0.1 do 1.0.1f ( włącznie) i 1.0.2-beta .

Od wersji Ubuntu 12.04 wszyscy jesteśmy podatni na ten błąd. Aby naprawić tę lukę, użytkownicy, których dotyczy problem, powinni zaktualizować pakiet do OpenSSL 1.0.1g .

W jaki sposób każdy użytkownik, którego dotyczy ten problem, może zastosować tę aktualizację teraz ?

    
zadawane Lucio 08.04.2014, 00:17
źródło

6 odpowiedzi

141

Aktualizacje zabezpieczeń są dostępne od 12.04, 12.10, 13.10 i 14.04 patrz Informacja o bezpieczeństwie Ubuntu USN-2165-1 .

Najpierw musisz zastosować dostępne aktualizacje zabezpieczeń, na przykład uruchamiając

sudo apt-get update
sudo apt-get upgrade

z wiersza poleceń.

Nie zapomnij zrestartować usług (HTTP, SMTP, itp.), które używają dotkniętej wersji OpenSSL, w przeciwnym razie nadal będziesz narażony na ataki. Zobacz także Heartbleed: co to jest i co to jest opcje złagodzenia tego? na serwerze Serverfault.com.

Poniższe polecenie pokazuje (po aktualizacji) wszystkie usługi, które należy ponownie uruchomić:

sudo find /proc -maxdepth 2 -name maps -exec grep -HE '/libssl\.so.* \(deleted\)' {} \; | cut -d/ -f3 | sort -u | xargs --no-run-if-empty ps uwwp

Po tym, potrzebujesz zregenerować wszystkie klucze SSL serwera , a następnie ocenić, czy klucze mogły zostać ujawnione. W takim przypadku napastnik mógł pobrać poufne informacje z serwerów.

    
odpowiedział Florian Diesch 08.04.2014, 00:46
źródło
71

Błąd jest znany jako Heartbleed .

Czy jestem podatny na ataki?

Generalnie masz wpływ, jeśli uruchomiłeś serwer, na który wygenerowałeś klucz SSL. Większość użytkowników końcowych nie jest (bezpośrednio) objęta; przynajmniej Firefox i Chrome nie używają OpenSSL. Nie ma to wpływu na SSH. Nie ma to wpływu na dystrybucję pakietów Ubuntu (bazuje na sygnaturach GPG).

Jesteś podatny na atak, jeśli uruchamiasz dowolny serwer korzystający z OpenSSL w wersji 1.0-1.0.1f (z wyjątkiem oczywiście wersji, które zostały załatane od czasu wykrycia błędu). Wersje zagrożone Ubuntu to 11.10 oneiric do 14.04 wiernych przedpremierowych wersji. To błąd implementacyjny, a nie błąd w protokole, więc dotyczy to tylko programów korzystających z biblioteki OpenSSL. Jeśli masz program powiązany ze starą wersją OpenSSL 0.9.x, nie ma to wpływu. Uwzględniane są tylko programy korzystające z biblioteki OpenSSL do implementacji protokołu SSL; Programy, które używają OpenSSL do innych rzeczy, nie mają na nie wpływu.

Jeśli uruchomiłeś narażony serwer narażony na działanie Internetu, pomyśl o jego naruszeniu, chyba że Twoje dzienniki nie wykazują żadnego połączenia od czasu ogłoszenia w dniu 2014-04-07. (Zakłada się, że luka nie została wykorzystana przed jej ogłoszeniem.) Jeśli serwer został ujawniony tylko wewnętrznie, to czy trzeba zmienić klucze, będzie zależał od innych środków bezpieczeństwa.

Jaki jest wpływ?

Błąd pozwala dowolnemu klientowi , który może połączyć się z serwerem SSL w celu pobrania około 64kB pamięci z serwera. Klient nie musi być w żaden sposób uwierzytelniany. Powtarzając atak, klient może zrzucić różne części pamięci podczas kolejnych prób.

Jednym z krytycznych elementów danych, które napastnik może odzyskać, jest klucz prywatny SSL serwera. Dzięki tym danym osoba atakująca może podszyć się pod twój serwer.

Jak mogę odzyskać na serwerze?

  1. Przenieś wszystkie serwery, których dotyczy problem, w trybie offline. Dopóki są uruchomione, potencjalnie wyciekają krytyczne dane.

  2. Uaktualnij pakiet libssl1.0.0 i upewnij się, że wszystkie uruchomione serwery zostały zrestartowane.
    Możesz sprawdzić, czy działające procesy nadal działają z biblioteką '' grep '. (usunięta)' / proc / / maps '

  3. Generuj nowe klucze . Jest to konieczne, ponieważ błąd mógł umożliwić osobie atakującej uzyskanie starego klucza prywatnego. Postępuj zgodnie z tą samą procedurą, której użyłeś początkowo.

    • Jeśli korzystasz z certyfikatów podpisanych przez urząd certyfikacji, prześlij nowe klucze publiczne do urzędu certyfikacji. Po otrzymaniu nowego certyfikatu zainstaluj go na swoim serwerze.
    • Jeśli używasz certyfikatów z podpisem własnym, zainstaluj go na swoim serwerze.
    • Tak czy inaczej, przenieś stare klucze i certyfikaty z drogi (ale nie usuwaj ich, tylko upewnij się, że nie są już używane).
  4. Teraz, gdy masz nowe, bezkompromisowe klucze, możesz przywrócić swój serwer do sieci .

  5. Odwołanie starych certyfikatów.

  6. Ocena szkód : dane znajdujące się w pamięci procesu obsługującego połączenia SSL mogły potencjalnie zostać ujawnione. Może to obejmować hasła użytkownika i inne poufne dane. Musisz ocenić, jakie dane mogły być.

    • Jeśli używasz usługi umożliwiającej uwierzytelnianie za pomocą hasła, hasła uznawane przez użytkowników, którzy nawiązali połączenie od chwili tuż przed ujawnieniem luki, powinny zostać uznane za naruszone. (Trochę wcześniej, ponieważ hasło mogło przez jakiś czas pozostać nieużywane w pamięci). Sprawdź dzienniki i zmień hasła każdego użytkownika, którego dotyczy problem.
    • Również unieważnia wszystkie pliki cookie sesji, ponieważ mogły zostać przejęte.
    • Certyfikaty klientów nie są zagrożone.
    • Wszystkie dane, które zostały wymienione od chwili pojawienia się luki, mogły pozostać w pamięci serwera i mogły zostać przekazane atakującemu.
    • Jeśli ktoś nagrał stare połączenie SSL i odebrał klucze serwera, może odszyfrować ich transkrypcję. (O ile nie zapewniono PFS - jeśli nie wiesz, to nie było.)

Jak mogę odzyskać na kliencie?

Istnieje tylko kilka sytuacji, w których występują problemy z aplikacjami klienckimi. Problem po stronie serwera polega na tym, że każdy może połączyć się z serwerem i wykorzystać błąd. Aby wykorzystać klienta, muszą być spełnione trzy warunki:

  • Program klienta używał błędnej wersji biblioteki OpenSSL do implementacji protokołu SSL.
  • Klient podłączył się do złośliwego serwera. (Na przykład, jeśli połączyłeś się z dostawcą poczty e-mail, nie jest to problemem). To musiało się stać po tym, jak właściciel serwera dowiedział się o tej luce, prawdopodobnie po 2014-04-07.
  • Proces klienta zawierał poufne dane w pamięci, które nie zostały udostępnione serwerowi. (Więc jeśli po prostu uruchomiłeś wget , aby pobrać plik, nie było danych do wycieku.)

Jeśli robiłeś to między 2014-04-07 wieczorem UTC i aktualizacją biblioteki OpenSSL, rozważ wszelkie dane, które były w pamięci procesu klienta, aby zostać naruszone.

Referencje

odpowiedział Gilles 08.04.2014, 12:02
źródło
40

Aby zobaczyć, która wersja OpenSSL jest zainstalowana podczas uruchamiania Ubuntu:

dpkg -l | grep openssl

Jeśli zobaczysz następujące dane wyjściowe, należy załączyć poprawkę do CVE-2014-0160.

ii  openssl      1.0.1-4ubuntu5.12      Secure Socket Layer (SSL)...

Patrząc na link , pokazuje, który rodzaj błędów został naprawiony:

...
 SECURITY UPDATE: memory disclosure in TLS heartbeat extension
    - debian/patches/CVE-2014-0160.patch: use correct lengths in
      ssl/d1_both.c, ssl/t1_lib.c.
    - CVE-2014-0160
 -- Marc Deslauriers <email address hidden>   Mon, 07 Apr 2014 15:45:14 -0400
...
    
odpowiedział crimi 08.04.2014, 08:40
źródło
17

Jeśli twoje apt-get repozytoria nie zawierają żadnych prekompilowanych wersji 1.0.1g OpenSSL , po prostu pobierz źródła z oficjalnej strony i skompiluj je.

Poniżej pojedynczego wiersza poleceń do kompilowania i instalowania ostatniej wersji openssl.

curl https://www.openssl.org/source/openssl-1.0.1g.tar.gz | tar xz && cd openssl-1.0.1g && sudo ./config && sudo make && sudo make install

Zamień stary plik binarny openssl na nowy przez dowiązanie symboliczne.

sudo ln -sf /usr/local/ssl/bin/openssl 'which openssl'

Wszyscy jesteście dobrzy!

# openssl version should return
openssl version
OpenSSL 1.0.1g 7 Apr 2014

Por. wpis na blogu .

Uwaga: Zgodnie z opisem w poście na blogu, obejście to nie naprawi "serwerów Nginx i Apache, które muszą być rekompilowane ze źródłami openSSL 1.0.1."

    
odpowiedział Quentin Rousseau 08.04.2014, 04:18
źródło
12

Dla tych, którzy nie chcą zrobić aktualizacji pakietu na cały serwer. Przeczytałem dziś kilka poradników i apt-get upgrade openssl === apt-get upgrade będzie to dotyczyło wszystkich poprawek bezpieczeństwa wymaganych przez Twój komputer. Wspaniale, chyba że wyraźnie oprzesz się na starej wersji pakietu.

Jest to minimalna akcja wymagana w systemie Ubuntu 12.04 LTS z uruchomionym Apache 2:

  • Przejdź do tego adresu i dowiedz się, że masz lukę. Należy użyć BEZPOŚREDNIEGO ZEWNĘTRZNEGO ADRESU SWOJEGO SERWERA WEB. Jeśli używasz loadbalancera (na przykład ELB), możesz nie kontaktować się bezpośrednio z serwerem WWW.

  • Uruchom następną linijkę 1, aby zaktualizować pakiety i uruchomić ponownie. Tak, widziałem wszystkie przewodniki mówiąc, że powinieneś mieć sygnaturę czasową później niż 4 kwietnia 2014 roku, nie wydaje mi się, że tak jest.

    apt-get update & amp; & amp; apt-get install openssl libssl1.0.0 & amp; /etc/init.d/apache2 restart

  • Upewnij się, że masz zainstalowane odpowiednie wersje pakietów i jeszcze raz sprawdź serwer pod kątem luki.

Kluczowe pakiety są następujące: Ustaliłem te informacje za pomocą poniższego polecenia, a następnie edytowałem cruft (nie musisz wiedzieć zbyt wiele o stanie moich maszyn).

$ dpkg -l | grep ssl

ii  libssl-dev                       1.0.1-4ubuntu5.12          SSL development libraries, header files and documentation
ii  libssl1.0.0                      1.0.1-4ubuntu5.12          SSL shared libraries
ii  openssl                          1.0.1-4ubuntu5.12          Secure Socket Layer (SSL)* binary and related cryptographic tools

1.0.1-4ubuntu5.12 NIE powinien zawierać luki w zabezpieczeniach. Upewnij się, że tak jest, ponownie odwiedzając poniższą witrynę i testując swój serwer WWW.

link

    
odpowiedział Adrian 08.04.2014, 23:56
źródło
11

Zauważyłem wielu komentatorów, którzy potrzebują pilnie pomocy. Postępują zgodnie z instrukcjami, aktualizują i ponownie uruchamiają komputer, a mimo to są narażone na awarie podczas korzystania z niektórych stron testowych.

Musisz sprawdzić, czy nie masz zawieszonych pakietów, takich jak libssl.

:~$ sudo apt-get upgrade -V
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages have been kept back:
  libssl-dev (1.0.1-4ubuntu5.10 => 1.0.1-4ubuntu5.12)
  libssl1.0.0 (1.0.1-4ubuntu5.10 => 1.0.1-4ubuntu5.12)
  linux-image-virtual (3.2.0.31.34 => 3.2.0.60.71)
  linux-virtual (3.2.0.31.34 => 3.2.0.60.71)
0 upgraded, 0 newly installed, 0 to remove and 4 not upgraded.

Aby zaktualizować te apt-mark unhold libssl1.0.0 (na przykład). Następnie uaktualnij: apt-get upgrade -V . Następnie uruchom ponownie dotknięte usługi.

    
odpowiedział Domino 08.04.2014, 19:51
źródło

Przeczytaj inne pytania na temat tagów