Als er iets is dat we kunnen leren van Hollywood-films, dan is het wel dat hackers erg slim zijn, en verschillende manieren hebben om onze beveiliging te omzeilen. In de echte wereld hebben beveiligingsproblemen vaker te maken met het simpele feit dat er zich een gelegenheid voordoet dan dat het temaken heeft met geavanceerde kennis en veel gelduld. Een “DNS poisoning” aanval voldoet volledig aan deze typering van gelegenheidsdieven. Aan jou dus om de vaardigheden te ontwikkelen om te voorkomen dat je domein gekidnapt wordt.

Het idee van een dergelijke aanval is vrij simpel: bezoekers zien iets wat erg lijkt op jouw website, maar in feite een nepwebsite is met een frauduleus en schadelijk doel. Daarom moet je verschillende technieken gebruiken om je bezoekers veilig te houden, en je website te beschermen tegen aanvallen.

In dit artikel zullen we daarom goed kijken naar het principe van zowel DNS poisoning als domain spoofing. We gaan het ook hebben over een aantal van de onderwerpen die ermee te maken hebben, zodat je beter begrijpt waarom je het beste voor een bepaalde aanpak kan kiezen.

Een inleiding over het Domain Name System (DNS)

Voordat we het in detail gaan hebben over DNS poisoning, moeten we het eerst even hebben over het Domain Name System. Alhoewel het bezoeken van een website nogal simpel lijkt te zijn, gebeurt er een heleboel achter de schermen.

Er zijn allerlei elementen voor nodig om je van A naar B te krijgen, die allemaal samen moeten werken:

  • IP adres. Dit is een rij getallen met je eigenlijke adres op het internet. Zie ze maar als de coördinaten van je huis. Zo is bijvoorbeeld, 127.0.0.1:8080 een standard “localhost” adres (oftewel je computer).
  • Domeinnaam. Als het IP-adres te vergelijken is met de coördinaten, dan kan je de domeinnaam zien als het adres zoals je dat op een ouderwetse brief zou zetten. Zo is “kinsta.com” één van de miljoenen voorbeelden.
  • Een DNS verzoek. Dit is een goed voorbeeld van een geavanceerde front-end taak, met een complex onderliggend proces. Voor nu kan je een verzoek zien als dat je browser een server vraagt wat het adres is bij een bepaald coördinaat.
  • Een DNS server. Dit is iets anders dan de gewone server van je website, aangezien het eigenlijk vier servers in één is. Het doel hiervan is om DNS verzoeken te verwerken. We zullen hier later nog op terugkomen.
  • Recursive server.Deze servers worden ook wel “resolving nameservers” genoemd. Ze zijn onderdeel van het proces van de DNS lookup, en zijn verantwoordelijk voor het opvragen van de domeinnaam die bij een IP adres hoort.

Algemeen gesproken maakt een DNS het ophalen van een domeinnaam erg eenvoudig voor de eindgebruiker. Het is een belangrijk onderdeel van het web, en bestaat daarom uit veel bewegende delen.

We zullen zometeen naar het lookupproces zelf kijken, maar je ziet misschien al wel dat het DNS een belangrijke taak moet uitvoeren.

Het proces van een DNS lookup

Lees rustig door, we gaan een wat abstracte vergelijking maken, die een hoop kan helpen.

Activiteiten die mensen naar afgelegen plekken brengen, zoals oceaanzeilen of bergbeklimmen, delen een specifiek gevaar: het risico dat je verdwaalt en niet op tijd gevonden wordt. De gebruikelijke manier om mensen te vinden is door middel van coördinaten. Die zijn namelijk expliciet en bieden een hoge mate van nauwkeurigheid.

Maar er zitten ook nadelen aan. Allereerst moet je weten hoe je je coördinaten kan bepalen voor een locatie, lastig als je ergens op een afgelegen berg of eiland zit. Ten tweede moet je die coördinaten zien te communiceren naar je reddingsteam. Als je daarin één nummer verkeerd doorgeeft, zijn de consequenties erg heftig.

De what3words app verandert het complexe proces van het berekenen en doorgeven van coördinaten, en maakt daar een samenvatting van in 3 woorden, die je locatie bij benadering aangeven. Laten we bijvoorbeeld naar het hoofdkantoor van Automattic kijken.

Het kantoor van Automattic op Apple Maps.
Het kantoor van Automattic op Apple Maps.

