Soru Heartbleed: OpenSSL sürümünü güvenilir ve portably kontrol etmek nasıl?


GNU / Linux ve diğer sistemlerde OpenSSL sürümünü kontrol etmek için güvenilir ve taşınabilir bir şekilde bakıyordum, böylece kullanıcılar Heartbleed hatası nedeniyle SSL'lerini yükseltmeleri gerekip gerekmediğini kolayca bulabilirler.

Kolay olacağını düşündüm, ama en son OpenSSL 1.0.1g ile Ubuntu 12.04 LTS'de bir problemle karşılaştım:

openssl sürümü -a

Tam bir sürüm görmeyi bekliyordum, fakat bunun yerine şunu elde ettim:

OpenSSL 1.0.1 14 Mar 2012
inşa: Sal Haziran 4 07:26:06 UTC 2013
platform: [...]

Hoş olmayan sürprizime, sürüm harfi gösterilmiyor. Hayır, hayır, hayır, sadece "1.0.1" ve işte bu. Listelenen tarihler, (olmayan) güvenlik açığından etkilenen bir sürümü keşfetmeye yardımcı olmaz.

1.0.1 (a-f) ile 1.0.1g arasındaki fark çok önemlidir.

Sorular:

  • Tercihen çapraz dağılımı kontrol etmek için güvenilir bir yol nedir?
  • Neden sürüm harfi ilk sırada gösterilmiyor? Bunu başka bir şey üzerinde test edemedim ama Ubuntu 12.04 LTS.

Diğerleri de bu davranışı bildiriyor. Birkaç örnek:

Bazı (ayırt edici) öneriler içeri aktarılıyor:

  • Ubuntu ve Debian: apt-cache policy openssl ve apt-cache policy libssl1.0.0. Sürüm numaralarını şu paketlere karşılaştırın: http://www.ubuntu.com/usn/usn-2165-1/
  • Fedora 20: yum info openssl (twitter'de @znmeb teşekkürler) ve yum info openssl-libs

OpenSSL'nin eski bir sürümünün hala geçerli olup olmadığını kontrol etme:

OpenSSL paketinin Ubuntu ve Debian'da güncellenmesinin her zaman yeterli olmadığı ortaya çıkıyor. Ayrıca libssl1.0.0 paketini de güncellemelisiniz ve eğer openssl version -a gösterir built on: Mon Apr 7 20:33:29 UTC 2014.


86
2018-04-07 23:51


Menşei


en azından sahip olduğunuz OpenSSL sürümünün olduğundan emin olun. değil g gösterdiği tarihten dolayı - Pato Sáinz
Bu CentOS üzerinde çalışıyor [root@null~]# openssl version -a OpenSSL 1.0.1e-fips 11 Feb 2013 - Jacob
@ PatoSáinz kontrol ettim apt-cache policy openssl ve ile cevap verdi: Installed: 1.0.1-4ubuntu5.12 12.04 LTS için Ubuntu tarafından piyasaya sürülen 1.0.1g. Çıkış yaptım ve doğrulamak için yapabileceğim başka bir şey var mı? - Martijn
Bunun için bilmiyorum, bunun için yararlı olduğunu ... Ubuntu 12.04 LSS OpenSSL 1.0.1 (vanilla) ile sevk edilir. - HopelessN00b
Bu oluşturma tarihi doğruysa, 1.0.1f'den itibaren 2014'te çıktığı için 1.0.1e'den daha yeni bir sürüm olan "yayınlanmış sürüm" koduna sahip olamazsınız. OpenSSL 1.0.1 sürüm notları. Bireysel satırlar veya bölümler, elbette resmi OpenSSL 1.0.1f sürümünden önce Ubuntu sürümünüze geri yüklenmiş olabilir. Ve yapım tarihi tamamen yardımcı olabilir. - Anti-weakpasswords


Cevaplar:


OpenSSL sürümünüzün görüntülediği tarihe göre, Hangi orada görüntülenen tam sürümü görüyorum.

Açık SSL 1.0.1, 14 Mart 2012'de yayınlandı. 1.0.1a, 19 Nisan 2012'de serbest bırakıldı.

Yani, devam edip bunu ileri süreceğim openssl version -a sistemde yüklü olan OpenSSL'nin tam sürümünü görüntülemek için doğru, çapraz dağıtım yoludur. Erişebildiğim tüm Linux dağıtımları için çalışıyor gibi görünüyor ve help.ubuntu.com OpenSSL belgelerinde de önerilen yöntemdir. Ubuntu LTS 12.04, takip eden mektubu olmayan kısaltılmış versiyona benzeyen versiyon olan vanilya OpenSSL v1.0.1 ile birlikte gelir.

Bunu söyledikten sonra, bir majör Ubuntu'da hata (veya OpenSSL'yi nasıl paketledikleri) openssl version -a OpenSSL'nin yeni sürümlerden herhangi birine yükseltilip yükseltilmediğine bakılmaksızın, orijinal 1.0.1 sürümünü 14 Mart 2012'den itibaren iade etmeye devam ediyor. Ve yağmur yağdığında çoğu şeyde olduğu gibi dökülür.

