Rekursiva resolvrar

DDOS-attacker där DNS-servrar utnyttjas som förstärkare av attacken kommit att bli allt vanligare. Dessa attacker använder sig av öppna rekursiva namnservrar, så kallade resolvers.

En rekursiv DNS-server är att betrakta som öppen när den inte bara svarar på frågor från sitt lokala nätverk (som den borde) utan också på frågor från hela världen. Servern kan därmed också komma att användas som en mellanhand i en DDOS-attack. Den rekursiva namnservern som får en DNS-fråga svarar till den dator som förmodas ha ställt frågan.

Problemet är att den dator som får svaret i det här fallet utgör målet för DDOS-attacken, genom att adressen som frågan påstås komma från är förfalskad (eng. spoofing). IIS vill uppmärksamma att öppna rekursiva namnservrar utgör en allvarlig risk och är ett problem för internet som helhet. Öppna rekursiva namnservrar har mycket få legitima användningsområden. Vi rekommenderar därför starkt att eliminera möjligheten att missbruka öppna rekursiva resolvrar med hjälp av de tekniker som beskrivs i nedanstående referenser.

Som exempel rekommenderar vi den som använder BIND att slå på flaggan ”recursion no” för den tjänst ni tillhandahåller till det publika internet. För den rekursiva funktionen mot det lokala nätverket (och mot slutkunderna om du erbjuder accesstjänster) behöver du använda en separat maskin, en andra daemon, eller separata vyer som i BIND 9.

Följande information är tänkt att utgöra ett stöd för administratörer som idag har en rekursiv resolver öppen på internet och som vill kunna stänga denna. Här har vi samlat några av de problem som kan uppstå och lämnar även råd om några alternativa sätt att lösa dessa problem.

Frågor & Svar

Varför ska vi bry oss om öppna rekursiva namnservrar, är inte grundproblemet att operatörerna inte filtrerar på avsändaradresser?

Jo, visst är det så. Skulle operatörerna filtrera på avsändaradresser så skulle vi inte behöva oroa oss för alla öppna rekursiva resolvrar. Men eftersom sådan filtrering är relativt svår och kostsam att införa, så måste vi under tiden försöka minska de skador som DDOS-attacker orsakar tills dess att operatörerna har klarat av att åtgärda grundproblemet. Att stänga en rekursiv resolver anser vi vara en enkel uppgift för många som det är värt att göra då det hjälper till att lindra de problem som uppstår vid DDOS-attacker.

Varför ska jag stänga den rekursiva resolvern, det räcker väl med att servern pratar UDP för att den ska kunna var reflektor i en DDOS-attack?

Det är visserligen sant, alla UDP-protokoll som saknar filtrering på avsändaradresser hos operatörerna är utsatta för denna sårbarhet. Däremot så är det lättare att ”ladda” en rekursiv resolver så att förstärkningseffekten blir betydligt större än för andra UDP-protokoll. Genom att stänga av denna funktion så tar vi ett steg närmare att minska den skada som DDOS-attackerna idag orsakar med utnyttjande av DNS-infrastrukturen.

Hur stänger jag min rekursiva resolver så att den enbart svarar på rekursiva frågor från mitt interna nätverk?

Svar: Det enklaste är att lägga till en rad i din konfigurationsfil enligt nedan (OBS! endast ett exempel, IP-adresserna varierar!). Det går även att skapa mer avancerande accesslistor enligt dokumentationen för BIND och du kan även begränsa trafik genom filter i din brandvägg eller router. De flesta andra DNS-programvaror har liknande funktioner för att begränsa trafiken.

options { allow-recursion { 127.0.0.1; 192.168.1.1/24; }; };

Jag har min resolver öppen eftersom jag behöver en resolver när jag är ute och reser. Hur ska jag göra?

Du kan starta upp en lokal resolver på din egen dator och använda den i stället. Det finns färdigkompilerade BIND-versioner för i princip alla operativsystem som används idag. De flesta distributioner kräver ingen omkonfigurering för att fungera som en resolver utan det räcker med att starta den för att få en fungerande DNS. Därefter så sätter du IP-adressen 127.0.0.1 som din DNS-server i nätverksinställningarna.

