Kort gezegd: Verdachte processen op Linux-servers herkent u aan enkele kenmerken: programmabestand verwijderd of in /tmp, /dev/shm of een webmap, naam bootst een systeemproces na, ongewone gebruiker, permanente netwerkverbindingen of hoge belasting zonder reden. Controleer met lezende opdrachten of het programmabestand bij een geïnstalleerd pakket hoort, en stel vondsten veilig voordat u iets beëindigt.
Wat "verdacht" bij een proces betekent
Op een webserver draaien honderden processen. De meeste horen bij het besturingssysteem, de webserver, de database of PHP. Een aanvaller die via een lek zoals PHP2Shell code kon uitvoeren, probeert daartussen niet op te vallen. Hij kiest onopvallende namen en plaatst programma's waar de webservergebruiker mag schrijven.
Voor de controle helpt het de normale toestand te kennen. Wie weet welke services op een server moeten draaien, onder welke gebruikers en met welke belasting, herkent afwijkingen veel sneller. Ontbreekt die kennis, dan loont het de proceslijst van een gelijksoortige, onverdachte server ter vergelijking erbij te nemen.
Een afzonderlijk kenmerk is nog geen bewijs. Beslissend is het samenspel. Een proces met de naam van een kernel-thread dat onder www-data draait, vanuit /dev/shm is gestart en een verbinding naar het buitenland houdt, is een duidelijk geval. Hoe u het bijzondere geval van een shell onder de webserver onderzoekt, beschrijft Waarschuwingssignaal: de webserver start een shell.
Eerste overzicht in vijf opdrachten
Alle opdrachten lezen alleen. Voer ze uit als root, zodat u alle processen ziet, en sla de uitvoer op in een bestand buiten de webmap.
# 1. Alle processen met gebruiker, ouder-PID, starttijd, CPU en opdrachtregel
ps -eo user,pid,ppid,lstart,%cpu,%mem,cmd --sort=-%cpu | head -40
# 2. Processen waarvan het programmabestand is verwijderd
ls -l /proc/[0-9]*/exe 2>/dev/null | grep "(deleted)"
# 3. Processen die vanuit tijdelijke of webmappen draaien
ls -l /proc/[0-9]*/exe 2>/dev/null | grep -E " -> (/tmp|/var/tmp|/dev/shm|/var/www)"
# 4. Processen met netwerkverbindingen
ss -tunap
# 5. Processen van de webservergebruikers in overzicht
ps -eo user,pid,ppid,lstart,cmd | grep -E "^(www-data|apache|nginx) "
Gebruikersnamen verschillen per distributie en paneel; Plesk en andere panelen voeren PHP vaak uit onder de gebruiker van de betreffende klant. Pas de lijst aan uw omgeving aan.
Lees de uitvoer met het oog op de starttijd. Processen die sinds de laatste herstart van de server draaien, horen meestal bij het systeem. Processen die midden in de nacht of in de dagen na 17 oktober zijn gestart en bij geen enkele service passen, verdienen aandacht. Vergelijk ook het aantal PHP-processen met wat uw poolconfiguratie toestaat; duidelijk meer processen onder een webservergebruiker zijn een aanwijzing.
Verdachte processen onder Linux: typische kenmerken
| Kenmerk | Waarom het opvalt | Onschuldige verklaring mogelijk? |
|---|---|---|
| Programmabestand “(deleted)” | Aanvallers wissen bestanden na de start | ja, na pakketupdates tot de herstart |
Startlocatie /tmp, /dev/shm, uploadmap |
daar mag iedereen of de webserver schrijven | zelden |
Naam tussen vierkante haken zoals [kworker] |
bootst kernel-threads na | nee, als er een programmabestand achter zit |
| Permanent hoge CPU-belasting zonder aanleiding | typisch voor cryptominers | ja, bij batchtaken of indexering |
| Ouderproces 1 en webservergebruiker | losgekoppeld van de webserver, draait zelfstandig door | zelden |
| Verbinding naar onbekend doel | aansturing of gegevensuitstroom | ja, bij updates en API's |
Echte kernel-threads hebben geen programmabestand; ls -l /proc/PID/exe levert bij hen geen pad op. Wijst een proces met een kernelnaam naar een bestand, dan is het gecamoufleerd. Bij hoge belasting zonder zichtbare reden helpt het artikel Cryptominers op de webserver verder.
Controle: hoort het programmabestand bij een pakket?
Bijna alle legitieme programma's op een server komen uit de pakketbeheerder. Een programmabestand dat bij geen enkel pakket hoort, is niet automatisch kwaadaardig, maar verdient een nauwkeurige blik.
PID=12345
EXE=$(readlink /proc/$PID/exe); echo "$EXE"
dpkg -S "$EXE" # Debian/Ubuntu: bij welk pakket hoort het bestand?
rpm -qf "$EXE" # RHEL-familie
sha256sum /proc/$PID/exe # controlesom, werkt ook bij een verwijderd bestand
tr '\0' ' ' < /proc/$PID/environ | head -c 600; echo # omgevingsvariabelen
Is het programmabestand verwijderd, dan leest sha256sum /proc/$PID/exe het toch uit het draaiende proces. Deze controlesom hoort in de documentatie. Een kopie van het bestand mag alleen iemand maken die weet hoe men het veilig bewaart.
Grenzen van de controle op het draaiende systeem
Alle bovenstaande opdrachten vertrouwen het systeem dat u net controleert. Bij een gewone inbraak via de website met de rechten van de webservergebruiker is dat verdedigbaar. Heeft een aanvaller rootrechten verkregen, dan kan hij processen verbergen en uitvoer vervalsen. Dan toont de server alleen wat de aanvaller toelaat.
Aanwijzingen daarvoor zijn tegenstrijdigheden: belasting zonder zichtbaar proces, verbindingen die de firewall ziet maar ss niet, of gewijzigde systeemprogramma's. In dergelijke gevallen hoort de controle op een veiliggesteld image te gebeuren. Bij draaiende systemen komt vaak een back-up van het werkgeheugen erbij, want sommige schadelijke programma's bestaan alleen daar en laten op de harde schijf nauwelijks sporen na. Deze back-up moet vóór een herstart gebeuren en vraagt geschikte hulpmiddelen en ervaring. Waarom u dit vóór een herinstallatie moet maken, legt Bewijs veiligstellen voordat u opnieuw installeert uit.
Beëindig verdachte processen niet als eerste stap. Vaak start een cronjob of service ze opnieuw, en met het proces verdwijnen opdrachtregel, verbindingen en het verwijderde programmabestand uit het geheugen.
Autostarts controleren en volgende stappen
Een schadelijk proces dat na een herstart zou verdwijnen, zou voor aanvallers waardeloos zijn. Daarom hoort bij elke procesvondst de vraag wat het start. Naast cronjobs komen vooral systemd-services in aanmerking, die een aanvaller met rootrechten kan aanmaken. Opvallend zijn services met generieke namen waarvan het programmabestand in een ongewone map staat, en unit-bestanden die na 17 oktober zijn ontstaan.
# Draaiende services en onlangs gewijzigde unit-bestanden
systemctl list-units --type=service --state=running --no-pager
find /etc/systemd /usr/lib/systemd /lib/systemd -type f -newerct "2026-10-17" -ls 2>/dev/null
# Wordt er een bibliotheek in elk proces ingebracht? Het bestand bestaat normaal niet.
ls -l /etc/ld.so.preload 2>/dev/null && cat /etc/ld.so.preload
Een vermelding in /etc/ld.so.preload is op normale webservers zeldzaam en een sterke aanwijzing voor manipulatie met rootrechten. Hoe u geplande taken volledig controleert, beschrijft Verborgen cronjobs als achterdeur herkennen.
Daarna volgen de volgende stappen in deze volgorde:
- Uitvoer en controlesommen met tijdstip veiligstellen.
- Persistentie zoeken: cronjobs, systemd-services en -timers, SSH-sleutels.
- Herkomst vaststellen: logs vanaf 20 oktober, nieuwe bestanden in de webmap.
- Server isoleren en opschoning of heropbouw plannen.
Een overzicht van alle typische tekenen na PHP2Shell geeft Ben ik al gecompromitteerd?.
Hoe helpt PHP SOS concreet?
- Processen beoordelen: Wij controleren proceslijst, programmabestanden en verbindingen en plaatsen elke vondst.
- Gerechtelijk veiligstellen: Met de IT-forensica stellen wij werkgeheugen en gegevensdragers veilig voordat er iets wordt gewijzigd.
- Persistentie vinden: Wij zoeken naar mechanismen die schadelijke processen opnieuw starten.
- Afronden: Wij ruimen op of bouwen opnieuw op en documenteren het incident tot de afronding.
Veelgestelde vragen
Waaraan herken ik een verdacht proces onder Linux?
Typische kenmerken zijn een verwijderd programmabestand, een startlocatie in /tmp of /dev/shm, een naam die een systeemproces nabootst, een ongewone gebruiker en permanente netwerkverbindingen. Afzonderlijke kenmerken zijn aanwijzingen, meerdere samen een ernstige verdenking.
Wat betekent “(deleted)” bij /proc/PID/exe?
Het programmabestand van het proces is na de start verwijderd. Dat gebeurt legitiem na pakketupdates, totdat de service herstart. Bij processen uit tijdelijke mappen of onder de webservergebruiker is het typisch camouflagegedrag.
Kan ik vertrouwen op de uitvoer van ps?
Bij een gewone inbraak meestal wel. Heeft een aanvaller echter rootrechten verkregen, dan kan hij hulpmiddelen en uitvoer manipuleren. Dan is een controle van buitenaf, bijvoorbeeld op een veiliggesteld image, betrouwbaarder.
Moet ik een verdacht proces met kill beëindigen?
Niet als eerste. Stel eerst opdrachtregel, programmabestand, verbindingen en starttijd veilig. Een beëindigd proces verraadt niets meer, en vaak start een cronjob of service het toch opnieuw.