Aktuální situace: PHP2Shell. Dvě kritické zranitelnosti PHP (CVSS 9.2) umožňují spustit škodlivý kód bez přihlášení. Záplaty od 21. 10. 2026.Co nyní udělat →

Hledání podezřelých procesů na serverech s Linuxem

Škodlivé procesy se maskují neškodnými názvy, běží z dočasných složek nebo ze smazaných souborů. Několika čtecími příkazy najdete nápadnosti a zařadíte je.

Stav 5 min čteníDetekce a forenzní analýza

Stručně: Podezřelé procesy na serverech s Linuxem poznáte podle několika znaků: programový soubor je smazaný nebo leží v /tmp, /dev/shm či webovém adresáři, název napodobuje systémový proces, neobvyklý uživatel, trvalá síťová spojení nebo vysoké zatížení bez důvodu. Čtecími příkazy ověřte, zda programový soubor patří k nainstalovanému balíčku, a nálezy zajistěte dřív, než cokoli ukončíte.

Co u procesu znamená „podezřelý“

Na webovém serveru běží stovky procesů. Většina patří operačnímu systému, webovému serveru, databázi nebo PHP. Útočník, který mohl přes zranitelnost jako PHP2Shell spustit kód, se snaží mezi nimi nevyčnívat. Volí nenápadné názvy a ukládá programy tam, kam smí zapisovat uživatel webového serveru.

Při kontrole pomáhá znát normální stav. Kdo ví, jaké služby mají na serveru běžet, pod jakými uživateli a s jakým zatížením, pozná odchylky mnohem rychleji. Chybí-li tato znalost, vyplatí se pro porovnání použít seznam procesů stejného, nepodezřelého serveru.

Jediný znak ještě není důkaz. Rozhoduje souhra. Proces s názvem jaderného vlákna, který běží pod www-data, byl spuštěn z /dev/shm a drží spojení do zahraničí, je jasný případ. Jak prověřit zvláštní případ shellu pod webovým serverem, popisuje článek Varovný signál: webový server spouští shell.

První přehled pěti příkazy

Všechny příkazy jen čtou. Spouštějte je jako root, abyste viděli všechny procesy, a výstupy ukládejte do souboru mimo webový adresář.

# 1. Všechny procesy s uživatelem, PID rodiče, časem spuštění, CPU a příkazovou řádkou
ps -eo user,pid,ppid,lstart,%cpu,%mem,cmd --sort=-%cpu | head -40

# 2. Procesy, jejichž programový soubor byl smazán
ls -l /proc/[0-9]*/exe 2>/dev/null | grep "(deleted)"

# 3. Procesy, které běží z dočasných nebo webových adresářů
ls -l /proc/[0-9]*/exe 2>/dev/null | grep -E " -> (/tmp|/var/tmp|/dev/shm|/var/www)"

# 4. Procesy se síťovými spojeními
ss -tunap

# 5. Přehled procesů uživatelů webového serveru
ps -eo user,pid,ppid,lstart,cmd | grep -E "^(www-data|apache|nginx) "

Uživatelská jména se liší podle distribuce a panelu; Plesk a jiné panely spouštějí PHP často pod uživatelem příslušného zákazníka. Seznam přizpůsobte svému prostředí.

Výstupy čtěte s ohledem na čas spuštění. Procesy běžící od posledního restartu serveru většinou patří systému. Pozornost zaslouží procesy spuštěné uprostřed noci nebo ve dnech po 17. říjnu, které neodpovídají žádné službě. Porovnejte také počet procesů PHP s tím, co dovoluje vaše konfigurace poolu; výrazně víc procesů pod uživatelem webového serveru je vodítko.

Podezřelé procesy v Linuxu: typické znaky

Znak Proč nápadný Možné neškodné vysvětlení?
Programový soubor „(deleted)“ útočníci soubory po spuštění mažou ano, po aktualizacích balíčků do restartu
Místo spuštění /tmp, /dev/shm, složka uploadu tam smí zapisovat každý nebo webový server zřídka
Název v hranatých závorkách jako [kworker] napodobuje jaderná vlákna ne, pokud za ním stojí programový soubor
Trvale vysoké zatížení CPU bez příčiny typické pro kryptominery ano, u dávkových úloh nebo indexování
Rodičovský proces 1 a uživatel webového serveru odpojeno od webového serveru, běží samostatně dál zřídka
Spojení na neznámý cíl řízení nebo odliv dat ano, u aktualizací a API

Skutečná jaderná vlákna nemají programový soubor; ls -l /proc/PID/exe u nich nevrátí žádnou cestu. Ukazuje-li proces s jaderným názvem na soubor, je maskovaný. Při vysokém zatížení bez zřejmého důvodu pomůže článek Kryptominery na webovém serveru.

Protizkouška: patří programový soubor k balíčku?

Téměř všechny legitimní programy na serveru pocházejí ze správy balíčků. Programový soubor, který nepatří žádnému balíčku, není automaticky škodlivý, zaslouží si ale bližší pohled.