Ubuntu, OpenSSL (veya diğer paketler) güncellemelerini geri yükleme alışkanlığındaki tek büyük dağıtım değil, herkesin tanıdığı upstream güncellemelerine ve sürüm numaralandırmasına güvenmekten daha az. Harf sürüm numaralarının yalnızca hata düzeltme ve güvenlik güncelleştirmelerini temsil ettiği OpenSSL durumunda, bu neredeyse anlaşılmaz gibi görünüyor, ancak bunun nedeni bunun olabileceği yönünde bilgilendirildim. FIPS-valide OpenSSL ile paketlenmiş eklenti büyük Linux dağıtımları. Herhangi bir değişiklik nedeniyle tetikleyen revalidasyonun gereklilikleri, güvenlik deliklerini tıkayan değişiklikler bile, sürüm kilitlidir.

Örneğin, Debian'da, sabit sürüm bir sürüm numarası görüntüler 1.0.1e-2+deb7u5 upstream sürümü yerine 1.0.1g.

Sonuç olarak, şu anda, SSL sürümlerini Linux dağıtımlarında denetlemenin güvenilir ve taşınabilir bir yolu yoktur.Çünkü hepsi kendi backported yamaları kullanırlar ve farklı versiyon numaralandırma şemaları ile güncellerler. Çalıştığınız her bir Linux dağıtımı için sabit sürüm numarasına bakmanız ve sunucularınızın savunmasız bir sürümü çalıştırıp çalıştırmadığını belirlemek için bu dağıtıma özgü sürüm numaralandırmasına karşı kurulu OpenSSL sürümünü kontrol etmeniz gerekir.


67
2018-04-08 00:05



