Tag: wpad

Przejęcie domen .pl związanych z atakiem BadWPAD

Data publikacji: 14/06/2019, Paweł Srokosz

Pod koniec maja 2019 roku CERT Polska przejął domenę wpad.pl, a także zarejestrował na rzecz NASK zbiór domen regionalnych i funkcjonalnych wpad.*.pl. Przejęcie domen związane było z przeciwdziałaniem atakom BadWPAD, wykorzystujących błędną konfigurację sufiksów DNS na podatnych maszynach. Umożliwiało to potencjalnym atakującym na przekierowanie dowolnych żądań HTTP poprzez podstawienie własnych reguł konfiguracji proxy w postaci pliku PAC, pobieranego automatycznie przez mechanizm Web Proxy Auto-Discovery Protocol (WPAD).

    Czym jest Web Proxy Auto-Discovery Protocol?

    Web Proxy Auto-Discovery Protocol (WPAD) jest mechanizmem, który pozwala na automatyczną konfigurację hostów w danej sieci pod kątem wykorzystywanego serwera proxy do realizowania zapytań. Mechanizm jest powszechnie wspierany przez większość popularnych systemów operacyjnych i przeglądarek (m.in. Internet Explorer, Safari, Google Chrome, Firefox). Konfiguracja proxy (PAC) dostarczana jest przez serwer HTTP obecny w sieci, w postaci pliku /wpad.dat.

    Adres URL wskazujący na plik pozyskiwany jest przez komputery klienckie na kilka sposobów:

    • odpytywany jest serwer DHCP za pośrednictwem zapytania DHCPINFORM 252 (Proxy Autodiscovery), w odpowiedzi wysyłany jest adres URL pliku PAC,
    • w razie niepowodzenia: odpytywany jest lokalny DNS o rekord A dla nazwy „wpad” z uwzględnieniem sufiksów DNS.

    W przypadku, gdy adresu nie uda się pozyskać przy użyciu wyżej wymienionych metod, wykorzystywane są inne protokoły takie jak np. NetBIOS. W jedynej dokumentacji protokołu, którą można uznać za oficjalną (Internet Draft, wygasły w grudniu 1999 roku), powyższe protokoły są wymienione jako podstawowe, co znajduje odzwierciedlenie w różnych implementacjach WPAD.

    Plik PAC (Proxy Auto-Config) jest skryptem JavaScript, zawierającym funkcję FindProxyForURL(url, host). W momencie, gdy przeglądarka wchodzi pod dany adres URL, funkcja odpytywana jest o adres serwera proxy, który powinien obsłużyć dane zapytanie:

    function FindProxyForURL(url, host) {
        // If the protocol or URL matches, send direct.
        if (url.substring(0, 4)=="ftp:" ||
            shExpMatch(url, "http://abcdomain.com/folder/*"))
            return "DIRECT";
    
        // If the IP address of the local machine is within a defined
        // subnet, send to a specific proxy.
        if (isInNet(myIpAddress(), "10.10.5.0", "255.255.255.0"))
            return "PROXY 1.2.3.4:8080";
    
        // DEFAULT RULE: All other traffic, use below proxies, in fail-over order.
        return "PROXY 4.5.6.7:8080; PROXY 7.8.9.10:8080";
    }
    

    W zależności od dopasowania adresu URL do wzorca zapytanie może być wykonane bezpośrednio lub za pośrednictwem wybranego serwera proxy. Skrypt może również zwrócić kilka serwerów zapasowych w przypadku niedostępności pierwszego z nich. Wykorzystanie języka skryptowego daje dużą dowolność w definiowaniu reguł. Oprócz wyrażeń regularnych wiele implementacji udostępnia również funkcje zwracające lokalny adres IP (myIpAddress), czy pozwalające sprawdzić przynależność adresu do wskazanej podsieci (isInNet). Mechanizm jest domyślnie włączony w systemie operacyjnym Windows również w najnowszych wydaniach systemu, wliczając w to Windows 10.

    20 lat BadWPAD!

    Mechanizm WPAD został po raz pierwszy wprowadzony w przeglądarce Internet Explorer 5.0 w 1999 roku. Już od pierwszych chwil funkcjonowania mechanizmu Microsoft dostrzegł podstawowy problem związany z BadWPAD (MS99-054, CVE-1999-0858), jakim jest wykorzystanie serwera DNS do odnajdowania konfiguracji w sieci, co niesie za sobą ryzyko odpytania publicznych serwerów DNS.

    Problem dostrzeżony przez Microsoft polegał na wadliwym algorytmie rekursywnego przeszukiwania domeny, do której należał komputer. Przykładowo, jeśli klient należał do domeny ad.clients.examplecorpo.com, przeglądarka Internet Explorer, szukając serwera WPAD, odcinała kolejne poziomy subdomen, odpytując następujące adresy:

    • wpad.ad.clients.examplecorpo.com
    • wpad.clients.examplecorpo.com
    • wpad.examplecorpo.com

    Przeszukiwanie kończyło się po zejściu do drugiego poziomu (examplecorpo.com). Często zdarzało się jednak, że drugi poziom domeny (2LD) nie był pod kontrolą danej firmy i stanowił domenę funkcjonalną, tak jak w przypadku domeny clients.examplecorpo.com.pl. Wtedy Internet Explorer nadal posługując się tym samym algorytmem, odpytywał DNS o domeny:

    • wpad.clients.examplecorpo.com.pl
    • wpad.examplecorpo.com.pl
    • wpad.com.pl

    Oznacza to, że przy tak skonfigurowanej domenie i braku serwera WPAD w Intranecie mechanizm WPAD odpytywał adres internetowy http://wpad.com.pl/wpad.dat. Po zarejestrowaniu publicznej domeny wpad.com.pl atakujący mógł przekierować zapytania o plik PAC na zewnętrzny serwer, znajdujący się poza siecią korporacji. Tak podstawiony serwer WPAD mógł dostarczać własną konfigurację i tym samym przekierować ruch na własny serwer pośredniczący, otwierając tym samym furtkę do całej gamy ataków klasy Man-in-the-Middle. W opisie podatności z 1999 roku technika została określona mianem WPAD Spoofingu.

    Do biuletynu bezpieczeństwa MS99-054 dołączony był FAQ, który objaśnia szczegóły znalezionej wówczas podatności – można go odnaleźć w zasobach archive.org. Z opisu można wywnioskować, że w wydaniu IE 5.01 firma Microsoft ograniczyła w pewien sposób odpytywanie publicznych serwerów DNS. Nie zdradzono jednak żadnych szczegółów technicznych na temat naniesionej poprawki.

    How does IE 5.01 eliminate the vulnerability?
    
    IE 5.01 has a more robust search algorithm that does not blindly search third-level domains. 
    Instead, it searches third-level domains only when appropriate.
    

    Mimo problemów dostrzeżonych już na samym początku, mechanizm WPAD upowszechnił się jako standard. Już w 2000 roku pojawiły się pierwsze pomysły wprowadzenia wsparcia dla WPAD w przeglądarce Mozilla.

    Mechanizm w 1999 roku nie został jednak naprawiony całkowicie. Błędy odkryte w pierwszej implementacji niedługo później powróciły, tym razem pod postacią mechanizmu DNS Devolution.

    Błędna konfiguracja sufiksów DNS, czyli jak działa DNS Devolution

    Jednym z elementów systemu DNS jest lista przeszukiwania sufiksów DNS. Lista ta stosowana jest przy rozwiązywaniu nazw o pojedynczej etykiecie (ang. single-label domain), co pozwala uzyskać zestaw określonych nazw kwalifikowanych (FQDN). Mechanizm WPAD w nowszych wersjach systemu Windows odpytywał jednoetykietową nazwę wpad.

    Na systemach Windows listę sufiksów można podejrzeć poleceniem ipconfig /all:

    Lista przedstawiona na obrazku zawiera cztery sufiksy globalne i jeden dla konkretnego połączenia. Oznacza to, że przy próbie rozwiązania nazwy wpad lokalny DNS zostanie odpytany o następujące FQDN:

    • wpad.workdns.um.warszawa.pl.
    • wpad.cert.pl.
    • wpad.um.warszawa.pl.
    • wpad.warszawa.pl.

    System Windows pozwala na ustawienie listy przeszukiwania na kilka sposobów. Najczęściej spotykaną jest lista dla konkretnego połączenia (ang. connection specific DNS suffix). która zazwyczaj pobierana jest z DHCP i wykorzystywana wyłącznie dla połączeń za pośrednictwem konkretnego interfejsu sieciowego.

    Ustawienia sufiksów DNS można odnaleźć w systemie, wchodząc we właściwości interfejsu sieciowego. Po wybraniu składnika Protokół internetowy (TCP/IP) i wejściu we Właściwości ukaże się okno pozwalające skonfigurować ustawienia sieciowe dla interfejsu. Wybierając Zaawansowane i przechodząc do zakładki DNS, możemy podejrzeć ustawienia sufiksów DNS.

    Kwalifikowana nazwa domenowa może również zostać ustawiona dla komputera. W takim wypadku aktywowany jest mechanizm DNS Devolution, który generuje listę sufiksów, opierając się na tzw. podstawowym sufiksie DNS. Włączany jest on automatycznie, co warunkowane jest m.in. aktywnym checkboxem Dołącz sufiksy nadrzędne podstawowego sufiksu DNS. Opcja ta jest domyślnie włączona we wszystkich systemach Windows.

    Szybko okazało się, że Microsoft powtórzył błąd z przeszłości, rozwijając domyślnie sufiksy nadrzędne do drugiego poziomu domeny. Oznacza to, że ponownie dla nazwy komputera john.clients.examplecorpo.com.pl i braku obecności serwera WPAD na kolejnych poziomach domeny odpytywany był adres wpad.com.pl. Problem został ponownie dostrzeżony w 2009 roku, czego następstwem było wydanie poprawki KB957579 i związanymi z nią zaleceniami bezpieczeństwa. Odnaleziona podatność dotyczyła wszystkich systemów starszych niż Windows 7.

    Zgodnie z opisem poprawka wprowadzała możliwość ustawienia maksymalnego poziomu, do którego rozwiązywane są domeny (Devolution Level), a także automatyczne określanie tego poziomu m.in. na podstawie ustawień FRD (Forest Root Domain). Parametry DNS Devolution można ustawić za pośrednictwem Rejestru Windows i Zasad grupy (GPO).

    Poniżej zaprezentowano listę sufiksów uzyskaną na podstawie nazwy domenowej komputera frexp-1d21fea3e.workdns.um.warszawa.pl w systemie Windows XP (bez zainstalowanych poprawek):

    i po instalacji KB957579:

    BadWPAD obecnie

    Mechanizm WPAD stał się standardem, w wielu implementacjach dziedzicząc problemy związane z rozwiązywaniem sufiksów DNS. W 2016 roku na konferencji BlackHat Maxim Goncharov opublikował wyniki eksperymentów, które ukazały skalę problemu. 6% z uzyskanych zapytań WPAD kierowanych na publiczne serwery DNS pochodziło z Polski. W tym samym roku US-CERT opublikował alert TA16-144A – WPAD Name Collision Vulnerability, w którym ostrzegał przed możliwością wycieku zapytań związanych z WPAD do publicznych serwerów DNS m.in. w związku z wprowadzeniem gTLD (ang. generic top-level domain).

    W 2017 roku Google Project Zero ogłosił podatność o nazwie aPAColypse. Exploit wykorzystywał zestaw kilku podatności wbudowanego w system Windows silnika JScript, który wykorzystywany jest do wykonywania plików PAC, co prowadzi do zdalnego wykonania kodu z uprawnieniami SYSTEM.

    W 2019 roku Adam Ziaja opublikował serię artykułów na temat wykorzystania BadWPAD w domenie .pl. Zauważył, że od 2007 roku prywatna firma Q R Media Sp. z o.o. posiada zarejestrowany zbiór domen, w skład których wchodzą m.in. wpad.pl, wpad.com.pl, wpad.edu.pl itp. Serwer wskazywany przez domeny udostępniał plik wpad.dat, który przekierowywał wybrane adresy URL na serwer proxy 144.76.184.43:80.

    // WpadBlock.com project
    // Testing regular expressions
    function FindProxyForURL(url, host) {
    	if( ( shExpMatch(url, "*//s?clic??a*pres?.c*/e/*") && !shExpMatch(url, "*aQNVZ?AU*") ) || 
                ( shExpMatch(url, "*:/?e?or?.?w/*") && !shExpMatch(url, "*OZ?2?*") ) || 
                ( shExpMatch(url, "*t*p:*sh*u*.t*te*eg*st*r") && !shExpMatch(url, "*new*") && !shExpMatch(url, "*ac*ru*s*") ) || 
                ( shExpMatch(url, "h?t*/*w.b?*k?ng.c*m/*aid*") && !shExpMatch(url, "*3646?2*") && 
                  !shExpMatch(url, "*/aclk*") && !shExpMatch(url, "*noredir*") && !shExpMatch(url, "*gclid*") ) || 
                ( ( shExpMatch(url, "*ttp:/*w?pl*s5?0.*/") || 
                    shExpMatch(url, "ht*w?pl*s5?0.*/*id=*") ) ) || 
                ( shExpMatch(url, "*w?ce?*o.p?/C*ent*js*bun*e/b*/js*") ) || 
                ( shExpMatch(url, "*t*ff?l*.be*-*-ho*.c*/p*ss*/*.as*bta*a_*") && !shExpMatch(url, "*a_7?59?b*") ) || 
                ( shExpMatch(url, "*.?rs?c?m/??/") || shExpMatch(url, "*.?rs?d??we?3/") || shExpMatch(url, "*.?rs?c?m/we?3/") || 
                ( shExpMatch(url, "*.hr??*hot*?do*off*") && !shExpMatch(url, "*10?35?2?39*")) ) || 
                ( shExpMatch(url, "*tt*/g?.s*le?m*i?.p?/*_*=*") && !shExpMatch(url, "*d=1?90*") ) || 
                ( shExpMatch(url, "*p://af?.?pti*ar?.c??/*") && !shExpMatch(url, "*8?67*") ) || 
                ( shExpMatch(url, "*p:*/w*.co?p*ial?a*ann?r*p*ef*") && !shExpMatch(url, "*75?6*6*") ) ) 
                return "PROXY 144.76.184.43:80";
    	return "DIRECT";
    }
    

    Plik PAC na samym początku posiadał komentarz oznajmujący, że domeny zostały zarejestrowane w związku z projektem WPADblock.com. Adam Ziaja dokonał analizy zawartości pliku wpad.dat w poszczególnych latach na podstawie zaindeksowanej zawartości w archive.org. Okazało się, że reguły zawarte w pliku PAC przekierowywały linki z popularnych programów afiliacyjnych. Samo proxy przekierowywało żądania na link: hxxps://www.booking.com/index.html?aid=1300873.

    Właściciel domen wpad.*.pl dobrowolnie przekazał je pod kontrolę NASK, zaś pozostałe powiązane domeny zostały bezterminowo zarejestrowane na rzecz NASK. Umożliwiło to nam przekierowanie ich na sinkhole i ocenę skali zagrożenia. Domena wpad.pl obecnie nie dostarcza pliku PAC, lecz zwraca tekstową odpowiedź BADWPAD SINKHOLED BY CERT.PL.

    BadWPAD sinkholing – skala zagrożenia

    W okresie 15.05-22.05 sinkhole CERT Polska zarejestrował 6,5 mln żądań HTTP z ok. 40 tys. unikalnych adresów IP. Poniższa tabela przedstawia dziesięć systemów autonomicznych, dla których zebrano najwięcej adresów. Warto dodać, że odnotowana liczba adresów IP nie przekłada się bezpośrednio na liczbę źle skonfigurowanych hostów, ponieważ znaczna część adresów jest NAT-owana lub należy do dynamicznie przydzielanej puli.

    ASN Zarejestrowany jako Unikalne adresy IP
    6830 UPC 16148
    12741 Netia 10956
    21021 Multimedia 6544
    5617 Orange 1244
    35191 ASTA-NET S.A. 734
    35378 Sat Film Sp. z o.o. 580
    43118 East & West Sp. z o.o. 425
    30838 Jerzy Krempa „Telpol” PPMUE 402
    44061 Jacek Mruk „SAT-MONT-SERVICE Sp. J.” 363
    30923 Młodzieżowa Spółdzielnia Mieszkaniowa 279

    Poniżej przedstawiono udział poszczególnych wartości nagłówka Host.

    Wartość nagłówka Host Unikalne adresy IP
    wpad.pl 27950
    wpad 27524
    148.81.111.104 21432
    wpad.com.pl 1166
    wpad.edu.pl 724
    wpad.malopolska.pl 64
    wpad.waw.pl 21
    wpad.net.pl 19
    wpad.bydgoszcz.pl 11
    wpad.localdomain 9

    Adres IP 148.81.111.104 jest adresem na który wskazują domeny wpad.*.pl czyli sinkhole CERT Polska. W zależności od implementacji: w nagłówku Host umieszczony jest rozwiązany adres IP, ciąg „wpad” lub pełna nazwa domenowa odpytywanego serwera WPAD. Wśród nazw domenowych widać jednak wyraźną przewagę zapytań kierowanych do wpad.pl. Jest to zaskakujące, biorąc pod uwagę, że już pierwsza implementacja WPAD z 1999 roku odpytywała maksymalnie drugi poziom domeny. W ramach przeprowadzonych eksperymentów przez zespół CERT Polska odpytanie wpad.pl przez WPAD udało się osiągnąć tylko w przypadku, gdy domena .pl była podana bezpośrednio na liście sufiksów DNS.

    Na większości urządzeń odpytujących domeny WPAD zainstalowany jest system operacyjny Windows, jednak część obserwowanych zapytań pochodzi również z systemu MacOS, na którym WPAD jest domyślnie wyłączony. System operacyjny można rozpoznać według wartości nagłówka User-Agent (np. charakterystyczny ciąg „CFNetwork”, który można odnaleźć w zapytaniach pochodzących z usług opartych na tym API).

    System operacyjny Unikalne adresy IP
    Windows

    35783
    MacOS 552
    nie sklasyfikowano 3255

    Obserwacje pokrywają się w dużej mierze ze statystykami zawartymi w artykule Adama Ziaji opartymi na logach z serwera „projektu WPADblock”.

    Czy jestem zagrożony?

    Połączenia do domen, które zostały sinholowane są na bieżąco zapisywane i udostępniane dla administratorów sieci za pośrednictwem platformy n6. Aby samodzielnie sprawdzić, czy mechanizm WPAD w systemie Windows jest włączony, należy wcisnąć kombinację Win+R, wpisać inetcpl.cpl i wcisnąć Enter, wchodząc tym samym w Opcje internetowe.

    Następnie należy przejść do zakładki Połączenia i wybrać przycisk Ustawienia sieci LAN. Jeśli opcja Automatycznie wykryj ustawienia jest zaznaczona, oznacza to, że mechanizm WPAD jest aktywny w systemie. Na komputerach przenośnych i domowych zalecane jest, aby opcja była wyłączona. Pozwala to zminimalizować ryzyko ataku typu Man-in-the-middle po podłączeniu komputera do potencjalnie niezaufanej sieci.

    Jeśli zaznaczona jest opcja Użyj skryptu automatycznej konfiguracji, a w polu Adres podany jest nieznany adres URL, może być to spowodowane infekcją złośliwym oprogramowaniem. W takiej sytuacji warto zgłosić incydent do CERT Polska, załączając podejrzany adres.

    Warto również zweryfikować listę sufiksów DNS, szczególną uwagę zwracając na sufiksy składające się wyłącznie z ciągu pl, com.pl, org.pl itp. Listę można zweryfikować wciskając Win+R, wpisując cmd i wciskając Enter. Następnie w Wierszu polecenia należy wprowadzić komendę ipconfig /all.

    Ustawienia WPAD można również zweryfikować, posługując się programem AUTOPROX (link do pobrania), który został załączony do jednego z artykułów na stronie Microsoft. Źródła programu znaleźć można w repozytorium na serwisie Github.

    Po wywołaniu programu poprzez podanie w Wierszu polecenia komendy autoprox -s program wywoła metodę DetectAutoProxyUrl z biblioteki WinInet i spróbuje pobrać plik wpad.dat. Jeżeli wywołanie programu nie zakończy się błędem i w oknie Wiersza polecenia pojawi się adres URL, mechanizm WPAD jest włączony i wykorzystuje dany serwer do pobrania konfiguracji.

    W razie zauważonych nieprawidłowości należy niezwłocznie skontaktować się ze swoim administratorem, a także zgłosić incydent do CERT Polska. Administratorom polecamy również zapoznanie się z zaleceniami Microsoft dotyczącymi ustawień DNS Devolution.