WordPress Brute Force Attack

Vier maatregelen om Brute Force aanvallen op jouw WordPress te voorkomen

Wat zijn brute force aanvallen, waarom gebruiken aanvallers ze en hoe kun je deze aanvallen op jouw WordPress site voorkomen? Je zult je zeker dergelijke vragen stellen wanneer je met dit onderwerp te maken krijgt. Wij hebben de antwoorden op deze vragen verzameld.

Wat zijn Brute Force aanvallen?

Brute force aanvallen zijn pogingen om toegang te krijgen tot je systeem (in jouw geval, waarschijnlijk WordPress). Dit wordt gedaan door te proberen een gebruikersnaam en wachtwoord te raden. Dit account heeft immers al toegang tot het systeem. 

Het is een zeer eenvoudige en primitieve methode (de naam zegt het al – Brute Force = brute kracht) die toch zeer doeltreffend is. Tegelijkertijd is het ook heel gemakkelijk te voorkomen.

Welke soorten Brute Force aanvallen zijn er?

Er zijn kleine maar subtiele verschillen tussen brute force aanvallen en hun aanvalscenario's. De meest voorkomende types kunnen in 5 categorieën worden onderverdeeld:

  1. Simple Brute Force Attack
  2. Dictionary Attack
  3. Hybrid Brute Force Attack
  4. Reverse Brute Force Attack / Password Spraying
  5. Credential Stuffing

Hieronder leggen wij elke categorie in detail uit.

"*" geeft verplichte velden aan

Toestemming*
Dit veld dient ter validatie en mag niet worden gewijzigd.

1. Simple Brute Force Attack

Dit is de zuiverste vorm van een brute kracht aanval. Het probeert elke combinatie van karakters één voor één uit – zonder enig onderzoek of aparte procedure anders dan het simpelweg tellen van karakters omhoog of omlaag.

WordPress Brute Force Simple Attack
Credit: Matthias Held

Deze methode is eenvoudig, maar kost tijd of veel rekenkracht. Met steeds krachtigere processoren of de mogelijkheid om veel verschillende systemen tegelijk op een aanvalsdoel los te laten (bijvoorbeeld met behulp van botnets of cloudservers), is het echter nog steeds een geldige methode. 

Er zijn zowel laboratoriumtests als toepassingen in de praktijk waarmee een wachtwoord van 8 karakters in minder dan 12 minuten kan worden gekraakt. Naarmate de technologie voortschrijdt, zal het nog sneller en gemakkelijker worden om het doel te bereiken. Daarom blijft deze methode populair bij aanvallers die zich specifiek op een bepaald doelwit richten.

Voordeel: alle wachtwoorden kunnen worden geraden.
Nadeel: Het kan lang duren en vereist veel rekenkracht.

Goede verdedigingsmethodes: Gebruik lange wachtwoorden met een groot aantal tekens.

2. Dictionary Attack

In tegenstelling tot de Simple Brute Force methode, gebruikt de Dictionary Attack een bestaande dataset om te testen.

Dit kunnen gegevens uit verschillende bronnen zijn:

  1. Echte woordenboeken, bijvoorbeeld, alle woorden uit de Dikke Van Dale.
  2. Wachtwoordenlijsten zoals de 10.000 meest gebruikte wachtwoorden.
  3. Wachtwoorden van vroegere inbreuken (gebruikersnamen en wachtwoorden van vroegere hacks van websites en applicaties).

De eerste variant wordt steeds minder belangrijk, maar de laatste twee zijn in de loop der jaren sterker geworden, want met de toename van cyberaanvallen neemt de hoeveelheid gegevens op deze lijsten natuurlijk ook toe.

WordPress Brute Force Dictionary Attack
Credit: Matthias Held

Voordeel: Omdat gebruikers graag wachtwoorden gebruiken die kunnen worden onthouden, maken ze het zichzelf vaak gemakkelijk en gebruiken ze losse woorden uit het woordenboek of namen en doen dit herhaaldelijk op alle diensten, websites en apps. De kans op succes is dus vrij groot en de methode is aanzienlijk sneller dan een Simple Brute Force.


Nadeel: De kans op succes is niet langer 100 %.

Goede verdedigingsmethoden: gebruik geen losse woorden uit het woordenboek of namen, voorwerpen en dergelijke. Gebruik hetzelfde wachtwoord ook slechts voor één account en niet voor meerdere. 

3. Hybrid Brute Force Attack

De Hybrid Brute Force aanval is een combinatie van de Simple Brute Force Attack en de Dictionary Attack.


