GNU/Linux >> Belajar Linux >  >> Linux

Cara Menguji Kerentanan SSLv2 DROWN Attack Menggunakan Script Python (Dan Solusi Memperbaiki Serangan DROWN pada Apache dan NginX)

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:

  1. Buka situs uji sinkattack, dan masukkan nama domain atau alamat ip situs yang ingin Anda uji.
  2. 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

Linux
  1. Cara mengunduh File dari server SFTP Menggunakan skrip python

  2. Bagaimana Menguji dan Memvalidasi DNSSEC menggunakan Dig and Web Tools?

  3. Bagaimana Memperbaiki Kerentanan DROWN di server Web Apache/NGINX dan SMTP?

  1. Bagaimana Cara Mendapatkan Alamat Ip Sendiri Dan Menyimpannya Ke Variabel Dalam Script Shell?

  2. Bagaimana Cara Mengompres dan Mengekstrak File Menggunakan Perintah tar di Linux?

  3. Menggunakan skrip Apache2Buddy untuk kinerja dan stabilitas

  1. Bagaimana cara menjalankan skrip python di terminal (ubuntu)?

  2. Menggunakan bash, bagaimana saya bisa mengetahui rata-rata, maks, dan min dari daftar angka?

  3. Cara install nginx terbaru di Debian dan Ubuntu