Kort gezegd: Een malwarescanner voor websites vindt vooral bekende patronen in bestanden of in de uitgeleverde pagina. Nieuwe en versluierde code, achterdeuren in de database, vreemde accounts, cronjobs en SSH-sleutels blijven vaak onzichtbaar. „Niets gevonden” betekent daarom niet „schoon”. Betrouwbaar wordt een controle pas door de combinatie van scanner, vergelijking met het origineel, controle van database en systeem en gedragsbewaking.
De bedrieglijke rust na het groene vinkje
Na PHP2Shell hebben veel beheerders gedaan wat het meest voor de hand ligt: een scanner laten draaien. Een onlinedienst controleert de startpagina, een beveiligingsplug-in doorzoekt de webmap, het resultaat is groen. Daarmee lijkt de vraag beantwoord of er vóór de patch iets is gebeurd.
Het probleem zit in het principe. De meeste scanners vergelijken inhoud met patronen van bekende malware. Voor de kwetsbaarheden CVE-2026-109618 en CVE-2026-109619 bestaan echter geen gepubliceerde, bevestigde Indicators of Compromise; de detectie berust op gedragsanalyse. Een scanner kan niet zoeken naar sporen die niemand kent. Hij vindt hooguit algemene malware die na een inbraak is nageladen, voor zover die bekende patronen volgt.
Dat maakt scanners niet waardeloos. Het betekent alleen dat hun resultaat goed moet worden geduid. Welke tekenen verder dan scanners tellen, beschrijft Ben ik al gecompromitteerd?.
Malwarescanners voor websites: drie uitvoeringen
| Uitvoering | Wat ze ziet | Wat ze niet ziet |
|---|---|---|
| Externe scanner (onlinedienst) | uitgeleverde pagina's, ingevoegde scripts, doorverwijzingen, blokkadelijsten | bestanden, database, accounts, alles wat alleen onder voorwaarden wordt uitgeleverd |
| Scanner in het CMS (plug-in of extensie) | bestanden in de webmap, deels database-inhoud, vergelijking met kernbestanden | systeemniveau, cronjobs, SSH; draait in het mogelijk gecompromitteerde systeem |
| Scanner op de server (signatuurgebaseerd) | alle leesbare bestanden, ook buiten de webmap | onbekende en versluierde patronen, database, accounts, gedrag |
Externe scanners zijn nuttig om zichtbare gevolgen te herkennen, zoals doorverwijzingen of vermeldingen op blokkadelijsten. Veel hacks leveren hun spam- of omleidingsinhoud echter alleen aan bepaalde bezoekers uit, bijvoorbeeld zoekmachines of mobiele apparaten. De scanner ziet dan een schone pagina.
Scanners in het CMS hebben meer inzicht, maar een principieel probleem: ze draaien in hetzelfde systeem dat ze moeten controleren. Code met voldoende rechten kan hun resultaten beïnvloeden, bestanden verbergen of de scanner uitschakelen. Serverscanners werken buiten de applicatie, maar blijven afhankelijk van patronen.
Wat scanners principieel missen
Los van de uitvoering zijn er gebieden die een bestands- of paginascanner nauwelijks kan afdekken:
- Nieuwe of individueel versluierde code: elke variant die er anders uitziet dan bekende patronen, glipt erdoor.
- De database: scripts in inhoud, gewijzigde instellingen, triggers en vreemde accounts. Meer daarover onder De database controleren op ingebrachte code.
- Toegangen: extra beheerdersaccounts, SSH-sleutels, databasegebruikers, accounts in het hostingpaneel.
- Systeemdiensten en cronjobs: mechanismen die regelmatig schadelijke code opnieuw laden.
- Onopvallende wijzigingen aan legitieme bestanden: één enkele extra regel in een kernbestand die onschuldig oogt.
- Weggelekte gegevens: of toegangsgegevens of klantgegevens zijn gekopieerd, toont geen enkele scanner.
Wat in plaats daarvan zekerheid geeft
Meer veiligheid biedt de combinatie van controlesoorten die verschillend werken:
- Vergelijking met het origineel: ze vindt elke wijziging aan bekende bestanden, ongeacht patronen. De aanpak beschrijft CMS-kernbestanden vergelijken met het origineel.
- Gericht zoeken naar afwijkingen: PHP-bestanden in uploadmappen, onlangs gewijzigde bestanden, versluierde code, uitvoerbare bestanden in tijdelijke mappen.
- Controle van accounts en systeemdiensten: gebruikers, sleutels, cronjobs en diensten vergelijken met de bekende juiste toestand.
- Loganalyse: verzoeken naar onbekende bestanden, pieken in fouten, ongebruikelijke aanmeldingen.
- Gedragsbewaking: processen van de webserver die een shell starten, onverwachte uitgaande verbindingen, nieuwe bestanden in gevoelige mappen.
De laatste categorie is de belangrijkste als er geen bekende sporen zijn. Ze vraagt niet hoe schadelijke code eruitziet, maar wat ze doet. Een webserverproces dat plotseling een shell start, valt op, hoe de veroorzakende code ook is versluierd.
Laat een serverscanner vanaf een schoon systeem draaien over een alleen-lezen kopie, in plaats van op de verdachte server zelf. Zo kan ingebrachte code het resultaat niet beïnvloeden.
Hoe u scanners zinvol inzet
Scanners hebben hun plaats, als één hulpmiddel onder meerdere. Een externe scanner is geschikt als regelmatige controle van de zichtbare gevolgen, bijvoorbeeld wekelijks. Een scanner in het CMS meldt in het dagelijkse gebruik bekende malware en gewijzigde kernbestanden. Een serverscanner vult de zoektocht naar bekende patronen in het hele bestandssysteem aan.
Beslissend is de omgang met het resultaat. Een vondst is een duidelijke controleopdracht en rechtvaardigt een volledig onderzoek, omdat zelden slechts één bestand is getroffen. Een leeg resultaat is daarentegen slechts een uitspraak over de gecontroleerde patronen. Leg in uw documentatie vast welke scanner wanneer met welke versie heeft gedraaid, en schrijf niet „systeem schoon” maar „geen bekende patronen gevonden”.
Voor de directie betekent dat: een groen vinkje vervangt geen controle door iemand die bestanden, database, accounts en gedrag samen beschouwt. Na een incident met mogelijke code-uitvoering, zoals bij PHP2Shell denkbaar, moet die controle plaatsvinden.
Meldt een scanner daarentegen een vondst, dan is snel maar ordelijk handelen geboden. Verwijder het gemelde bestand niet meteen via de scannerfunctie. Stel eerst bestand en logs veilig, zodat kan worden uitgezocht hoe het op de server kwam. Hoe een volledige opschoning verloopt, beschrijft de dienst Malware en webshells laten verwijderen.
Hoe helpt PHP SOS concreet?
- Wij combineren scanners met vergelijking tegen het origineel, gericht zoeken en analyse van accounts, diensten en logs.
- Wij controleren verdachte systemen via veiliggestelde kopieën, zodat resultaten niet door het gecompromitteerde systeem worden beïnvloed.
- Wij markeren elk resultaat eerlijk als aangetoond, waarschijnlijk of onbekend.
- Met de security-monitoring voor webservers bewaken wij het gedrag van uw servers doorlopend, niet alleen bekende patronen.
Veelgestelde vragen
Is mijn website schoon als de malwarescanner niets vindt?
Niet per se. Scanners vinden vooral bekende patronen. Nieuwe of goed versluierde code, achterdeuren in de database, vreemde accounts, cronjobs en SSH-sleutels blijven vaak onopgemerkt. Een leeg resultaat is een bouwsteen, geen vrijspraak.
Wat is het verschil tussen een externe scanner en een plug-inscanner?
Een externe scanner roept de website van buitenaf op en ziet alleen wat wordt uitgeleverd. Een plug-inscanner draait binnen het CMS en kan bestanden lezen, maar draait in hetzelfde systeem dat mogelijk is gecompromitteerd. Beide hebben eigen blinde vlekken.
Bestaan er scannersignaturen voor PHP2Shell?
Voor PHP2Shell bestaan geen gepubliceerde, bevestigde Indicators of Compromise. Scanners kunnen daarom niet gericht zoeken naar vaststaande PHP2Shell-sporen. De detectie berust op gedragsanalyse en op het zoeken naar algemene tekenen van een compromittering.
Welke scanner is de beste?
De vraag leidt op een dwaalspoor. Belangrijker dan een bepaald product is de combinatie van verschillende controlesoorten: vergelijking met het origineel, zoeken in bestanden en database, controle van accounts en systeemdiensten en bewaking van het gedrag.