Zatruwanie DNS (), także DNS spoofing – atak polegający na wprowadzeniu do pamięci podręcznej serwera DNS fałszywego odwzorowania nazwy domeny na adres IP. Serwer przechowuje taki wpis przez czas określony w rekordzie i podaje go wszystkim korzystającym z niego klientom, którzy trafiają wówczas pod adres wskazany przez napastnika, mimo że w przeglądarce widnieje prawidłowa nazwa. Podstawienie fałszywej odpowiedzi możliwe jest także w sieci lokalnej ofiary, m.in. przy użyciu ARP spoofingu.

Atak wymierzony jest w sam mechanizm rozwiązywania nazw, w odróżnieniu od DNS rebindingu, w którym napastnik posługuje się własną domeną i udziela na nią prawdziwych odpowiedzi.

Mechanizm

Serwery DNS zapamiętują w pamięci podręcznej raz uzyskane odwzorowania, aby nie powtarzać zapytań do kolejnych serwerów przy każdym żądaniu. Gdy do takiej pamięci trafi fałszywa odpowiedź, serwer zostaje zatruty, a błędny adres rozprzestrzenia się na wszystkich jego użytkowników – zarówno korzystających z niego bezpośrednio, jak i pośrednio, poprzez łańcuch zapytań.

Zapytania DNS przesyłane są zwykle protokołem UDP, który nie potwierdza tożsamości nadawcy. Serwer pytający przyjmuje pierwszą odpowiedź zgodną z oczekiwanymi parametrami, dlatego napastnik znajdujący się poza ścieżką komunikacji może próbować podstawić własną odpowiedź, zanim nadejdzie prawdziwa.

Do 2008 roku jedynym powszechnie stosowanym zabezpieczeniem był szesnastobitowy identyfikator zapytania (transaction ID, TXID), który napastnik musiał odgadnąć. Daje to 65 536 możliwości – liczbę na tyle małą, że przy odpowiedniej liczbie prób atak stawał się wykonalny.

Zatruty wpis wykorzystuje się m.in. do przekierowania użytkowników na stronę kontrolowaną przez napastnika, służącą do wyłudzenia danych uwierzytelniających lub rozpowszechniania złośliwego oprogramowania.

Atak Kaminsky'ego Wcześniejsze próby zatruwania pamięci podręcznej ograniczał fakt, że po trafieniu prawdziwej odpowiedzi do pamięci serwer przez czas określony w rekordzie nie zadawał kolejnych pytań o tę nazwę – napastnik musiał więc czekać.

W 2008 roku Dan Kaminsky przedstawił technikę omijającą to ograniczenie. Zamiast pytać o istniejącą nazwę, napastnik doprowadza do zapytań o losowe, nieistniejące nazwy w atakowanej domenie. Serwer nigdy ich nie widział, więc za każdym razem wysyła nowe zapytanie z nowym identyfikatorem, a napastnik może ponawiać próby bez ograniczeń. Sfałszowana odpowiedź nie musi przy tym dotyczyć samej nieistniejącej nazwy – zawiera rekord wskazujący serwer nazw właściwy dla całej domeny, co pozwala przejąć kontrolę nad odwzorowaniem wszystkich należących do niej nazw.

Zapobieganie Podstawowym zaleceniem jest ograniczenie zaufania wobec danych przesyłanych przez inne serwery oraz ignorowanie rekordów niezwiązanych bezpośrednio z wysłanym zapytaniem. Popularny serwer BIND ma tę kontrolę zaimplementowaną od wersji 9.5.0-P1.

Odpowiedzią na atak Kaminsky'ego było losowanie portu źródłowego zapytań, opisane w dokumencie RFC 5452 z 2009 roku. Wcześniej serwery wysyłały zapytania z przewidywalnego portu, przez co napastnik musiał odgadnąć wyłącznie identyfikator; losowanie portu zwiększa liczbę kombinacji o kilka rzędów wielkości. Dokument zaleca ponadto losowanie adresu źródłowego oraz wybieranego serwera autorytatywnego. Uzupełnieniem jest ograniczanie liczby jednoczesnych zapytań o tę samą nazwę, co utrudnia atak oparty na paradoksie dnia urodzin. W 2008 roku zaproponowano również losowanie wielkości liter w nazwie (kodowanie 0x20), wykorzystujące to, że serwery odpowiadające przepisują nazwę z zapytania, mimo że system nazw nie rozróżnia wielkości liter.

Zabezpieczenia te podnoszą koszt ataku, lecz go nie eliminują. Losowanie portu bywa niweczone przez urządzenia wykonujące translację adresów sieciowych, które przy przekazywaniu ruchu zmieniają numery portów wychodzących, a kolejne prace wykazały możliwość ustalenia portu kanałami bocznymi. Najgłośniejszą z nich jest przedstawiony w 2020 roku atak SAD DNS (), wykorzystujący ograniczanie liczby komunikatów ICMP przez systemy operacyjne do ustalenia użytego portu. Podatność otrzymała identyfikator CVE-2020-25705 i dotyczyła m.in. Linuxa, Windows, macOS i FreeBSD; poprawka dla Linuksa polegała na losowaniu tego ograniczenia.

Rozwiązaniem działającym niezależnie od entropii zapytania jest DNSSEC, w którym rekordy opatrzone są podpisem cyfrowym – sfałszowana odpowiedź nie przejdzie weryfikacji, o ile strefa jest podpisana, a serwer pytający podpisy sprawdza. Strefę główną systemu nazw podpisano w 2010 roku.

Komunikację między użytkownikiem, a serwerem nazw zabezpieczają natomiast DNS over HTTPS (DoH) i DNS over TLS (DoT), które szyfrują zapytania i uniemożliwiają podstawienie odpowiedzi w sieci lokalnej. Zarazem utrudniają one wykrywanie złośliwej komunikacji: filtry analizujące ruch DNS przestają widzieć zapytania, także te generowane przez złośliwe oprogramowanie.

Zobacz też DNS rebinding DNSSEC

Przypisy

Kategoria:Cyberataki Kategoria:Domain Name System