Yüklemem, Ubuntu depolarından başka bir kaynaktan derlediğim veya başka kaynaklardan indirdiğim bir şey olmadan basit bir Ubuntu 12.04 LTS. Ubuntu, OpenSSL'yi kısaltılmış sürüm numaraları ile dağıtıyorsa openssl version -a taşınabilir bir yöntem değildir (en azından Ubuntu'ya taşınabilir değildir). kontrol ettim apt-cache policy openssl ve ile cevap verdi: Installed: 1.0.1-4ubuntu5.12 12.04 LTS için Ubuntu tarafından piyasaya sürülen 1.0.1g. Kontrol etmeden önce çıkış yaptım. - Martijn
HopelessN00b, çarpma sürümleri yerine backporting düzeltme politikaları konusunda şüpheli hiçbir şey yoktur; Sunucu ortamında yüksek düzeyde arzu edilen platform stabilitesini sağlamanın çok iyi bir yoludur. Herhangi bir karar gibi, kullanıcıların da bilmesi gereken sonuçlar vardır; ama sadece onu kırdığı için "Ben foo x.y.z koşuyorum çünkü ben / en son istismar için savunmasız değilim"Akıl yürütme çizgisi, bu kötü bir şey yapmaz. - MadHatter
@towo Sürüm numaraları bir nedenden dolayı var. Pencerenin üst kısmındaki sürüm numaralarını "enterprisey", ya da her neyse, neden sürüm numarası ile hiç rahatsız etmiyoruz? Her şeyden önce, bizim bütün ittifaklarımızla birlikte isimlendirmeye başlayabiliriz. Savunmasız OpenSSL sürümlerini arayabiliriz Kutsal Heartbleed ve sabit olanlar Kurnaz Pıhtılaşma. - HopelessN00b
@ HopelessN00b "Bu, X.Y.Z versiyonunda sabitlenmiş" tuzağına yakalanacağınızı düşünüyorum, en son sürüme içe aktarılanların tümü hata ve güvenlik düzeltmeleri olduğundan, sürüm numaralarını takip etmiyorlar. Sürüm numarasını çarptılarsa, ek işlevsellik de beklerdiniz. "Bende OpenSSL v X.Y.Z var, neden ECDHA'm yok ???? ..etc". Sadece hata düzeltmelerinin olduğunu anladığınızda anlamlıdır. - NickW
@NickW @Jubal @MadHatter OpenSSL ile olan şey, yine de: 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. Yani, yukarı doğru versiyonlama şemasını terk eden hiçbir şey elde edilmez; Güncellemelerin geriye dönük olarak güncellenmesi, güncellemenin yalnızca güncellemeyi kullanmasıyla aynıdır, çünkü güncelleme yalnızca güvenlik ve hata düzeltmelerini içerir. Yaptığı şey şaşkınlık yaratmak ve Linux dağıtımları arasında OpenSSL sürümünü kontrol etmek için bizi hiçbir şekilde terk etmemek. - HopelessN00b


Eğer gerçekten platformlar arası bir şey istiyorsanız sürüm numaralarına güvenmek yerine güvenlik açığını denetleyin. 

Savunmasız olduğu bilinen bir sürüm numarasını bildiren kodunuz olabilir. ama asıl kod savunmasız değil. Ve tersine - sessizce savunmasız kod - daha da kötüsü olabilir!

OpenSSL ve OpenSSH gibi açık kaynaklı ürünleri bir araya getiren pek çok satıcı, API kararlılığını ve öngörülebilirliğini korumak için acil düzeltmeleri eski bir kod sürümüne seçici olarak uyarlayacaktır. Bu özellikle "uzun süreli sürüm" ve cihaz platformları için geçerlidir.

