Ukratko: Sumnjive procese na Linux poslužiteljima prepoznajete po nekoliko obilježja: programska datoteka izbrisana ili u /tmp, /dev/shm ili web-direktoriju, ime oponaša sistemski proces, neobičan korisnik, trajne mrežne veze ili visoko opterećenje bez razloga. Naredbama koje samo čitaju provjerite pripada li programska datoteka instaliranom paketu i osigurajte nalaze prije nego išta prekinete.
Što „sumnjivo“ znači kod procesa
Na web-poslužitelju radi stotine procesa. Većina pripada operacijskom sustavu, web-poslužitelju, bazi podataka ili PHP-u. Napadač koji je putem ranjivosti poput PHP2Shella mogao izvršiti kod nastoji među njima ne upadati u oči. Bira neupadljiva imena i programe odlaže tamo gdje korisnik web-poslužitelja smije pisati.
Za provjeru pomaže poznavati normalno stanje. Tko zna koje usluge na poslužitelju trebaju raditi, pod kojim korisnicima i s kojim opterećenjem, odstupanja prepoznaje puno brže. Ako to znanje nedostaje, isplati se za usporedbu uzeti popis procesa sličnog, neosumnjičenog poslužitelja.
Pojedino obilježje još nije dokaz. Odlučuje međudjelovanje. Proces s imenom jezgrine niti koji radi pod www-data, pokrenut je iz /dev/shm i drži vezu u inozemstvo, jasan je slučaj. Kako provjeriti poseban slučaj ljuske pod web-poslužiteljem, opisuje članak Znak upozorenja: web-poslužitelj pokreće ljusku.
Prvi pregled u pet naredbi
Sve naredbe samo čitaju. Izvedite ih kao root da biste vidjeli sve procese i ispise spremite u datoteku izvan web-direktorija.
# 1. Svi procesi s korisnikom, PID-om roditelja, vremenom pokretanja, CPU-om i naredbenim retkom
ps -eo user,pid,ppid,lstart,%cpu,%mem,cmd --sort=-%cpu | head -40
# 2. Procesi čija je programska datoteka izbrisana
ls -l /proc/[0-9]*/exe 2>/dev/null | grep "(deleted)"
# 3. Procesi koji rade iz privremenih ili web-direktorija
ls -l /proc/[0-9]*/exe 2>/dev/null | grep -E " -> (/tmp|/var/tmp|/dev/shm|/var/www)"
# 4. Procesi s mrežnim vezama
ss -tunap
# 5. Pregled procesa korisnika web-poslužitelja
ps -eo user,pid,ppid,lstart,cmd | grep -E "^(www-data|apache|nginx) "
Korisnička imena razlikuju se po distribuciji i panelu; Plesk i drugi paneli PHP često izvršavaju pod korisnikom pojedinog klijenta. Prilagodite popis svom okruženju.
Ispise čitajte s pogledom na vrijeme pokretanja. Procesi koji rade od zadnjeg ponovnog pokretanja poslužitelja uglavnom pripadaju sustavu. Procesi pokrenuti usred noći ili u danima nakon 17. listopada koji ne odgovaraju nijednoj usluzi zaslužuju pažnju. Usporedite i broj PHP procesa s onim što dopušta konfiguracija poola; znatno više procesa pod korisnikom web-poslužitelja je naznaka.
Sumnjivi procesi na Linuxu: tipična obilježja
| Obilježje | Zašto upada u oči | Moguće bezazleno objašnjenje? |
|---|---|---|
| Programska datoteka „(deleted)“ | napadači brišu datoteke nakon pokretanja | da, nakon ažuriranja paketa do ponovnog pokretanja |
Mjesto pokretanja /tmp, /dev/shm, direktorij za prijenose |
tamo smije pisati svatko ili web-poslužitelj | rijetko |
Ime u uglatim zagradama poput [kworker] |
oponaša jezgrine niti | ne, ako iza njega stoji programska datoteka |
| Trajno visoko opterećenje CPU-a bez povoda | tipično za kriptorudare | da, kod batch poslova ili indeksiranja |
| Roditeljski proces 1 i korisnik web-poslužitelja | odvojen od web-poslužitelja, radi samostalno dalje | rijetko |
| Veza prema nepoznatom odredištu | upravljanje ili odljev podataka | da, kod ažuriranja i API-ja |
Prave jezgrine niti nemaju programsku datoteku; ls -l /proc/PID/exe kod njih ne daje put. Pokazuje li proces s jezgrinim imenom na datoteku, maskiran je. Kod visokog opterećenja bez prepoznatljivog razloga pomaže članak Kriptorudar na web-poslužitelju.
Protuprovjera: pripada li programska datoteka paketu?
Gotovo svi legitimni programi na poslužitelju potječu iz upravljanja paketima. Programska datoteka koja ne pripada nijednom paketu nije automatski zlonamjerna, ali zaslužuje pomnu pozornost.
PID=12345
EXE=$(readlink /proc/$PID/exe); echo "$EXE"
dpkg -S "$EXE" # Debian/Ubuntu: kojem paketu pripada datoteka?
rpm -qf "$EXE" # RHEL obitelj
sha256sum /proc/$PID/exe # kontrolni zbroj, radi i kod izbrisane datoteke
tr '\0' ' ' < /proc/$PID/environ | head -c 600; echo # varijable okruženja
Ako je programska datoteka izbrisana, sha256sum /proc/$PID/exe je ipak čita iz aktivnog procesa. Taj kontrolni zbroj pripada u dokumentaciju. Kopiju datoteke smije napraviti samo netko tko zna kako je sigurno pohraniti.
Granice provjere na aktivnom sustavu
Sve gornje naredbe vjeruju sustavu koji upravo provjeravate. Kod uobičajene provale putem web-stranice s pravima korisnika web-poslužitelja to je opravdano. Ako je napadač stekao root prava, može sakriti procese i krivotvoriti ispise. Tada poslužitelj pokazuje samo ono što napadač dopušta.
Naznake su proturječnosti: opterećenje bez vidljivog procesa, veze koje vatrozid vidi, a ss ne, ili izmijenjeni sistemski programi. U takvim slučajevima provjera pripada na osiguranu sliku. Kod aktivnih sustava često se dodaje i sigurnosna kopija radne memorije, jer neki zlonamjerni programi postoje samo tamo i na disku ostavljaju gotovo nikakve tragove. Ta se kopija mora napraviti prije ponovnog pokretanja i traži odgovarajuće alate i iskustvo. Zašto je trebate napraviti prije nove instalacije, objašnjava članak Osigurati dokaze prije ponovne instalacije.
Sumnjive procese ne prekidajte kao prvi korak. Često ih cron posao ili usluga ponovno pokrene, a s procesom iz memorije nestaju naredbeni redak, veze i izbrisana programska datoteka.
Provjeriti automatska pokretanja i sljedeći koraci
Zlonamjeran proces koji nakon ponovnog pokretanja nestane bio bi napadačima bezvrijedan. Zato uz svaki nalaz procesa pripada pitanje što ga pokreće. Uz cron poslove dolaze u obzir ponajprije systemd usluge koje napadač s root pravima može stvoriti. Upadljive su usluge s generičkim imenima čija se programska datoteka nalazi u neobičnom direktoriju te unit datoteke nastale nakon 17. listopada.
# Aktivne usluge i nedavno izmijenjene unit datoteke
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
# Ubacuje li se biblioteka u svaki proces? Datoteka normalno ne postoji.
ls -l /etc/ld.so.preload 2>/dev/null && cat /etc/ld.so.preload
Unos u /etc/ld.so.preload rijedak je na uobičajenim web-poslužiteljima i snažna je naznaka manipulacije s root pravima. Kako potpuno provjeriti planirane zadatke, opisuje članak Prepoznati skrivene cron poslove kao stražnja vrata.
Zatim slijede sljedeći koraci ovim redoslijedom:
- Osigurati ispise i kontrolne zbrojeve s vremenom.
- Tražiti postojanost: cron poslove, systemd usluge i timere, SSH ključeve.
- Razjasniti podrijetlo: zapisnici od 20. listopada, nove datoteke u web-direktoriju.
- Izolirati poslužitelj i planirati čišćenje ili ponovnu izgradnju.
Pregled svih tipičnih znakova nakon PHP2Shella daje članak Jesam li već kompromitiran?.
Kako PHP SOS konkretno pomaže?
- Procijeniti procese: Provjeravamo popis procesa, programske datoteke i veze te razvrstavamo svaki nalaz.
- Osigurati dokazno: Uz IT forenziku osiguravamo radnu memoriju i nosače podataka prije nego se išta promijeni.
- Pronaći postojanost: Tražimo mehanizme koji ponovno pokreću zlonamjerne procese.
- Zaključiti: Čistimo ili ponovno gradimo i dokumentiramo incident do zaključka.
Česta pitanja
Po čemu prepoznajem sumnjivi proces na Linuxu?
Tipična obilježja su izbrisana programska datoteka, mjesto pokretanja u /tmp ili /dev/shm, ime koje oponaša sistemski proces, neobičan korisnik i trajne mrežne veze. Pojedina obilježja su naznake, a više njih zajedno ozbiljna sumnja.
Što znači „(deleted)“ kod /proc/PID/exe?
Programska datoteka procesa izbrisana je nakon pokretanja. To se legitimno događa nakon ažuriranja paketa, sve dok se usluga ponovno ne pokrene. Kod procesa iz privremenih direktorija ili pod korisnikom web-poslužitelja to je tipično maskirno ponašanje.
Mogu li se osloniti na ispis naredbe ps?
Kod uobičajene provale uglavnom da. No ako je napadač stekao root prava, može manipulirati alatima i ispisima. Tada je pouzdanija provjera izvana, primjerice na osiguranoj slici.
Trebam li sumnjivi proces prekinuti naredbom kill?
Ne kao prvo. Najprije osigurajte naredbeni redak, programsku datoteku, veze i vrijeme pokretanja. Prekinuti proces više ništa ne odaje, a cron posao ili usluga ga često ionako ponovno pokrene.