IPv6 üzerinden DHCPv6 ve WPAD Spoofing Saldırısı

IPv6 Çalışma Mantığı

IPv6, IPv4’ün eksiklerini gidermek amacıyla geliştirilmiş bir protokoldür. Windows Vista’dan itibaren cihazlarda varsayılan olarak etkinleştirilmiş bir şekilde bilgisayarlarda tanımlanmaktadır.

Bir cihazın kendi IPv6 adresini öğrenebilmesi için 3 farklı yöntem vardır.

  1. Stateless address autoconfiguration (SLAAC)
  2. Stateful address autoconfiguration
  3. Manual

Varsayılan olarak SLAAC kullanılmaktadır.

Stateless address autoconfiguration (SLAAC)

Bir cihazın kendi IPv6 adres bilgilerini, DHCP sunucusuna ihtiyaç duymadan elde etmesini sağlamaktadır. (Stateless kavramı DHCP sunucusu gibi herhangi bir sunucuya ihtiyaç duymamasını belirtmektedir.) SLAAC gerekli adres bilgilerini Neighbor Discovery Protocol (NDP) protokolü aracılığı ile elde etmektedir. Ayrıca IPv6 için kullanacağı DNS adresini DHCPv6 sunucusundan elde edebilir.

Neighbor Discovery Protocol(NDP)

NDP, IPv6 için yerel ağda cihazların birbirini keşfetmesini sağlamaktadır ve bu yönüyle ARP protokolüne benzemektedir. Böylelikle yerel ağdaki cihazlarla iletişim kurulmaktadır. NDP, stateless auto configuration için kullanılmaktadır. Böylelikle cihazların, DHCP sunucusu olmadan IPv6 adresini almasını sağlamaktadır.

ICMPv6 (Internet Control Message Protocol version 6), IPv6 ağlarında iletişimde kullanılan bir iletişim protokolüdür. ICMPv6, IPv6’nın hata raporlama, ağ cihazları arasındaki iletişimi sağlama ve diğer ağ yönetim görevlerini gerçekleştirmek için kullanılır. NDP, ICMPv6 paketlerini kullanmaktadır.

Bu paketler;

  • Neighbor Solicitation (NS)
  • Neighbor Advertisement (NA)
  • Router solicitation (RS)
  • Router Advertisement (RA)
  • Redirect

olarak sıralanabilir.

NS ve NA Paketleri nedir?

NS, yerel ağdaki cihazların birbirinin MAC adresini öğrenmek için kullanılmaktadır. NS paketi içerisinde gönderen cihaz MAC adresini bulundurmaktadır. Yanıt olarak, NS paketini alan cihaz MAC adresini NA paketi ile göndermektedir.

RS ve RA Paketleri nedir?

RS, yerel ağdaki cihazların ağda router olup olmadığını kontrol etmek amacıyla kullanılmaktadır. Bulunduğu ağda router bulunuyorsa, bu router RA paketlerini kullanarak varlığını duyurmaktadır. RA paketlerinin içerisinde cihazın ağ yapılandırma bilgileri bulunmaktadır. Böylelikle cihazlar IPv6 için ağ yapılandırma bilgilerini öğrenmektedirler.

Not: RS paketi beklenmeden, router’lar RA paketlerini cihazlara iletebilmektedirler.

Redirect

Redirect paketi, router’lar tarafından, bir cihazın hedef cihaza olan en iyi rota için yönlendirme bilgisini güncellemek amacıyla kullanılmaktadır.

RS ve RA paketlerinin kullanımı, yukarıdaki görselde örnek olarak gösterilmektedir.

Stateful address autoconfiguration

Stateful address autoconfiguration, cihazların sadece DHCPv6 sunucusundan alınan adres bilgilerini kullanılmasını sağlamaktadır. RA paketinde bulunan yapılandırma bilgileri kullanılmamaktadır.

Manuel

Manuel konfigürasyon, kullanıcının kendi belirlediği IPv6 adresini kullanmasına olanak tanır.

 