Ancak bunu sessizce yapan satıcılar (kendi sürüm dizesi son ekini eklemeden), güvenlik açığı tarayıcılarında (ve kullanıcıları karıştırarak) yanlış pozitifleri tetikleme riskini taşırlar. Bu sayede şeffaf ve doğrulanabilir hale getirmek için, bazı satıcılar kendi paketlerini büyük paket sürümüne eklerler. Hem Debian (OpenSSL) hem de FreeBSD (OpenSSH'de, VersionAddendum sshd_config yönergesi) bazen bunu yapar.

Bunu yapmayan satıcılar, diğer programların sürüm numaralarını kontrol ettiği doğrudan ve dolaylı yollardan dolayı kırılma olasılığını en aza indirmek için bunu yapıyor olabilir.

Yani şöyle görünebilir:

$ cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=12.04
DISTRIB_CODENAME=precise
DISTRIB_DESCRIPTION="Ubuntu 12.04.4 LTS"

$ openssl version
OpenSSL 1.0.1 14 Mar 2012

... buna rağmen yandı:

$ dpkg -l openssl | grep openssl
ii  openssl  1.0.1-4ubuntu5.12  [truncated]

$ ls -la `which openssl`
-rwxr-xr-x 1 root root 513208 Apr  7 12:37 /usr/bin/openssl

$ md5sum /usr/bin/openssl
ea2a858ab594905beb8088c7c2b84748  /usr/bin/openssl

Oyundaki gibi şeylerle, eğer daha iyi olursan sürüm numarasına güvenme.


18
2018-04-08 20:52



Sürümlerin kontrol edilmesinin, umduğum gibi kolay ve şeffaf olmadığını açıkça görüyorum. Güvenlik açığının denetlenmesi platformlar arasıdır, ancak daha da zor bir işlemdir: Çalışmakta olduğunuz korunmasız yazılım hizmeti için güvenilir bir PoC veya sınamanız olması gerekir. Bu durumda, hepsi Apache ve nginx için bir PoC ile başladı. Şu anda sadece SMTP'yi SSL ile kullanıyor olsaydım ve savunmasız olup olmadığımı kontrol etmek ister miydim? Sonunda çoğu hizmet için testlerimiz olacak, ancak biraz zaman alabilir. - Martijn
Martijn, bu adil bir nokta. Bir sınama mümkün olmadığında, ikincil yöntemler (hedef sistemlerde etkilenen ikili dosyalar için sağlama toplamını izlemek gibi) daha uygun değildir, ancak işin yapılması için yeterli olabilir ... ve sonra bir sonraki yangına geçilir. :-) - Royce Williams


Maalesef orada emin değilim olduğu Bunu yapmanın bir çapraz platform yolu. Bir blog yayınında tartıştığım gibi, sabit bir sürüme yükselttikten sonra Ubuntu 12.04 REMAINS 1.0.1 üzerinde görüntülenen OpenSSL sürümü.

YALNIZCA Ubuntu 12.04 için, aşağıdakilerin tümü doğruysa güncellenmiş olup olmadığını anlayabilirsiniz:

  1. dpkg -s openssl | grep Versionsürüm 1.0.1-4ubuntu5.12 veya daha sonraki sürümünü gösterir.
  2. dpkg -s libssl1.0.0 | grep Versionsürüm 1.0.1-4ubuntu5.12 veya daha sonraki sürümünü gösterir.
  3. openssl version -a 7 Nisan 2014 veya daha sonra "yerleşik" bir tarihi gösterir.

Ek bilgi için @danny teşekkürler.


14
2018-04-08 03:15



Tamam, bu durumda bu paketi eklemeliyim 1.0.1-4ubuntu5.12 Ubuntu 12.04 LTS için SADECE. Ubuntu 12.10 üzerinde iseniz, en azından sürümü görmelisiniz 1.0.1c-3ubuntu2.7ve 13.10’daysanız, en azından sürüm olmalı 1.0.1e-3ubuntu1.2kaynağına göre: ubuntu.com/usn/usn-2165-1 - Martijn
Bu maalesef yetersiz. Sen şart ayrıca yükseltme libssl1.0.0 açıkça ubuntu üzerinde. Eğer openssl versiyonu sürüm doğru olsa bile 7 Nisan 2014'ten önce yerleşik bir tarih görüyorsanız (1.0.1-4ubuntu5.12 Ubuntu için 12.04) muhtemelen hala savunmasızsınız. - danny
@danny Az önce beni kurtardın Çok iş. Yapım tarihinin neden bazı 12.04 sistemlerde doğru olduğunu ve başkalarında yanlış olduğunu anlamaya çalışıyordum. Sen bir hayat kurtarıcısın! - Schof
openssl version -a düzeltmenin eski sürümlere geri gönderildiği için 7 Nisan yapım tarihine gerek duymayabilir. - Patrick James McDougle