Hier wordt een woord uit de Simple Brute Force genomen en gecombineerd met potentiële getallen die vaak worden gebruikt, zoals een geboortejaar of huwelijksdag. Dit beperkt het aantal mogelijke pogingen drastisch en vereenvoudigt dus het aanvalsproces.

WordPress Brute Force Hybrid Attack
Credit: Matthias Held

Voordeel: Deze methode heeft hetzelfde voordeel als de Dictionary Brute Force, alleen wordt hier het aantal pogingen verhoogd en uitgebreid met eenvoudige toevoeging van tekens zoals smileys in tekstvorm of jaartallen (Maga2020 is een bekend voorbeeld).
Nadeel: Net als bij de Dictionary Brute Force is de kans op succes niet langer 100 %.

Goede verdedigingsmethoden: gebruik in wachtwoorden geen datums of getallen die voor jou belangrijk zijn.

4. Reverse Brute Force Attack of Password Spraying

Aanvallers proberen een wachtwoord te combineren met verschillende gebruikersnamen. De gebruikersnaam varieert, maar het wachtwoord blijft hetzelfde.

WordPress Brute Force Reverse Attack
Credit: Matthias Held

Voordeel: Zoals hierboven reeds is beschreven, zijn mensen geneigd hun wachtwoorden te hergebruiken en zo memorabel mogelijke wachtwoorden te gebruiken. Dat geldt ook voor dit soort aanvallen. Bovendien omzeilt het een Lock Out (inlogvergrendeling voor de account) als er te veel pogingen worden gedaan op dezelfde gebruikersaccount.

Nadeel: Deze methode kan leiden tot veel toegangen, maar misschien niet tot de accounts die jij wilt.

Goede verdedigingsmethodes: Aangezien ook hier meestal standaardlijsten voor gebruikersaccounts worden gebruikt (voor zover deze niet kunnen worden gelezen), is het raadzaam om, net als bij het wachtwoord, een moeilijk te raden gebruikersnaam te kiezen met veel alfanumerieke tekens en speciale tekens.

5. Credential Stuffing

Ook gegevens over inbreuken in het verleden (zie Dictionary Attack uit punt 2) spelen hierbij een rol. Credential Stuffing doet niets anders dan de logingegevens van bestaande inbreuken hergebruiken.

Als je bijvoorbeeld ergens op een website of een app
de gebruikersnaam yourmail@yourwebsite.com en het wachtwoord Cola123
hebt gebruikt en deze gegevens door een inbraak naar buiten zijn gekomen, zullen aanvallers ze gebruiken om in te loggen bij andere diensten en apps.

WordPress Brute Force Credential Stuffing
Credit: Matthias Held

Deze aanval heeft een zeer grote kans van slagen en wordt steeds populairder. Daarom is het op dit moment een van de gevaarlijkste.

Op de website haveibeenpwned.com kun je nagaan of een van jouw accounts al is gekraakt.

Raidboxes en breaches

Bij het aanmaken van een nieuwe gebruikersaccount controleert Raidboxes of het wachtwoord al in een inbreuk is geweest (anoniem en onvindbaar).

Voordeel: Ook hier speelt het feit dat mensen gewoontedieren zijn een rol. De meeste mensen gebruiken hetzelfde e-mailadres en hetzelfde wachtwoord voor veel diensten. Dit voorkomt ook een lock-out voor accounts zoals bij Reverce Brute Force.

Nadeel: Bij deze aanval moet je van tevoren nagaan of de persoon wiens account je wilt openen ook gebruik maakt van de dienst/website/app. Maar als je gewoon in de eerste plaats toegang wilt, is het een zeer succesvolle methode.

Goede verdedigingsmethodes: Gebruik nooit meer dan één keer dezelfde inloggegevens. Hou ze uniek overal waar je je registreert.

Hoe bescherm ik mijn WordPress website tegen Brute Force aanvallen?

Ik lees en hoor vaak het advies: "Gebruik gewoon sterke wachtwoorden."

Dit mag in principe waar zijn, maar met genoeg tijd en middelen kan elke combinatie van aanmeldingen via Brute Force worden gekraakt als geen andere beschermingsmaatregelen worden gebruikt.

Bovendien betekenen deze aanvallen een vermijdbare belasting van je server – en dit schaadt niet alleen de laadtijd van je website, maar ook je portemonnee als je hoster per traffic rekent. 

De beste methode is nog steeds om te voorkomen dat deze aanvallen überhaupt plaatsvinden en om de toegang volledig te blokkeren.

Op serverniveau

Actie 1: Blokkeer ongeoorloofde verzoeken op je login

