De site is gehackt, dat staat inmiddels vast. Nu wilt u hem schoon. De verleiding is groot om een beveiligingsplugin te installeren, op “scan” te drukken en alles wat rood oplicht te verwijderen. Soms werkt dat. Vaker zien wij het volgende: de site is een dag schoon, dan komt de besmetting terug, en de eigenaar heeft twee keer zoveel werk en nog steeds geen idee hoe de aanvaller binnenkwam.
WordPress malware verwijderen is namelijk niet één handeling maar een reeks stappen in een vaste volgorde. Sla er een over, en de rest is zinloos. In dit artikel beschrijven wij de aanpak die wij bij elk hackherstel volgen. Niet omdat u die zelf volledig moet uitvoeren, maar zodat u weet wat een grondig herstel inhoudt, wat u van een bureau mag verwachten, en welke delen u zelf kunt doen.
Stap 1: de site isoleren en de situatie vastleggen
Voordat er iets wordt opgeruimd, gaat de site achter een onderhoudspagina of wordt hij tijdelijk geblokkeerd. Daarmee stopt de schade voor bezoekers en Google. Tegelijk maken wij een volledige kopie van de besmette site, inclusief database en logbestanden. Dat klinkt tegenstrijdig, een back-up van iets dat kapot is, maar die kopie is het bewijsmateriaal. Daarin zoeken wij straks naar de ingang. Wie deze stap overslaat en meteen begint te wissen, vernietigt de aanwijzingen.
Stap 2: de ingang vinden
Dit is de stap die het verschil maakt tussen een schoonmaak en een oplossing. Malware komt ergens vandaan. In onze ervaring zijn de meest voorkomende ingangen, ruwweg in deze volgorde:
- een verouderde plugin of een verouderd thema met een bekende kwetsbaarheid;
- een gelekt of zwak wachtwoord van een beheerder, FTP-account of hostingpaneel;
- een gekraakt (“nulled”) thema of plugin met ingebouwde achterdeur;
- een besmette buursite op dezelfde hostingaccount;
- een verouderde WordPress-kern of PHP-versie.
Om de ingang te vinden, bekijken wij de toegangslogs van de server rond het moment van de eerste gewijzigde bestanden. Daar staat vaak precies welk verzoek naar welk pluginbestand ging, vlak voordat het eerste vreemde bestand verscheen. Lukt dat niet, dan vergelijken wij de versies van alle plugins met de lijst van bekende kwetsbaarheden. Meestal is binnen een uur duidelijk waar het mis ging.
Stap 3: bestanden vergelijken met de originelen
WordPress zelf, en vrijwel alle thema’s en plugins uit de officiële bibliotheek, zijn openbaar beschikbaar in hun originele staat. Wij vergelijken elk bestand op de site met de bijbehorende originele versie. Alles wat afwijkt, wordt bekeken. Dat levert drie categorieën op:
- Toegevoegde bestanden die niet in het origineel bestaan, bijvoorbeeld een PHP-bestand in de uploads-map.
- Gewijzigde bestanden waar code aan is toegevoegd, vaak bovenaan of onderaan een bestand als index.php, functions.php of wp-config.php.
- Legitieme afwijkingen, zoals eigen aanpassingen in een child-thema. Die laten wij staan.
De eerste twee categorieën worden niet gerepareerd maar vervangen: het kernbestand komt uit een verse download van WordPress, de plugin uit een verse download van dezelfde versie. Handmatig “de slechte regels weghalen” is foutgevoelig; vervangen is betrouwbaarder.
Stap 4: de database doorzoeken
Malware zit niet alleen in bestanden. In de database kan een aanvaller kwaadaardige JavaScript in de inhoud van pagina’s hebben gezet, een verborgen beheerder hebben aangemaakt, of de site-URL hebben aangepast zodat bezoekers worden doorgestuurd. Wij zoeken de database door op verdachte patronen (script-tags in berichten, base64-gecodeerde tekst in instellingen, onbekende gebruikers met beheerdersrechten) en zetten dat handmatig recht. Ook geplande taken in WP-Cron worden nagelopen, want daar verstoppen aanvallers graag een taak die de malware elke nacht opnieuw plaatst.
Stap 5: de ingang sluiten en alles bijwerken
Nu de site schoon is, mag de deur dicht. De kwetsbare plugin wordt bijgewerkt of, als er geen veilige versie bestaat, vervangen. WordPress, alle plugins en alle thema’s gaan naar de nieuwste versie. Ongebruikte plugins en thema’s worden verwijderd; elk pakket dat niet draait, is een ingang minder. Als de site nog op een oude PHP-versie draait, gaat die ook omhoog.
Daarnaast worden alle toegangen vernieuwd: wachtwoorden van beheerders, FTP, database en hostingpaneel. De beveiligingssleutels in wp-config.php krijgen nieuwe waarden, waardoor alle bestaande sessies ongeldig worden en een aanvaller die nog ingelogd was, eruit vliegt. Waarom dat laatste belangrijk is, staat in ons artikel over het resetten van de salts.
Stap 6: controleren op achterdeuren
Een goede aanvaller plaatst niet één stuk malware maar meerdere, waarvan er minstens één bedoeld is om na een schoonmaak terug te kunnen komen. Zo’n achterdeur is klein, onopvallend en zit op een plek waar niemand kijkt: een bestand met een onschuldige naam in een diepe map, een regel in een bestand van een vergeten plugin, een gebruiker die geen beheerder lijkt maar het via een omweg wel is. Wij doen daarom na de schoonmaak een tweede, aparte ronde die specifiek zoekt naar dit soort constructies. In het artikel over backdoors leggen wij uit waarom een “schone” site anders na twee weken toch weer besmet is.
Stap 7: beschermen tegen herhaling
Een schone site zonder extra bescherming is een schone site die wacht op de volgende poging. Daarom hoort bij elk herstel een pakket basismaatregelen: een firewall die bekende aanvalspatronen tegenhoudt, beperking van inlogpogingen, tweestapsverificatie voor beheerders, het uitschakelen van bestandsbewerking vanuit het dashboard, en een dagelijkse scan die wijzigingen aan bestanden meldt. Geen van deze maatregelen is ingewikkeld, maar samen maken ze de site een veel minder aantrekkelijk doelwit.
Stap 8: Google en de bezoekers
Heeft Google de site gemarkeerd, dan verdwijnt die waarschuwing niet vanzelf. In Search Console vraagt u een herbeoordeling aan, met een korte toelichting op wat er is gedaan. Dat duurt doorgaans enkele dagen. Ook eventuele zwarte lijsten voor e-mail moeten worden opgeschoond. En als er persoonsgegevens in het spel waren, beoordeelt u samen met uw juridisch adviseur of er een melding bij de Autoriteit Persoonsgegevens nodig is.
Wat u zelf kunt doen, en wanneer u hulp inschakelt
Stap 1 (isoleren en vastleggen) en delen van stap 5 (wachtwoorden vernieuwen, updates draaien) kunt u zelf uitvoeren. Voor stap 2, 3, 4 en 6 is ervaring nodig: u moet weten hoe originele bestanden eruitzien, hoe u logs leest en waar aanvallers dingen verstoppen. Wie dat één keer per jaar doet, mist dingen die iemand die het wekelijks doet, meteen ziet.
Een eerlijk advies: als de site belangrijk is voor uw bedrijf, laat het herstel doen door iemand die het vaker heeft gedaan, en spreek vooraf af dat het herstel inclusief het vinden van de ingang en een controle op achterdeuren is. Bij WebMaintor is dat de standaard bij hackherstel vanaf € 249, inclusief de herbeoordeling bij Google. Maar welke partij u ook kiest: vraag hoe ze de ingang vinden. Wie daar geen duidelijk antwoord op heeft, maakt schoon zonder op te lossen.



