Een tijdje geleden lag het internet plat bij zo ongeveer iedereen, die Ziggo gebruikte. Al vrij snel kwam naar buiten dat een DDoS aanval de oorzaak was. In dit artikel lees je wat er (waarschijnlijk) aan de hand was en hoe je dat dan zou kunnen voorkomen.

 

Een Distributed Denial of Service (DDoS) aanval heeft als doel om kritieke services te overladen met aanvragen, waardoor de service onbereikbaar wordt. Aan zo’n DDoS zitten twee aspecten. Om te beginnen zijn er heel veel computers nodig om een DDoS aanval uit te voeren. Daarnaast is er de service zelf, die overladen wordt. In dit artikel lees je hoe je beide aspecten van de DDoS aanval zoveel mogelijk tegen kunt gaan.

 

 DDoS preventie

 

De kunst van een goed uitgevoerde DDoS aanval, bestaat eruit dat zoveel mogelijk computers eraan mee doen. Om dit mogelijk te maken, voeren de aanvallers continue scans uit op internet om te achterhalen wat er precies draait op de computers, die ze kunnen bereiken. Die scans zijn vaak helemaal niet ingewikkeld, want beveiliging op veel computers en servers is namelijk helemaal niet zo goed geregeld.

 

 Je moet er dus voor zorgen dat jouw computer niet mee kan doen aan een DDoS aanval. Als je Windows gebruikt, zou een virusscanner daarvoor moeten zorgen. De meeste lezers van dit blad gebruiken Linux als primair besturingssysteem en daar liggen de zaken iets anders.

 

 Om je server tegen de scan te beschermen, die voorafgaat aan het misbruik van jouw computer, moet je ervoor zorgen dat deze onzichtbaar is. Een heel eenvoudige remedie bestaat eruit, dat je computer niet langer antwoord geeft op een ping sweep. De Linux kernel heeft daar twee prima oplossingen voor in de vorm van de bestanden /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts en /proc/sys/net/ipv4/icmp_echo_ignore_all.

 

 Door met sysctl een 1 weg te schrijven naar het eerste bestand, zal jouw server niet langer reageren op een ICMP broadcast (een ping sweep dus). Als je nog iets verder wilt gaan, schrijf je ook een 1 naar icmp_echo_ignore_all om alle ping requests naar jouw computer tegen te gaan. Dit doe je door in /etc/sysctl.conf de volgende twee regels op te nemen:

 

 *** LISTING ***

net.ipv4.echo_ignore_broadcasts=1

net.ipv4.echo_ignore_all=1

*** EINDE LISTING ***

 Omdat je server nu niet langer ontdekt wordt door deze scripts, verklein je het risico al aanzienlijk. Dit is echter nog niet genoeg. Om ervoor te zorgen dat men ook geen misbruik kan maken van services op je server, moet je ook daarvoor maatregelen nemen.

 

 Misbruik op services vindt vaak plaats, doordat de beheerder van een server of computer eigenlijk niet goed weet wat de betreffende service precies doet. Zeker in grote, professionele omgevingen is dit vaak het geval. De Linux beheerder heeft eigenlijk geen weet van wat bijvoorbeeld de web developer doet om de webpagina’s er zo mooi mogelijk uit te laten zien. De stilzwijgende afspraak is dat de applicatiebeheerder voor zijn applicatie zorgt en de Linux beheerder voor zijn besturingssysteem. Deze aanpak kan tot grote problemen leiden.

 

 In het “ik wil gehackt worden” experiment heb ik een tijdje een server laten draaien op basis van goede, oude principes van systeembeheer, waaronder het principe dat de beheerder van de webserver zijn gang mocht gaan. Dat ging dus op een goede dag verkeerd. Via een script in de Joomla-omgeving had een ingenieuze indringer toegang gekregen. Hij had een shell geopend en vervolgens met de permissies van de httpd user in die shell allemaal geinige kleine scripts geplaatst. Deze scripts zorgden ervoor dat mijn server onderdeel geworden was van een wereldwijde DDoS attack.

 

