En heb je dit gat al dichtgetimmerd?
Jouw WordPress Website hacken is -hoewel het niet eenvoudig is- mogelijk eenvoudiger dan je denkt. En dat is eigenlijk omdat de makers van WordPress een onbegrijpelijk groot gat in de beveiliging hebben laten zitten. En dat is slordig.
Zorg voor een niet voor de handliggende username
Eén van de goede adviezen bij het aanmaken van je eerste gebruiker voor de website is om een niet voor de hand liggende gebruikersnaam te gebruiken. En ‘Admin’ of ‘Administrator’ is een wel heel voor de hand liggende naam, dus die gebruiken we niet. Daarmee maken we het degenen die een Brute Force Attack uit willen voeren een stuk lastiger toch?
Of toch niet?
Je begrijpt waarschijnlijk al uit de manier waarop ik de vraag ‘of toch niet’ stel, dat dit het enig juiste antwoord is. Wanneer je geen extra andere maatregelen neemt om je gegevens te beveiligen, maakt het geen klap uit, of je nu inlogt met de gebruikersnaam admin of met een minder voor de hand liggende gebruikersnaam als 938ru1k3r5n44m. En 938ru1k3rn44m is toch echt niet voor de hand liggend.
Want WordPress is toch een heel vriendelijk systeem. Zolang je het maar netjes vraagt, wil WordPress je maar al te graag vertellen wie de beheerders van de site zijn. En zo is jouw WordPress website hacken nog steeds even moeilijk of makkelijk gebleven.
Maar… hoe vertelt WordPress dit dan?
Heb je een WordPress website? Dan moet je onderstaande regel eens ingeven op de adresregel van je browser. De tekst domeinnaam.tld vervang je natuurlijk door de werkelijke domeinnaam van je website.
https://domeinnaam.tld/wp-json/wp/v2/users
Tik dit in wanneer je niet bent ingelogd.
Em Kaboem! Als je geen maatregelen genomen hebt om dit te voorkomen, zie je nu een lijst met alle beheerder-gebruikers van je website. Ok, die lijst is wat lastiger te lezen, want er staat een hoop rommel in, maar je zal de namen van de beheerders makkelijk terug vinden in de tekst.
Deze informatie hoor je natuurlijk helemaal niet zo makkelijk te kunnen krijgen zonder te zijn ingelogd.
Het aanpassen van je gebruikersnaam heeft jouw WordPress website hacken niets minder waarschijnlijk gemaakt.
JSON, REST en een hoop Apies
Maar hoe komt het nu, dat je zoveel informatie krijgt wanneer je niet eens ingelogd?
WordPress beschikt al een tijdje over een zogenaamde REST API. REST is een protocol wat bedoeld is om gegevens tussen twee systemen uit te kunnen wisselen op een relatief eenvoudige manier. Op deze manier is het dus bijvoorbeeld mogelijk, dat jij vanuit je WordPress site kan communiceren met MailChimp of Google Analytics.
In deze gevallen ben jij degene die de informatie opvraagt. Maar je kan ook situaties bedenken, waarin je wilt dat een ander programma gegevens opvraagt uit jouw website. Bijvoorbeeld een app die moet communiceren met jouw WooCommerce webwinkel.
Soms staat WordPress ook in zichzelf te praten. Want wanneer jij bijvoorbeeld een link in wilt voegen en je begint een stuk van de tekst te tikken, dan gaat WordPress op de achtergrond via diezelfde REST API zoeken welke titels overeenkomen met de getikte tekst.
Dus die REST API is eigenlijk best goed. En eigenlijk is deze ook wel goed dichtgetimmerd. Je kan niet zomaar alle informatie opvragen, voor de meeste informatie moet je eerst aangemeld zijn.
Maar om een voor mij onverklaarbare reden denken de makers van WordPress dat de namen van de beheerders zonder inloggen toegankelijk mogen zijn.
Hoe groot is het risico werkelijk?
Laten we van een mug geen olifant maken. Een nijlpaard is al groot genoeg.
Om de daadwerkelijke grootte van het risico in te schatten, is het belangrijk stil te staan bij de veiligheid van je wachtwoord. Het inbreken met een brute force attack zal –al helemaal wanneer je een plugin gebruikt om dit te voorkomen– niet zo snel gebeuren wanneer je een veilig wachtwoord gebruikt.
Maar stel nu, dat jij zo’n persoon bent die hetzelfde wachtwoord op alle sites gebruikt. En zelfs wanneer jij niet zo’n persoon bent, stel dat één van jouw medebeheerders dat wel is. En stel nu, dat zo’n ‘veelgebruikte’ combinatie van gebruikersnaam en wachtwoord bekend is bij het script wat probeert jouw site te hacken.
En stel nu… dat door het opvragen van de gebruikersnamen het script weet, dat de gebruikersnaam die zojuist via WP REST is opgevraagd ook voorkomt in een lijst met gehackte passwords.
Hoe eenvoudig kan je dan een WordPress website hacken? Inderdaad. Kinderlijk eenvoudig.
De zwakke schakel
Je kent het spreekwoord. Een ketting is net zo sterk als de zwakste schakel. En het beschikbaar zijn van alle namen van de beheerders is een zwakke schakel, maar met plugin die de inlog blokkeert bij een brute force attack is dit geen probleem. Tenzij het wachtwoord via andere sites is gelekt en dit gematcht kan worden aan de naam van de gebruiker.
Een WordPress website hacken wordt een stuk moeilijker gemaakt wanneer je de volgende maatregelen neemt:
- Kies voor iedere website een nieuw, sterk wachtwoord.
- Installeer een plugin om Brute Force Attacks te voorkomen.
- Gebruik geen voor de hand liggende gebruikersnamen
- Zorg dat niet-ingelogde gebruikers geen toegang hebben tot de REST API
- En installeer eventueel Two Factor Authentication op je site. Minimaal voor de beheerders.
Maar hoe verberg je de gebruikers?
Een WordPress website hacken wordt dus moeilijker gemaakt door de REST API ontoegankelijk te maken, maar hoe doe ik dat?
Natuurlijk is het antwoord op deze vraag weer ‘Door een plugin’. Zelf gebruik ik hiervoor de plugin Disable REST API van Dave McHale. De plugin werkt kinderlijk eenvoudig. Na het installeren en activeren hoef je niets meer te doen.
Eventueel kan je nog aangeven welke ‘end points’ je wel actief wilt hebben, mocht dat om de één of andere reden noodzakelijk zijn.
Testen
Natuurlijk wil je weten of het werkt. Of je jouw WordPress website hacken inderdaad moeilijker hebt gemaakt. Om dit te doen kun je een aantal eenvoudige stappen volgen.
Maak de cache leeg
Sommige caching plugins cachen ook de REST requests. Zorg er dus voor dat de cache leeg is.
Log uit
Log daarna uit uit je website. Je mag de gegevens namelijk nog steeds wel opvragen wanneer je bent ingelogd.
Tik de url in
Tik de URL zoals aan het begin van dit artikel aangegeven in. Voor het gemak geef ik hem hier nog een keer. domeinnaam.tld vervang je natuurlijk door de daadwerkelijke domeinnaam.
https://domeinnaam.tld/wp-json/wp/v2/users/
Als het goed is, krijg je nu een melding te zien, die er ongeveer als volgt uitziet:
{"code":"rest_cannot_access","message":"DRA: Only authenticated users can access the REST API.","data":{"status":401}}
Gefeliciteerd, je WordPress website hacken is nu een stuk lastiger geworden.
Blijf bij!
De WordXPression blog is één van de meest gelezen blogs op het gebied van WordPress in het Nederlands taalgebied. Wil je op de hoogte blijven, schrijf je dan in voor de nieuwsbrief, of abonneer je op de push berichten in je browser. Dat laatste kan je doen door op de bel links onder op de pagina te klikken en de instructies te volgen.