Bruteforce-aanvallen tegengaan met een vertraging

Reading Time: 4 Minutes

Het is belangrijk om je WordPress wp-login.php inlogpagina te beveiligen tegen bruteforce-aanvallen. Er zijn verschillende beveiligingsplugins beschikbaar die dit voor je regelen. Voor dit artikel heb ik de WordPress Login Delay plugin aangepast met een vaste vertraging van drie seconden, om een bruteforce-aanval op wp-login.php te vertragen. Maar is dat ook verstandig? …

WordPress bruteforce beveiliging? #

StackOverflow-eigenaar Jeff Atwood schrijft op in een blogartikel op zijn website:

Advertisement:

Limiting the number of login attempts per user is security 101. If you don’t do this, you’re practically setting out a welcome mat for anyone to launch a dictionary attack on your site, an attack that gets statistically more effective every day the more users you attract.

Lees zijn Dictionary Attacks 101 blogpost eerst, zodat je precies weet waarover het gaat en wat bruteforce is.

Doe maar rustig aan, dit artikel wacht wel even op je :) .

WordPress Login Delay plugin #

De volgende PHP code kun je gebruiken als een WordPress plugin (maak bijvoorbeeld login-delay\login-delay.php aan), of toevoegen aan het thema functions.php bestand.

<?php
/*
* Plugin Name: Saotn WordPress Login Delay
* Description: Saotn WordPress Login Delay plugin adds a three second delay 
*   when logging into WordPress. This slows down brute-force attacks on 
*   your website. However, it is not recommended to use sleep(), because 
*   a heavy brute-force attack will let all those POST requests sleep 
*   for the given amount of time.
* Original plugin name: WordPress Login Delay
* Original plugin URI: https://wordpress.org/plugins/wp-login-delay/
* Version: 1.0
* Author: Jan Reilink
* Author URI: https://www.saotn.org
* Original author: Michael Damoiseau 
* Original author URI: http://damoiseau.me
*/

if( !function_exists( 'saotn_auth_login' ) ) {
    function saotn_auth_login ( $user, $password ) {
        (int) $delay = 3;
        sleep( $delay );

        return $user;
    }
    add_filter( 'wp_authenticate_user', 'saotn_auth_login', 1, 2 );
}
?>

(deze code komt van mijn Engelstalige blogpost Add a delay to your WordPress login form)

Kanttekening bij login vertragingstechnieken #

Let op: het doel van dit artikel is niet deze wp-login.php beveiliging. Het doel van dit artikel is, tussen de regels door, om jou te laten zien dat je niet zomaar al het advies wat je online vindt moet overnemen.

Als je het commentaar in de PHP-code hierboven hebt gelezen, dan weet je dat het niet verstandig is een sleep() in PHP-code te gebruiken. Ieder request op het WordPress inlogformulier laat PHP drie seconden slapen, en tijdens een stevige bruteforce-aanval hebben we het over honderden, of duizenden inlogpogingen.

Zo wordt een bruteforce-aanval al snel een Denial-of-Service (DoS), want de webserver kan het aantal slapende processen niet meer aan. Een vertraging, of throttling van inlogpogingen is goed voor de beveiliging, maar helaas ben ik nog niet een plugin tegengekomen wat dit goed regelt.

Om een Denial-of-Service op jouw website, en webserver, te voorkomen kun je het beste gebruikmaken van een IP whitelist, waarin alleen jouw IP-adres toegang tot wp-login.php heeft. Zie mijn WordPress web.config op Saotn.org voor een IIS voorbeeld.

Ook een eenvoudige captcha-beveiliging, waarbij je een toegangscode moet overtypen, werkt erg goed in het tegengaan van bruteforce-aanvallen.

WordPress beveiligingsplugins #

Goede WordPress beveiligingsplugins zijn onder andere:

Je vindt hier meer goede WordPress plugins.

Conclusie WordPress beveiligen tegen bruteforce #

Alhoewel je dus niet een PHP sleep() vertraging moet gebruiken in WordPress om jouw inlogpagina te beveiligen tegen bruteforce-aanvallen, kan een goed geïmplementeerde vertragingstechniek wél helpen. Een vertragingstechniek is bijvoorbeeld een captcha, waarbij eerst een unieke code overgetypt moet worden.

Vind je een captcha wat onvriendelijk, bijvoorbeeld richting jouw klant, dan kun je ook gebruikmaken van een IP whitelist; alleen daarin opgenomen IP adressen krijgen toegang tot de WordPress wp-login.php inlogpagina.

Neem dus niet klakkeloos ieder advies en/of voorbeeld over wat je op internet vindt ;-)


Advertisement:


Hoi! Praat mee en laat een reactie achter!