Hoe veilig de inlogcombinatie ook is, het zou veel tijd, rekenkracht en zonder verdere bescherming gekraakt kunnen worden.
In feite is de meest efficiënte manier om een beveiliging te creëren die elk ongeoorloofd verzoek aan je WordPress login-formulier volledig blokkeert. Op die manier komen de automatische en handmatige aanvallen er niet door. Uiteindelijk beschermt dit ook jouw server.

Hier zijn verschillende mogelijkheden voor. Niet elke mogelijkheid past, dit hangt af van hoe technisch ervaren je bent en hoeveel instellingsmogelijkheden je hebt met betrekking tot je DNS en server instellingen. 

Tip: IP Allow List maken


Bescherming: 🔒🔒🔒🔒🔒
Technische inspanning: 🛠️🛠️🛠️

Als je altijd toegang hebt tot het internet met hetzelfde IP adres, bijvoorbeeld omdat je een eigen VPN hebt of een vast IP in je bureau, is de veiligste methode om een Allow List aan te maken voor dit IP op de /wp-admin en /wp-login.

Apache

Als jouw webserver op Apache draait, voeg dan dit gedeelte toe aan de .htaccess:

RewriteEngine on

RewriteCond %{REQUEST_URI} ^(.*)?wp-login\.php(.*)$ [OR]

RewriteCond %{REQUEST_URI} ^(.*)?wp-admin$

RewriteCond %{REMOTE_ADDR} !^123.123.123$ 

RewriteRule ^(.*)$ - [R=403,L]


Belangrijk:
Merk op dat je in de regels met REMOTE_ADDR alleen de CIJFERS hoeft te vervangen door de respectieve nummers van je IP.
Als jouw IP bijvoorbeeld 95.217.228.176 is, moet de regel luiden:

RewriteCond %{REMOTE_ADDR} !^95.217.228.176$.

Voeg voor elk toegestaan IP-adres een aparte regel toe. Herstart dan je Apache service om de veranderingen toe te passen.

Nginx

Voeg dit Snippet toe aan je serverblok van het virtuele hostbestand. Nogmaals, voor elk toegestaan IP adres moet je een "allow" regel toevoegen.

location = /wp-login.php {

     allow 192.168.1.1; #IP-adres 1 voor elk toegestaan IP-adres één regel

     allow 172.16.1.1; #IP adres 2

     deny all;

     include snippets/fastcgi-php.conf;

     fastcgi_pass unix:/run/php/php7.4-fpm.sock;

     }

Herstart je nginx service om de veranderingen toe te passen.

Tip: Gebruik CDN firewall


Bescherming: 🔒🔒🔒🔒🔒
Technische inspanning: 🛠️

CDN's kunnen een zeer goede bescherming bieden door de firewall zo te configureren dat deze een captcha-vraag inschakelt vóór het aanmeldformulier.
Hier is een handleiding voor Cloudflare. In het gratis Cloudflare plan kun je tot 5 regels aanmaken.

1. Log in op je Cloudflare-Dashboard, ga naar Firewall en maak een nieuwe firewallregel aan.

2. De data van de regel zijn:

WordPress Brute Force CDN Firewall

Dat was het.

Tip: Maak een blocklist via Fail2Ban


Bescherming: 🔒🔒🔒🔒
Technische inspanning: 🛠️🛠️🛠️🛠️🛠️

Als je geen vast IP hebt en geen CDN gebruikt, kan je een blocklist aanmaken via Fail2Ban. Je kunt hier goede tutorials vinden:

Bedenk echter dat je dit specifiek moet aanpassen aan de /wp-login URL.

Tip: Raidboxes Dashboard

Bescherming: 🔒🔒🔒🔒🔒
Technische inspanning: 🛠️

In combinatie met een veilige gebruikersnaam en een veilig wachtwoord en Raidboxes Single Sign On.

Raidboxes klanten hebben al een configureerbare anti-brute force module op elk van hun instanties.
Samen met Single Sign On is dit een van de hoogste beveiligingsinstellingen die je kunt hebben zonder enige technische inspanning.

In WordPress zelf

Als je deze stappen hebt gevolgd, ben je zeer goed beschermd tegen aanvallen.
Als je deze oplossing(en) echter niet kunt toepassen omdat je misschien geen toegang hebt tot de serverinstellingen of DNS-records voor het instellen van een CDN, zijn hier een paar andere stappen voor jou.

Maatregel 2: Username Enumeration voorkomen

Voordat we overgaan tot veilige wachtwoorden, beginnen we bij het begin: met de Usernames.

Gebruikersnamen zijn goed voor 50 procent van de toegang – en WordPress maakt het helaas erg gemakkelijk om de gebruikersnaam (login) te lezen voor alle aangemaakte accounts met admin rechten. En dit is geautomatiseerd. Je kunt dit voorkomen door ofwel zelf iets te doen en je WordPress te beveiligen – of door de volgende plugins te installeren.

Tip: Oplossing via plugins


Bescherming: 🔒🔒🔒
Technische inspanning: 🛠️

Plugin 1: Unified Login Error Messages
Deze plugin onderdrukt de uitvoer van verschillende foutmeldingen voor incorrecte inlogpogingen. Dit komt omdat WordPress momenteel een andere foutmelding geeft als een gebruikersnaam wel of niet bestaat. Dit maakt het gemakkelijk om te zien of de ingevoerde gebruiker bestaat.

Plugin 2: Stop User Enumeration
Stop User Enumeration doet precies wat het zegt: het blokkeert ongeoorloofde verzoeken aan je WordPress, bijvoorbeeld om gebruikersnamen uit te lezen via het auteursarchief.

Tip: Oplossing via functions.php

Bescherming: 🔒🔒🔒
Technische inspanning: 🛠️🛠️

Als je liever zelf het heft in handen neemt, kun je de functions.php van je actieve theme aanpassen (maak wel eerst een backup).

Voeg de volgende code toe:

PHP-code

// If the user is not authenticated as an admin
if (!is_admin()) {
// RegEx to check if the request went to an “/author=INT” endpoint
if (preg_match('/author=([0-9]*)/i', $_SERVER['QUERY_STRING'])) die();    add_filter('redirect_canonical', 'stop_user_enum', 10, 2);
}
function stop_user_enum($redirect, $request) {
// // RegEx to check if the the request went to an “/author=INT” endpoint but with the permalink furl format
if (preg_match('/\?author=([0-9]*)(\/*)/i', $request)) die(); else return $redirect;
}

Tip: Raidboxes Dashboard


Bescherming: 🔒🔒🔒
Technische inspanning: 🛠️

Raidboxes klanten profiteren van kant-en-klare oplossingen op het Raidboxes Dashboard. Je hoeft hier niets anders te doen dan ze aan te zetten.

Maatregel 3: "Gebruik gewoon sterke wachtwoorden".

Opmerking: Bij Raidboxes vragen we bij het registreren van een nieuwe account bij het toekennen van wachtwoorden dingen die brute kracht queries veel moeilijker maken. Dit omvat: 

  • Vooraf ingestelde minimumlengte
  • Complexiteit
  • of het wachtwoord in het woordenboek kan worden gevonden (Engels of Duits)
  • of het een datum bevat
  • of het al in een bekende wachtwoordbreach is geweest (anoniem en onvindbaar)

Wachtwoorden zijn gebrekkig: omdat zij kunnen worden geraden (brute force), meegelezen (key logger enz.), uitgelezen (wegens geen of gebrekkige encryptie/opslag in gegevensgeheugens), alleen de autorisatie van een eindapparaat herkennen, maar niet de identiteit van de persoon erachter, en gewoonlijk moeilijk te onthouden zijn (als ze al "veilig" zijn).

Voor dit laatste probleem zijn er wachtwoordmanagers zoals 1Password, BitWarden, KeePass en meer. 

Wanneer we ons in de WordPress omgeving bevinden, moeten we aanvaarden dat we wachtwoorden moeten gebruiken.

Dus wat is een "veilig" wachtwoord?

Een sterk wachtwoord is een lang wachtwoord dat een zekere mate van complexiteit heeft. 

Ja, de lengte van het wachtwoord is belangrijker dan de complexiteit. Een wachtwoord van 8 tekens kan voor 25$USD binnen 12 minuten worden geraden, zelfs als het uit veel speciale tekens, hoofdletters en cijfers bestaat.

De volgende GIF illustreert zeer goed waarom lengte zwaarder weegt dan complexiteit:

WordPress Brute Force Safe Password
Credit: Intel Security // Intel.com

Ook hackers hebben geen zin om veel geld of tijd te investeren in intensieve berekeningen van lange wachtwoorden. Daarom geldt de vuistregel: hoe langer je wachtwoord, hoe beter!

Maar lange en complexe wachtwoorden zijn moeilijk te onthouden!

Dat is waar, maar in het tijdperk van wachtwoordmanagers hoeven we maar één lang en complex wachtwoord te onthouden en laten we deze managers de rest aanmaken en opslaan.

Als we dit ene wachtwoord hebben en, in het beste geval, het af en toe veranderen, zitten we aan de veilige kant.