De precieze coördinaten van hun hoofdkantoor zijn 37.744159, -122.421555. Tenzij je een expert bent in navigatie, weet je dit waarschijnlijk niet. En zelfs als je het wel weet, is de kans dat je deze informatie aan iemand kan geven die er praktisch iets mee kan zonder GPS apparaat, niet heel groot.

What3words vertaalt kort gezegd zo’n abstracte set coördinaten naar drie woorden die je eenvoudig kan onthouden. Voor het kantoor van Automattic is dat decent.transfers.sleeps:

De website van what3words, met het hoofdkantoor van Automattic.
De website van what3words, met het hoofdkantoor van Automattic.

Hierdoor kan je ingewikkelde positiebepalingen toegankelijk maken voor iedereen die de app heeft. Het heeft al veel levens gered.

Dit is qua proces vergelijkbaar met wat een DNS Lookup doet. In het geval van what3words vraagt de redder de app om de coördinaten van een combinatie van drie woorden. Dit verzoek wordt naar de servers gestuurd om de coördinaten op te zoeken en de eindgebruiker de precieze locatie te laten zien.

Een DNS Lookup heeft een vergelijkbare flow.

  • Je browser vraagt het IP-adres voor een domeinnaam op.
  • Je besturingssysteem vraagt de recursive server om de domeinnaam te vinden, en deze begint een verzameling servers om informatie te vragen.
  • Wanneer de domeinnaam gevonden wordt, wordt het resultaat naar de browser gestuurd.

Eén van de nadelen van what3words is dat een combinatie van 3 woorden minder nauwkeurig is dan een lange rij coördinaten. Hierdoor kan je sneller een algemene richting vinden, maar ben je wellicht wel langer bezig om een vermist persoon precies te vinden.

Een DNS Lookup heeft ook nadelen, en kwaadaardige aanvallers kunnen die uitbuiten. Maar voordat we daar naar gaan kijken, moeten we het ook nog even over caching hebben, en hoe dat een lookup kan versnellen.

DNS caching

Net zoals webcaching, kan DNS caching helpen om herhaalde verzoeken aan de server sneller af te handelen. Hierdoor wordt het ophalen van een IP adres sneller als je ergens terugkomt.

Heel kort komt het erop neer dat er een cache in het DNS serversysteem is, waardoor de extra omweg via de recursive server niet meer nodig is. Hierdoor kan de browser het IP adres meteen bij de DNS server ophalen en een GET verzoek sneller afhandelen.

Je vindt DNS cachen op meerdere plekken in je systeem. Zo zal je computer een eigen DNS cache hebben, maar ook je router en je Internet Service Provider (ISP). Je realiseert meestal niet hoe belangrijk DNS caching is voor het prettig kunnen browser, totdat je slachtoffer wordt van DNS poisoning.

Wat DNS poisoning is

Nu je het algemene idee van een DNS lookup begrijpt, en het volledige proces van het ophalen van een IP adres, kunnen we beter begrijpen hoe dit uitgebuit kan worden.

DNS poisoning wordt ook regelmatig “spoofing” of “DNS spoofing” genoemd, omdat er bij de aanval vaak een frauduleuze website wordt gemaakt die het origineel namaakt.

We zullen elk aspect hiervan verder bekijken, maar weet in ieder geval dat DNS poisoning en DNS spoofing mentale, financiële en materiële schade kan opleveren voor gebruikers en het internet in het algemeen.

Maar we beginnen eerst met het proces van cache poisoning.

Zo werkt DNS spoofing en cache poisoning

Aangezien het hele spoofingproces nogal complex is, hebben aanvallers allerlei verschillende manieren gevonden om hun doel te bereiken:

  • Machine-in-the-middle. Hierbij weet een aanvaller zich tussen de browser en DNS server te wurmen, valt beiden aan, en stuurt de gebruiker dan door naar een frauduleuze website op hun eigen server.
  • Server hijacking. Hierbij wordt een server gekaapt, doordat een aanvaller in de DNS server kan komen en deze zo kan configureren dat alle verzoeken naar hun eigen website worden gestuurd.
  • Poisoning via spam. In tegenstelling tot een kaping richt deze aanpak zich op de gebruiker, dus op de browser. Ze verschaffen zich dan vaak toegang via spam-links, e-mails, en kwaadaardige advertenties.
  • “Birthday attacks.” Dit is een complexe cryptografische aanval die wat meer uitleg nodig heeft.

Een “birthday attack”, oftewel verjaardagsaanval, is gebaseerd op het “birthday problem“. Dit is een statistische vraag, die kortgezegd bepaalt dat als er 23 mensen in een kamer zijn, er een kans van 50% is dat twee mensen dezelfde verjaardag hebben. Als er meer mensen in de kamer zijn, neemt de kans aanzienlijk toe.

