Onderscheppen en injecteren: Manipulatie van DNS-responses in het wild

Bereiken je DNS-query's de rootservers?

Illustratie van blokken met de letters DNS (Domain Name System) erop.

De oorspronkelijke blog is Engelstalig, dit is de Nederlandse vertaling ervan.

Auteurs: Yevheniya Nosyk, Qasim Lone, Yury Zhauniarovich, Carlos H Gañán, Emile Aben, Giovane CM Moura, Samaneh Tajalizadehkhoob, Andrzej Duda, Maciej Korczyński. 

DNS is een protocol dat domeinnamen (zoals example.nl) omzet in IP-adressen (zoals 93.184.216.34). Helaas wordt DNS meestal gebruikt via UDP, waardoor het gevoelig is voor verschillende vormen van manipulatie. In november 2021 konden gebruikers uit Mexico geen toegang krijgen tot whatsapp.net en facebook.com - deze query's bleken te worden gerouteerd naar een van de lokale instanties van de k-root (een van de 13 root DNS-servers op het internet) en onderweg te worden onderschept door een aantal middleboxes. In deze blogpost analyseren we die gebeurtenis bezien vanuit RIPE Atlas en evalueren we in hoeverre er meer in het algemeen sprake is van DNS-manipulatie bij het versturen van query's naar DNS-rootservers. We hebben onze bevindingen onlangs gepresenteerd op de Passive and Active Measurement Conference (PAM-2023).

2 problemen: BGP-routelekken en DNS-manipulatie

Elke DNS-resolutie begint bij een van de 13 rootservers. Om het hoofd te kunnen bieden aan de enorme querybelasting, kondigen deze servers allemaal 2 prefixen aan (IPv4 en IPv6) met behulp van BGP-anycast, maar spreiden ze het verkeer over meer dan 1600 afzonderlijke instanties wereldwijd. Sommige lokale instanties zijn alleen bedoeld om een beperkt aantal clients te bedienen (bijvoorbeeld een bepaalde ISP of een land) en hun routes mogen niet worden doorgegeven aan het hele internet. Dit wordt meestal bewerkstelligd met de BGP-communitykenmerken NO_EXPORT of NOPEER (zie RFC-4786 voor meer informatie).

Desondanks kunnen door sporadische routelekken lokale instanties van een rootserver wereldwijd worden geadverteerd. Zulke gebeurtenissen zouden transparant blijven voor eindgebruikers, tenzij clients problemen ondervonden bij het bereiken van bepaalde domeinnamen. Toen in 2010 bijvoorbeeld de in Peking gevestigde instantie van de i-root uitlekte, hadden eindgebruikers vervalste antwoorden ontvangen voor twitter.com, facebook.com en youtube.com. Evenzo zorgde een routelek van de k-root er in 2021 voor dat DNS-query's van Mexico werden omgeleid naar Guangzhou en er responses voor whatsapp.net en facebook.com werden geïnjecteerd. Aangezien de operators van rootservers geen valse gegevens retourneren, kan het niet anders dan dat middleboxes de gebruikersverzoeken hebben onderschept en responses hebben geïnjecteerd.

We vroegen ons af hoeveel eindgebruikers werden getroffen door het routelek van november 2021 en hoelang het lek onopgemerkt bleef. Meer in het algemeen analyseren we in deze blogpost in hoeverre query's die naar DNS-rootservers worden gestuurd, worden gemanipuleerd, zelfs als er geen sprake is van routelekken of andere onregelmatigheden.

Les #1: Lekken in de routering van rootservers kunnen onopgemerkt blijven

We gebruikten een van de ingebouwde RIPE Atlas-metingen om te controleren hoe ver het routelek van november 2021 zich had verspreid. Het bleek dat de in Guangzhou gevestigde lokale instantie van de k-root ten minste 2 maanden bereikbaar was voor het buitenland, voordat het lek werd gemeld: de DNS-query's van 57 RIPE Atlas probes in 15 landen (AU, UA, CO, HK, LK, CH, FR, US, KR, DK, MX, ZM, BE, GB, NP, KE) waren naar die lokale k-root gerouteerd. Zelfs nadat het lek was gerepareerd, kwamen in de daaropvolgende 9 maanden 12 probes (RU, IL, MX, DK, HK) nog af en toe terecht bij de instantie in Guangzhou.

Les #2: DNS-manipulatie is hardnekkig en veelvoorkomend

We zetten een reeks van 312 niet-recursieve DNS-metingen gericht op alle rootserver-letters op met wisselende IP-versies, transportprotocollen, querytypen en domeinnamen (zie Figuur 1 hieronder). Deze metingen werden 2 keer per dag uitgevoerd vanuit alle (ongeveer 11.000) aangesloten RIPE Atlas probes.