PID=12345
EXE=$(readlink /proc/$PID/exe); echo "$EXE"
dpkg -S "$EXE"        # Debian/Ubuntu: ke kterému balíčku soubor patří?
rpm -qf "$EXE"        # rodina RHEL
sha256sum /proc/$PID/exe   # kontrolní součet, funguje i u smazaného souboru
tr '\0' ' ' < /proc/$PID/environ | head -c 600; echo   # proměnné prostředí

Je-li programový soubor smazaný, sha256sum /proc/$PID/exe jej přesto přečte z běžícího procesu. Tento kontrolní součet patří do dokumentace. Kopii souboru by měl vytvářet jen ten, kdo ví, jak ji bezpečně uchovat.

Hranice kontroly na běžícím systému

Všechny příkazy výše důvěřují systému, který právě kontrolujete. Při obvyklém průniku přes web s právy uživatele webového serveru je to obhajitelné. Získal-li útočník práva root, může procesy skrývat a výstupy falšovat. Pak server ukazuje jen to, co útočník dovolí.

Náznaky jsou rozpory: zátěž bez viditelného procesu, spojení, která vidí firewall, ale ss ne, nebo změněné systémové programy. V takových případech patří kontrola na zajištěný obraz. U běžících systémů se často přidává záloha paměti RAM, protože některé škodlivé programy existují jen tam a na disku zanechávají sotva stopy. Tato záloha se musí provést před restartem a vyžaduje vhodné nástroje a zkušenost. Proč ji vytvořit před novou instalací, vysvětluje článek Zajistěte důkazy před novou instalací.

Důležité

Podezřelé procesy neukončujte jako první krok. Často je znovu spustí cron úloha nebo služba a s procesem mizí z paměti příkazová řádka, spojení i smazaný programový soubor.

Zkontrolovat autostarty a další kroky

Škodlivý proces, který by po restartu zmizel, by pro útočníky byl bezcenný. U každého nálezu procesu proto patří otázka, co jej spouští. Vedle cron úloh přicházejí v úvahu hlavně služby systemd, které může útočník s právy root založit. Nápadné jsou služby s generickými názvy, jejichž programový soubor leží v neobvyklém adresáři, a soubory unit vzniklé po 17. říjnu.

# Běžící služby a nedávno změněné soubory unit
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

# Vkládá se knihovna do každého procesu? Soubor normálně neexistuje.
ls -l /etc/ld.so.preload 2>/dev/null && cat /etc/ld.so.preload

Záznam v /etc/ld.so.preload je na normálních webových serverech vzácný a silné vodítko k manipulaci s právy root. Jak plánované úlohy zkontrolovat úplně, popisuje článek Rozpoznání skrytých cron úloh jako zadních vrátek.

Poté následují další kroky v tomto pořadí:

  1. Zajistit výstupy a kontrolní součty s časem.
  2. Hledat perzistenci: cron úlohy, služby a časovače systemd, klíče SSH.
  3. Objasnit původ: logy od 20. října, nové soubory ve webovém adresáři.
  4. Server izolovat a naplánovat vyčištění nebo novou výstavbu.

Přehled všech typických příznaků po PHP2Shell podává článek Jsem už kompromitován?.

Jak konkrétně pomáhá PHP SOS?

  • Posoudit procesy: Kontrolujeme seznam procesů, programové soubory a spojení a každý nález zařazujeme.
  • Zajistit důkazy použitelné u soudu: V rámci IT forenzní analýzy zajišťujeme paměť i datové nosiče dříve, než se cokoli změní.
  • Najít perzistenci: Hledáme mechanismy, které škodlivé procesy znovu spouštějí.
  • Uzavřít: Vyčistíme nebo znovu postavíme systém a incident zdokumentujeme až do uzavření.

Časté dotazy

Podle čeho poznám podezřelý proces v Linuxu?

Typickými znaky jsou smazaný programový soubor, místo spuštění v /tmp nebo /dev/shm, název napodobující systémový proces, neobvyklý uživatel a trvalá síťová spojení. Jednotlivé znaky jsou vodítka, několik společně je vážné podezření.

Co znamená „(deleted)“ u /proc/PID/exe?

Programový soubor procesu byl po spuštění smazán. To se legitimně stává po aktualizacích balíčků, dokud se služba nerestartuje. U procesů z dočasných složek nebo pod uživatelem webového serveru je to typické maskovací chování.

Mohu se spolehnout na výstup příkazu ps?

Při obvyklém průniku většinou ano. Získal-li však útočník práva root, může nástroje i výstupy manipulovat. Pak je spolehlivější kontrola zvenčí, například na zajištěném obrazu.

Mám podezřelý proces ukončit pomocí kill?

Ne jako první. Nejprve zajistěte příkazovou řádku, programový soubor, spojení a čas spuštění. Ukončený proces už nic neprozradí a často jej cron úloha nebo služba stejně znovu spustí.

Zdroje

Okamžitý kontakt

Každá hodina se počítá. Napište nám hned.

Stručně popište systém, verzi PHP a pozorování. Ozveme se, vyjasníme situaci a budeme pracovat na dálku, dokud nebude incident uzavřen a zdokumentován.

Okamžitá pomoc