Een grafiek over het Birthday Problem.
Een grafiek over het Birthday Problem. (Afbeelding: Wikipedia)

Dit vertaalt zich door naar DNS poisoning door de identifier die het verzoek voor de DNS lookup koppelt aan de GET respons. Als een aanvaller een bepaald aantal random verzoeken en reacties stuurt, is er een grote kans dat er een match is, waardoor er met succes ingebroken kan worden. Voor zo’n 450 verzoeken is die kans 75%, en bij 700 verzoeken is het bijna zeker dat de aanvaller de server in kan.

In het kort zullen aanvallen op de DNS server meestal plaatsvinden omdat een kwaadwillende gebruiker dan meer mogelijkheden heeft om je site en gebruikers te manipuleren. Er is geen verificatie voor DNS data omdat verzoeken en reacties geen gebruik maken van het zogeheten Transmission Control Protocol (TCP).

Het zwakke punt in de schakel is de DNS cache omdat deze DNS entries verzamelt. Wanneer een aanvaller nepverzoeken in de cache weet te krijgen, zal elke gebruiker die naar die website gaat bij een nepwebsite uitkomen, totdat de cache verloopt.

Aanvallers letten meestal op een aantal signalen en zwakke punten, en bepaalde data, bij het bepalen van hun doelwit. Dit werkt omdat ze DNS verzoeken zien die nog niet gecachet zijn, omdat de recursive server de verzoeken nog moet behandelen. Daardoor zal de aanvaller ook op zoek gaan naar de nameserver waar het verzoek heengaat. Wanneer ze dit hebben, zijn de gebruikte port die de resolver gebruikt en het ID nummer van het verzoek erg belangrijk.

Alhoewel er niet aan al deze eisen voldaan hoeven te worden, een aanvaller heeft immers verschillende opties om uit te kiezen, wordt het met deze voorwaarden wel makkelijker voor ze.

Praktijkvoorbeelden van DNS poisoning

Er zijn de afgelopen jaren een aantal voorbeelden van DNS poisoning geweest die veel aandacht hebben gekregen. In sommige gevallen is dat ook precies de bedoeling. Zo beheert China een enorme firewall (ook wel de “Great Firewall of China” genoemd) om de informatie te controleren die internetgebruikers kunnen krijgen.

Simpel gezegd infiltreren ze daarbij hun eigen servers door bezoekers die naar ongewenste websites gaan, zoals Twitter en Facebook, door te sturen naar een andere plek. In één geval kwamen deze Chinese beperkingen zelfs in het westerse ecosysteem terecht.

Een netwerkfout van een Zweedse internetprovider zorgde voor het afleveren van root DNS informatie vanaf Chinese servers. Hierdoor werden gebruikers in Chili en de VS omgeleid wanneer ze naar bepaalde social media website gingen.

In een ander voorbeeld protesteerden hackers uit Bangladesh tegen mishandeling in Maleisië, door allerlei belangrijke domeinen te infiltreren zoals van Microsoft, Google, YouTube en een aantal andere grote sites. Dit lijkt een geval van serverkaping te zijn geweest, niet van spam of infiltratie van eindgebruikers.

Zelfs WikiLeaks is niet immuun tegen DNS poisoning aanvallen. Een mogelijke serverkaping enkele jaren geleden zorgde ervoor dat bezoekers op een website uitkwamen van de hackers.

DNS poisoning hoeft niet heel ingewikkeld te zijn. Zogeheten “ethische hackers”, die kwetsbaarheden in beveiliging proberen bloot te leggen, niet uit te buiten, hebben eenvoudige manieren om spoofing op hun eigen computers uit te testen.

Maar naast dat een aantal bezoekers op de verkeerde plek uitkomt, lijkt er op het eerste gezicht misschien weinig schade door DNS poisoning te ontstaan. Dit is er echter zeker wel, en daar zullen we nu naar gaan kijken.

Waarom DNS poisoning en spoofing zo schadelijk is

Er zijn drie hoofddoelen die een aanvaller met DNS poisoning kan proberen te bereiken:

  • Malware verspreiden.
  • Je naar een andere website doorsturen, waar zij op één of andere manier voordeel aan hebben.
  • Informatie stelen, van jou of andere betrokkenen.

Natuurlijk is het niet heel moeilijk om te bedenken waarom DNS poisoning en spoofing problematisch zijn voor internetproviders, serverbeheerders en eindgebruikers.

