Stručne: Podozrivé procesy na serveroch s Linuxom spoznáte podľa niekoľkých znakov: súbor programu je zmazaný alebo v /tmp, /dev/shm či webovom adresári, názov napodobňuje systémový proces, neobvyklý používateľ, trvalé sieťové spojenia alebo vysoká záťaž bez dôvodu. Čítacími príkazmi preverte, či súbor programu patrí k nainštalovanému balíku, a nálezy zabezpečte skôr, než niečo ukončíte.
Čo znamená „podozrivý“ pri procese
Na webovom serveri beží stovky procesov. Väčšina patrí k operačnému systému, webovému serveru, databáze alebo PHP. Útočník, ktorý mohol vykonať kód cez zraniteľnosť ako PHP2Shell, sa snaží medzi nimi nevyniknúť. Volí nenápadné názvy a ukladá programy tam, kde smie zapisovať používateľ webového servera.
Pri kontrole pomáha poznať normálny stav. Kto vie, ktoré služby majú na serveri bežať, pod akými používateľmi a s akou záťažou, rozpozná odchýlky oveľa rýchlejšie. Ak táto znalosť chýba, oplatí sa na porovnanie použiť zoznam procesov podobného, nepodozrivého servera.
Jednotlivý znak ešte nie je dôkaz. Rozhoduje súhra. Proces s názvom vlákna jadra, ktorý beží pod www-data, bol spustený z /dev/shm a drží spojenie do zahraničia, je jasný prípad. Ako preveriť osobitný prípad shellu pod webovým serverom, opisuje Varovný signál: webový server spúšťa shell.
Prvý prehľad v piatich príkazoch
Všetky príkazy len čítajú. Spúšťajte ich ako root, aby ste videli všetky procesy, a výstupy ukladajte do súboru mimo webového adresára.
# 1. Všetky procesy s používateľom, PID rodiča, časom spustenia, CPU a príkazovým riadkom
ps -eo user,pid,ppid,lstart,%cpu,%mem,cmd --sort=-%cpu | head -40
# 2. Procesy, ktorých súbor programu bol zmazaný
ls -l /proc/[0-9]*/exe 2>/dev/null | grep "(deleted)"
# 3. Procesy, ktoré bežia z dočasných alebo webových adresárov
ls -l /proc/[0-9]*/exe 2>/dev/null | grep -E " -> (/tmp|/var/tmp|/dev/shm|/var/www)"
# 4. Procesy so sieťovými spojeniami
ss -tunap
# 5. Prehľad procesov používateľov webového servera
ps -eo user,pid,ppid,lstart,cmd | grep -E "^(www-data|apache|nginx) "
Mená používateľov sa podľa distribúcie a panela líšia; Plesk a iné panely často spúšťajú PHP pod používateľom príslušného zákazníka. Zoznam prispôsobte svojmu prostrediu.
Výstupy čítajte s ohľadom na čas spustenia. Procesy, ktoré bežia od posledného reštartu servera, zvyčajne patria k systému. Pozornosť si zaslúžia procesy, ktoré sa spustili uprostred noci alebo v dňoch po 17. októbri a nezodpovedajú žiadnej službe. Porovnajte aj počet procesov PHP s tým, čo dovoľuje konfigurácia poolu; výrazne viac procesov pod používateľom webového servera je náznak.
Podozrivé procesy v Linuxe: typické znaky
| Znak | Prečo upúta | Možné neškodné vysvetlenie? |
|---|---|---|
| Súbor programu „(deleted)“ | Útočníci po spustení súbory mažú | áno, po aktualizáciách balíkov do reštartu |
Miesto spustenia /tmp, /dev/shm, priečinok na nahrávanie |
tam smie zapisovať každý alebo webový server | zriedka |
Názov v hranatých zátvorkách ako [kworker] |
napodobňuje vlákna jadra | nie, ak za ním stojí súbor programu |
| Trvale vysoká záťaž CPU bez príčiny | typické pre kryptominery | áno, pri dávkových úlohách alebo indexovaní |
| Rodičovský proces 1 a používateľ webového servera | odtrhnutý od webového servera, beží samostatne ďalej | zriedka |
| Spojenie na neznámy cieľ | riadenie alebo únik dát | áno, pri aktualizáciách a API |
Skutočné vlákna jadra nemajú súbor programu; ls -l /proc/PID/exe im nevráti žiadnu cestu. Ak proces s názvom jadra ukazuje na súbor, je maskovaný. Pri vysokej záťaži bez zjavného dôvodu pomôže článok Kryptominery na webovom serveri.
Protikontrola: patrí súbor programu k balíku?
Takmer všetky legitímne programy na serveri pochádzajú zo správy balíkov. Súbor programu, ktorý nepatrí k žiadnemu balíku, nie je automaticky škodlivý, zaslúži si však dôkladný pohľad.
PID=12345
EXE=$(readlink /proc/$PID/exe); echo "$EXE"
dpkg -S "$EXE" # Debian/Ubuntu: ku ktorému balíku súbor patrí?
rpm -qf "$EXE" # rodina RHEL
sha256sum /proc/$PID/exe # kontrolný súčet, funguje aj pri zmazanom súbore
tr '\0' ' ' < /proc/$PID/environ | head -c 600; echo # premenné prostredia
Ak je súbor programu zmazaný, sha256sum /proc/$PID/exe ho napriek tomu načíta z bežiaceho procesu. Tento kontrolný súčet patrí do dokumentácie. Kópiu súboru by mal vytvoriť len ten, kto vie, ako ju bezpečne uchovať.
Hranice kontroly na bežiacom systéme
Všetky vyššie uvedené príkazy dôverujú systému, ktorý práve kontrolujete. Pri bežnom vlámaní cez web s právami používateľa webového servera je to obhájiteľné. Ak útočník získal práva root, môže procesy skrývať a výstupy falšovať. Server potom ukazuje len to, čo útočník dovolí.
Náznakmi sú rozpory: záťaž bez viditeľného procesu, spojenia, ktoré vidí firewall, no ss nie, alebo zmenené systémové programy. V takých prípadoch patrí kontrola na zabezpečený obraz. Pri bežiacich systémoch pribúda často zálohovanie pamäte RAM, pretože niektoré škodlivé programy existujú len tam a na disku zanechávajú sotva stopy. Toto zálohovanie musí prebehnúť pred reštartom a vyžaduje vhodné nástroje a skúsenosti. Prečo to treba urobiť pred novou inštaláciou, vysvetľuje Zabezpečte dôkazy skôr, než systém nasadíte nanovo.
Podozrivé procesy neukončujte ako prvý krok. Často ich cronjob alebo služba znovu spustí a s procesom miznú z pamäte príkazový riadok, spojenia a zmazaný súbor programu.
Skontrolovať autoštarty a ďalšie kroky
Škodlivý proces, ktorý by po reštarte zmizol, by bol pre útočníkov bezcenný. Preto k nálezu každého procesu patrí otázka, čo ho spúšťa. Okrem cronjobov prichádzajú do úvahy hlavne služby systemd, ktoré môže útočník s právami root vytvoriť. Nápadné sú služby so všeobecnými názvami, ktorých súbor programu leží v neobvyklom adresári, a súbory jednotiek, ktoré vznikli po 17. októbri.
# Bežiace služby a nedávno zmenené súbory jednotiek
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
# Vkladá sa do každého procesu knižnica? Súbor zvyčajne neexistuje.
ls -l /etc/ld.so.preload 2>/dev/null && cat /etc/ld.so.preload
Záznam v /etc/ld.so.preload je na bežných webových serveroch zriedkavý a silný ukazovateľ manipulácie s právami root. Ako úplne skontrolovať plánované úlohy, opisuje Rozpoznanie skrytých cronjobov ako zadných vrátok.
Potom nasledujú ďalšie kroky v tomto poradí:
- Zabezpečiť výstupy a kontrolné súčty s časom.
- Hľadať perzistenciu: cronjoby, služby a časovače systemd, kľúče SSH.
- Objasniť pôvod: logy od 20. októbra, nové súbory vo webovom adresári.
- Server izolovať a naplánovať vyčistenie alebo nové nasadenie.
Prehľad všetkých typických príznakov po PHP2Shell poskytuje Som už kompromitovaný?.
Ako konkrétne pomáha PHP SOS?
- Zhodnotiť procesy: Preveríme zoznam procesov, súbory programov a spojenia a každý nález zaradíme.
- Zabezpečiť pred súdom: Prostredníctvom IT forenznej analýzy zabezpečíme pamäť RAM a nosiče dát ešte predtým, než sa niečo zmení.
- Nájsť perzistenciu: Hľadáme mechanizmy, ktoré škodlivé procesy znovu spúšťajú.
- Uzavrieť: Vyčistíme alebo nasadíme nanovo a incident zdokumentujeme až po uzavretie.
Časté otázky
Podľa čoho spoznám podozrivý proces v Linuxe?
Typické znaky sú zmazaný súbor programu, miesto spustenia v /tmp alebo /dev/shm, názov napodobňujúci systémový proces, neobvyklý používateľ a trvalé sieťové spojenia. Jednotlivé znaky sú náznaky, viacero spolu je vážne podozrenie.
Čo znamená „(deleted)“ pri /proc/PID/exe?
Súbor programu procesu bol po spustení zmazaný. To sa legitímne stáva po aktualizáciách balíkov, kým sa služba nereštartuje. Pri procesoch z dočasných priečinkov alebo pod používateľom webového servera je to typické maskovacie správanie.
Môžem sa spoliehať na výstup ps?
Pri bežnom vlámaní zvyčajne áno. Ak však útočník získal práva root, môže manipulovať s nástrojmi a výstupmi. Vtedy je spoľahlivejšia kontrola zvonku, napríklad na zabezpečenom obraze.
Mám podozrivý proces ukončiť pomocou kill?
Nie ako prvé. Najprv zabezpečte príkazový riadok, súbor programu, spojenia a čas spustenia. Ukončený proces už nič neprezradí a často ho cronjob alebo služba aj tak znovu spustí.