Hlavní navigace

Reverzní DNS prozradí použité IPv6 adresy

Sdílet

Ondřej Caletka 30. 3. 2012

Jednou z výhod protokolu IPv6 je obrovský adresní prostor, který je velmi řídce obsazen funkčními adresami. To by mělo znesnadňovat útoky naslepo, kdy útočník zkouší jednu adresu po druhé, než objeví nějaký zranitelný systém. Takové útoky jsou běžné v IPv4, kde je naopak v době vyčerpání adresní prostor velmi využitý a téměř každá adresa je nějakému zařízení přidělena.

Existuje však spousta postranních kanálů, prostřednictvím kterých dokáže útočník zjistit, které IPv6 adresy se v dané síti používají a které ne. Na jeden zajímavý nedávno přišel Peter van Dijk a publikoval na svém blogu. Využívá se zde skutečnosti, že reverzní záznamy pro IPv6 adresy se skládají po jednotlivých šestnáctkových číslicích. Při dotazu na neúplnou reverzní doménu se stavový kód některých DNS serverů liší v závislosti na tom, zda doména vůbec neexistuje ( NXDOMAIN), nebo jen neobsahuje žádná data ( NOERROR). Po vyzkoušení všech šestnácti možností na místě jedné číslice může pokračovat hledání jen v subdoménách, které existují. Autor vytvořil demonstrační nástroj, který dokáže tímto způsobem odhalit revezní záznamy v daném prefixu. Na běžné podsíti s prefixem /64 (a tedy osmnácti triliony možných adres) odhalí použitých 30 adres pomocí pouhých 5500 DNS dotazů.

Jednoduché řešení, které procházení eliminuje, je například definování žolíkového reverzního záznamu, mapující všechny nepoužívané reverzní záznamy na nějakou adresu.

(Upozornil Radek Zajíc.)

Našli jste v článku chybu?
  • Aktualita je stará, nové názory již nelze přidávat.
  • 30. 3. 2012 12:05

    Petr Krčmář

    Pěkné a očividně to funguje. Na 688 dotazů mi to prolezlo zónu a vysypalo všechny dostupné adresy. Takže jsem nasadil protiopatření v podobě wildcardu a skript má po ptákách. Teď vidí všechny IPv6 adresy jako použité.

  • 30. 3. 2012 12:29

    Ondřej Caletka

    Tak s tím žolíkem to není tak snadné, aby to fungovalo tak jak jsem si představoval, bylo by potřeba udělat žolíky pro všechny úrovně typu:

    *
    *.0
    …
    *.f
    *.0.0
    *.0.1
    …
    *.f.f
    *.0.0.0
    …

    Žolík přes celou zónu vygeneruje syntetické záznamy jen na místě číslic, pod kterými nic není. Na číslici, pod kterou je nějaký záznam, se žolík neuplatní a server vráti NOERROR. Takže není problém upravit skriptík tak, aby syntetické záznamy detekoval a ignoroval :)

  • 30. 3. 2012 12:12

    Sten (neregistrovaný) 109.80.216.---

    IMO správné řešení by bylo vracet NOERROR na všechno, protože ta adresa je platná, jen nemá mapování na doménové jméno.