DHCPv6 Spoofing Nasıl Gerçekleştirilir?

Saldırgan tarafından RA paketi dakikada bir kez bulunduğu ağda multicast olarak yayınlanmaktadır.

1- Saldırgan tarafından Router Advertisement(RA) paketi flag değerleri M:1 ve O:1 olacak şekilde kurbana gönderilmektedir. Böylelikle saldırgan kendini router olarak kurbana tanıtmaktadır. Paket içerisinde gönderdiği flag değerleriyle, IPv6 adresini öğrenmek ve DNS gibi ekstra yapılandırma bilgilerini öğrenmek için kurbanın DHCPv6 sunucusu ile iletişime geçmesi gerektiğini kurbana bildirmektedir.

2- Kurban DHCPv6 sunucusu keşfetmek için DHCPv6 SOLICIT paketini multicast olarak yayınlamaktadır.

3- Saldırgan yanıt olarak kurbana, DHCPv6 Advertise paketini göndermektedir. Bu paket içerisinde önerilen kurbanın IPv6 adresi ve IPv6 için DNS adresi bulunmaktadır. Böylelikle saldırgan kendi IPv6 adresini, kurbana DNS adresi olarak tanıtmayı amaçlamaktadır.

4- Kurban, saldırganın gönderdiği yapılandırma bilgilerini onayladığını DHCPv6 Request paketi ile DHCPv6 sunucusuna(saldırgana) iletmektedir.

5- Son olarak DHCPv6(saldırgan) sunucusu onaylanan adres bilgilerini kurbana sunmaktadır.

Bunun sonucunda, kurbanın yapacağı DNS sorguları saldırganın kontrolüne geçmektedir.

Yukarıda bahsedilen bütün işlemler “mitm6” adlı araç ile gerçekleştirilebilir.

WPAD nedir?

Web Proxy Auto-Discovery Protocol (WPAD), bilgisayarların ve diğer cihazların otomatik olarak web proxy yapılandırmalarını bulmalarını sağlayan bir protokoldür. Bu, ağdaki cihazların otomatik olarak bir proxy sunucu kullanmalarını sağlamaktadır. Böylelikle kullanıcıların manuel olarak proxy ayarlarını yapılandırmalarına gerek kalmaz. Varsayılan olarak WPAD sunucunun adresi DNS sorgularıyla bulunmaktadır.

Windows bilgisayarlarda varsayılan olarak Proxy ayarlarında “Automatically detect setting” özelliği etkinleştirilmiş olarak gelmektedir. Tarayıcılar Windows’un bu özelliğini kullanarak bu proxy yapılandırılmasını kullanmaktadır. Client eğer bir domaine dahil ise “wpad.<domain_name>/wpad.dat” URI adresiyle proxy yapılandırma bilgisi olan PAC dosyasını WPAD sunucusundan talep etmektedir.

Proxy Auto-Configuration (PAC) dosyası nedir?

PAC dosyası, tarayacı isteklerinin doğrudan iletileceğini mi yoksa proxy aracılığıyla mı iletileceğini javascript fonksiyonları ile tanımlamasını sağlamaktadır. PAC dosyası, “wpad.dat” olarakta bilinmektedir. Bu konfigürasyon WPAD üzerinden elde edilmektedir.

Örnek PAC Dosyası

//url_example = wpad.company.com

function FindProxyForURL(url, host)

{

if (dnsDomainIs(host, “.company.com”))

return “DIRECT”;

else

return “PROXY myproxy.company.com:8080”;

}

// Belirtilen örnekte *.company.com dışına yapılan herhangi bir istek için myproxy.company.com:8080 adresi proxy olarak kullanılacaktır.

  • dnsDomainIs(host, “.company.com”): Bu ifade, verilen ana bilgisayar adının “.company.com” domaine ait bir subdomain olup olmadığını kontrol eder. Eğer koşul sağlanırsa “DIRECT” cevabı dönmektedir. Böylelikle doğrudan bağlantı gerçekleştirilmektedir.
  • Koşul sağlanmazsa “myproxy.company.com” adresi proxy sunucusunu olarak kullanılmaktadır.

