Szukałem niezawodnego i przenośnego sposobu na sprawdzenie wersji OpenSSL na GNU / Linux i innych systemach, aby użytkownicy mogli łatwo dowiedzieć się, czy powinni zaktualizować swój SSL z powodu błędu Heartbleed.
Myślałem, że będzie to łatwe, ale szybko zetknąłem się z problemem Ubuntu 12.04 LTS z najnowszym OpenSSL 1.0.1g:
wersja openssl -a
Spodziewałem się zobaczyć pełną wersję, ale zamiast tego otrzymałem:
OpenSSL 1.0.1 14 marca 2012 zbudowany: Wt 4 czerwca 07:26:06 UTC 2013 Platforma: [...]
Ku mojemu niemiłemu zaskoczeniu list wersji nie pokazuje się. Nie ma f, nie ma, tylko „1.0.1” i to wszystko. Podane daty nie pomagają również w wykryciu wersji (nie) podatnej na ataki.
Różnica między 1.0.1 (af) a 1.0.1g jest kluczowa.
Pytania:
- Jaki jest niezawodny sposób sprawdzenia wersji, najlepiej cross distro?
- Dlaczego w pierwszej kolejności nie wyświetla się litera wersji? Nie byłem w stanie przetestować tego na niczym innym niż Ubuntu 12.04 LTS.
Inni też zgłaszają to zachowanie. Kilka przykładów:
- https://twitter.com/orblivion/status/453323034955223040
- https://twitter.com/axiomsofchoice/status/453309436816535554
Pojawiają się niektóre (specyficzne dla dystrybucji) sugestie:
- Ubuntu i Debian:
apt-cache policy openssl
iapt-cache policy libssl1.0.0
. Porównaj numery wersji z pakietami tutaj: http://www.ubuntu.com/usn/usn-2165-1/ - Fedora 20:
yum info openssl
(dzięki @znmeb na Twitterze) iyum info openssl-libs
Sprawdzanie, czy starsza wersja OpenSSL jest nadal rezydentem:
- Nie jest całkowicie niezawodny, ale możesz spróbować
lsof -n | grep ssl | grep DEL
. Zobacz Heartbleed: jak niezawodnie i przenośnie sprawdzić wersję OpenSSL? dlaczego to może nie działać dla Ciebie.
Okazuje się, że aktualizacja pakietu OpenSSL na Ubuntu i Debianie nie zawsze wystarcza. Powinieneś także zaktualizować pakiet libssl1.0.0 i - następnie - sprawdź, czy to openssl version -a
wskazuje built on: Mon Apr 7 20:33:29 UTC 2014
.
[root@null~]# openssl version -a OpenSSL 1.0.1e-fips 11 Feb 2013
apt-cache policy openssl
i odpowiedziałem:Installed: 1.0.1-4ubuntu5.12
to jest wersja 1.0.1g właśnie wydana przez Ubuntu dla 12.04 LTS. Wylogowałem się i wróciłem. Czy mogę coś jeszcze zrobić, aby to zweryfikować?Odpowiedzi:
Na podstawie daty wyświetlanej przez twoją wersją OpenSSL, wydaje Ci się zobaczyć pełną wersję wyświetlany tam.
Open SSL 1.0.1 został wydany 14 marca 2012 r . Wersja 1.0.1a została wydana 19 kwietnia 2012 r.
Zamierzam więc stwierdzić, że
openssl version -a
jest to właściwy sposób na wyświetlenie pełnej wersji OpenSSL zainstalowanej w systemie. Wygląda na to, że działa dla wszystkich dystrybucji systemu Linux, do których mam dostęp, i jest to metoda sugerowana również w dokumentacji OpenSSL help.ubuntu.com . Ubuntu LTS 12.04 dostarczany jest z waniliową OpenSSL v1.0.1, która jest wersją, która wygląda jak wersja skrócona, ponieważ nie ma za nią litery.Mimo to wydaje się, że w Ubuntu występuje poważny błąd (lub sposób, w jaki pakują OpenSSL), który
openssl version -a
nadal zwraca oryginalną wersję 1.0.1 od 14 marca 2012 r., Niezależnie od tego, czy OpenSSL został uaktualniony do dowolnej wersji nowszych wersji. I jak w przypadku większości rzeczy, gdy pada deszcz, leje.Ubuntu nie jest jedyną poważną dystrybucją przyzwyczajoną do backportowania aktualizacji do OpenSSL (lub innych pakietów), a nie polegania na aktualizacjach i numeracji wersji, które wszyscy rozpoznają. W przypadku OpenSSL, gdzie literowe numery wersji reprezentują tylko poprawki błędów i aktualizacje bezpieczeństwa, wydaje się to prawie niezrozumiałe, ale zostałem poinformowany, że może to być spowodowane sprawdzonymi przez FIPS głównymi dystrybucjami Linuksa dostarczanymi z OpenSSL. Ze względu na wymagania dotyczące ponownej walidacji, które są wyzwalane z powodu jakiejkolwiek zmiany, nawet zmiany, które blokują luki bezpieczeństwa, jest ona zablokowana w wersji.
Na przykład w Debianie wersja stała wyświetla numer wersji
1.0.1e-2+deb7u5
zamiast wersji upstream1.0.1g
.W rezultacie w tej chwili nie ma niezawodnego, przenośnego sposobu sprawdzania wersji SSL we wszystkich dystrybucjach Linuksa , ponieważ wszystkie używają własnych poprawek i aktualizacji z różnymi schematami wersji. Będziesz musiał sprawdzić stały numer wersji dla każdej innej dystrybucji Linuksa, którą uruchamiasz, i porównać zainstalowaną wersję OpenSSL z konkretną numeracją wersji tej dystrybucji, aby ustalić, czy na twoich serwerach działa wersja podatna na atak.
źródło
openssl version -a
to nie jest przenośną metodą (przynajmniej nie przenośną na Ubuntu). Sprawdziłemapt-cache policy openssl
i odpowiedziałem:Installed: 1.0.1-4ubuntu5.12
który jest wersją 1.0.1g właśnie wydaną przez Ubuntu dla 12.04 LTS. Wylogowałem się i wróciłem przed sprawdzeniem.After the release of OpenSSL 1.0.0 the versioning scheme changed. Letter releases (e.g. 1.0.1a) can only contain bug and security fixes and no new features.
Więc nic nie zyskuje porzucenie schematu wersjonowania; backportowanie aktualizacji jest zasadniczo takie samo jak korzystanie ze zaktualizowanej wersji, ponieważ aktualizacja i tak zawiera tylko poprawki bezpieczeństwa i poprawki. To robi zamieszanie i nie pozwala nam na przenośne sprawdzenie wersji OpenSSL w różnych dystrybucjach Linuksa.Jeśli chcesz czegoś naprawdę wieloplatformowego, sprawdź samą lukę, zamiast polegać na numerach wersji.
Być może istnieje kod zgłaszający numer wersji, o której wiadomo, że jest podatny na atak, ale rzeczywisty kod nie jest podatny na atak . A odwrotność - cichy słaby kod - może być jeszcze gorsza!
Wielu dostawców, którzy łączą produkty typu open source, takie jak OpenSSL i OpenSSH, wybiórczo modernizuje pilne poprawki do starszej wersji kodu, aby zachować stabilność i przewidywalność API. Jest to szczególnie prawdziwe w przypadku „wersji długoterminowej” i platform urządzeń.
Ale dostawcy, którzy robią to po cichu (bez dodawania własnego przyrostka łańcucha wersji), ryzykują wywołanie fałszywych alarmów w skanerach podatności (i dezorientację użytkowników). Aby uczynić to przejrzystym i weryfikowalnym, niektórzy dostawcy dołączają własne ciągi znaków do głównej wersji pakietu. Zarówno Debian (OpenSSL), jak i FreeBSD (w OpenSSH, poprzez
VersionAddendum
dyrektywę sshd_config) czasami to robią.Dostawcy, którzy tego nie robią, prawdopodobnie robią to, aby zminimalizować ryzyko uszkodzenia ze względu na wiele bezpośrednich i pośrednich sposobów sprawdzania numerów wersji przez inne programy.
Może więc wyglądać następująco:
... mimo że został załatany :
Dzięki takim rzeczom w grze lepiej, jeśli nie ufasz numerowi wersji.
źródło
Niestety nie jestem pewien, czy można to zrobić na wiele platform. Jak dyskutuję na blogu , wersja OpenSSL wyświetlana na Ubuntu 12.04 REMAINS 1.0.1 po aktualizacji do wersji stałej.
TYLKO w przypadku Ubuntu 12.04 możesz stwierdzić, czy zostałeś zaktualizowany, czy spełnione są wszystkie poniższe warunki:
dpkg -s openssl | grep Version
pokazuje wersję 1.0.1-4ubuntu5.12 lub nowszą.dpkg -s libssl1.0.0 | grep Version
pokazuje wersję 1.0.1-4ubuntu5.12 lub nowszą.openssl version -a
pokazuje datę „wbudowania” z 7 kwietnia 2014 r. lub później.Dzięki @danny za dodatkowe informacje.
źródło
1.0.1-4ubuntu5.12
jest TYLKO dla Ubuntu 12.04 LTS. Jeśli korzystasz z systemu Ubuntu 12.10, powinieneś zobaczyć przynajmniej wersję,1.0.1c-3ubuntu2.7
a jeśli masz wersję 13.10, powinna to być co najmniej wersja1.0.1e-3ubuntu1.2
, zgodnie ze źródłem: ubuntu.com/usn/usn-2165-1libssl1.0.0
wyraźnie na ubuntu. Jeśli widzisz wersję wbudowaną przed 7 kwietnia 2014 r., Nawet jeśli openssl ma wersję wyglądającą poprawnie (1.0.1-4ubuntu5.12
dla Ubuntu 12.04), prawdopodobnie nadal jesteś podatny na ataki.openssl version -a
może nie potrzebować daty kompilacji z 7 kwietnia, ponieważ poprawka jest importowana do starszych wersji.Spróbuj następujących. Wyodrębni wszystkie ciągi z biblioteki kryptograficznej, z którą łączy się ssh. Daje więcej niż jeden wiersz wyniku, ale w razie potrzeby można go przekonwertować na 1 wiersz.
produkuje
np. na Gentoo przed pojawieniem się
powyższe polecenie powoduje
po
Ojej, nadal nie ma.
źródło
[...] part of OpenSSL 1.0.1 14 Mar 2012
, w taki sam sposób jakopenssl version -a
robi. Jest to sztuczka, która może działać w innych przypadkach!Czy któryś z tych skryptów testuje wszystkie usługi, czy tylko testuje HTTPS ? AFAIK , PostgreSQL jest wrażliwy, ale to tylko plotka, dopóki nie pojawi się atak w terenie.
Dostępny jest skrypt metasploit .
Możesz wpisać to (testowane z GnuWin32 OpenSSL wersja binarna 1.0.1.6, z dnia 14.01.2014) lub po prostu użyć skryptu w komentarzu poniżej tego. Jest dokładniejszy i prostszy!
Po podłączeniu wpisz B, a zobaczysz na podatnym hoście i nie zostaniesz rozłączony:
Otrzymasz odpowiedź pulsu, która wygląda podobnie do tej.
Na załatanym hoście zobaczysz odpowiedź podobną do poniższej i zostaniesz rozłączony:
Wpisz B.
Źródło:
Istnieją również następujące narzędzia:
https://github.com/titanous/heartbleeder
http://filippo.io/Heartbleed/
https://github.com/musalbas/heartbleed-masstest
źródło
W systemie Ubuntu możesz użyć:
I porównaj z http://www.ubuntu.com/usn/usn-2165-1/ . Po ponownym uruchomieniu (!!!) możesz sprawdzić za pomocą
http://possible.lv/tools/hb
.źródło
Lepiej zaktualizuj do najnowszej wersji OpenSSL OpenSSL 1.0.1j.
http://blog.vincosolution.com/2014/10/upgrade-openssl-1-0-1j-debianubuntu.html
źródło
Znalazłem ten skrypt w devcentral :
Zamień
example.com
na nazwę lub adres IP serwera, który chcesz sprawdzić.Zwróci,
"safe"
jeśli Twój serwer jest w porządku lub"server extension "heartbeat" (id=15)"
jeśli nie.Nie zależy to od numeru wersji, ale od umieszczenia na liście rozszerzenia serwera, które powoduje problem, więc powinno być odporne na shenanigany wersji biblioteki.
Maszyna jest uruchomiony
openssl s_client
na musi być przy użyciu OpenSSL 1.0.1 lub nowszy, aby to zadziałało.źródło
openssl s_client
MUSI używać OpenSSL 1.0.1 lub nowszej, aby to działało. Jeśli uruchomisz to polecenie na komputerze z wersją 0.9.8 lub 1.0.0, ZAWSZE ZGŁASZA „Bezpieczne”, nawet dla serwerów wrażliwych .