2009-08-03:

Plik drivers\etc\hosts i krok dalej

security:windows:medium:re:cpp
Dwa miesiące temu pisałem o trojanach bankowych, o tym że niektóre zmieniają ustawienia DNS, inne dodają listę domen, używanych przez instytucje finansowe, do pliku c:\windows\system32\drivers\etc\hosts. Oczywiście obie z powyższych czynności kończą się przekierowaniem nieświadomego użytkownika na stronę phishingową (i niestety również często utratą pewnej ilości pieniędzy).

Miesiąc temu, kontynuując temat pliku hosts, zaproponowałem żeby odebrać prawa do zapisu do pliku hosts wszystkim userom (warto rzucić okiem w komentarze). Oczywiście, malware działający z prawami admina może sobie te prawa przywrócić, ale obecnie żaden malware tego nie robi - więc wyprzedzilibyśmy twórców malware'u o drobny krok, i mieli krótką chwilę spokoju od kilku rodzin bankerów. Oczywiście kolejnym krokiem ze strony malware-writerów byłoby przywracanie zapisu do pliku, wtedy sysadmini może zaczęli by "audytować" ten plik (chodzi mi oczywiście o logowanie dostępu do pliku, i np. uruchamianie odpowiednich alertów/procedur gdyby taki dostęp został wykryty), a twórcy malware'u by to audytowanie wyłączali, i tak dalej i tak dalej.

W przypadku tej serii bitew tak na prawdę sprawa rozbija się o plik c:\windows\system32\drivers\etc\hosts. A gdyby tak zadać inne pytanie: co ten plik odczytuje?

Idąc tą drogą docieramy do modułu DNSAPI.DLL (szukając po stringach), oraz serwisu Dnscache (śledząc dostęp do pliku).

Powstaje kolejne pytanie: a co się stanie gdy w pliku DNSAPI.DLL podmienimy ciąg \drivers\etc\hosts na coś innego?
Odpowiedź brzmi: DNSAPI.DLL zacznie czytać z innego pliku. Plik \drivers\etc\hosts przestanie być używany, a lista sajtów phishingowych będzie mogła być dopisana do zupełnie innego pliku.

Co z tego wynika? To że nikt obecnie nie monitoruje tego "innego" pliku. Ba, on może nawet nie istnieje jeszcze (malware go sobie utworzy).

"Hah! Ale można monitorować dostęp do pliku DNSAPI.DLL"

Tak jest, i to jest kolejny naturalny krok który zostałby wykonany. Jaki będzie kolejny krok strony przeciwnej? Oczywiście zostawienie pliku DNSAPI.DLL w spokoju, i podmiana stringu ze ścieżką w pamięci serwisu Dnscache. Ilu sysadminów sprawdza ten string w pamięci serwisu? Ano właśnie...

Oczywiście naturalnym odruchem jest odebranie praw do dostępu do serwisu Dnscache wszystkim oprócz właściciela (czyli również adminowi te prawa są odebrane), ale jak się okazuje, tak już jest "by default" na systemach Windows XP (i wyższych jak mniemam).

Natomiast jeżeli malware będzie odpalony z admina, to to i tak nic nie da, ponieważ będzie mógł sobie przywrócić prawa dostępu do procesu wywołując kilka prostych API.

Które rodziny malware'u obecnie korzystają z tej metody? Na szczęście żadne mi znane. Mamy więc trochę czasu aby ustawić 'Audytowanie' dostępu do Dnscache na systemach które obsługujemy, lub dorzucić taką funkcjonalność w produktach podnoszących bezpieczeństwo które udostępniamy.

Czy jest jakieś dobre rozwiązanie tego problemu? O dziwo TAK - NIGDY NIE UŻYWAJ KONTA ADMINA DO NORMALNEJ PRACY! Konto użytkownika wystarcza. Malware uruchomiony z konta użytkownika ani nie ma dostępu do pliku hosts, ani do serwisu Dnscache. Ufam że wszyscy rozsądni użytkownicy tak właśnie robią, a na nierozsądnych i tak wystarczy dopisanie IPeków do drivers\etc\hosts.

Na koniec mała demonstracja:



Oraz kod Proof of Concept (tak tak, publikuje... to jest zlepek prostych funkcji WinAPI, żadnej magii tu nie ma, więc jeżeli ktoś myśli że niepublikowanie tego powstrzyma kogoś od wdrożenia powyższego pomysłu w życie, to jest niestety w błędzie, a wypadałoby żeby sysadmini (którzy nie zawsze są programistami) mieli okazję przetestować wypracowane rozwiązania):
hack_a_hosts.cpp (8KB, CPP, source, testowany na XP)
Uwaga: powyższy PoC ustawia prawa dostępu do Dnscache na full access dla user'a z którego jest uruchamiany, i nie cofa praw do oryginalnych (po resecie powinno się "samo" przywrócić).

