De 5 grootste WordPress-beveiligingsrisico’s
De immense populariteit van WordPress brengt ook risico’s met zich mee: het systeem is ook enorm populair bij hackers en spammers. In deze blogpost geef ik je 5 tips om jouw WordPress-site zo snel mogelijk gehackt te laten worden.
Waarop is dit lijstje gebaseerd
Sinds 2007 werk ik dagelijks met WordPress. Het was toen meteen raak: een van mijn eerste sites werd gehackt. Hetzelfde jaar nog een soortgelijk incident als gevolg van een beveiligingslek in een WordPress-forum. Dat maakte indruk. Ik beloofde mezelf plechtig dat me dat nooit meer opnieuw zou overkomen. En tot nu toe is dat gelukt. Door allerlei ‘best practices’ op het gebied van WordPress-beveiliging in acht te nemen. Door standaard extra security-plugins te installeren. Door gezaghebbende WordPress-blogs te volgen. Door regelmatig de ‘logfiles’ van mijn webserver uit te kammen.
Vooral die logfiles leveren interessante inzichten op. Je ziet vrij nauwkeurig hoe vaak er aan jouw deur wordt gerammeld, vanuit welke landen dat gebeurt en welke tactieken ze gebruiken om bij jou door het keukenraampje naar binnen te klauteren, of gewoon de deur te forceren. En geloof me: élke WordPress-site trekt hackers, hoe groot of hoe klein ook. Dus zeg nooit: mijn site is niet zo interessant voor hackers. Vergeet het maar. Hackers maken geen onderscheid tussen interessante en oninteressante sites, ze proberen het gewoon overal.
Op die logfiles heb ik wat statistische analyse losgelaten. Gecombineerd met andere bronnen (forums en blogs) levert dat onderstaande top 5 van meest voorkomende inbrekerstrucs.
1. WordPress niet meer bijgewerkt
Als je inlogt in WordPress, dan zie je zo af en toe de melding dat er nieuwe versies van WordPress-plugins en van WordPress zelf zijn. Absoluut doen, zo’n update. Zodra er in een plugin of thema een beveiligingslek wordt ontdekt, wordt er een nieuwe versie uitgebracht met een fix. Zonder die fix loop je risico’s. En die worden groter naarmate je meer achterloopt met updaten.
Op basis van ervaringen die ik op forums en blogposts heb gelezen, durf ik de volgende stelling wel voor mijn rekening te nemen:
- Als je met het updaten van WordPress meer dan een maand achterloopt, begint het beveiligingsrisico al langzaam op te lopen.
- Als je meer dan 1 of 2 jaar achterloopt, dan ben je tamelijk kansloos: ga er maar vanuit dat je site al een keer is gehackt of dat nog gaat worden.
Mijn ervaring is dat de mogelijkheid om via WordPress zelf updates uit te voeren vrijwel altijd goed gaat. In enkele zeldzame gevallen blijkt echter dat de nieuwe versie van plugin A opeens ruzie krijgt met de nieuwe versie van plugin B. De kans op dit soort conflicten stijgt exponentieel met het aantal geïnstalleerde plugins. Ben je niet helemaal zeker van je zaak, of ben je niet in staat om backups terug te zetten als zo’n update een keer niet goed gaat, laat het updaten dan over aan een WordPress-kenner (ja, dit is zelfpromotie).
2. De artiesteningang: XML-RPC
De afkorting XML-RPC zal je vermoedelijk weinig zeggen. Daarom een ultrakorte uitleg. De gangbare manier om een nieuw WordPress-bericht te publiceren, is inloggen in WordPress en dan de bordjes volgen (Berichten > Nieuw bericht). XML-RPC is een soort artiesteningang waarmee je vanuit andere toepassingen (bijvoorbeeld de WordPress-app) nieuwe berichten kunt plaatsen, zonder de gewone WordPress-voordeur te gebruiken. Ook voor ’trackbacks’ en ‘pingbacks’ is XML-RPC belangrijk (en als je deze twee termen niet kent: geeft niet).
Mijn ervaring is dat de meeste WordPress-gebruikers deze artiesteningang nooit nodig hebben. Bovendien is in het verleden gebleken dat XML-RPC nogal eens kwetsbaarheden met zich meebrengt.
Helaas heeft WordPress ervoor gekozen om deze feature vanaf versie 3.5 toch standaard in te schakelen. Sindsdien zie ik in logfiles een zondvloed van hackerspogingen om via kwetsbaarheden in de XML-RPC in te breken in een van mijn sites. En die aanvallen zijn afgelopen jaar steeds geraffineerder geworden, zo blijkt uit een blog van beveiligingsbedrijf Sucuri.
Mijn advies: XML-RPC zoveel mogelijk uitschakelen. Jammergenoeg maakt WordPress je het op dit punt niet makkelijk: je moet er een speciale plugin voor installeren. Eventueel kun je kiezen voor een laag-bij-de-gronds alternatief: verwijder gewoon het bestandje ‘xmlrpc.php’ uit jouw WordPress-installatie.
3. Inlogpogingen via gebruiker ‘admin’
WordPress bestaat al meer dan 10 jaar. Verreweg de oudste inbrekerstruc is nog steeds razend populair: probeer in te loggen als gebruiker ‘admin’. Vroeger was dat namelijk de standaard gebruikersnaam die WordPress aanmaakte bij installatie. Als je vervolgens ook nog een voor de hand liggend wachtwoord kiest (bijvoorbeeld ‘qwerty’ of de naam van je domein), dan is het gegarandeerd raak. Mijn advies: verwijder de gebruikersnaam ‘admin’ in WordPress en maak voor alle afzonderlijke gebruikers aparte accounts aan.
Andere riskante gebruikersnamen
Toegegeven, het advies om de gebruikersnaam ‘admin’ te vermijden is al bijna net zo oud als WordPress zelf bestaat. Op zich niets nieuws. Maar wel nieuw is dat er nog meer riskante gebruikersnamen bestaan. In mijn logfiles zie ik dat deze gebruikersnamen het vaakst worden uitgeprobeerd:
- admin
- test
- <domeinnaam> (met of zonder extensie, dus zowel ‘laterna’ als ‘laterna.nl’)
- administrator
- wpengine
- webmaster
- backup
Gewoon deze gebruikersnamen vermijden op je WordPress-site en je hebt er geen last van.
En gebruikersnamen met voornaam/achternaam?
Ook persoonsnamen blijken een risico, zie ik in de logfiles. Op deze site proberen hackers bijvoorbeeld ook in te loggen als gebruiker ‘wessel’. Moet je dan ook maar voornamen en achternamen vermijden bij gebruikersnamen? Het ligt inderdaad in de lijn van het vorige advies, maar zover ga ik toch liever niet.
Waarom? Ik ben groot voorstander van persoonsgebonden accounts, waarvan de gebruikersnaam duidelijk is te herleiden tot een bepaald persoon. Als je geen voornamen en achternamen meer kunt gebruiken, raak je snel het overzicht kwijt wie er allemaal toegang hebben tot een site.
Dan toch maar gebruikersnamen met persoonsnamen toestaan. Maar om de ‘hackbaarheid’ van deze accounts sterk te beperken neem ik wel twee extra maatregelen:
- Alle WordPress-gebruikers moeten verplicht sterke wachtwoorden gebruiken (er zijn speciale plugins die dit forceren). In het bijzonder geldt dit voor de gebruikers die weleens blogposts publiceren en door die posts veel meer in het oog lopen van hackers.
- Geef WordPress-gebruikers alleen de status ‘administrator’ als ze die echt nodig hebben.
4. De deur naar de plaatjesmap staat te wijd open
WordPress heeft een standaardmapje waar alle plaatjes en andere uploads worden bewaard: wp-content/wp-uploads. Deze map is iets minder strikt beveiligd dan alle andere WordPress-mappen. Dat moet ook, want anders heeft WordPress niet voldoende rechten om er nieuwe bestanden te parkeren.
Op zich is dit nog geen beveiligingsrisico. Wel zie ik vaak dat de deur naar deze map nog wat wijder openstaat dan strikt noodzakelijk is. En dan brengt het wel risico’s met zich mee. In de praktijk blijkt namelijk dat bij veel geslaagde hackpogingen de map wp-uploads is misbruikt als zwakke schakel in de beveiliging. In combinatie met andere zwakke schakels kan dit fataal worden.
Hoe goed is jouw wp-uploads beveiligd? Een simpel testje: surf eens naar de URL www.<jouwdomein>.nl/wp-content/uploads/. Normaliter zou je een foutmelding moeten krijgen dat de map is beveiligd. Maar als je een lijst van bestanden te zien krijgt met daarboven de kop Index of /wp-content/uploads, dan staat de deur hoe dan ook te wijd open. Neem dan contact op met de bouwer van je WordPress-site – of als je die bouwer zelf bent: met je hostingprovider.
Disclaimer: dit simpele testje levert – net als bij een zwangerschapstest – geen uitsluitsel met 100% zekerheid, maar het geeft je wel een aardige indicatie.
5. FTP-accounts met zwakke wachtwoorden
Bij vrijwel elke hostingprovider krijg je standaard een FTP-account bij je abonnement. Ik krijg vaak de vraag van klanten waarvoor dat FTP nu precies nodig is. Zomaar wat voorbeelden:
- Om WordPress te installeren moet je met FTP WordPress-bestanden uploaden van je computer naar je website.
- In WordPress kun je plugins en thema’s met één druk op de knop updaten, maar dat doet WordPress wel via jouw FTP-account.
- Troubleshooting: als er dingen onverhoopt fout gaan in WordPress, dan is FTP-toegang onmisbaar om problemen te analyseren en op te lossen.
- Sommige geavanceerde WordPress-plugins vereisen dat je bij installatie extra mapjes aanmaakt. Dat doe je via FTP.
Tamelijk onmisbaar dus, dat FTP. Maar ook een bron van hackpogingen. Van héél veel hackpogingen. FTP-accounts zijn buitengewoon aantrekkelijk voor hackers. Om drie redenen:
- Een FTP-account geeft je totale controle over een website.
- FTP-gebruikersnamen zijn vaak gemakkelijk te raden (want vaak gelijk of direct afgeleid van de domeinnaam).
- FTP-wachtwoorden zijn vaak zwak.
Wat doe je tegen FTP-hackpogingen? Dat laat zich gemakkelijk raden: kies een sterk wachtwoord als je dat nog niet had. Dat wil zeggen: minimaal 10 tekens, met niet alle kleine letters, maar ook hoofdletters, leestekens en cijfers. Of als je hostingprovider al een wachtwoord voor jou heeft bedacht: ook prima, vrijwel alle hostingproviders kiezen sterke wachtwoorden.
Tip: installeer WordFence
Tot zover de grootste blunders in WordPress-beveiliging. Ik kan je niet garanderen dat je nooit narigheid zult krijgen als je bovenstaande valkuilen weet te vermijden. Maar de kans daarop wordt wel met minstens 95% verminderd.
Een laatste tip om die 95% nog dichter bij de 100% te krijgen: installeer een goede security-plugin. Er zijn verschillende goede plugins beschikbaar, momenteel is WordFence mijn favoriet. Zo’n plugin houdt veel narigheid buiten de deur en waarschuwt je zodra er zich iets verdachts voordoet. En dat laatste is belangrijk. In de meeste gevallen merk je namelijk niet zoveel van een hack. De site blijft gewoon werken, er lijkt niets aan de hand. Maar de gevolgen kunnen veel subtieler zijn. Zo kunnen er bijvoorbeeld verborgen links naar malafide sites worden aangebracht om die hoger te laten scoren in Google en kom je er pas na maanden achter dat er iets geks aan de hand is – veel te laat. WordFence daarentegen slaat meteen alarm, ook al lijkt je site nog prima te werken.
WordFence heeft wel een nadeel: om deze plugin op de juiste manier te configureren moet je er wel even goed voor gaan zitten. Ontbreekt je de kennis hiervan, laat het dan over aan een WordPress-kenner. Of gebruik in plaats van WordFence een andere plugin: Block Bad Queries. De beveiliging die deze plugin biedt, gaat minder ver dan WordFence, maar er is een belangrijk voordeel: Block Bad Queries werkt volkomen onzichtbaar, je hoeft er helemaal niets voor te configureren. Gewoon installeren en het werkt meteen, je hebt er geen omkijken naar.
De moraal van het verhaal
Ja, het klinkt heel betuttelend, maar WordPress-beveiliging is geen overbodige luxe, het is gewoon een absolute must. We doen er alles aan om woninginbraak te voorkomen, een fiets zetten we altijd op slot, en we denken er niet over om een autoraampje open te laten staan. Waarom zou dat bij een WordPress-site anders zijn? Safety first.
De 5 grootste WordPress-beveiligingsrisico’s
De immense populariteit van WordPress brengt ook risico’s met zich mee: het systeem is ook enorm populair bij hackers en spammers. In deze blogpost geef ik je 5 tips om jouw WordPress-site zo snel mogelijk gehackt te laten worden.
Waarop is dit lijstje gebaseerd
Sinds 2007 werk ik dagelijks met WordPress. Het was toen meteen raak: een van mijn eerste sites werd gehackt. Hetzelfde jaar nog een soortgelijk incident als gevolg van een beveiligingslek in een WordPress-forum. Dat maakte indruk. Ik beloofde mezelf plechtig dat me dat nooit meer opnieuw zou overkomen. En tot nu toe is dat gelukt. Door allerlei ‘best practices’ op het gebied van WordPress-beveiliging in acht te nemen. Door standaard extra security-plugins te installeren. Door gezaghebbende WordPress-blogs te volgen. Door regelmatig de ‘logfiles’ van mijn webserver uit te kammen.
Vooral die logfiles leveren interessante inzichten op. Je ziet vrij nauwkeurig hoe vaak er aan jouw deur wordt gerammeld, vanuit welke landen dat gebeurt en welke tactieken ze gebruiken om bij jou door het keukenraampje naar binnen te klauteren, of gewoon de deur te forceren. En geloof me: élke WordPress-site trekt hackers, hoe groot of hoe klein ook. Dus zeg nooit: mijn site is niet zo interessant voor hackers. Vergeet het maar. Hackers maken geen onderscheid tussen interessante en oninteressante sites, ze proberen het gewoon overal.
Op die logfiles heb ik wat statistische analyse losgelaten. Gecombineerd met andere bronnen (forums en blogs) levert dat onderstaande top 5 van meest voorkomende inbrekerstrucs.
1. WordPress niet meer bijgewerkt
Als je inlogt in WordPress, dan zie je zo af en toe de melding dat er nieuwe versies van WordPress-plugins en van WordPress zelf zijn. Absoluut doen, zo’n update. Zodra er in een plugin of thema een beveiligingslek wordt ontdekt, wordt er een nieuwe versie uitgebracht met een fix. Zonder die fix loop je risico’s. En die worden groter naarmate je meer achterloopt met updaten.
Op basis van ervaringen die ik op forums en blogposts heb gelezen, durf ik de volgende stelling wel voor mijn rekening te nemen:
Mijn ervaring is dat de mogelijkheid om via WordPress zelf updates uit te voeren vrijwel altijd goed gaat. In enkele zeldzame gevallen blijkt echter dat de nieuwe versie van plugin A opeens ruzie krijgt met de nieuwe versie van plugin B. De kans op dit soort conflicten stijgt exponentieel met het aantal geïnstalleerde plugins. Ben je niet helemaal zeker van je zaak, of ben je niet in staat om backups terug te zetten als zo’n update een keer niet goed gaat, laat het updaten dan over aan een WordPress-kenner (ja, dit is zelfpromotie).
2. De artiesteningang: XML-RPC
De afkorting XML-RPC zal je vermoedelijk weinig zeggen. Daarom een ultrakorte uitleg. De gangbare manier om een nieuw WordPress-bericht te publiceren, is inloggen in WordPress en dan de bordjes volgen (Berichten > Nieuw bericht). XML-RPC is een soort artiesteningang waarmee je vanuit andere toepassingen (bijvoorbeeld de WordPress-app) nieuwe berichten kunt plaatsen, zonder de gewone WordPress-voordeur te gebruiken. Ook voor ’trackbacks’ en ‘pingbacks’ is XML-RPC belangrijk (en als je deze twee termen niet kent: geeft niet).
Mijn ervaring is dat de meeste WordPress-gebruikers deze artiesteningang nooit nodig hebben. Bovendien is in het verleden gebleken dat XML-RPC nogal eens kwetsbaarheden met zich meebrengt.
Helaas heeft WordPress ervoor gekozen om deze feature vanaf versie 3.5 toch standaard in te schakelen. Sindsdien zie ik in logfiles een zondvloed van hackerspogingen om via kwetsbaarheden in de XML-RPC in te breken in een van mijn sites. En die aanvallen zijn afgelopen jaar steeds geraffineerder geworden, zo blijkt uit een blog van beveiligingsbedrijf Sucuri.
Mijn advies: XML-RPC zoveel mogelijk uitschakelen. Jammergenoeg maakt WordPress je het op dit punt niet makkelijk: je moet er een speciale plugin voor installeren. Eventueel kun je kiezen voor een laag-bij-de-gronds alternatief: verwijder gewoon het bestandje ‘xmlrpc.php’ uit jouw WordPress-installatie.
3. Inlogpogingen via gebruiker ‘admin’
WordPress bestaat al meer dan 10 jaar. Verreweg de oudste inbrekerstruc is nog steeds razend populair: probeer in te loggen als gebruiker ‘admin’. Vroeger was dat namelijk de standaard gebruikersnaam die WordPress aanmaakte bij installatie. Als je vervolgens ook nog een voor de hand liggend wachtwoord kiest (bijvoorbeeld ‘qwerty’ of de naam van je domein), dan is het gegarandeerd raak. Mijn advies: verwijder de gebruikersnaam ‘admin’ in WordPress en maak voor alle afzonderlijke gebruikers aparte accounts aan.
Andere riskante gebruikersnamen
Toegegeven, het advies om de gebruikersnaam ‘admin’ te vermijden is al bijna net zo oud als WordPress zelf bestaat. Op zich niets nieuws. Maar wel nieuw is dat er nog meer riskante gebruikersnamen bestaan. In mijn logfiles zie ik dat deze gebruikersnamen het vaakst worden uitgeprobeerd:
Gewoon deze gebruikersnamen vermijden op je WordPress-site en je hebt er geen last van.
En gebruikersnamen met voornaam/achternaam?
Ook persoonsnamen blijken een risico, zie ik in de logfiles. Op deze site proberen hackers bijvoorbeeld ook in te loggen als gebruiker ‘wessel’. Moet je dan ook maar voornamen en achternamen vermijden bij gebruikersnamen? Het ligt inderdaad in de lijn van het vorige advies, maar zover ga ik toch liever niet.
Waarom? Ik ben groot voorstander van persoonsgebonden accounts, waarvan de gebruikersnaam duidelijk is te herleiden tot een bepaald persoon. Als je geen voornamen en achternamen meer kunt gebruiken, raak je snel het overzicht kwijt wie er allemaal toegang hebben tot een site.
Dan toch maar gebruikersnamen met persoonsnamen toestaan. Maar om de ‘hackbaarheid’ van deze accounts sterk te beperken neem ik wel twee extra maatregelen:
4. De deur naar de plaatjesmap staat te wijd open
WordPress heeft een standaardmapje waar alle plaatjes en andere uploads worden bewaard: wp-content/wp-uploads. Deze map is iets minder strikt beveiligd dan alle andere WordPress-mappen. Dat moet ook, want anders heeft WordPress niet voldoende rechten om er nieuwe bestanden te parkeren.
Op zich is dit nog geen beveiligingsrisico. Wel zie ik vaak dat de deur naar deze map nog wat wijder openstaat dan strikt noodzakelijk is. En dan brengt het wel risico’s met zich mee. In de praktijk blijkt namelijk dat bij veel geslaagde hackpogingen de map wp-uploads is misbruikt als zwakke schakel in de beveiliging. In combinatie met andere zwakke schakels kan dit fataal worden.
Hoe goed is jouw wp-uploads beveiligd? Een simpel testje: surf eens naar de URL www.<jouwdomein>.nl/wp-content/uploads/. Normaliter zou je een foutmelding moeten krijgen dat de map is beveiligd. Maar als je een lijst van bestanden te zien krijgt met daarboven de kop Index of /wp-content/uploads, dan staat de deur hoe dan ook te wijd open. Neem dan contact op met de bouwer van je WordPress-site – of als je die bouwer zelf bent: met je hostingprovider.
Disclaimer: dit simpele testje levert – net als bij een zwangerschapstest – geen uitsluitsel met 100% zekerheid, maar het geeft je wel een aardige indicatie.
5. FTP-accounts met zwakke wachtwoorden
Bij vrijwel elke hostingprovider krijg je standaard een FTP-account bij je abonnement. Ik krijg vaak de vraag van klanten waarvoor dat FTP nu precies nodig is. Zomaar wat voorbeelden:
Tamelijk onmisbaar dus, dat FTP. Maar ook een bron van hackpogingen. Van héél veel hackpogingen. FTP-accounts zijn buitengewoon aantrekkelijk voor hackers. Om drie redenen:
Wat doe je tegen FTP-hackpogingen? Dat laat zich gemakkelijk raden: kies een sterk wachtwoord als je dat nog niet had. Dat wil zeggen: minimaal 10 tekens, met niet alle kleine letters, maar ook hoofdletters, leestekens en cijfers. Of als je hostingprovider al een wachtwoord voor jou heeft bedacht: ook prima, vrijwel alle hostingproviders kiezen sterke wachtwoorden.
Tip: installeer WordFence
Tot zover de grootste blunders in WordPress-beveiliging. Ik kan je niet garanderen dat je nooit narigheid zult krijgen als je bovenstaande valkuilen weet te vermijden. Maar de kans daarop wordt wel met minstens 95% verminderd.
Een laatste tip om die 95% nog dichter bij de 100% te krijgen: installeer een goede security-plugin. Er zijn verschillende goede plugins beschikbaar, momenteel is WordFence mijn favoriet. Zo’n plugin houdt veel narigheid buiten de deur en waarschuwt je zodra er zich iets verdachts voordoet. En dat laatste is belangrijk. In de meeste gevallen merk je namelijk niet zoveel van een hack. De site blijft gewoon werken, er lijkt niets aan de hand. Maar de gevolgen kunnen veel subtieler zijn. Zo kunnen er bijvoorbeeld verborgen links naar malafide sites worden aangebracht om die hoger te laten scoren in Google en kom je er pas na maanden achter dat er iets geks aan de hand is – veel te laat. WordFence daarentegen slaat meteen alarm, ook al lijkt je site nog prima te werken.
WordFence heeft wel een nadeel: om deze plugin op de juiste manier te configureren moet je er wel even goed voor gaan zitten. Ontbreekt je de kennis hiervan, laat het dan over aan een WordPress-kenner. Of gebruik in plaats van WordFence een andere plugin: Block Bad Queries. De beveiliging die deze plugin biedt, gaat minder ver dan WordFence, maar er is een belangrijk voordeel: Block Bad Queries werkt volkomen onzichtbaar, je hoeft er helemaal niets voor te configureren. Gewoon installeren en het werkt meteen, je hebt er geen omkijken naar.
De moraal van het verhaal
Ja, het klinkt heel betuttelend, maar WordPress-beveiliging is geen overbodige luxe, het is gewoon een absolute must. We doen er alles aan om woninginbraak te voorkomen, een fiets zetten we altijd op slot, en we denken er niet over om een autoraampje open te laten staan. Waarom zou dat bij een WordPress-site anders zijn? Safety first.
Lees ook: