DNS Tunneling
Jak działa
1) Napastnik kontroluje domenę i jej autorytatywny serwer nazw. 2) Klient (implant lub skompromitowany agent) koduje ładunek w etykietach subdomen zapytania, np. <dane-base32>.tunnel.example.com. 3) Lokalny/rekurencyjny resolwer, nie mając odpowiedzi w cache, przekazuje zapytanie w górę łańcucha aż do serwera atakującego. 4) Serwer atakującego dekoduje dane z nazwy zapytania i odpowiada rekordem (TXT/NULL/CNAME/A), w którym koduje dane zwrotne lub polecenie. 5) Klient dekoduje odpowiedź i powtarza cykl, uzyskując dwukierunkowy kanał. Kompromis między przepustowością a wykrywalnością reguluje się typem rekordu, długością etykiet (limit 63 znaki/etykieta, 253 znaki/nazwa) oraz częstotliwością zapytań. Warianty obejmują heartbeat/beacon (potwierdzanie infekcji) oraz sygnalizację przez kody odpowiedzi (NXDOMAIN vs NOERROR).
Rozwiązany problem
Z perspektywy napastnika rozwiązuje problem omijania filtrowania ruchu wychodzącego (egress) i zapór: gdy bezpośrednie połączenia HTTP/HTTPS lub TCP są blokowane, DNS niemal zawsze pozostaje otwarty, co pozwala utrzymać komunikację i wyprowadzić dane bez wzbudzania alarmu. Z perspektywy obrony definiuje konkretny wektor zagrożenia wymagający monitorowania i ograniczania.
Komponenty
Komponent po stronie ofiary (implant, skrypt, skompromitowany agent), który dzieli dane na fragmenty, koduje je (Base32/Base64/hex) i osadza w nazwach zapytań kierowanych do kontrolowanej domeny.
Oficjalna
Serwer DNS ustawiony jako autorytatywny dla domeny napastnika. Rekonstruuje dane z nazw zapytań i koduje odpowiedzi w rekordach TXT/NULL/CNAME/A/AAAA, zamykając pętlę C2.
DNS nie dopuszcza dowolnych bajtów w nazwach, więc dane są kodowane (Base32/Base64/hex). Do transportu zwrotnego wybiera się rekordy o dużej pojemności (TXT, NULL) lub A/AAAA/CNAME dla dyskrecji.
Oficjalna
Rekurencyjne resolwery ofiary (firmowe lub publiczne), które w normalnym trybie pracy przekazują niebuforowane zapytania w górę hierarchii DNS, umożliwiając tunel bez bezpośredniego połączenia klient-atakujący.
Implementacja
DNS opiera się głównie na UDP bez retransmisji; duże transfery są wolne, zawodne i podatne na utratę pakietów.
Duża liczba długich, losowo wyglądających zapytań do jednej domeny jest łatwa do wykrycia przez analizę entropii, długości nazw i wolumenu.
Ewolucja
Idea wykorzystania DNS jako kanału transmisji danych pojawia się publicznie na liście dyskusyjnej Bugtraq (Oskar Pearson).
Powstaje NSTX, umożliwiające tunelowanie IP przez DNS i pokazujące praktyczność techniki.
OzymanDNS Dana Kaminsky’ego pozwala na SSH i transfer plików przez DNS; DNScat-P (Tadeusz Pietraszek) rozwija narzędziownię.
iodine dostarcza stabilnego tunelu IPv4 przez DNS z obsługą interfejsów TUN/TAP i wielu typów rekordów.
tcp-over-dns wprowadza kompresję (LZMA) dla zwiększenia efektywnej przepustowości tunelu.
Tunelowanie DNS trafia do realnych kampanii: RAT DNSMessenger oraz BONDUPDATER grupy OilRig używają rekordów A i TXT jako kanału C2.
W miarę upowszechniania autonomicznych agentów z dostępem do narzędzi sieciowych, tunelowanie DNS jest analizowane jako kanał eksfiltracji i C2 omijający filtrowanie ruchu wychodzącego.
Hiperparametry (konfigurowalne osie)
Typ rekordu użyty do transportu zwrotnego; wpływa na pojemność i wykrywalność.
Sposób mapowania bajtów na znaki dozwolone w DNS.
Kompromis przepustowość/dyskrecja: wysoka częstotliwość zwiększa przepływność, ale ułatwia detekcję.
Limity DNS: 63 znaki na etykietę, 253 znaki na pełną nazwę — ograniczają rozmiar fragmentu na zapytanie.
Wymagania sprzętowe
Technika czysto sieciowa/programowa — nie wymaga i nie korzysta ze specjalizowanego sprzętu.