Komentarze mile widziane ;>

Comments:

2009-08-03 11:45:08 = faramir
{
No dobrze, zmiana pamięci w Dnscache, ale po restarcie znowu będzie driversetchosts, więc jeśli twórca malware'u chce mieć zmienioną pamięć, to musi jakoś zmusić Dnscache po restarcie by odczytywał inną ścieżkę, więc jakiś inny, osobny program startowy... a to też można monitorować.
}
2009-08-03 11:51:44 = Jurgi
{
A ja jestem ciekaw, co sądzisz o głośnym ostatnio podsłuchiwaniu klawiatur PS/2 przez gniazdko zasilania? ;)
}
2009-08-03 12:20:56 = Gynvael Coldwind
{
@faramir
Yep, masz rację, trzeba po restarcie ponownie podmienić string. Natomiast przeżywalność restartu to zupełnie inna sprawa, i jest masa metod żeby to zrobić, nie wszystkie monitorowane ;>

@Jurgi
Hah, wg mnie to świetna sprawa. Co prawda nie sądzę by po za środowiskiem laboratoryjnym udało się to z wysoką skutecznością zrobić. Niemniej jednak pomysł mi się ultra podoba ;>
}
2009-08-04 19:03:06 = wampir
{
Po głowie mi chodzi, że jakieś malware robiło sztuczkę częściowo podobną po to, by przeżywać reboot właśnie. Zmiana w bibliotece była jednak na dysku, nie w pamięci (musiała być trwała), a polegała na zmianie nazwy klucza, z którego odczytywane są informacje o programach do uruchomienia. Niestety, nie jestem w tej chwili znaleźć tego posta :(

I jeszcze mam luźne skojarzenie z http://blog.didierstevens.com/2009/07/06/patching-pdf-readers-to-support-hidden-embedded-files/ :)
}
2009-08-05 08:51:33 = m.
{
Byc moze chodzilo Ci o to http://gynvael.coldwind.pl/?id=97 ?
}
2009-08-05 14:05:50 = wampir
{
Tak, o tego szkodnika, przy czym czytałem to na jakimś innym blogu forensic/malware :)
}
2009-08-07 15:26:36 = neonek
{
Zaczynam się bać, co reverserzy jeszcze znajdą w Windowsie. Czekam na następne ciekawe posty co w złośliwym oprogramowaniu piszczy i o.. osiągnięciach w dziedzinie upgrade'owania CPC. BTW Wie ktoś co się dzieje ze stroną uw-team.org ?
}
2009-08-07 16:20:17 = Gynvael Coldwind
{
@wampir
Podążając za kolejnymi skojarzeniami, mi z kolei to z "czytaczami" PDFów skojarzyło się z odblokowywaniem pewnych "serverowych" feature'ów w Windows XP: http://www.vttoth.com/mirror.htm ;>

@neonek
Do CPC wrócę jak tylko uda mi się uruchomić jakiś układ z AVR ;>
Co do uw-team.org, to są drobne problemy z serwerem w serwerowni (hardware). Powinno być za kilka dni online. Dla ciekawskich: rzućcie okiem na blip'a unknowa ;>
}
2009-08-07 20:38:14 = neonek
{
Cieszę się, że uw-team nie padło na dobre (jak to z różnymi sajtami bywa). Mój dziadek robił sobie raid (sprzętowy NVidia) żeby ważne dokumenty nie przepadły. Ale sterowniki jakoś się wykrzaczały. Nie wiedziałem, że software raid to taka prosta rzecz.

Co do AVR to też mam zamiar sobie coś sklecić, ale mam jeden problem. Nie wiem jaki układ wybrać (znaczy się wiem chcę 1280) tylko nie wiem jaki moduł uruchomieniowy (DIP) jak zwał, tak zwał wybrać. Może jakaś propozycja ?
}
2009-08-09 13:13:02 = Zombiak
{
Nie uwierzycie, co przed chwilą znalazłem :P http://screenup.pl/?l=DJ1T2D0 Żeby było śmieszniej to obok jest opisany fuzzing mapek stacrafta ;>
To w sumie powinienem napisać pod postem o RAND_MAX, ale tam już chyba nikt nie zagląda ;)
}

Add a comment:

Nick:
URL (optional):
Math captcha: 3 ∗ 5 + 3 =