Zoals we al zeiden is spoofing een groot probleem voor providers, zelfs in zoverre dat er speciale tools zoals de CAIDE Spoofer voor zijn gemaakt.

De CAIDA website.
De CAIDA website.

Enkele jaren geleden lieten statistieken al zien dat er zo’n 30.000 aanvallen per dag waren. Inmiddels zal dat aantal aanzienlijk hoger liggen. Daarnaast zorgt het afleveren van nepsites via een netwerk, zoals in het vorige voorbeeld, ervoor dat het vertrouwen van gebruikers ernstig wordt beschadigd, naast dat het privacyproblemen oplevert.

Wat je precieze rol ook is, er zijn meerdere risico’s wanneer je slachtoffer wordt van poisoning en spoofing:

  • Zoals bij de Great Firewall van China, kan je internet gecensureerd worden. Hierdoor is de informatie die je krijgt niet volledig of zelfs onjuist, wat kan doorwerken op verschillende sociale en politieke gebieden.
  • Diefstal van data is ook een grote zorg, en het is een erg lucratieve onderneming voor aanvallers die bankgegevens of andere gevoelige gegevens weten buit te maken.
  • Je kan kwetsbaar worden voor verschillende soorten malware en Trojaanse virussen. Een aanvaller zou bijvoorbeeld een keylogger of andere spyware op je computer kunnen zetten via een nepsite.

Er zijn ook andere bijeffecten van DNS poisoning. Zo kan je bijvoorbeeld mogelijk geen beveiligingsupdates uitvoeren, totdat er een volledige hersteloperatie uitgevoerd is. Hierdoor is je computer nog langer kwetsbaar.

Je wilt ook liever niet al te veel nadenken over de kosten en complexiteit van een opruimactie, aangezien iedereen in de keten hierbij betrokken zal moeten worden. Hogere kosten voor alle betrokken diensten is nog maar één van de nadelen.

De moeite om DNS poisoning helemaal te verwijderen is echt immens. Doordat spoofing zowel de client als de server raakt, moet je alle kanten schoonmaken om de schade volledig te herstellen.

Hoe je DNS poisoning kan voorkomen

Zoals gezegd zijn er twee kanten betrokken bij DNS poisoning, de client-side en de server-side. We gaan kijken wat je aan preventie kan doen aan beide kanten.

Laten we beginnen met wat het internet in z’n geheel doet aan de kant van de server.

Zo probeert het internet DNS poisoning en spoofing te voorkomen op de server

We hebben het al veel over DNS gehad, maar tot nu toe hebben we nog niet genoemd hoe ontzettend verouderd de technologie eigenlijk is. Het komt erop neer dat door verschillende factoren DNS eigenlijk helemaal geen ideale oplossing is voor een moderne internetervaring. Om te beginnen is het niet versleuteld, terwijl enkele belangrijke validatie-stappen al een hoop DNS poisoning-aanvallen zou tegenhouden.

Een eenvoudige manier om aanvallers in de kiem te smoren, is via een eenvoudige loggingstrategie. Hierbij wordt een eenvoudige vergelijking gemaakt tussen het verzoek en de respons, om te zien of er overeenkomsten zijn.

Maar de beste oplossing op lange termijn is volgens experts het gebruik van Domain Name System Security Extensions (DNSSEC). Dit is een technologie die specifiek ontwikkeld is om DNS poisoning tegen te gaan, en komt erop neer dat er verschillende controles plaatsvinden.

Specifieker gebruikt DNSSEC “public-key cryptografie” ter verificatie. Hierdoor kan de data gecontroleerd worden op betrouwbaarheid en echtheid. Dit wordt opgeslagen met de andere DNS gegevens, en de recursive server kan het dan gebruiken om te controleren dat de ontvangen informatie niet veranderd is.

In vergelijking met andere internetprotocollen en bijbehorende technologieën, staat DNSSEC nog in de kinderschoenen, maar het is al wel dermate ver ontwikkeld dat het al in de root van het internet geïmplementeerd kan worden, zij het nog niet door iedereen. Het Public DNS van Google ondersteunt DNSSEC bijvoorbeeld al helemaal, en er zijn steeds meer gebruikers.