Hier is een geheim over hoe je lange, complexe wachtwoorden maakt en ze meteen onthoudt:

WordPress Brute Force Complex Passwords
Credit: xkcd.com 

Dit betekent dat we deze XKCD strip ter harte kunnen nemen en een lang wachtwoord kunnen maken volgens een van de onderstaande patronen:

Treinstoel+Veldweg-7-Ogenblik

Of we gebruiken hele zinnen met een beetje extra complexiteit:

I_like_spinach_only_3_times_a_day

We hebben een betrekkelijk betekenisloze zin gemaakt met speciale tekens en een getal, die heel erg moeilijk te raden is en tegelijk memorabel (pluspunten voor een rijmpje). Dit wordt ook wel een passphrase genoemd.

Veel wachtwoordbeheerders, zoals BitWarden, maken zulke memorabele maar complexe passphrases voor jou aan.

Toevoeging: Gebruik een veilige gebruikersnaam

Zoals gezegd: 50 procent van je toegang is de gebruikersnaam.

Als een aanvaller dit deel van de toegang kent, dan is de helft al gedaan. Het enige wat overblijft is het wachtwoord. Gebruik dus geen gebruikersnamen zoals admin, administrator of je naam, gebruik niet de naam van de website of het domein of iets dat met de site zelf te maken heeft. 

Voorbeeld

Als je site www.ireallylovecats.com heet, gebruik dan geen naam die iets met katten te maken heeft. 

Nog beter, gebruik dezelfde wachtwoordtruc van hierboven en gebruik een lange zin en voeg complexiteit toe zoals asfalt/kan/ook/met/7/kruiden.

Maak wachtwoord aan Raidboxes

Maak een wachtwoord en gebruikersnaam met maximale lengte (in WordPress momenteel 60 tekens voor de gebruikersnaam en 64 tekens voor het wachtwoord, zie database-eigenschappen) en veel letters, cijfers en speciale tekens – gebruik dan gewoon de Single Sign On in Dashboard. Veilig inloggen met één klik.

Maatregel 4: Security plugins

Tip: Plugins voor alle doeleinden

Bescherming: 🔒🔒🔒🔒

Technische inspanning: 🛠️🛠️ tot 🛠️🛠️🛠️

Er zijn bijvoorbeeld heel wat WordPress veiligheidsplugins op de markt:

Al deze beveiligingsplugins bieden ingebouwde bescherming tegen brute force en nog veel meer. Voor de meeste WordPress websites zal de installatie en het onderhoud van deze plugins voldoende bescherming bieden. Ook de configuratie en het onderhoud zijn minimaal.

Toch hebben plugins één (in de meeste gevallen klein) nadeel: de belasting van de server als gevolg van brute kracht kan door dergelijke plugins niet worden verminderd. Deze plugins hebben een PHP-proces nodig om te controleren of de toegang geldig is, of het IP niet op de blocklist staat, en of het om een brute force-aanval gaat.

Dit alles legt een belasting op de server per verzoek. Natuurlijk is dit nog altijd minder dan een inlogpoging zelf – en zolang de server niet echt is getroffen, moet de aanval bijna D/DOS-afmetingen aannemen – maar hij kan niet worden genegeerd.

Maar laten we teruggaan naar de vele voordelen van de plugins: als ze altijd up-to-date worden gehouden, worden nieuwe soorten aanvallen snel gedetecteerd en tegengegaan zonder dat je zelf iets hoeft te doen.

Tip: WP login verbergen

Bescherming: 🔒

Technische inspanning: 🛠️

"Security through obscurity" is een uitdrukking die in de beveiligingswereld vaak voor deze methode wordt gebruikt.

Het betekent uiteindelijk dat men aanvallen probeert te stoppen door een probleem gewoon te verhullen. Dit werkt in een aantal gevallen goed, omdat brute force aanvallen niet via het inlogformulier gaan, maar query parameters gebruiken om de inlogpogingen te starten.


Alleen omdat de standaard URL zoals /wp-admin of /wp-login.* niet toegankelijk is, zullen deze aanvallen niet stoppen.

Conclusie

Ik hoop dat ik de verschillende soorten brute force aanvallen heb kunnen uitleggen en je tips heb kunnen geven over hoe jij jouw WordPress hier in de toekomst tegen kunt beschermen. Als je nog vragen hebt, dan horen wij dat graag van je!

Vond je het artikel leuk?

Met jouw beoordeling help je ons om onze inhoud nog verder te verbeteren.

Laat een reactie achter

Je e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd met *.