Saya mencari cara yang andal dan portabel untuk memeriksa versi OpenSSL di GNU / Linux dan sistem lainnya, sehingga pengguna dapat dengan mudah menemukan apakah mereka harus memutakhirkan SSL mereka karena bug Heartbleed.
Saya pikir itu akan mudah, tetapi saya dengan cepat menemukan masalah di Ubuntu 12.04 LTS dengan OpenSSL 1.0.1g terbaru:
openssl versi -a
Saya mengharapkan untuk melihat versi lengkap, tetapi saya malah mendapatkan ini:
OpenSSL 1.0.1 14 Mar 2012 dibangun di atas: Sel 4 Jun 07:26:06 UTC 2013 peron: [...]
Yang mengejutkan saya tidak menyenangkan, surat versi tidak muncul. Tidak f, tidak ada g di sana, hanya "1.0.1" dan hanya itu. Tanggal yang tercantum tidak membantu dalam menemukan versi (non-) yang rentan.
Perbedaan antara 1.0.1 (af) dan 1.0.1g sangat penting.
Pertanyaan:
- Apa cara yang dapat diandalkan untuk memeriksa versi, lebih disukai lintas distro?
- Mengapa huruf versi tidak muncul di tempat pertama? Saya tidak dapat menguji ini pada hal lain selain Ubuntu 12,04 LTS.
Yang lain melaporkan perilaku ini juga. Beberapa contoh:
- https://twitter.com/orblivion/status/453323034955223040
- https://twitter.com/axiomsofchoice/status/453309436816535554
Beberapa saran (khusus distro) bergulir di:
- Ubuntu dan Debian:
apt-cache policy openssl
danapt-cache policy libssl1.0.0
. Bandingkan nomor versi dengan paket di sini: http://www.ubuntu.com/usn/usn-2165-1/ - Fedora 20:
yum info openssl
(terima kasih @znmeb di twitter) danyum info openssl-libs
Memeriksa apakah versi OpenSSL yang lebih lama masih ada:
- Ini tidak sepenuhnya dapat diandalkan, tetapi Anda dapat mencoba
lsof -n | grep ssl | grep DEL
. Lihat Heartbleed: cara memeriksa versi OpenSSL dengan andal dan mudah dibawa? mengapa ini mungkin tidak berhasil untuk Anda.
Ternyata memperbarui paket OpenSSL di Ubuntu dan Debian tidak selalu cukup. Anda juga harus memperbarui paket libssl1.0.0, dan -kemudian memeriksa apakah openssl version -a
menunjukkan 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
dan merespons dengan:Installed: 1.0.1-4ubuntu5.12
yang merupakan 1.0.1g baru saja dirilis oleh Ubuntu untuk 12,04 LTS. Saya login dan kembali. Apakah ada hal lain yang bisa saya lakukan untuk memverifikasi?Jawaban:
Berdasarkan tanggal yang ditampilkan oleh versi OpenSSL, tampaknya Anda sedang melihat versi lengkap ditampilkan di sana.
Open SSL 1.0.1 dirilis pada 14 Maret 2012 . 1.0.1a dirilis pada 19 April 2012.
Jadi, saya akan melanjutkan dan menegaskan itu
openssl version -a
adalah cara yang tepat, lintas-distro untuk menampilkan versi lengkap OpenSSL yang diinstal pada sistem. Tampaknya berfungsi untuk semua distro Linux yang saya miliki aksesnya, dan merupakan metode yang disarankan dalam dokumentasi OpenSSL help.ubuntu.com . Ubuntu LTS 12.04 dikirimkan dengan vanilla OpenSSL v1.0.1, yang merupakan versi yang terlihat seperti versi singkat, karena tidak memiliki surat yang mengikutinya.Karena itu, tampaknya ada bug besar di Ubuntu (atau bagaimana mereka mengemas OpenSSL), yang
openssl version -a
terus mengembalikan versi 1.0.1 asli dari 14 Maret 2012, terlepas dari apakah OpenSSL telah ditingkatkan atau tidak ke suatu dari versi yang lebih baru. Dan, seperti kebanyakan hal saat hujan, hujan deras.Ubuntu bukan satu-satunya distro besar dalam kebiasaan backporting pembaruan ke OpenSSL (atau paket lain), lebih baik daripada mengandalkan pembaruan hulu dan penomoran versi yang diakui semua orang. Dalam kasus OpenSSL, di mana nomor versi huruf hanya mewakili perbaikan bug dan pembaruan keamanan, ini tampaknya hampir tidak bisa dipahami, tetapi saya telah diberitahu bahwa ini mungkin karena plugin yang divalidasi FIPS yang disahkan oleh kapal-kapal besar distro Linux yang dikemas dengan OpenSSL. Karena persyaratan sekitar validasi ulang yang memicu karena perubahan apa pun, bahkan perubahan yang membuat lubang keamanan, itu terkunci versi.
Misalnya, pada Debian, versi tetap menampilkan nomor versi
1.0.1e-2+deb7u5
alih-alih versi hulu1.0.1g
.Akibatnya, saat ini, tidak ada cara yang andal dan portabel untuk memeriksa versi SSL di seluruh distribusi Linux , karena mereka semua menggunakan tambalan dan pembaruan yang di-backport sendiri dengan skema penomoran versi yang berbeda. Anda harus mencari nomor versi tetap untuk setiap distribusi Linux yang berbeda yang Anda jalankan, dan memeriksa versi OpenSSL yang terinstal terhadap penomoran versi khusus distribusi itu untuk menentukan apakah server Anda menjalankan versi yang rentan atau tidak.
sumber
openssl version -a
itu bukan metode portabel (setidaknya tidak portabel untuk Ubuntu). Saya telah memeriksaapt-cache policy openssl
dan merespons dengan:Installed: 1.0.1-4ubuntu5.12
yang merupakan 1.0.1g baru saja dirilis oleh Ubuntu untuk 12,04 LTS. Saya logout dan kembali sebelum memeriksa.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.
Jadi, tidak ada yang diperoleh dengan meninggalkan skema versi upstream; backporting pembaruan pada dasarnya sama dengan menggunakan versi yang diperbarui, karena pembaruan hanya mencakup perbaikan keamanan dan bug. Apa yang dilakukannya adalah membingungkan hal-hal dan membuat kami tidak dapat memeriksa versi OpenSSL di seluruh distro Linux.Jika Anda menginginkan sesuatu yang benar-benar lintas platform, periksa kerentanannya sendiri daripada mengandalkan nomor versi.
Anda mungkin memiliki kode yang melaporkan nomor versi yang dikenal rentan, tetapi kode sebenarnya tidak rentan . Dan sebaliknya - kode yang secara diam-diam rentan - bisa jadi lebih buruk!
Banyak vendor yang menggabungkan produk-produk sumber terbuka seperti OpenSSL dan OpenSSH secara selektif akan memperbaiki perbaikan yang mendesak ke versi kode yang lebih lama, untuk menjaga stabilitas dan prediktabilitas API. Ini terutama berlaku untuk "rilis jangka panjang" dan platform alat.
Tetapi vendor yang melakukan ini secara diam-diam (tanpa menambahkan sufiks string versi mereka sendiri) berisiko memicu positif palsu dalam pemindai kerentanan (dan membingungkan pengguna). Jadi untuk membuat ini transparan dan dapat diverifikasi, beberapa vendor menambahkan string mereka sendiri ke versi paket utama. Baik Debian (OpenSSL) dan FreeBSD (dalam OpenSSH, melalui
VersionAddendum
arahan sshd_config) terkadang melakukan ini.Vendor yang tidak melakukan ini mungkin melakukannya untuk meminimalkan kemungkinan kerusakan karena banyak cara langsung dan tidak langsung bahwa program lain memeriksa nomor versi.
Jadi bisa terlihat seperti ini:
... meskipun sudah ditambal :
Dengan hal-hal seperti ini dalam permainan, Anda lebih baik jika Anda tidak mempercayai nomor versi.
sumber
Sayangnya, saya tidak yakin ada adalah cara cross-platform untuk melakukan hal ini. Seperti yang saya bahas dalam posting blog , versi OpenSSL ditampilkan di Ubuntu 12.04 REMAINS 1.0.1 setelah memutakhirkan ke versi yang tetap.
Untuk Ubuntu 12.04 HANYA, Anda dapat mengetahui apakah Anda telah diperbarui jika semua hal di bawah ini benar:
dpkg -s openssl | grep Version
menunjukkan versi 1.0.1-4ubuntu5.12 atau yang lebih baru.dpkg -s libssl1.0.0 | grep Version
menunjukkan versi 1.0.1-4ubuntu5.12 atau yang lebih baru.openssl version -a
menunjukkan tanggal "dibangun pada" 7 April 2014 atau lebih baru.Terima kasih kepada @danny untuk info tambahannya.
sumber
1.0.1-4ubuntu5.12
HANYA untuk Ubuntu 12,04 LTS. Jika Anda menggunakan Ubuntu 12.10, Anda harus melihat setidaknya versi1.0.1c-3ubuntu2.7
dan jika Anda menggunakan 13.10 maka itu harus setidaknya versi1.0.1e-3ubuntu1.2
, menurut sumber: ubuntu.com/usn/usn-2165-1libssl1.0.0
secara eksplisit di ubuntu. Jika Anda melihat tanggal dibangun sebelum 7 April 2014 meskipun versi openssl terlihat benar (1.0.1-4ubuntu5.12
untuk Ubuntu 12.04) Anda mungkin masih rentan.openssl version -a
mungkin tidak memerlukan tanggal pembuatan 7 April, karena perbaikan sedang di-backport ke rilis yang lebih lama.Cobalah yang berikut ini. Ini akan mengekstrak semua string dari pustaka crypto yang ssh ditautkan. Ini menghasilkan lebih dari satu baris output, tetapi jika perlu dapat dikonversi menjadi 1 baris.
menghasilkan
mis. di Gentoo sebelum emerge
perintah di atas menghasilkan
setelah
Aduh, masih belum g.
sumber
[...] part of OpenSSL 1.0.1 14 Mar 2012
, dengan cara yang sama sepertiopenssl version -a
halnya. Ini adalah trik yang mungkin berhasil dalam kasus lain!Apakah ada di antara skrip ini yang menguji semua layanan, atau hanya menguji HTTPS ? AFAIK , PostgreSQL rentan, tapi itu hanya desas-desus sampai permukaan serangan liar muncul.
Ada skrip metasploit yang tersedia untuk digunakan.
Anda dapat mengetik ini (diuji dengan GnuWin32 OpenSSL biner versi 1.0.1.6, tanggal 2014-01-14), atau cukup gunakan skrip dalam komentar di bawah ini. Ini lebih akurat dan sederhana!
Setelah terhubung, tipe B dan Anda akan melihat host yang rentan dan Anda tidak akan terputus:
Anda akan mendapatkan respons detak jantung yang mirip dengan yang ini.
Pada host yang ditambal, Anda akan melihat respons yang mirip dengan di bawah ini dan Anda akan terputus:
Masukkan B
Sumber:
Ada juga alat-alat ini:
https://github.com/titanous/heartbleeder
http://filippo.io/Heartbleed/
https://github.com/musalbas/heartbleed-masstest
sumber
Untuk Ubuntu Anda dapat menggunakan:
Dan bandingkan dengan http://www.ubuntu.com/usn/usn-2165-1/ . Setelah reboot (!!!) Anda dapat memeriksanya
http://possible.lv/tools/hb
.sumber
Anda sebaiknya meningkatkan ke OpenSSL OpenSSL 1.0.1j terbaru.
http://blog.vincosolution.com/2014/10/upgrade-openssl-1-0-1j-debianubuntu.html
sumber
Saya menemukan skrip ini di devcentral :
Ganti
example.com
dengan nama atau alamat IP dari server yang ingin Anda periksa.Akan kembali
"safe"
jika server Anda baik-baik saja atau"server extension "heartbeat" (id=15)"
jika tidak.Ini tidak bergantung pada nomor versi, tetapi pada daftar ekstensi server yang menyebabkan masalah, sehingga harus kebal terhadap shenanigans versi perpustakaan.
Mesin Anda menjalankan
openssl s_client
pada harus menjadi menggunakan OpenSSL 1.0.1 atau lambat agar ini bekerja.sumber
openssl s_client
HARUS menggunakan OpenSSL 1.0.1 atau yang lebih baru agar ini berfungsi. Jika Anda menjalankan perintah ini pada mesin dengan 0.9.8 atau 1.0.0 ITU AKAN SELALU LAPORAN "Aman", bahkan untuk server yang rentan .