WPAD SPOOFING

Saldırgan tarafından DHCPv6 spoofing işlemi gerçekleştirildikten sonra, kurbanın yapacağı DNS sorguları saldırganın kontrolüne geçmektedir. Kurbanın PAC dosyasının bulunduğu domain adresine erişmek için yaptığı DNS isteği saldırganın DNS sunucusuna ulaşmaktadır. PAC dosyasındaki proxy yapılandırma bilgilerini manipüle edebilen saldırgan, kendi kontrolündeki IP adresini proxy olarak kullanması için kurbana iletmektedir. Böylelikle kurbanın yapacağı tüm HTTP istekleri saldırgan üzerinden gerçekleşecektir.

1- Kurban PAC dosyasını talep etmektedir.

2- Saldırgan, PAC dosyasını kurbana iletmektedir. Kurban PAC dosyasını baz alarak proxy adresini tanımlamaktadır.

3- Kurbanın yaptığı herhangi bir HTTP isteği, sunucudan önce proxy olan saldırgana iletilmektedir.

4- Saldırgan, kurbana 407 durum kodunu yanıt olarak gönderilmektedir. Bunun amacı saldırganın belirlediği authentication protokolü ile authentication işleminin tamamlanması gerektiğini kurbana bildirmektir.

5- Kurban NTLM authentication işlemini tamamlamak için NTLM response değerini saldırgana iletmektedir.

Single sign-on (SSO) mekanizması sayesinde authentication işlemi arka planda gerçekleşir ve NTLM response değeri saldırgana iletilmektedir.

Yukarıda saldırganın gerçekleştirdiği adımlar, mitm6 + ntlmrelayx araçlarını beraber kullanarak gerçekleştirilebilir.

Örnek Saldırı Senaryosu

Saldırının teorik olarak nasıl gerçekleştiği yukarıda açıklanmıştır. Bundan sonraki aşamada Active directory ortamında saldırının uygulanması anlatılmaktadır.

Active Directory (AD) LAB Ortamı

AD Lab ortamı şeması ve sistemlerde aktif oturumları bulunan kullanıcılar yukarıdaki resimde gösterilmektedir. Saldırının aşamaları birkaç adımda gerçekleşmektedir:

1- AD ortamında bulunan bilgisayarların DHCPv6 ve DNS sunucu adreslerinin kontrol altına alınması.

2- AD ortamında bulunan bilgisayarlarının WPAD spoofing sonrası HTTP isteklerinin yakalanması.

3- WPAD spoofing sayesinde yakalanan NTLM response değerinin relay edilmesi.

Saldırının Gerçekleştirilmesi

Saldırgan tarafından, DHCPv6 sunucusu spooflanarak saldırgan kendisini DNS sunucusu olarak tanıtmaktadır ve kullanıcının NTLM response değerini elde etmek için WPAD spoofing saldırısı gerçekleştirilmektedir. Gerçekleşen saldırı sonucu “INVOKER-PC” adlı bilgisayarda aktif oturumu olan “invoker” kullanıcısının (domain administrator) NTLM response değeri yakalanmaktadır. Ardından elde edilen NTLM response değeri, “TIDEHUNTER-PC” bilgisayarına relay edilmektedir. Böylelikle saldırgan, “TIDEHUNTER-PC” adlı bilgisayarda invoker kullanıcısının hakları ile oturum elde etmektedir.

Not: Relay edilen kullanıcının relay edilen sistemlerde yetkili olması gerekmektedir.

DHCPv6 & DNS SPOOFING

KALI “ATTACKER-PC” ile “INVOKER-PC” arasında gerçekleşen iletişimi yukarıdaki görsel ile ifade edilmektedir.

