W dzisiejszym artykule pokażemy jak za pomocą protokołu DNS (ang. Domain Name System) i specjalnego narzędzia napisanego w języku Python można przejąć kontrolę nad komputerem Windows oraz zdalnie wykonywać na nim komendy. Na koniec pokażemy scenariusz ataku z wykorzystaniem DNS i opiszemy jak się przed nim chronić.
Złośliwy PowerShell i niemonitorowany DNS – duże zagrożenia dla organizacji
O tym w jaki sposób cyberprzestępcy pozostają w ukryciu podczas atakowania komputerów (tzw. Living off the Land) pisaliśmy bardzo szczegółowo w naszym technicznym artykule “W jaki sposób malware może wykorzystać usługę DNS do pobrania dowolnego kodu”
W celu uruchomienia ładunku na komputerze ofiary cyberprzestępcy najczęściej używają bezplikowych technik ataku oraz komunikują się używając przeróżnych protokołów transmisji (w tym DNS), aby mogli pozostać niewykryci przez tradycyjne oprogramowanie do bezpieczeństwa. W przypadku ataku opisywanego w naszym artykule wykorzystane będą użyte dwie technologie:
- PowerShell do wykonania ładunku na komputerze.
- Protokół DNS do transportu kodu malware i komend poprzez specjalne rekordy TXT.
DNS-Shell
Protokół DNS działa na warstwie aplikacyjnej modelu TCP/IP. Jeśli cyberprzestępca próbowałby wykorzystać lukę RCE (Remote Command Execution) w DNS wówczas serwer DNS stanie się backdoor’em i posłuży do wykonywania poleceń. Narzędzie DNS-Shell jest narzędziem do eksploitacji napisanym w języku Python, które pozwala skompromitować maszynę ofiary (zapewnia do niej zdalny dostęp z serwera za pomocą wiersza linii poleceń).
Budowa skryptu DNS-Shell
DNS-Shell składa się z dwóch części. Pierwsza to serwer, czyli maszyna atakującego oparta jest na Pythonie i może działać na dowolnym systemie operacyjnym pod warunkiem, że jest na nim zainstalowany interpreter skryptów python. Druga to ładunek, który musimy odpalić (uruchomić) na komputerze ofiary. Skrypt serwera po uruchomieniu umożliwia wygenerowanie ładunku (payload), który jest zakodowanym poleceniem w PowerShell. Ładunek jest generowany automatycznie w momencie uruchomienia skryptu na serwerze i używa do komunikacji poleceń nslookup. Polecenia te to nic innego jak wykonywanie komend i wysyłanie zapytań o nowe komunikaty do serwera, na które czeka nasłuchując na porcie 53 UDP (port używany przez DNS). W momencie, gdy na komputerze ofiary zostanie uruchomiony ładunek, po stronie serwera otrzymamy interaktywną powłokę (interpreter linii komend Windows). Po udanym ustanowieniu kanału transmisji ładunek będzie nieustannie odpytywał serwer o polecenia, jeśli wprowadzono nowe polecenie, wykona je i zwróci wynik z powrotem do serwera.
Scenariusz DNS-Shell
Uruchomienie skryptu DNS-Shell jest stosunkowo proste. W naszym teście komputerem (serwerem), na którym odpalimy skrypt będzie Linux Kali. W przypadku wywołania z linii komend skryptu DNS-Shell mamy do wyboru dwa tryby działania: bezpośredni i rekursywny:
- Tryb bezpośredni DNS-Shell komenda: sudo python DNS-Shell.py -l -d [IP Serwera]
- Tryb rekursywny DNS-Shell komenda: sudo python DNS-Shell.py -l -r [Domena]
Po wybraniu odpowiednich opcji uruchomienia skryptu i naciśnięcia klawisza ENTER wygeneruje się nam zakodowany skrypt PowerShell.
Zakodowany skrypt PowerShell musimy przekopiować na komputer ofiary i uruchomić w wierszu poleceń komendą:
Powershell -e <
Poniższy rysunek pokazuje interpretera linii poleceń z komputera Windows 10, który działa od teraz jako backdoor i nasłuchuje komend przychodzących na porcie 53 UDP (DNS) z serwera (Kali Linux).
Dla pokazania całego scenariusza ataku zamieściliśmy poniżej film:
Testy bezpieczeństwa
Jak widać na podstawie powyższego scenariusza udało nam się uruchomić bez problemów skrypt na komputerze z Windows 10 (wersja 1903) i włączoną oraz zaktualizowaną usługą Windows Defender. Dodatkowo skrypt ładunku postanowiliśmy sprawdzić na portalu Virustotal. Wynik przeskanowania przez skanery antywirusowe 0/56 także nas nie zaskoczył i wyjaśnił nam, dlaczego nie zareagował na odpalenie ładunku Windows Defender. W tym przypadku standardowy antywirus nam się nie sprawdzi.
Co możemy zrobić z problemem?
Atak z wykorzystaniem protokołu DNS nie jest najnowszym osiągnieciem, lecz wciąż może stwarzać poważne zagrożenie dla wielu użytkowników oraz firm, które nie zabezpieczają należycie środowiska IT. Przede wszystkim w pierwszej kolejności powinniśmy skupić nasza uwagę na monitorowaniu zapytań i ich ilości do serwera DNS. W szczególności powinny być monitorowane zapytania o rekordy TXT, ponieważ za ich pomocą malware na komputerze komunikuje się z serwerem (komputerem atakującego). Ciekawą opcja jest także zaimplementowanie Sinkhole. Poza zabezpieczeniem DNS powinniśmy także monitorować i zabezpieczyć wywołania Powershell. Pisaliśmy o tym w artykule tutaj.
Jeśli jesteś zainteresowany ochroną systemu za pomocą specjalistycznych narzędzi do bezpieczeństwa zapraszamy do kontaktu z firmą Appeal.