WordPress Malware Verwijderen – Handleiding
Deze handleiding is bedoeld voor de gevorderde gebruiker en dient puur als leidraad. Controleert.nl is op geen enkele wijze aansprakelijk voor eventuele schade of data verlies.
Wilt u dat wij de site voor u opschonen? Neem dan contact op met onze support afdeling.
1. Vergrendel de site voordat u begint met het verwijderen van WordPress-malware
Bij het verwijderen van WordPress malware is het belangrijk om er zeker van te zijn dat tijdens het opschonen niemand anders dan u toegang heeft tot de site. In sommige hostingomgevingen kunt u de site in een onderhoudsmodus zetten. Als u dergelijke opties niet bij uw serviceprovider kunt vinden, kunt u uw site als volgt vergrendelen:
1.1 Apache
Open uw .htaccess-bestand (soms htaccess.txt) en schrijf de volgende regels bovenaan:
PS! Vergeet niet om het toegestane IP-adres te vervangen in het voorbeeld hieronder. Op deze pagina kunt u uw IP-adress achterhalen en vervang 127.0.0.1 met het nummer wat u daar ziet.
order deny,allow
# Deny access from all IPs
deny from all
# Allow access from specific IP
allow from 127.0.0.1
1.2 Nginx
Open uw nginx.conf-bestand en schrijf de volgende regels:
location / {
# allow your IP below
allow 127.0.0.1;
# drop rest of the world
deny all;
}
2. Installeer antivirussoftware op alle computers van waaruit de site wordt bezocht
Het is niet ongebruikelijk dat uw FTP-toegang, /wp-admin/ gebruikersnaam en wachtwoord, of zelfs uw inloggegevens voor de hostingomgeving worden gelekt via een keylogger of een ander computervirus. Het is essentieel dat er antivirussoftware is geïnstalleerd op de computers van waaruit u het beheerderspaneel opent of inlogt op uw hostingomgeving of FTP.
Scan bijvoorbeeld uw pc op mogelijke malware met Malwarebytes. Bekijk ook de beveiligingsinstellingen van uw besturingssysteem en zorg ervoor dat de firewall is ingeschakeld.
PS! Werk uw besturingssysteem, webbrowsers en browserextensies regelmatig bij.
3. Wijzig alle toegangscodes (Hosting, SSH, FTP, MySQL, WP-gebruikers)
Nadat u uw site voor het publiek hebt gesloten en uw pc hebt gescand op malware, moet u ervoor zorgen dat uw inloggegevens wijzigt. Wijzig het wachtwoord van uw hostingpaneel, trek vervolgens alle FTP-accounts in en maak nieuwe met een vooraf gegenereerde wachtwoord (sommige hosts doen het automatisch als dat niet het geval is, gebruik Bitwarden of een ander hulpprogramma voor wachtwoordbeheer zoals Dashlane en LastPass).
3.1 Databasegegevens wijzigen:
Wanneer u op het punt staat het MySQL- of MariaDB-wachtwoord (of andere databasereferenties) te wijzigen, moet u deze informatie ook bijwerken in uw wp-config.php-bestand.
3.2 Salts vernieuwen:
Salts worden gebruikt om wachtwoorden in opslag te beveiligen. Vroeger werd een wachtwoord in platte tekst op een systeem opgeslagen, maar in de loop van de tijd zijn er aanvullende beveiligingen ontwikkeld om het wachtwoord van een gebruiker te beschermen tegen het uitlezen van het systeem. Salt is een van die methoden. Een nieuwe salt wordt willekeurig gegenereerd voor elk wachtwoord, na een hack/infectie is het belangrijk om de oude salts te vervangen door nieuwe in uw wp-config.php bestand.
Je kunt hier nieuwe Salts genereren: https://api.wordpress.org/secret-key/1.1/salt/
3.3 Toegang tot het WordPress beheerderspaneel wijzigen:
Log in op uw WordPress site. Ga naar Gebruikers en verwijder alle inactieve accounts. Klik vervolgens één voor één op Bewerken op actieve accounts en onder Accountbeheer schors alle sessies en genereer nieuwe wachtwoorden voor alle gebruikers.
PS! Zorg ervoor dat je geen account hebt met Admin, Administrator, Beheer of Beheerder als gebruikersnaam.
4. Maak een volledige back-up van je website
Wanneer uw hostingprovider geen back-ups heeft, zorg er dan voor dat u de volledige inhoud van uw website bestanden en database naar een lokale omgeving download.
4.1 SSH:
Sommige hostingproviders geven u SSH-toegang, wat uw leven veel gemakkelijker kan maken bij het verwijderen van WordPress malware. Het proces om SSH-toegang te krijgen op verschillende hostingomgevingen kan verschillen.
Wanneer u succesvol bent ingelogd op de site met SSH-toegang, voert u het volgende uit:
zip -r backup-pre-cleanup.zip .
Er wordt een .zip-bestand gegenereerd met alle bestanden op uw hostingaccount. U kunt het .zip-bestand later rechtstreeks downloaden via SFTP.
4.2 SFTP:
SFTP is de beveiligde versie van het FTP-protocol. File Transfer Protocol wordt gebruikt voor het overbrengen van bestanden van de ene machine naar de andere. U kunt uw SFTP-toegangscodes op dezelfde plaats op uw hostingaccount verkrijgen als de reguliere FTP-toegangscodes. Onthoud dat de SFTP-poort 22 is in plaats van 21 (FTP-poort).
Je hebt toegang tot de server met een SFTP/FTP-client zoals FileZilla. U kunt dan een lokale map op uw pc maken, bijvoorbeeld back-up-pre-cleanup en de hele inhoud van uw server naar deze map slepen.
4.3 Database:
In de meeste hostingomgevingen is PhpMyAdmin geïnstalleerd waarmee u de database kunt beheren. U kunt de hele database eenvoudig exporteren met een exportoptie via het PhpMyAdmin-paneel. Bewaar dit in dezelfde map “backup-pre-cleanup”. Je kunt je database ook exporteren via SSH met het volgende commando:
mysqldump -p -h hostname -u username database > backup-pre-cleanup.sql
Zorg ervoor dat u de hostnaam, gebruikersnaam en database wijzigt met uw databasegegevens (u kunt deze terug vinden in wp-config.php).
PS! Nadat u het via SSH hebt geëxporteerd, kunt u dit downloaden naar uw lokale omgeving en het van de server verwijderen.
5. Analyseer logs en recente wijzigingen
Logboeken zijn altijd de beste plek om na een incident te kijken wat er is gewijzigd of wat er aan de server is toegevoegd. Download de logfiles, als u deze niet kunt vinden, vraag ze dan aan uw hostingprovider. Open de logs met software zoals Sublime en zoek (ctrl + f) naar de “POST” methode. Kijk naar de data en kijk of er een PHP-bestand is toegevoegd aan de server en kijk ook naar de gebeurtenissen rond verdacht gedrag.
Je kunt ook controleren welke PHP-bestanden het laatst zijn bewerkt, hiervoor kun je het volgende commando uitvoeren via SSH:
find . -type f -name '*.php' -ctime -7
Kijk ook of er JavaScript-bestanden zijn toegevoegd of gewijzigd:
find . -type f -name '*.js' -ctime -7
-ctime -7 laat u alle bestanden zien die zijn gewijzigd in de afgelopen 7 dagen.
PS! Zorg ervoor dat u dit doet voordat u een groter aantal bestanden in uw WordPress-installatie bijwerkt of wijzigt.
6. Update uw WordPress installatie
De meest waarschijnlijke oorzaak waarom uw website is geïnfecteerd, is het feit dat u waarschijnlijk verouderde code, plug-ins of thema’s hebt geïnstalleerd. Sites die verouderde plug-ins of een standaard gebruikersnaam en zwakke wachtwoorden hebben, zijn de belangrijkste redenen waarom WordPress-sites worden gehackt.
6.1 Verwijder alle ongebruikte plug-ins en thema’s.
Zelfs wanneer je een plugin of thema dat je niet gebruikt uitschakelt, blijft het op de server staan en kan er in sommige gevallen nog steeds misbruik van worden gemaakt wanneer deze kwetsbaar is.
7. Update je PHP-versie
PHP 7 zorgt ervoor dat je website twee keer zo snel draait (vergeleken met PHP 5) en heeft een 50% beter geheugenverbruik. PHP 7 is ook veiliger. U moet zo snel mogelijk upgraden van PHP 5.6 (en lagere versies).
Sommige ontwikkelaars zijn vandaag al gestopt met het ondersteunen van oudere versies van PHP, wat betekent dat je op een gegeven moment sommige van je plug-ins misschien helemaal niet meer kunt updaten.
8. Verwijder Symbolic Links
Veel vandalen maken symlinks aan om toegang te krijgen tot root- of andere hogere mappen in uw hostingomgeving. Soms, als een symlink onopgemerkt blijft en u vindt de gekoppelde map en probeert deze te verwijderen, kunt u uiteindelijk alle bestanden op uw server verwijderen. Zorg ervoor dat er geen symlinks zijn voordat u de bestands-/maprechten recursief wijzigt.
Om dit te voorkomen gebruik je het volgende commando via SSH (of waar je de verdachte map ziet):
find . -type l -exec unlink {} \;
9. Stel de juiste bestandsrechten in
Voorkom dat een bestand of map is ingesteld op 777. Standaard moeten alle mapmachtigingen in WordPress 750 zijn, terwijl alle bestanden 640 moeten zijn. wp-config.php die mag zelfs op 400.
Via SSH kun je alle maprechten recursief wijzigen in 750 met het volgende commando:
find /path/to/your/wordpress/install/ -type d -exec chmod 750 {} \;
Via SSH kun je alle bestandsrechten recursief wijzigen in 640 met het volgende commando:
find /path/to/your/wordpress/install/ -type f -exec chmod 640 {} \;
Via SSH kun je wp-config.php permissie wijzigen naar 400 met het volgende commando (zorg ervoor dat je test en wijzig het indien nodig is in 440, als dit niet werkt, houd je aan de standaardinstellingen):
chmod 400 /path/to/your/wordpress/install/wp-config.php
10. WordPress malware verwijderen (bestanden)
Deze paragraaf zal een combinatie zijn van open-source tools om verdachte bestanden automatisch en handmatig te detecteren. We raden altijd aan om zoveel mogelijk handmatig te doen om uw toepassing te begrijpen en gemoedsrust te hebben dat het verwijderen van WordPress malware correct wordt uitgevoerd.
10.1 Vergelijk een schone installatie met de geïnfecteerde
Maak een nieuwe WordPress-installatie en installeer exact dezelfde plug-ins, thema’s en zorg ervoor dat alles op dezelfde versie draait. Maak een nieuwe map aan in uw lokale omgeving met de naam “Vergelijken” en voeg 2 mappen toe in de map “Opschonen” en “Geïnfecteerd”. Gebruik SFTP, download de vers gemaakte WordPress-installatie en sla deze op in de map “Clean”. Open nu uw eerder gemaakte back-up en zoek de WordPress-installatie vanaf daar en kopieer deze naar de map Geïnfecteerd.
Download een applicatie met de naam Beyond Compare en vergelijk de twee mappen Clean en Infected, focus vooral op PHP- en JavaScript (JS)-bestanden die verschillen van de originelen. Open uw SFTP-toegang tot de oorspronkelijke site en open de map Opschonen lokaal. Als Beyond Compare u bijvoorbeeld vertelt dat index.php en wp-mail.php verschillend zijn in die twee mappen, verplaats dan zoveel mogelijk bestanden van de Clean-map naar uw website en controleer of de site goed werkt na het vervangen van elk bestand . Als de site niet meer werkt, zet hem dan gewoon terug door hetzelfde bestand vanuit de map Geïnfecteerd terug naar de server.
Met deze methode kunt u handmatig geïnfecteerde WordPress, plugins- en themabestanden herstellen met originelen. Als je redelijk je weg weet met de terminal, kun je het diff-commando via SSH ook als volgt gebruiken:
diff -r wordpress-clean/ wordpress-infected/ -x wp-content
PS! Houd er rekening mee dat het bestand wp-config.php op elke site anders zal zijn. Gebruik deze methode alleen om te detecteren of originele bestanden zijn gewijzigd of dat er extra bestanden zijn toegevoegd aan de hoofdsysteemmappen (/wp-content/uploads/ is geen systeemmap).
10.2 Verwijder PHP-bestanden uit de uploadmap
PHP-bestanden mogen nooit in de uploadmap staan, maar in veel gevallen, wanneer een kwetsbare uploadfunctionaliteit wordt misbruikt, komen de achterdeurtjes en droppers precies daar terecht.
Open je SSH-terminal en navigeer naar /wp-content/uploads/ (je kunt navigeren met de opdracht cd, bijv. cd /wp-content/ en dan cd /uploads/) en voer de volgende opdracht uit:
find . -name "*.php"
10.3 Zoek/verwijder achterdeuren en malware (handmatig)
Webshells (achterdeurtjes) en malware zijn vaak zeer versluierd en verborgen (soms ook toegevoegd aan de headers van originele bestandssysteemscripts) om detectie door automatische malwarescanners te voorkomen.
Sommige functies die heel vaak worden gebruikt in achterdeuren en verborgen malware zijn eval(), base64_decode(), gzinflate(), str_rot13()
Om dergelijke bestanden te vinden, opent u uw SSH-terminal en voert u de volgende opdracht uit:
find . -type f -name '*.php' | xargs egrep -i "(mail|fsockopen|pfsockopen|stream\_socket\_client|exec|system|passthru|eval|base64_decode) *("
Zoek ook naar afbeeldingsbestanden met een backdoor:
find wp-content/uploads -type f -iname '*.jpg' | xargs grep -i php
En iframes:
find . -type f -name '*.php' | grep -i '
10.4 Zoek/verwijder achterdeuren en malware (automatisch)
Er zijn verschillende tools en scanners beschikbaar die automatisch naar malware zoeken. Hier zal ik alleen opensource tools vermelden die goed werken in het verwijderingsproces van WordPress specifieke malware. Houd er rekening mee dat de meeste malware en backdoors zijn gebouwd om niet te worden gedetecteerd door dergelijke tools, dus de handmatige audit is nog steeds nodig.
10.4.1 OWASP web malware scanner
Deze scanner is een webtoepassing met behulp van een door de gemeenschap aangestuurde handtekeningdatabase. Het kan worden gebruikt om gecompromitteerde WordPress-, Joomla- en andere populaire webapplicaties te identificeren. De Web Malware Scanner scant zowel op MD5 hash-gebaseerde handtekeningen als op malware handtekeningen met behulp van YARA-regels.
10.4.2 Ai-Bolit malware scanner
Werkt goed om versluierde code te detecteren. Zoekt ook naar kwaadaardige JS-code en heeft verschillende detectieniveaus. Werkt als een PHP-script dat u uploadt naar uw website en het zal de site scannen zodra u naar het bestand navigeert. Maakt gebruik van op patronen gebaseerde en heuristische scanning. Vindt veel, soms te veel (false-positives).
Website: https://revisium.com/aibo/
10.4.3 PHP malware scanner
PHP-malwarescannerzoekers voor PHP-extensies en testbestanden tegen tekst- of regexp-regels. De regels zijn gebaseerd op zelf verzamelde voorbeelden en openbaar beschikbare malware/webshells.
Github: https://github.com/scr34m/php-malware-scanner
10.5 Herhaal stap 9.1 en zorg ervoor dat er geen verdachte bestanden meer zijn
Verwijder bestanden die door scanners zijn gedetecteerd of die er verdacht uitzagen één voor één en controleer altijd of de site nog werkt nadat het bestand is verwijderd. Nu, na het verwijderen van alle verdachte bestanden die je hebt gedetecteerd, download je de opgeschoonde WordPress-map naar de geïnfecteerde map en vergelijk je deze opnieuw met de Clean-map met behulp van de Beyond Compare-toepassing.
Houd er rekening mee dat de bestandsstructuur (behalve /wp-content/) identiek moet zijn. Zoek naar cryptische en voor de hand liggende bestandsnamen zoals N73He.php en hax0r.php enz.
Soms voegen vandalen hun bestanden toe aan elke map als een bericht, dat iets kan bevatten als “gehackt door Team_CC”.
U kunt dergelijke bestanden recursief verwijderen met het volgende commando via SSH:
find . -type f -name "filename.php" -exec rm -f {} \;
11. WordPress malware verwijderen (Database)
Het is heel gebruikelijk dat malware in de database wordt geïnjecteerd via berichten, pagina’s, opmerkingen. We hebben de .SQL-back-up van de WordPress-database al geëxporteerd. Er zijn verschillende manieren om malware uit de WordPress database te verwijderen.
11.1 Zoeken naar verdachte inhoud rechtstreeks vanuit de .SQL-databaseback-up
U kunt het .SQL-bestand rechtstreeks openen met Sublime. Gebruik Ctrl + f om schadelijke inhoud uit de database te vinden.
- Zoeken naar iFrames:
- Zoek naar base64: base64_decode
- Zoek naar eval(): eval()
- Zoek naar scripts:
Maak een lijst van alle kwaadaardige bevindingen en probeer te begrijpen waar ze zich bevinden. Verwijder ze niet rechtstreeks uit de databaseback-up, maar ga verder naar 11.3.
11.2 Zoeken naar verdachte inhoud via PhpMyAdmin
Als u toegang heeft tot PhpMyAdmin, kunt u via de zoekoptie direct zoeken naar vergelijkbare vermeldingen. Als je zeker weet dat je schadelijke inhoud hebt gedetecteerd, probeer dan te begrijpen waar deze is toegevoegd en ga verder naar 11.3.1
11.3 Handmatig door WordPress pagina’s, berichten, opmerkingen en revisies gaan
Kijk naar de pagina’s, berichten en hun revisies. Navigeer naar verdachte items gevonden in 10.1 en 10.2 en ga naar de editor en selecteer Tekstmodus. Verwijder kwaadaardige code en formatteer de inhoud indien nodig opnieuw. Vergeet niet de revisies door te nemen. Kijk ook bij de opmerkingen en verwijder eventuele spam.
12. Controleer de site handmatig en vanuit een zoekmachineperspectief
Kijk als bezoeker naar je site en check of je nog iets verdachts ziet of dat de site onverwachts presteert. Google je website. Voeg de volgende zoekopdracht toe aan de Google zoeksite:mijnwebsite.com
Als u een aantal Chinese hiërogliefen of verdachte Canadese farmaceutische aanbiedingen in Google-resultaten ziet, kunt u er zeker van zijn dat de site is geïnfecteerd met SEO-malware. Dergelijke malware toont zichzelf alleen aan Google en andere crawlers van zoekmachines en maakt het onzichtbaar voor bezoekers en site eigenaren.
Installeer de User-Agent Switcher-extensie voor Google Chrome, waarmee u uw site vanuit het perspectief van een zoekmachine kunt bekijken. U kunt een aangepaste user-agent instellen via de extensie-instellingen, de meest populaire user-agent die door Google-bot wordt gebruikt, is:
Mozilla/5.0 (compatibel; Googlebot/2.1; +http://www.google.com/bot.html)
Als je nu de links met Google bot user-agent bezoekt en geen andere inhoud ziet, heb je de SEO Injection/Cloaking-malware met succes verwijderd. Als je nog steeds rare inhoud ziet geladen, ga dan terug naar het verwijderingsproces van malware en kijk wat je hebt gemist .
13. Herstel openbare toegang tot de website
Als je dubbel hebt gecontroleerd en alle stappen hebt doorlopen en er zeker van bent dat de site nu schoon is, verwijder dan de beperkingen van je website.
Als uw hostingprovider in plaats daarvan de toegang heeft geblokkeerd, vraag dan om uw site opnieuw te scannen en vertel dat u een WordPress-malwareverwijdering heeft uitgevoerd met daarbij het verzoek de openbare toegang tot uw website te herstellen.
14. Vraag om van de zwarte lijsten te worden verwijderd
De beste manier om te controleren of uw site door AV-leveranciers of zoekmachines op de zwarte lijst is geplaatst, is door VirusTotal te gebruiken. Als u door Google Safe-browsing op de zwarte lijst staat, kunt u zich gewoon aanmelden bij Google Webmaster Tools en een nieuwe scan aanvragen. Het kan een paar dagen duren en als Google geen malware meer kan detecteren, wordt u verwijderd van de zwarte lijst van Google Safe-browsing.
Als u door AV-leveranciers of andere zoekmachines op de zwarte lijst staat, navigeert u naar hun site en vraagt u om opnieuw te worden gescand. In de meeste gevallen moet u handmatig een formulier invullen om een nieuwe scan aan te vragen en het proces kan variëren met verschillende zwarte lijsten.
15. WordPress Hardening
Er zijn extra stappen die u kunt doen nadat u de verwijdering van WordPress malware hebt voltooid.
15.1 Schakel PHP-uitvoering uit in /uploads/ en /cache/ mappen
U kunt eenvoudig een paar regels code toevoegen aan uw Apache- of Nginx-configuratie, waardoor PHP gebruik in de /upload/- en /cache/-mappen wordt voorkomen. In veel scenario’s kan dit een initiële achterdeur of dropper onbruikbaar maken, omdat deze niet kan worden uitgevoerd, zelfs als het uploaden van willekeurige bestand is gelukt.
Apache:
Maak een .htaccess-bestand aan in de /upload/ en /cache/ map en schrijf het volgende in beide bestanden:
# Kill PHP Execution
deny from all
Nginx:
# Deny access to PHP files in any /uploads/ or /cache/ directories
location ~ /uploads/(.+)\.php$ { access_log off; log_not_found off; deny all; }
location ~ /cache/(.+)\.php$ { access_log off; log_not_found off; deny all; }
15.2 Bestandsbewerking uitschakelen via het beheerdersdashboard
Het is een goed idee om de opties voor het bewerken van bestanden rechtstreeks vanuit het WordPress Admin Panel uit te schakelen. U kunt de volgende code toevoegen aan uw wp-config.php-bestand:
## Disable Editing in Dashboard
define('DISALLOW_FILE_EDIT', true);
15.4 Web Applicatie Firewall
Het is goed om een firewall voor webtoepassingen te installeren die altijd wordt bijgewerkt met de laatste beveiligingsrisico’s en exploits. Een firewall is tegenwoordig net zo essentieel voor websites als antivirussoftware voor computers en een volledig overzicht van wat er op uw site gebeurt, is een must.
Er zijn verschillende WordPress plug-ins zoals WordFence, iThemes Security en Sucuri waarmee u automatisch verhardingsopties voor uw site kunt instellen, zonder dat u handmatig scripts aan verschillende bestanden hoeft toe te voegen (zoals hierboven).