NOT: AD ortamındaki her cihaz için yukarıdaki örnek gibi spoofing işlemi gerçekleştirilmektedir.

AD ortamında bulunan bilgisayarların, saldırganı DHCPv6 ve DNS sunucusu olarak tanıması için mitm6 aracı kullanılmaktadır.

“-d” parametresi, reply işlemi uygulanacak DNS sorgularını domain bazında filtrelemek için kullanılmaktadır.

Saldırgan, AD ortamındaki cihazların IPv6 adresini DHCPv6 sunucusundan almasını sağlamak amacıyla RA paketini, AD ortamındaki bütün cihazlara iletmektedir.

Paket içerisinde flag değerleri M:1 O:1 olarak yapılandırılmaktadır.

  • Managed Address Configuration (M) Flag: DHCPv6 sunucularının kullanılması gerektiğini belirtir. ‘1’ olarak ayarlandığında, kurban IPv6 adresini almak için SLAAC yerine Stateful address autoconfiguration kullanılmaktadır.
  • Other Configuration (O) Flag: Başka yapılandırma bilgilerinin (örneğin, DNS sunucu bilgileri) DHCPv6 tarafından alınmasını ayarlanmaktadır. ‘1’ olarak ayarlandığında DNS gibi yapılandırma bilgilerini DHCPv6 sunucusundan almaktadır.

Saldırgan IPv6 adresini, AD ortamında DHCPv6 sunucusu talep eden cihazlara, DHCPv6 sunucusu olarak tanıtmaktadır. Kurbanın saldırganı DHCPv6 sunucusu olarak kabul etmesini sağlayan paketler yukarıda gösterilmiştir.

DHCPv6 spoofing sonucunda kurban, saldırgana ait olan IPv6 adresini DNS olarak tanımlanmaktadır.

NOT: Kurban DNS adres bilgisini DHCPv6 sunucusundan almaktadır.

NTLM RELAY Saldırısı

“mitm6” aracıyla kurbanın DHCP ve DNS sunucusuna spoofing saldırısı gerçekleştirilmektedir. “mitm6” aracı, “ntlmrelayx” aracıyla beraber çalışabilecek şekilde geliştirilmiştir.

“-6” parametresi, IPv4 ve IPv6 adresleri için dinleme işlemini gerçekleştirmektedir.

“-t” parametresi, ntlm relay saldırısının gerçekleştirilecek hedefi belirtmektedir.

“-smb2support”, ntlm relay saldırısının smb protokolü için gerçekleştirileceğini ifade etmektedir.

“-i” parametresi, ntlm relay saldırısının başarılı bir şekilde gerçekleştirilmesinin ardından saldırganın, hedef sistemde komut çalıştırmasını sağlamaktadır.

-wh parametresi, belirtilen adresin hedef bilgisayar için proxy olarak tanımlanmasını sağlamaktadır.

WPAD ile PAC FILE SPOOFING

Kurban(invoker) wpad.dat(PAC) dosyasındaki proxy yapılandırma bilgilerini öğrenmeyi amaçlamaktadır. Fakat öncelikle dosyasının bulunduğu domaini çözümlemesi gerekmektedir. Bundan dolayı isim çözümlemesini gerçekleştirebilmek için saldırgana yani DNS sunucusuna sorgularını iletmektedir. Saldırgan dosyanın bulunduğu adresi kendi IPv4 adresi olduğunu kurbana iletmektedir.

Kurban(invoker), saldırganın belirttiği adresten wpad.dat(PAC) dosyasını talep etmektedir.

Kurban(invoker) sunucudan dönen wpad.dat(PAC) dosyasını kullanarak HTTP için proxy yapılandırmasını gerçekleştirmektedir.

Kurbanın WPAD sunucusundan aldığı PAC dosyasında bulunan javascript kodları ve açıklamasını aşağıda gösterilmektedir.

Kurban aşağıdaki fonksiyonda “url” parametresini, “wpad.dota.local” olarak kullanmaktadır.