Desalniettemin zitten er wel enkele belangrijke nadelen aan DNSSEC.

  • Het protocol versleutelt de antwoorden niet. Dit betekent dat aanvallers het verkeer nog steeds kunnen “afluisteren”, al moet de aanvallen wel hoogstaander zijn om DNSSEC te omzeilen.
  • Doordat DNSSEC extra gegevens gebruikt om DNS data te verzamelen, is er ook een kwetsbaarheid die “zone enumeration” wordt genoemd. Hierbij wordt één DNS-record gebruikt om alle DNS record te verzamelen en af te lopen binnen een bepaalde zone. Sommige versies van dit DNS-record zullen de data versleutelen, maar anderen nog niet.
  • DNSSEC is een complex protocol, en omdat het ook nog vrij nieuw is, wordt het soms verkeerd geconfigureerd. Natuurlijk kan dit de voordelen aanzienlijk verminderen, en de problemen vooral verplaatsen in plaats van oplossen.

Desalniettemin lijkt DNSSEC zeker de toekomst te zijn, in ieder geval wat betreft de server-side. Maar ook voor de eindgebruiker zijn er verschillende mogelijke maatregelen die je kan nemen.

Zo kan je DNS poisoning voorkomen op de client-side

Er zijn meerdere manieren om DNS poisoning te voorkomen vanaf de eindgebruiker, alhoewel ze allemaal minder robuust zijn dan DNSSEC op de server, mits geïmplementeerd door een expert. Maar er zijn een aantal eenvoudige maatregelen die je als beheerder van een website kan nemen om een aanval moeilijker te maken:

  • Gebruik end-to-end versleuteling voor alle verzoeken en antwoorden. Secure Sockets Layers (SSL) certificaten zijn hier erg sterk in.
  • Gebruik tool die spoofing kunnen detecteren. Dergelijke tools scannen ontvangen datapakketjes voordat ze worden verzonden. Hierdoor kan je voorkomen dat er kwaadaardige data wordt verzonden.
  • Het verhogen van de Time-To-Live (TTL) waarden van je DNS cache zorgt ervoor dat kwaadaardige gegevens moeilijker bij de eindgebruiker kunnen komen.
  • Je hebt ook een goede strategie voor DNS, DHCP, en IPAM (DDI) Dit staat voor je DNS strategie, Dynamic Host Configuration Protocol, en IP Address Management. Het is een vrij complex proces, maar hard nodig, en kan uitgevoerd worden door systeembeheerders of beveiligingsexperts.

Als eenvoudige gebruiker van websites zijn er ook enkele dingen die je kan doen om poisoning en spoofing te verminderen:

  • Gebruik een Virtual Private Network (VPN) om je data volledig te versleutelen tijdens het verzenden. Je kan daarbij ook gebruik maken van private DNS servers, die ook weer end-to-end versleuteling gebruiken.
  • Denk goed na bij wat je doet online, zoals het niet klikken op onbekende links, en voer regelmatig een beveiligingsscan uit.
  • Leeg je DNS cache regelmatig, zodat eventuele kwaadaardige data uit je systeem verwijderd wordt. Het is een maatregel die slechts enkele seconden kost en vrij eenvoudig is.

Alhoewel je DNS poisoning niet helemaal kan voorkomen, kan je wel maatregelen nemen om het zoveel mogelijk te beperken. Als eindgebruiker heb je uiteindelijk weinig invloed op hoe een server omgaat met aanvallen. En vanaf de andere kant kunnen systeembeheerders niet bepalen wat er met een browser gebeurt. Daarom is het iets dat we samen moeten doen, om de meeste schade van aanvallen te voorkomen.

Samenvatting

Cyberaanvallen horen nou eenmaal bij het internet. DNS poisoning (of DNS spoofing) zijn aanvallen die miljoenen gebruikers kunnen beschadigen. Dit komt omdat het DNS protocol zelf verouderd is en eigenlijk niet geschikt voor moderne webbrowsers, al komen er nieuwere technologieën aan.

In het kort zorgt DNS poisoning ervoor dat een eindgebruiker bij een frauduleuze versie van een bestaande versie uitkomt. Op die manier kan data gestolen worden en computers geïnfecteerd met malware. Er is geen onfeilbare aanpak om aanvallen volledig te voorkomen, maar je kan zeker de kans beperken, via enkele eenvoudige maatregelen.

Ben je wel eens slachtoffer geworden van DNS poisoning of spoofing, en zo ja, hoe kwam dat? Deel jouw ervaringen in de reacties hieronder!

Jeremy Holcombe Kinsta

Content & Marketing Editor bij Kinsta, WordPress Web Developer en Content Writer. Buiten alles wat met WordPress te maken heeft, geniet ik van het strand, golf en films. En verder heb ik last van alle problemen waar andere lange mensen ook tegenaan lopen ;).