A series of DNS queries issued on all the RIPE Atlas probes

Figuur 1. Een reeks DNS-query's die op alle RIPE Atlas probes werd verzonden.

Vervolgens verdeelden we de meetresultaten in 2 categorieën: i) niet-geïnjecteerd, als het antwoordgedeelte van de respons leeg was en ii) geïnjecteerd, als we responses op onze query's kregen. We weten dat DNS-rootservers voor geen van de bevraagde domeinnamen autoritatief zijn, dus we verwachten enkel verwijzingen naar .com/.net TLD-nameservers en de bijbehorende glue-records te zien.

The weekly ratios of manipulation
Figuur 2. De wekelijkse manipulatiepercentages.
https://images.ctfassets.net/yj8364fopk6s/6QNdoZDIWCtJvrkLSVWhfZ/eb5a567c8a0b468677cf91e2bfd6677a/The_weekly_ratios_of_manipulation.svg
The duration of manipulation for RIPE Atlas probes
Figuur 3. De manipulatieduur voor RIPE Atlas probes.
https://images.ctfassets.net/yj8364fopk6s/5ggfDF7Qsn0uYf5M0uxBUl/4f0c3b26520d7ef9b495bd4ee33808db/The_duration_of_manipulation_for_RIPE_Atlas_probes.svg

Zoals in Figuur 2 te zien is, ontvangt per week tussen de 3% en 4% van de RIPE Atlas probes geïnjecteerde DNS-responses wanneer er met rootservers wordt gecommuniceerd. Het totale percentage aan gemanipuleerde metingen is niet hoger dan 1%. Tegelijkertijd kreeg over de volledige 9 maanden van het experiment zo'n 20% van de deelnemende RIPE Atlas probes te maken met gemanipuleerde antwoorden (zie Figuur 3).

Les #3: Geïnjecteerde responses zijn niet altijd vals

We ontvingen meer dan 11 miljoen afzonderlijke geïnjecteerde responses van 5 verschillende soorten bronrecords: A (7.000.000), AAAA (4.000.000), URI (43.000), SOA (7000) en CNAME (5000). Interessant genoeg waren die niet altijd vals. Zo bevatte 49% van de responses voor facebook.com en 89,6% van die voor google.com geldige A-records die bij de gevraagde domeinnamen behoorden. Het percentage aan geldige AAAA-responses was zelfs nog hoger: 64,4% voor facebook.com en 98,3% voor google.com. Alle CNAME's leidden google.com naar forcesafesearch.google.com, een dienst van Google die expliciete inhoud uit zoekresultaten verwijdert. Alleen met de URI- en SOA-responses werd de toegang tot de gevraagde domeinen volledig voorkomen, aangezien die geen geldig adres bevatten.

Achter deze geïnjecteerde antwoorden zitten verschillende entiteiten: behalve met nationale censuurinstanties kunnen we te maken hebben gehad met DNS-filterdiensten, transparante forwarders die DNS-verzoeken doorsturen naar alternatieve resolvers, of DNS-servers die de rootzone lokaal bedienen. Het is dus mogelijk dat corporate beleid eindgebruikers niet toestaat contact te maken met willekeurige DNS-servers.

Mitigatie

In totaal kreeg 7% van alle 14.300 RIPE Atlas probes die tussen februari en oktober 2022 werden getest te maken met geïnjecteerde responses. Het probleem kan nog worden verergerd als zich routelekken voordoen, omdat dan ook clients van buitenaf kunnen worden getroffen. Een of meer van de onderstaande tegenmaatregelen kunnen helpen de risico's te minimaliseren of de manipulatie zelfs helemaal te vermijden.

  • BGP-community's: met behulp van BGP-community's is het mogelijk om anycast-instanties eenduidig te identificeren, door in BGP-aankondigingen bijvoorbeeld geografische coördinaten te coderen. Routers op de doelnetwerken zouden dan de dichtstbijzijnde instantie kiezen.

  • QNAME minimization: het is niet nodig om bij het bevragen van DNS-rootservers de volledige domeinnaam te onthullen, vooral als dit middleboxes zou kunnen activeren.

  • DNS-versleuteling: voorkomt het sniffen van leesbaar DNS-verkeer, maar moet wel worden toegepast op de gehele resolutieketen (van eindclients tot resolvers en resolvers tot autoritatieve nameservers).

  • DNSSEC: validerende resolvers zullen valse antwoorden weigeren, mits de domeinnamen in kwestie ook ondertekend zijn.