function FindProxyForURL(url, host) {

                        // Eğer host, localhost ile eşleşirse HTTP isteklerini proxy kullanmadan doğrudan ilet. 

    if (host === “localhost” || shExpMatch(host, “localhost.*”) || host === “127.0.0.1”) {

        return “DIRECT”;

    }

                        // Eğer host, “attacker.dota.local” domaini ile eşleşirse HTTP isteklerini proxy kullanmadan doğrudan ilet. 

    if (dnsDomainIs(host, “attacker.dota.local”)) {

        return “DIRECT”;

    }

                        // Yukarıdaki koşullar sağlanmaz ise “attacker.dota.local” adresini proxy olarak yapılandır.

    return “PROXY attacker.dota.local”;

}

Kurban(invoker) PAC dosyası ile proxy konfigürasyonunu gerçekleştirmesi sonucunda “attacker.dota.local” adresini proxy olarak yapılandırılmaktadır.

NOT: Bu yapılandırma sadece HTTP istekleri için geçerlidir.

Kurban(invoker) proxy olarak yapılandırdığı ve saldırganın kontrolünde olan proxy adresini(attacker.dota.local) yine DNS sunucusu olan saldırgana sorgulatmaktadır. Saldırgan sorgunun cevabı olarak kendi IPv4 adresini iletir. Böylelikle saldırgan, kendisini proxy olarak tanımlamaktadır.

Kurbanın(invoker) “www.bing.com” adresine yaptığı istek saldırgana iletilmektedir.

Saldırgan kurbanın yaptığı isteğe yanıt olarak, “407 : Proxy Authentication Required” hata kodunu kurbana iletmektedir. Authentication işleminin gerçekleşeceği protokolün NTLM olduğu paket içerisinde belirtilmektedir. Böylelikle kurban NTLM authentication adımlarını saldırgan üzerinden uygulamaktadır.

Kurban(invoker) NTLM Negotiate paketini saldırgana iletmektedir.

Saldırgan, NTLM Challenge paketini yollar. Paket içerisinde challenge değeri ve NTLM authentication işleminin “TIDEHUNTER-PC” adlı bilgisayar için gerçekleşeceğini beliriten bilgiler bulunmaktadır.

Kurban(invoker) NTLM response değerini saldırgana iletmektedir.

Kurbanın(invoker) NTLM response değerini elde eden saldırgan, yanıt olarak kurbana 404 hata kodu mesajını iletmektedir.

Saldırgan, invoker adlı kullanıcıdan aldığı NTLM response değeriyle hedef bilgisayarda(TIDEHUNTER_PC) SMB oturum açma istediğinde bulunmaktadır.

Saldırgan, hedef bilgisayarda(TIDEHUNTER-PC) başarılı bir şekilde SMB oturumunu elde etti. Elde ettiği oturumda “invoker” kullanıcısının haklarıyla komutlar çalıştırabilmektedir.

Saldırgan, hedef bilgisayarda(TIDEHUNTER-PC) SMB oturumu elde etmiştir. ntlmrelayx aracı hedef bilgisayarda komut çalıştırmak için 11001 portunu kullanmaktadır. Netcat ile 11001 portu üzerinden invoker kullanıcısının yetkileri ile hedef bilgisayarda komutlar çalıştırılmaktadır.

Çözüm önerileri

  • IPv6 adresleri ağda kullanılmıyorsa, cihazların IPv6 protokolünü devre dışı bırakılmalıdır.
  • WPAD kullanılmıyorsa WinHttpAutoProxySvc hizmeti, group policy kullanılarak devre dışı bırakılmalıdır.
  • Sistemlerdeki yerel yönetici gruplarına, kullanıcı veya yönetici domain hesaplarını ihtiyaç duyulmaması durumunda eklenmemelidir.
  • Sistemlerdeki kullanıcılara gerektiği kadar yetki verilmelidir. Kullanıcılara gerekmedikçe yönetici yetkisi verilmemelidir.

Yazar: Fırat DOĞAN