GNU/Linux >> Belajar Linux >  >> Linux

Heartbleed:bagaimana cara memeriksa versi OpenSSL dengan andal dan portabel?

Solusi 1:

Berdasarkan tanggal yang ditampilkan oleh versi OpenSSL Anda, tampaknya Anda berada 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 bahwa openssl version -a adalah cara lintas-distro yang tepat untuk menampilkan versi lengkap OpenSSL yang terinstal di sistem. Tampaknya berfungsi untuk semua distro Linux yang dapat saya akses, dan merupakan metode yang disarankan dalam dokumentasi OpenSSL help.ubuntu.com juga. Ubuntu LTS 12.04 dikirimkan dengan vanilla OpenSSL v1.0.1, yang merupakan versi yang terlihat seperti versi singkat, karena tidak ada huruf yang mengikutinya.

Karena itu, tampaknya ada mayor bug di Ubuntu (atau bagaimana mereka mengemas OpenSSL), di openssl version -a itu terus mengembalikan versi 1.0.1 asli mulai 14 Maret 2012, terlepas dari apakah OpenSSL telah ditingkatkan ke versi yang lebih baru atau tidak. Dan, seperti kebanyakan hal saat hujan, hujan turun.

Ubuntu bukan satu-satunya distro besar yang memiliki kebiasaan mem-backport pembaruan ke OpenSSL (atau paket lain), penilai daripada mengandalkan pembaruan upstream dan penomoran versi yang dikenali semua orang. Dalam kasus OpenSSL, di mana nomor versi surat hanya mewakili perbaikan bug dan pembaruan keamanan, ini tampaknya hampir tidak dapat dipahami, tetapi saya telah diberitahu bahwa ini mungkin karena plugin distro Linux utama yang divalidasi FIPS dikemas dengan OpenSSL. Karena persyaratan seputar validasi ulang yang dipicu karena perubahan apa pun, bahkan perubahan yang menyumbat celah keamanan, versi dikunci.

Misalnya, pada Debian, versi tetap menampilkan nomor versi 1.0.1e-2+deb7u5 bukan versi upstream dari 1.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 berbeda yang Anda jalankan, dan memeriksa versi OpenSSL yang terinstal dengan penomoran versi khusus distribusi tersebut untuk menentukan apakah server Anda menjalankan versi yang rentan atau tidak.

Solusi 2:

Jika Anda menginginkan sesuatu yang benar-benar lintas platform, periksa kerentanan itu sendiri daripada mengandalkan nomor versi.

Anda mungkin memiliki kode yang melaporkan nomor versi yang diketahui rentan, namun kode sebenarnya tidak rentan . Dan kebalikannya -- kode yang rentan secara diam-diam -- bisa jadi lebih buruk!

Banyak vendor yang memaketkan produk sumber terbuka seperti OpenSSL dan OpenSSH akan secara selektif menyesuaikan perbaikan mendesak ke versi kode yang lebih lama, untuk menjaga stabilitas dan prediktabilitas API. Hal ini terutama berlaku untuk "rilis jangka panjang" dan platform peralatan.

Tetapi vendor yang melakukan ini secara diam-diam (tanpa menambahkan akhiran string versi mereka sendiri) berisiko memicu kesalahan positif di pemindai kerentanan (dan membingungkan pengguna). Jadi untuk membuatnya transparan dan dapat diverifikasi, beberapa vendor menambahkan string mereka sendiri ke versi paket utama. Debian (OpenSSL) dan FreeBSD (dalam OpenSSH, melalui VersionAddendum sshd_config) terkadang melakukan ini.

Vendor yang tidak melakukan ini mungkin melakukannya untuk meminimalkan kemungkinan kerusakan karena banyaknya cara langsung dan tidak langsung yang digunakan program lain untuk memeriksa nomor versi.

Jadi bisa terlihat seperti ini:

$ 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

... padahal udah di patch:

$ 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

Dengan hal-hal seperti ini, lebih baik Anda tidak memercayai nomor versi.

Solusi 3:

Sayangnya, saya tidak yakin ada cara lintas platform untuk melakukan ini. Seperti yang saya diskusikan di postingan blog, versi OpenSSL yang ditampilkan di Ubuntu 12.04 TETAP 1.0.1 setelah memutakhirkan ke versi tetap.

Untuk Ubuntu 12.04 SAJA, Anda dapat mengetahui apakah Anda telah diperbarui jika semua hal di bawah ini benar:

  1. dpkg -s openssl | grep Version menunjukkan versi 1.0.1-4ubuntu5.12 atau lebih baru.
  2. dpkg -s libssl1.0.0 | grep Version menunjukkan versi 1.0.1-4ubuntu5.12 atau lebih baru.
  3. openssl version -a menunjukkan tanggal "dibangun" pada 7 April 2014 atau lebih baru.

Terima kasih kepada @danny untuk info tambahannya.

Solusi 4:

Cobalah yang berikut ini. Ini akan mengekstrak semua string dari crypto perpustakaan yang ditautkan dengan ssh. Ini menghasilkan lebih dari satu baris output, tetapi jika perlu dapat dikonversi menjadi 1 baris.

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

menghasilkan

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

misalnya di Gentoo sebelum emerge

[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

perintah di atas menghasilkan

...
OpenSSL 1.0.1c 10 May 2012

setelah

...
OpenSSL 1.0.1f 6 Jan 2014

Aduh, masih belum g.

Solusi 5:

Apakah salah satu dari skrip ini menguji semua layanan, atau hanya menguji HTTPS? AFAIK, PostgreSQL rentan, tapi itu hanya rumor sampai serangan liar muncul.

Ada skrip metasploit yang tersedia untuk digunakan.

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

Anda dapat mengetik ini (diuji dengan GnuWin32 OpenSSL binary versi 1.0.1.6, tertanggal 14-01-2014), atau cukup gunakan skrip di komentar di bawah ini. Ini lebih akurat dan sederhana!

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

Setelah terhubung tipe B dan Anda akan melihat host yang rentan dan Anda tidak akan terputus:

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

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

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   [email protected]
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

Sumber:

  • Entri blog Cara menguji apakah OpenSSL Anda bermasalah

Ada juga alat ini:

  • https://github.com/titanous/heartbleeder

  • http://filippo.io/Heartbleed/

  • https://github.com/musalbas/heartbleed-masstest


Linux
  1. Cara Memeriksa Versi MySQL di Linux

  2. Periksa versi Wordpress yang digunakan

  3. Cara mengecek OS dan versi menggunakan perintah Linux

  1. Cara memeriksa versi Redhat

  2. Cara memeriksa Versi OS dan Linux

  3. Cara Memeriksa Versi CentOS

  1. Cara Memeriksa Versi MySQL di Linux

  2. Cara Memeriksa Nomor Versi OpenSSL

  3. Bagaimana cara memeriksa HZ di terminal?