DROWN adalah singkatan dari Decrypting RSA with Obsolete and Weakened eNcryption.
Ini dari Vulnerability Note VU#583776:Lalu lintas jaringan yang dienkripsi menggunakan sertifikat SSL berbasis RSA melalui SSLv2 dapat didekripsi oleh serangan DROWN.
Ini juga disebut sebagai CVE-2016-0800.
Untuk memperbaiki masalah, Anda cukup menonaktifkan dukungan untuk SSLv2 di server yang menggunakan sertifikat SSL berbasis RSA. SSLv2 tidak digunakan lagi sejak 2011. Tidak ada alasan lagi bagi Anda untuk menggunakan SSLv2.
Dua Metode untuk Menguji Kerentanan DROWN
Ada dua cara untuk menguji kerentanan DROWN:
- Buka situs uji sinkattack, dan masukkan nama domain atau alamat ip situs yang ingin Anda uji.
- Jika Anda ingin menguji server yang berjalan di belakang firewall Anda, atau jika Anda ingin mengotomatiskan pengujian semua server Anda dari baris perintah, gunakan skrip python yang dikembangkan oleh Hubert Kario dari RedHat seperti yang dijelaskan di bawah ini.
Instal Skrip Tes Python DROWN
Anda tidak perlu melakukan ini di server yang ingin Anda uji. Anda dapat menginstal skrip python berikut di salah satu server Anda (Misalnya, di server dev), dan menguji semua server Anda yang lain dari server ini tempat skrip python ini diinstal.
Untuk ini, Anda harus memiliki Python 2.6 atau lebih tinggi.
# python --version Python 2.6.6
Anda juga harus menginstal git di sistem Anda:
# git --version git version 1.7.1
Buat direktori tenggelam.
cd ~ mkdir drown cd drown
Dapatkan TLSFuzzer menggunakan git clone
# git clone https://github.com/tomato42/tlsfuzzer Initialized empty Git repository in /root/drown/tlsfuzzer/.git/ remote: Counting objects: 480, done. remote: Compressing objects: 100% (10/10), done. remote: Total 480 (delta 5), reused 0 (delta 0), pack-reused 470 Receiving objects: 100% (480/480), 1.30 MiB | 327 KiB/s, done. Resolving deltas: 100% (302/302), done.
Periksa cabang ssl2
# cd tlsfuzzer # git checkout ssl2 Branch ssl2 set up to track remote branch ssl2 from origin. Switched to a new branch 'ssl2'
Pada tahap ini, Anda akan melihat file berikut di bawah direktori ~/drown/tlsfuzzer
# ls build-requirements.txt docs LICENSE Makefile README.md requirements.txt scripts setup.py tests tlsfuzzer
Selanjutnya, dapatkan tlslite-ng, yang merupakan pustaka python open source yang mengimplementasikan protokol kriptografi SSL dan TLS.
# git clone https://github.com/tomato42/tlslite-ng .tlslite-ng Initialized empty Git repository in /root/drown/tlsfuzzer/.tlslite-ng/.git/ remote: Counting objects: 4821, done. remote: Total 4821 (delta 0), reused 0 (delta 0), pack-reused 4821 Receiving objects: 100% (4821/4821), 1.55 MiB | 137 KiB/s, done. Resolving deltas: 100% (3570/3570), done.
Selanjutnya buat link yang sesuai untuk tlslite yang baru saja kita download di atas.
# ln -s .tlslite-ng/tlslite tlslite
Periksa cabang sslv2.
# cd .tlslite-ng/ # git checkout sslv2 Branch sslv2 set up to track remote branch sslv2 from origin. Switched to a new branch 'sslv2' # cd ~/drown/tlsfuzzer
Dapatkan skrip python kriptografi ECDSA.
# git clone https://github.com/warner/python-ecdsa .python-ecdsa Initialized empty Git repository in /root/drown/tlsfuzzer/.python-ecdsa/.git/ remote: Counting objects: 485, done. remote: Total 485 (delta 0), reused 0 (delta 0), pack-reused 485 Receiving objects: 100% (485/485), 180.60 KiB, done. Resolving deltas: 100% (289/289), done.
Buat tautan yang sesuai untuk skrip python ECSDA.
# ln -s .python-ecdsa/ecdsa ecdsa
Uji Kerentanan DROWN Menggunakan Skrip Python – Contoh Tidak Rentan
Terakhir, jalankan skrip python DROWN seperti yang ditunjukkan di bawah ini. Ubah alamat ip yang sesuai dengan server yang Anda uji. Anda juga dapat menggunakan nama domain alih-alih alamat ip di sini.
# PYTHONPATH=. python scripts/test-sslv2-force-export-cipher.py -h 192.168.101.2 -p 443 Connect with TLSv1.0 EXP-RC4-MD5 ...OK Connect with SSLv2 EXP-RC4-MD5 ...OK Connect with SSLv3 EXP-RC4-MD5 ...OK Connect with TLSv1.0 EXP-RC2-CBC-MD5 ...OK Connect with SSLv3 EXP-RC2-CBC-MD5 ...OK Connect with SSLv2 EXP-RC2-CBC-MD5 ...OK Test end successful: 6 failed: 0
Catatan:Anda akan melihat 6 OK di atas. Anda juga akan melihat “gagal:0”.
Uji Kerentanan DROWN Menggunakan Skrip Python – Contoh Rentan
Berikut ini dieksekusi pada server yang rentan terhadap serangan DROWN. Inilah yang akan Anda lihat saat rentan.
# PYTHONPATH=. python scripts/test-sslv2-force-export-cipher.py -h 192.168.101.3 -p 443 Connect with TLSv1.0 EXP-RC4-MD5 ...OK Connect with SSLv2 EXP-RC4-MD5 ... Error encountered while processing node <tlsfuzzer.expect.ExpectSSL2Alert object at 0x2259810> (child: <tlsfuzzer.expect.ExpectClose object at 0x2259890>) with last message being: <tlslite.messages.Message object at 0x2259c50> Error while processing Traceback (most recent call last): File "scripts/test-sslv2-force-export-cipher.py", line 109, in main runner.run() File "/root/drown/tlsfuzzer/tlsfuzzer/runner.py", line 151, in run RecordHeader2))) AssertionError: Unexpected message from peer: Handshake(58) Connect with SSLv3 EXP-RC4-MD5 ...OK Connect with TLSv1.0 EXP-RC2-CBC-MD5 ...OK Connect with SSLv3 EXP-RC2-CBC-MD5 ...OK Connect with SSLv2 EXP-RC2-CBC-MD5 ...OK Test end successful: 5 failed: 1
Memperbaiki Masalah Serangan DROWN
Dalam skenario rentan DROWN di atas, salah satu kasus uji gagal. Untuk memperbaiki masalah ini, tambahkan baris berikut ke httpd.conf Apache, dan mulai ulang Apache.
# vi httpd.conf SSLProtocol All -SSLv2 -SSLv3
Jika Anda menjalankan NginX, pastikan SSLv2 tidak terdaftar di file konfigurasi seperti yang ditunjukkan di bawah ini.
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
Di Apache, kita harus secara eksplisit mengatakan "-SSLv2" untuk menonaktifkan SSLv2. Namun di NginX, saat Anda tidak mencantumkan SSLv2, SSLv2 dinonaktifkan.
Setelah perbaikan di atas, skrip pengujian python DROWN tidak lagi melaporkan masalah pada server tersebut.
Selain Apache dan NginX, jika Anda menjalankan Postfix untuk server email Anda, Anda juga harus menonaktifkan SSLv2 di server email Anda.
Juga, tingkatkan OpenSSL Anda ke versi terbaru. Di versi baru, tim OpenSSL juga telah menonaktifkan SSLv2 secara default saat build-time. Tim OpenSSL memiliki saran ini:Tingkatkan versi 1.0.2 ke 1.0.2g; dan tingkatkan versi 1.0.1 ke 1.0.1s.
Referensi Tambahan:
- Catatan Kerentanan VU#583776
- CVE-2016-0800
- Serangan TENGAH
- Penasihat Keamanan OpenSSL [1 Maret 2016]
- Panduan Pengguna OpenSSL untuk TENGGELAM