BIND följer med: De flesta unix-operativsystem (inkl Mac OS X) och startas normalt med kommandot named. BIND följer inte med: Windows-klienter eller serveroperativsystem (Finns dock färdigkompilerat på http://www.isc.org/sw/bind/ )

Det är dock viktigt att notera att BIND som standard är konfigurerad som en öppen rekursiv resolver, för att inte låta andra använda din lokala dator som rekursiv resolver så kan du lägga till nedanstående rad i konfigurationsfilen under options. Detta gör att enbart din lokala dator kan ställa frågor mot omvärlden.

options { allow-recursion { 127.0.0.1; }; };

Jag behöver kunna använda min DNS-server som en forwarder från flera andra servrar. Hur gör jag då?

För detta ändamål så kan du dels begränsa tillgången genom IP-filter enligt ovan, men du kan också används en TSIG-nyckel för att med användarkontroll verifiera att det är dina slav-resolvrar som ställer frågorna.

Kan jag på ett enkelt sätt begränsa kapaciteten för att minska mängden paket som går ut från min resolver vid en DDOS-attack?

Du kan inte begränsa bandbredd eller antal frågor i BIND idag, utveckling pågår dock och denna funktion kan finnas tillgänglig i framtiden. Däremot så stödjer de flesta brandväggar att man begränsar bandbredden för vissa portar på en server. Detta gör det möjligt att till exempel begränsa bandbredden till 10kbit/s för utgående rekursiva anrop. Detta kan om servern är kraftfull och står på en internetförbindelse med hög kapacitet göra stor skillnad vid en DDOS-attack. Se handboken för ditt operativsystem eller brandvägg för att se hur du konfigurerar detta.

Jag måste ha min resolver på samma maskin som jag kör mina zoner på, finns det några problem med det?

Ja, det är inte att rekommendera att ha dessa på samma maskin eftersom de rekursiva frågorna kan läcka över till den delen av servern som svarar på frågor om din domän. Men har du inget val så finns det några saker du kan göra. Tidigare versioner av BIND har buggar som gör att externa parter i princip kan ta över din DNS och ändra pekare till egna IP-adresser. För att hantera detta så är det lämpligt att du uppgraderar till senaste versionen av BIND 9 och inte använder någon version av BIND 8 eller tidigare. BIND 9 har även en funktion som kallas vyer (views) som ger extra säkerhet när samma instans av BIND ska användas både som resolver och som namnserver. Du ska över huvud taget inte använda vare sig BIND 4 eller BIND 8 då dessa är behäftade med allvarliga brister.

Vi rekommenderar dessutom starkt att du uppgraderar din programvara löpande och att du prenumererar på säkerhetsbulletiner från ISC angående BIND.

Ingen av de föreslagna lösningarna hjälper mig, jag måste fortfarande ha min rekursiva resolver öppen. Hur gör jag då?

Vi förstår att det finns situationer där det är i princip omöjligt att filtrera på IP-adresser och där den rekursiva resolverfunktionen är ett måste. Men vi uppskattar ändå att du har läst igenom detta och att du i fortsättningen försöker tänka på dessa delar när du designar din serverfunktion.

Var hittar jag mer information?

Vi har samlat några länkar till bra och informativt material om DDOS och öppna rekursiva namnservrar.

Securing an Internet Name Server http://www.cert.org/archive/pdf/dns.pdf. En bra praktisk sammanfattning för systemadministratören.

DNS Amplification attacks http://www.isotf.org/news/DNS-Amplification-Attacks.pdf. En bra beskrivning av hur attacken går till och vad den innebär.

The Continuing Denial of Service Threat Posed by DNS Recursion http://www.us-cert.gov/reading_room/DNS-recursion033006.pdf. Officiellt råd från USA:s CERT.

ISC BIND http://www.isc.org/sw/bind. Här finns källkod och binärer för BIND samt länkar till mycket intressant och matnyttig information.

BIND 9 Documentation https://www.isc.org/downloads/bind/doc. Innehåller exempel på konfigurering, praktiska tips och detaljerad beskrivning av funktioner i BIND.

Läs mer om: DNS