Als je uitgaat van het principe dat je als Linux beheerder gewoon moet vertrouwen in de kundigheid van de applicatiebeheerder, is dit best lastig tegen te gaan. Je kunt natuurlijk een grote verzameling deeloplossingen toepassen, door voor specifieke applicaties specifieke mounts aan te maken, of door ervoor te zorgen dat de toepassingen in een chroot omgeving draaien. Bij zo’n aanpak zal je echter altijd merken, dat je iets over het hoofd ziet en het alsnog verkeerd gaat.

 

Vooral voor servers is er gelukkig een uitstekende remedie in de vorm van SELinux. Met SELinux zorg je ervoor, dat applicaties alleen dat mogen doen wat in de SELinux policy staat. SELinux lost het probleem op, dat de blauwprint voor Linux security in de jaren ’70 gedefinieerd is en dus voor de hedendaagse behoeften niet volstaat. Iedereen begrijpt dat een httpd user helemaal geen scripts aan hoeft kunnen te maken in /var/tmp en op basis van context labels zorgt SELinux ervoor, dat dan ook nooit gebeurt. Met een oplossing als SELinux zorg je er prima voor dat gaatjes binnen de toepassingen op je server gevuld worden.

 

 SELinux is echter iets minder efficiënt op een typische desktopomgeving. Dat komt, omdat op een desktop doorgaans eindgebruikers werken en die eindgebruikers doen hun werk in een “unconfined” omgeving. Dat betekent in feite, dat ze mogen doen wat ze willen. Daar is het dus gewoon zaak, dat je als eindgebruiker een beetje nadenkt, voordat je van alles gaat doen. Hierdoor kunnen problemen zoveel mogelijk voorkomen worden.

 Redundantie op serviceniveau

 

Als je er dan voor gezorgd hebt, dat jouw computer niet mee doet aan een DDoS attack, dan is er nog de andere kant van het verhaal. Hoe zorg je ervoor, dat je er als eindgebruiker geen slachtoffer van wordt? Nou, dat hangt er helemaal vanaf hoe de DDoS aanval wordt uitgevoerd. In sommige gevallen is er niets dat je kunt doen. Denk bijvoorbeeld aan de aanval tegen het Sony Playstation netwerk, die rond kerst 2014 plaatsvond. Er zijn namelijk geen alternatieve servers, die dezelfde diensten aanbieden. Het enige wat je dan dus als gebruiker kunt doen, is afwachten totdat het overgaat.

 

 In de aanval op Ziggo waren de DNS-servers van Ziggo het slachtoffer. Met de DNS-servers van Ziggo vielen ook de internetverbindingen van zo’n 2 miljoen huishoudens uit. Dat is jammer, want Ziggo is niet de enige aanbieder van DNS.

 

 DNS zorgt ervoor dat namen op internet vertaald kunnen worden in de IP-adressen, die nodig zijn om andere computers op internet te kunnen benaderen. In de meeste gevallen is het nergens voor nodig, dat je als eindgebruiker de DNS-servers van jouw providers gebruikt en geen externe DNS-servers. Dat betekent dat de oplossing eigenlijk vrij eenvoudig is: zorg ervoor dat je DNS resolver (op Linux standaard het bestand /etc/resolv.conf) voorzien is van één of twee reserve DNS-servers. Gebruik daarvoor DNS-servers, die bij een heel ander bedrijf vandaan komen. Zolang je er maar voor zorgt dat je niet alle DNS-servers hebt ingesteld op servers van je provider, kan er eigenlijk maar weinig misgaan, als er weer eens een aanval voorbij komt, die nu net gericht is op jouw provider.

 

Conclusie

 

DDoS aanvallen vinden alleen maar plaats, omdat veel gebruikers geen idee hebben wat ze ertegen kunnen doen. In dit artikel heb je gelezen, dat je als Linux gebruiker een eenvoudige oplossing voorhanden hebt in de vorm van de DNS resolver en SELinux. Nu maar hopen dat het nooit nodig zal zijn om een deel twee van dit artikel te hoeven schrijven…