Aşağıdaki deneyin bir deneyin. Tüm dizeleri kripto ssh bağlantılı kütüphane. Birden fazla çıktı satırı üretir, ancak gerekirse 1 satıra dönüştürülebilir.

ldd `which ssh` | awk '/\// { print $3 }' | grep crypto | xargs strings  | grep OpenSSL

üretir

OpenSSLDie
DSA_OpenSSL
...
MD4 part of OpenSSL 1.0.1f 6 Jan 2014 
MD5 part of OpenSSL 1.0.1f 6 Jan 2014
... 
etc

Örneğin. önce Gentoo'da

[ebuild     U  ] dev-libs/openssl-1.0.1f [1.0.1c] USE="bindist (sse2) tls-heartbeat%* zlib -gmp -kerberos -rfc3779 -static-libs {-test} -vanilla" 4,404 kB

Yukarıdaki komut sonuçlanır

...
OpenSSL 1.0.1c 10 May 2012

sonra

...
OpenSSL 1.0.1f 6 Jan 2014

Ah, hala hayır.


4
2018-04-08 14:45



İyi bir çözüm sunmaya çok yakın olduğunu düşündüm ama maalesef bu Ubuntu 12.04 LTS'deki kripto kütüphanesi için işe yaramıyor. Tüm dizeleri sürümle birlikte görüntüler [...] part of OpenSSL 1.0.1 14 Mar 2012, Aynı şekilde olarak openssl version -a yapar. Bu, diğer durumlarda da işe yarayabilecek bir hile! - Martijn
@Martijn Peki bu talihsiz, ama ubuntu 12.10 üzerinde çalışıyor. 12.04'te yanlış tanımlayacağı garipti. Birden fazla lib var mı? Ssh, en güncel olanı kullanamaz mı? - waTeim
Başka openssl ikili dosyaları veya kripto kütüphaneleri bulamadım. Diğerleri tarafından fark edildi ki, 12.04 LTS'de Ubuntu, versiyonları değiştirmeden değişiklikleri 1.0.1'e geri döndürüyor. 12.10 bir LTS değilken Ubuntu bir backport yerine en son sürümü kullanıyor. - Martijn


Bu komut dosyalarından herhangi biri tüm hizmetleri test ediyor mu, yoksa sadece test ediyor mu? HTTPS? Bildiğim kadarıyla, PostgreSQL savunmasızdır, ancak bu, vahşi bir saldırı yüzeyine kadar sadece bir söylenti.

Var Metasploit komut dosyası kullanıma hazır.

https://github.com/rapid7/metasploit-framework/commit/dd69a9e5dd321915e07d8e3dc8fe60d3c54f551a

Bunu yazabilirsiniz (ile test edilmiştir GnuWin32 OpenSSL ikili sürüm 1.0.1.6, 2014-01-14 tarihli) ya da sadece aşağıdaki betik altındaki betikte kullanın. Daha doğru ve daha basit!

s_client -connect a23-75-248-141.deploy.static.akamaitechnologies.com:443 -debug -state

B tipi bağlandıktan sonra, savunmasız bir sunucuda göreceksiniz ve bağlantınız kesilmeyecek:

B

HEARTBEATING
write to 0x801c17160 [0x801cbc003] (66 bytes => 66 (0x42))
0000 - 18 03 03 00 3d 8f 6f 3c-52 11 83 20 9c a2 c0 49   ....=.o 5 (0x5))
0000 - 18 03 03 00 3d                                    ....=
read from 0x801c17160 [0x801cb7008] (61 bytes => 61 (0x3D))
0000 - 05 4d f5 c0 db 96 d1 f5-c7 07 e5 17 1f 3b 48 34   .M...........;H4
0010 - 6e 11 9d ba 10 0c 3a 34-eb 7b a5 7c c4 b6 c0 c0   n.....:4.{.|....
0020 - b0 75 0e fe b7 fa 9e 04-e9 4e 4a 7d 51 d3 11 1f   .u.......NJ}Q...
0030 - e2 23 16 77 cb a6 e1 8e-77 84 2b f8 7f            .#.w....w.+..
read R BLOCK

