Brute force attacks op WordPress

bruteforce

Brute force attacks

De afgelopen dagen ging steeds mijn webserver down tezamen met een aantal sites die er op draaien. Helaas was ik veel onderweg of druk bezig om het aan te pakken. Vandaag had ik dan eindelijk tijd om hier wat aan te doen. Waarom ging mijn server down? Door allerlei pogingen om in te loggen in mijn website. Ik gebruik WordPress en men probeerde hierop in te loggen om zo spam of andere troep er op te zetten. Gelukkig gebruik ik moeilijke wachtwoorden dus de pogingen mislukte, maar mijn server kreeg zoveel inlog-pogingen voor zijn kiezen dat hij het werk niet meer aankon en crashte.

Het werd tijd om wat achterstallige beveiligingen aan te brengen.
Ik heb twee dingen op mijn lijst staan:
1. Een extra authenticatielaag invoeren zodat men alleen bij de inlogpagina kan komen met een username en wachtwoord. Daarna kunnen ze met hun gebruikelijke inlog gegevens in WordPress komen.

2. Alle permissies van WordPress op de bestanden goed zetten zodat men wel plaatjes kan uploaden, maar WordPress niet open staat voor allerlei aanvallen.

Extra authenticatie laag

Hiervoor heb ik de .htaccess file aangepast zodat er een wachtwoord gevraagd wordt als het bestand ./wp-login.php wordt aangeroepen. Dit bestand is nodig om in te loggen en je zag in mijn Apache logfiles dat deze ook veel (10-20x per seconde) werd aangeroepen.

wp-login opvragen

wp-login opvragen

Tijd om deze te blokkeren. In de .htaccess heb ik opgenomen:

# BEGIN WordPress brute force

AuthUserFile /etc/apache2/[een htpassword file]
AuthName "Inloggen in het CMS"
AuthType Basic
require user [een username]

# END WordPress brute force

Nu moest ik alleen nog het wachtwoord opslaan:

sudo htpasswd -c /etc/apache2/[een htpassword file] [een username]

En dan het bijbehorende wachtwoord.

Rechten op bestanden goed zetten

Leuk dat men de eigen plug-ins kan updaten of plaatjes kan uploaden, maar het is niet de bedoeling dat bezoekers de website-folders ook kunnen beschrijven. Hoe probeer je dit zoveel mogelijk te voorkomen? Gelukkig heeft iemand anders daar over nagedacht en heb ik het volgende script gebruikt: WordPress Permissions Configuration Script

#!/bin/bash
#
# This script configures WordPress file permissions based on recommendations
# from http://codex.wordpress.org/Hardening_WordPress#File_permissions
#
# Author: Michael Conigliaro
#
WP_OWNER=changeme # <-- wordpress owner
WP_GROUP=changeme # <-- wordpress group
WP_ROOT=/home/changeme # <-- wordpress root directory
WS_GROUP=changeme # <-- webserver group

# reset to safe defaults
find ${WP_ROOT} -exec chown ${WP_OWNER}:${WP_GROUP} {} \;
find ${WP_ROOT} -type d -exec chmod 755 {} \;
find ${WP_ROOT} -type f -exec chmod 644 {} \;

# allow wordpress to manage wp-config.php (but prevent world access)
chgrp ${WS_GROUP} ${WP_ROOT}/wp-config.php
chmod 660 ${WP_ROOT}/wp-config.php

# allow wordpress to manage .htaccess
touch ${WP_ROOT}/.htaccess
chgrp ${WS_GROUP} ${WP_ROOT}/.htaccess
chmod 664 ${WP_ROOT}/.htaccess

# allow wordpress to manage wp-content
find ${WP_ROOT}/wp-content -exec chgrp ${WS_GROUP} {} \;
find ${WP_ROOT}/wp-content -type d -exec chmod 775 {} \;
find ${WP_ROOT}/wp-content -type f -exec chmod 664 {} \;

Het enige wat ik nog moest doen was het op een bepaalde plek opslaan en uitvoeren. Ik sloeg het op als een permissies.sh script in Ubuntu ergens. Paste de changeme velden aan. En met:

chmod +x ~/permissies.sh

zorgde ik er voor dat het uitvoerbaar werd. Eenmaal het bestand uitvoerbaar kan je het uitvoeren en het zet alle rechten goed.