SAD DNS: nieuwe 'DNS cache poisoning'-aanval ontdekt
DNSSEC als structurele oplossing tegen dit soort kwetsbaarheden
DNSSEC als structurele oplossing tegen dit soort kwetsbaarheden
De 'DNS cache poisoning'-aanval waarvoor Dan Kaminsky in 2008 een goed werkende exploit vond, is sinds vorige week weer helemaal terug van weggeweest. De 'SAD DNS'-aanval maakt gebruik van een nieuw side-channel om valse DNS-informatie in een caching resolver te injecteren – vandaar ook de naam 'Side channel AttackeD DNS'. Volgens de ontdekkers is een derde van alle caching resolvers kwetsbaar voor deze aanval, net als de meerderheid van de grote publieke DNS-diensten.
Beheerders van caching resolvers moeten hun systemen patchen/updaten: de ontdekkers van SAD DNS hebben een patch voor Linux beschikbaar gemaakt, die vanaf versie 5.10 ook in de kernel is opgenomen. Lukt dat patchen op dit moment (nog) niet, dan is het (tijdelijk) blokkeren van uitgaande ICMP-berichten op de betreffende systemen een ‘oplossing voor nu’. Eindgebruikers die een van de grote publieke DNS-diensten (Google Public DNS (8.8.8.8), 1.1.1.1, Quad9 (9.9.9.9) en dergelijke) als resolver ingesteld hebben, kunnen het beste even afwachten. Deze diensten worden zeer waarschijnlijk op korte termijn gerepareerd. Of de resolver die jij gebruikt kwetsbaar is voor SAD DNS, kun je checken via een link op de website saddns.net [PowerDNS Recursor, 1.1.1.1].
We beschrijven de klassieke 'DNS cache poisoning'-aanval en de Kaminksy-aanval in onze DNSSEC FAQ. SAD DNS maakt misbruik van de 'Rate Limiting'-bescherming voor ICMP-berichten – ingebouwd in alle netwerk-stacks – om de uitgaande UDP-poort van de DNS resolver te achterhalen. Staat die limiet bijvoorbeeld ingesteld op maximaal 1.000 berichten per seconde (zoals bij Linux), dan kan een aanvaller alle 65 duizend UDP-poorten in blokken van duizend stuks testen om te zien in welk blok precies de uitgaande poort van de DNS resolver zich bevindt. Daartoe stuurt hij eerst 1.000 valse DNS-responses vanaf gespoofde IP-adressen naar alle poorten in het betreffende blok. De ICMP-foutmeldingen gaan verloren (vanwege de spoofing van het afzenderadres). Maar als de aanvaller binnen diezelfde ene seconde vervolgens nog een 1.001-ste bericht stuurt vanaf zijn echte IP-adres en daarop toch nog een laatste ICMP-response terugkrijgt, dan weet hij dat de juiste poort binnen die reeks van 1.000 poorten ligt. Anders was die limiet van 1.000 ICMP-foutmeldingen binnen die seconde immers al bereikt geweest. De tweede figuur in dit bericht laat goed zien hoe deze methode werkt. Met het achterhalen van de (momentane) uitgaande UDP-poort van de resolver wordt de Source Port Randomization (de originele oplossing tegen de klassieke 'DNS cache poisoning'-aanval en de Kaminsky-aanval) teniet gedaan. Is deze poort bekend, dan blijven immers alleen de 65 duizend verschillende transaction ID's over om te proberen bij het injecteren van valse DNS-informatie (middels een Kaminsky-achtige aanval). In hun publicatie beschrijven de onderzoekers hoe ze het window waarin een complete aanval moet worden uitgevoerd weten te verlengen van enige tientallen milliseconden tot vele tientallen seconden. Gelukkig is dit nieuwe probleem relatief makkelijk op te lossen. In de patch voor Linux kun je zien hoe er nu een flinke dosis randomness aan die limiet van 1.000 ICMP-berichten is toegevoegd.
Een meer structurele oplossing zit natuurlijk in het gebruik van DNSSEC-validatie. Een niet-beveiligde resolver neemt de valse informatie immers aan als deze op het juiste moment, op de juiste poort, voorzien van de juiste transaction ID, door de juiste (gespoofde) afzender wordt aangeboden. Een validerende resolver accepteert die valse informatie echter nooit, als deze niet van de juiste digitale handtekening is voorzien.