Buna benzeyen bir kalp atışı yanıtı alacaksınız.

Yamalı bir ana bilgisayarda, aşağıdakine benzer bir yanıt göreceksiniz ve bağlantınız kesilecek:

B girin

HEARTBEATING
write to 0x801818160 [0x8019d5803] (101 bytes => 101 (0x65))
0000 - 18 03 03 00 60 9c a3 1e-fc 3b 3f 1f 0e 3a fe 4c   ....`....;?..:.L
0010 - a9 33 08 cc 3d 43 54 75-44 7d 2c 7b f3 47 b9 56   .3..=CTuD},{.G.V
0020 - 89 37 c1 43 1c 80 7b 87-66 ff cb 55 5f 8d 1a 95   .7.C..{.f..U_...
0030 - 1b 4c 65 14 21 a1 95 ac-7a 70 79 fc cc a0 cf 51   .Le.!...zpy....Q
0040 - 0f 7e c5 56 14 c8 37 c1-40 0b b8 cb 43 96 8a e6   .~.V..7.@...C...
0050 - 21 42 64 58 62 15 fb 51-82 e6 7f ef 21 1b 6f 87   !BdXb..Q....!.o.
0060 - b9 c2 04 c8 47                                    ....G

Kaynak:

Ayrıca şu araçlar da var:


2
2018-04-09 11:43





Ubuntu için şunları kullanabilirsiniz:

aptitude show libssl1.0.0 | grep Version

Ve ile karşılaştır http://www.ubuntu.com/usn/usn-2165-1/. Yeniden başlattıktan sonra (!!!) ile kontrol edebilirsiniz http://possible.lv/tools/hb.


0
2018-04-08 11:14





En yeni OpenSSL OpenSSL 1.0.1j sürümüne geçmeniz daha iyi olur.

http://blog.vincosolution.com/2014/10/upgrade-openssl-1-0-1j-debianubuntu.html


0
2017-10-19 01:57





buldum devmerkezde bu betik:

openssl s_client -connect example.com:443 -tlsextdebug 2>&1| grep 'server extension "heartbeat" (id=15)' || echo safe

değiştirmek example.com kontrol etmek istediğiniz sunucunun adı veya IP adresiyle.

Geri dönücek "safe" sunucunuz tamamsa veya "server extension "heartbeat" (id=15)" eğer değilse.

Bu, sürüm numarasına dayanmaz, ancak soruna neden olan sunucu uzantısını listelemede, kitaplık sürümü shenanigans'a karşı bağışık olmalıdır.

Çalıştığınız makine openssl s_client üzerinde şart Bunun çalışması için OpenSSL 1.0.1 veya sonraki sürümünü kullanmalısınız.


0
2018-04-08 09:12



Yararlı, ancak uzantıya sahip bir sürümünüz varsa size söylemez ve düzeltme. - mattdm
Bu, güvenlik açığını denetlemenin ve bazı komut dosyalarının ne yaptığının gerçekten iyi bir yoludur. Aslında SSH erişimi gerektirmez. - Stefan Lasiewski
BIG SCARY ÖNEMLİ UYARI - Çalıştığınız makine openssl s_client Bunun için çalışması için OpenSSL 1.0.1 veya sonraki sürümünü kullanmalısınız. Bu komutu 0.9.8 veya 1.0.0 ile bir makinede çalıştırırsanız Savunmasız sunucular için bile her zaman "Güvenli" RAPOR OLACAK. - voretaq7
Garip. Bu hatadan etkilendiği varsayılan bir OpenSSL sürümü çalıştırıyorum, ancak bu dize çıktıda görünmüyor ... - Michael
@StefanLasiewski Cevabımı güncelledim ve "need ssh" bölümünü kaldırdım - egarcia