Melakukan Tes Kerentanan SSLv2 Terhadap Serangan DROWN

Pada tanggal 1 Maret 2016 lalu beberapa media teknologi dan keamanan telah mengumumkan adanya celah keamanan pada SSLv2 terhadap sebuah serangan yang dikenal dengan DROWN (Decrypting RSA using Obsolete and Weakened eNcryption). Celah keamanan ini pertama kali dilaporkan oleh Nimrod Aviram dan Sebastian Schinzel dan kemudian RedHat mengumumkannya dengan kode CVE-2016–0800. Beberapa situs besar seperti Alibaba, Yahoo dan sebagainya termasuk dalam daftar situs top yang mempunyai celah keamanan ini (saat vulnerability issue baru rilis).

Serangan DROWN pada SSLv2 memungkinkan seseorang melakukan dekripsi terhadap RSA cipher text yang melewati jalur komunikasi antara server (yang masih menggunakan SSLv2) dengan client. Private key didapatkan dengan cara mengobservasi komunikasi antara client dan server, terutama response dari server yang mempunyai private key tersebut. Penjelasan teknis mendetail dapat ditemukan pada Paper yang diterbitkan oleh DROWN Researcher.

Untuk melakukan tes terhadap sebuah website apakah memiliki celah keamanan ini cukup dengan mengeceknya pada tautan ini. Atau dapat menggunakan skrip python yang dikembangkan oleh Hubert Kario dari RedHat. Untuk menggunakan skrip ini hanya membutuhkan pyton minimal versi 2.6.6 dan tentunya git untuk mengunduh / clone project nya.

[code language=”bash”]
git clone https://github.com/tomato42/tlsfuzzer
cd tlsfuzzer
git checkout ssl2
[/code]

masih di dalam direktori tlsfuzzer :

[code language=”bash”]
git clone https://github.com/tomato42/tlslite-ng .tlslite-ng
ln -s .tlslite-ng/tlslite tlslite
cd .tlslite-ng
git checkout sslv2
[/code]

Lalu kembali ke direktori tlsfuzzer

[code language=”bash”]
cd ..
[/code]

Unduh skrip kripto ECDSA :

[code language=”bash”]
git clone https://github.com/warner/python-ecdsa .python-ecdsa
ln -s .python-ecdsa/ecdsa ecdsa
[/code]

Lakukan pengecekan seperti ini :

[code language=”bash”]
PYTHONPATH=. python scripts/test-sslv2-force-export-cipher.py -h contohaja.com -p 443
[/code]

Pada contoh kasus yang masih rentan terhadap DROWN attack maka akan muncul assertion error seperti ini :

Connect with TLSv1.0 EXP-RC4-MD5 ...
OK
Connect with SSLv2 EXP-RC4-MD5 ...
Error encountered while processing node <tlsfuzzer.expect.ExpectSSL2Alert object at 0x10d709810> (child: <tlsfuzzer.expect.ExpectClose object at 0x10d709890>) with last message being: <tlslite.messages.Message object at 0x10d709e10>
Error while processing
Traceback (most recent call last):
File "scripts/test-sslv2-force-export-cipher.py", line 109, in main
runner.run()
File "/Users/robertusm.suseno/Workspace/drown/tlsfuzzer/tlsfuzzer/runner.py", line 151, in run
RecordHeader2)))
AssertionError: Unexpected message from peer: Handshake(123)
Untuk menghindari kemungkinan serangan DROWN ini, cukup men-disable SSLv2 pada konfigurasi protokol apapun itu yang menggunakan jalur SSL / TLS. Misalnya pada Nginx, cukup memastikan SSLv2 tidak terdapat pada konfigurasi :
[code language="bash"]
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
[/code]
SSL versi 2 ini sudah lama deprecated, semenjak tahun 2011 dan sangat tidak disarankan untuk tetap dipergunakan.
Sumber :
1. DROWN Paper : https://drownattack.com/drown-attack-paper.pdf
2. RedHat Vulnerability Responses : https://access.redhat.com/security/vulnerabilities/drown
3. Vulnerability Note : https://www.kb.cert.org/vuls/id/583776
4. OpenSSL Mailing List : https://mta.openssl.org/pipermail/openssl-dev/2016-March/005602.html
5. Daftar Situs Top : https://drownattack.com/top-sites.html
One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.