Dinsdagmiddag 16:00. Een relatief rustige dag om aan een nieuw innovatieproject te werken bij Independer. Leek het.

Mijn lieftallige collega belt me met de melding dat alle kompassen van Kieskompas down zijn. Mijn eerste reactie is natuurlijk 'Dat kan niet. We draaien op vele servers met enorme capaciteit.'

Maar toch; we waren down, en goed ook.

Eerste stappen

Als eerst; kijken naar statistieken. De belasting van het netwerk zag er op dat moment als volgt uit:

Zo zag het verkeer er uit.

Het opmerkelijke was dat onze infrastructuur geen enkele problemen vertoonde.

Dit is niet de volledige schaal van de aanval, omdat onze grote vriendelijke hosting provider (waar we een groot deel van het verkeer naar Kieskompas doorheen leidde) de DDoS aanval opmerkte en het verkeer blokkeerde naar het aangevallen IP adres. Na het analyseren van het verkeer naar de servers, en het handmatig uitsluiten van een aantal IP adressen waar een overdadige hoeveelheid verkeer vandaan kwam, besloten we van IP adres te wisselen. Dit leidde tot ongeveer 10 minuten uptime, waarna exact hetzelfde voorviel als waarmee het begon.

Omdat het verkeer naar de servers uit voorzorg geblokkeerd werd (een goede stap om te nemen, maar in ons geval wel een beperkende), zijn we er niet echt achter gekomen hoe goed we de aanval konden weren met onze eigen capaciteit.

Meer inzicht

Aan de hand van onderzoek hebben we kunnen bevinden dat het ging om een botnet dat opgeschaald werd om de automatische DDoS bescherming die op onze infrastructuur wordt toegepast te overbelasten. Het was duidelijk dat de aanval gericht was op het veroorzaken van blijvende downtime.

Na uitvoerig onderzoek binnen onze infrastructuur en de consequenties van de aanval (in principe geen), en overleg met het tech-team van Stemwijzer, nam Google Shield contact met ons op. Google Shield is een programma van Google om sites die zich richten op bevordering van vrije meningsuiting en politiek advies te beschermen tegen DDoS aanvallen.

Samen met meerdere Google Engineers heb ik tot laat in de nacht gewerkt aan het afweren van de aanval door over te gaan op Shield infrastructuur. Na onze overstap op Google Shield en het verwijderen van onze traditionele load balancers leek het erop dat alles weer goed ging.

Tot de volgende ochtend.

Om 08:00 was het weer raak. Dit keer dwars door Google Shield heen. Wederom geen overbelasting van onze applicatie servers en/of database, maar wel een enorme hoeveelheid verkeer vanuit Azië en Noord Amerika (het is niet ongewoon dat botnets/DDoS aanvallen hier vandaan komen, en het zegt niks over de daadwerkelijke oorsprong van de aanval).

Tweede soort DDoS

Het leek hier op een slowloris aanval, die verbindingen naar onze servers zo lang mogelijk open hielden. Door proactief honderden IP adressen uit deze continenten te blokkeren, is een groot deel van de aanval toen opnieuw afgeweerd. Dit was woensdag, rond 12:30. In onze logs zag ik duidelijk terug dat onze server processen timeouts vertoonden, en dat er abnormaal veel requests naar de homepage van het Kieskompas kwamen. Je ziet in de bovenstaande afbeelding dat er een hoog aantal errors was in deze periode.

Zo zag de afgeweerde aanval eruit, er was weer ruimte voor verbindingen vanuit Europa, die 'legit' waren:

Afgeweerde aanval

Het was alleen nog niet over. Tegen 15:00 was het opnieuw raak. Dit keer vertoonde de aanval weer andere eigenschappen; er werden namelijk enorm veel requests gedaan naar andere punten in de applicatie. Zoals je je wel kan voorstellen, is onze infrastructuur erg afhankelijk van specifieke requests en heeft extreme toename hiervan een substantiële impact.

Wederom was er geen moeite voor de servers om alle verkeer te verwerken, maar wel om de enorme hoeveelheid verbindingen te verwerken. Ze hadden een manier gevonden om de hoeveelheid verbindingen naar andere delen van onze infrastructuur extreem hoog te maken. Niet door verbindingen met het Kieskompas zelf lang open te houden, maar door er juist extreem veel te doen, met specifieke eigenschappen waardoor ze als 'nieuw' werden bevonden door onze applicatie servers (de meeste requests hebben nagenoeg geen impact). In alle onschuld openden onze applicatie servers welwillend verbindingen, die uiteindelijk zorgden voor verstoppingen.

Na wederom met (inmiddels 4) Google Engineers gesproken te hebben, hebben we weer een groot deel van ook deze aanval af kunnen weren door extra IP adressen te blokkeren (deze waren inmiddels gewisseld). Sindsdien is het redelijk rustig gebleven, en zijn we niet zonder slag of stoot online gebleven om zo nog een bijdrage te kunnen leveren aan deze extreem belangrijke verkiezingen.

Hoe nu verder?

Veel onderzoek en aangifte. Samen met de autoriteiten, Stemwijzer en Google Shield, gaan we bij Luminum Solutions alle data van deze aanval analyseren om er meer van te leren. In het vervolg zullen we voorbereid zijn, beter dan ooit. We gaan met man en macht werken aan het verbeteren van alle componenten in het Kieskompas en we hebben enorm veel geleerd.

Bij mij persoonlijk heeft dit voorval de motivatie me in te zetten voor onze democratie en vrijheid van meningsuiting op het internet enorm vergroot. Het kan niet zo zijn dat we de slagader van effectieve democratie; de mogelijkheid en het recht je vrij te kunnen informeren en om vrij informatie te delen, gevoelig laten zijn voor dit soort aanvallen op essentiële processen voor onze vrije democratie. Het feit dat stemadvies applicaties een slachtoffer geweest zijn bewijst alleen maar meer dat we iets bijdragen aan een proces dat een belang vervult binnen onze samenleving, dat is iets dat te allen tijde bewaakt moet worden.

Stemwijzer

Zoals in het begin genoemd was ook Stemwijzer aangevallen, op hetzelfde moment als Kieskompas. Bij ProcoliX was de aanval ook flink te merken, hierdoor is zelfs De Groene Amsterdammer (gehost door ProcoliX) gedeeltelijk down geweest. Hier kan je daar wat meer over lezen.