Dabartinė padėtis: PHP2Shell. Du kritiniai PHP pažeidžiamumai (CVSS 9,2) leidžia vykdyti kenkėjišką kodą be prisijungimo. Pataisos nuo 2026-10-21.Ką dabar daryti →

Įtartinų procesų radimas Linux serveriuose

Kenkėjiški procesai maskuojasi nekenksmingais pavadinimais, veikia iš laikinųjų aplankų arba iš ištrintų failų. Keliomis tik skaitančiomis komandomis rasite neįprastus dalykus ir juos įvertinsite.

Būsena 5 min. skaitymoAptikimas ir forensika

Trumpai: įtartinus procesus Linux serveriuose atpažinsite pagal keletą požymių: programos failas ištrintas arba yra /tmp, /dev/shm ar žiniatinklio kataloge, pavadinimas imituoja sistemos procesą, neįprastas naudotojas, nuolatiniai tinklo ryšiai ar didelė apkrova be priežasties. Tik skaitančiomis komandomis patikrinkite, ar programos failas priklauso įdiegtam paketui, ir radinius išsaugokite, prieš ką nors nutraukdami.

Ką procesui reiškia „įtartinas“

Žiniatinklio serveryje veikia šimtai procesų. Dauguma priklauso operacinei sistemai, žiniatinklio serveriui, duomenų bazei ar PHP. Užpuolikas, kuris per pažeidžiamumą, tokį kaip PHP2Shell, galėjo vykdyti kodą, stengiasi tarp jų nekristi į akis. Jis renkasi nepastebimus pavadinimus ir programas deda ten, kur žiniatinklio serverio naudotojas gali rašyti.

Patikrai padeda žinoti normalią būseną. Kas žino, kokios tarnybos serveryje turi veikti, su kokiais naudotojais ir kokia apkrova, nukrypimus pastebi daug greičiau. Jei tokių žinių trūksta, verta palyginimui panaudoti panašaus, neįtarto serverio procesų sąrašą.

Vienas požymis dar nėra įrodymas. Lemia derinys. Procesas su branduolio gijos pavadinimu, veikiantis po www-data, paleistas iš /dev/shm ir laikantis ryšį į užsienį, yra aiškus atvejis. Kaip patikrinti ypatingą apvalkalo po žiniatinklio serveriu atvejį, aprašo Įspėjamasis ženklas: žiniatinklio serveris paleidžia apvalkalą (shell).

Pirma apžvalga penkiomis komandomis

Visos komandos tik skaito. Vykdykite jas kaip root, kad matytumėte visus procesus, o išvestis išsaugokite faile už žiniatinklio katalogo ribų.

# 1. Visi procesai su naudotoju, tėvinio proceso PID, paleidimo laiku, CPU ir komandine eilute
ps -eo user,pid,ppid,lstart,%cpu,%mem,cmd --sort=-%cpu | head -40

# 2. Procesai, kurių programos failas ištrintas
ls -l /proc/[0-9]*/exe 2>/dev/null | grep "(deleted)"

# 3. Procesai, veikiantys iš laikinųjų ar žiniatinklio katalogų
ls -l /proc/[0-9]*/exe 2>/dev/null | grep -E " -> (/tmp|/var/tmp|/dev/shm|/var/www)"

# 4. Procesai su tinklo ryšiais
ss -tunap

# 5. Žiniatinklio serverio naudotojų procesų apžvalga
ps -eo user,pid,ppid,lstart,cmd | grep -E "^(www-data|apache|nginx) "

Naudotojų vardai skiriasi pagal distribuciją ir skydelį; Plesk ir kiti skydeliai PHP dažnai vykdo pagal atitinkamo kliento naudotoją. Sąrašą pritaikykite savo aplinkai.

Išvestis skaitykite žiūrėdami į paleidimo laiką. Procesai, veikiantys nuo paskutinio serverio paleidimo iš naujo, dažniausiai priklauso sistemai. Dėmesio verti procesai, paleisti vidury nakties ar dienomis po spalio 17 d. ir netinkantys jokiai tarnybai. Palyginkite ir PHP procesų skaičių su tuo, ką leidžia jūsų baseino konfigūracija; gerokai daugiau procesų po žiniatinklio serverio naudotoju yra užuomina.

Įtartini procesai Linux sistemoje: tipiniai požymiai

Požymis Kodėl krinta į akis Ar įmanomas nekenksmingas paaiškinimas?
Programos failas „(deleted)“ užpuolikai failus ištrina po paleidimo taip, po paketų atnaujinimų iki paleidimo iš naujo
Paleidimo vieta /tmp, /dev/shm, įkėlimų aplankas ten gali rašyti visi arba žiniatinklio serveris retai
Pavadinimas laužtiniuose skliaustuose, pvz., [kworker] imituoja branduolio gijas ne, jei už jo yra programos failas
Nuolat didelė CPU apkrova be priežasties tipiška kriptokasėjams taip, esant paketiniams darbams ar indeksavimui
Tėvinis procesas 1 ir žiniatinklio serverio naudotojas atsiskyręs nuo žiniatinklio serverio, veikia savarankiškai retai
Ryšys su nežinomu tikslu valdymas ar duomenų nutekėjimas taip, atnaujinimų ir API atveju

Tikros branduolio gijos neturi programos failo; ls -l /proc/PID/exe joms kelio nerodo. Jei procesas su branduolio pavadinimu rodo į failą, jis užsimaskavęs. Esant didelei apkrovai be aiškios priežasties padeda straipsnis Kriptokasėjas žiniatinklio serveryje.

Kontrolinė patikra: ar programos failas priklauso paketui?

Beveik visos teisėtos serverio programos kyla iš paketų valdymo. Programos failas, nepriklausantis jokiam paketui, nėra automatiškai kenkėjiškas, bet vertas atidaus žvilgsnio.

PID=12345
EXE=$(readlink /proc/$PID/exe); echo "$EXE"
dpkg -S "$EXE"        # Debian/Ubuntu: kuriam paketui priklauso failas?
rpm -qf "$EXE"        # RHEL šeima
sha256sum /proc/$PID/exe   # kontrolinė suma, veikia ir su ištrintu failu
tr '\0' ' ' < /proc/$PID/environ | head -c 600; echo   # aplinkos kintamieji

Jei programos failas ištrintas, sha256sum /proc/$PID/exe jį vis tiek nuskaito iš veikiančio proceso. Ši kontrolinė suma turi patekti į dokumentaciją. Failo kopiją turėtų kurti tik tas, kas žino, kaip ją saugiai saugoti.

Patikros veikiančioje sistemoje ribos

Visos pirmiau pateiktos komandos pasitiki sistema, kurią dabar tikrinate. Esant įprastam įsilaužimui per svetainę su žiniatinklio serverio naudotojo teisėmis tai pateisinama. Jei užpuolikas įgijo root teises, jis gali slėpti procesus ir klastoti išvestis. Tuomet serveris rodo tik tai, ką leidžia užpuolikas.

Į tai nurodo prieštaravimai: apkrova be matomo proceso, ryšiai, kuriuos mato ugniasienė, bet ss ne, ar pakeistos sistemos programos. Tokiais atvejais patikrą reikia atlikti saugiame atvaizde. Veikiančių sistemų atveju dažnai prisideda ir operatyviosios atminties išsaugojimas, nes kai kurios kenkėjiškos programos egzistuoja tik joje ir kietajame diske palieka mažai pėdsakų. Šis išsaugojimas turi būti atliktas prieš paleidimą iš naujo ir reikalauja tinkamų įrankių bei patirties. Kodėl tai reikėtų padaryti prieš diegiant iš naujo, paaiškina Įrodymų išsaugojimas prieš diegiant iš naujo.

Svarbu

Įtartinų procesų nenutraukite kaip pirmo žingsnio. Dažnai juos iš naujo paleidžia cron užduotis ar tarnyba, o kartu su procesu iš atminties dingsta komandinė eilutė, ryšiai ir ištrintas programos failas.

Automatinio paleidimo patikra ir kiti žingsniai

Kenkėjiškas procesas, kuris po paleidimo iš naujo išnyktų, užpuolikams būtų beverčiai. Todėl prie kiekvieno proceso radinio priklauso klausimas, kas jį paleidžia. Be cron užduočių, daugiausia galimi systemd tarnybos, kurias užpuolikas su root teisėmis gali sukurti. Krinta į akis tarnybos su bendriniais pavadinimais, kurių programos failas yra neįprastame kataloge, ir unit failai, atsiradę po spalio 17 d.

# Veikiančios tarnybos ir neseniai pakeisti unit failai
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

# Ar biblioteka įterpiama į kiekvieną procesą? Šio failo paprastai nėra.
ls -l /etc/ld.so.preload 2>/dev/null && cat /etc/ld.so.preload

Įrašas /etc/ld.so.preload įprastuose žiniatinklio serveriuose pasitaiko retai ir yra stiprus manipuliavimo su root teisėmis požymis. Kaip visiškai patikrinti suplanuotas užduotis, aprašo Paslėptų cron užduočių kaip užpakalinių durų atpažinimas.

Toliau seka kiti žingsniai tokia tvarka:

  1. Išvestis ir kontrolines sumas išsaugoti su laiku.
  2. Ieškoti išliekamumo: cron užduočių, systemd tarnybų ir laikmačių, SSH raktų.
  3. Išsiaiškinti kilmę: žurnalai nuo spalio 20 d., nauji failai žiniatinklio kataloge.
  4. Izoliuoti serverį ir planuoti išvalymą ar perkūrimą.

Visų tipinių požymių po PHP2Shell apžvalgą pateikia Ar jau esu pažeistas?.

Kaip PHP SOS padeda konkrečiai?

  • Įvertinti procesus: tikriname procesų sąrašą, programų failus ir ryšius bei kiekvieną radinį klasifikuojame.
  • Išsaugoti teisme priimtinai: su IT forensika išsaugome operatyviąją atmintį ir duomenų laikmenas, prieš ką nors keičiant.
  • Rasti išliekamumą: ieškome mechanizmų, kurie kenkėjiškus procesus paleidžia iš naujo.
  • Užbaigti: išvalome arba perkuriame ir dokumentuojame incidentą iki pabaigos.

Dažni klausimai

Kaip atpažinti įtartiną procesą Linux sistemoje?

Tipiniai požymiai: ištrintas programos failas, paleidimo vieta /tmp ar /dev/shm, pavadinimas, imituojantis sistemos procesą, neįprastas naudotojas ir nuolatiniai tinklo ryšiai. Pavieniai požymiai yra užuominos, keli kartu rimtas įtarimas.

Ką reiškia „(deleted)“ prie /proc/PID/exe?

Proceso programos failas buvo ištrintas po paleidimo. Tai teisėtai nutinka po paketų atnaujinimų, kol tarnyba paleidžiama iš naujo. Procesams iš laikinųjų aplankų ar po žiniatinklio serverio naudotoju tai tipiškas maskavimosi elgesys.

Ar galiu pasitikėti ps išvestimi?

Esant įprastam įsilaužimui dažniausiai taip. Tačiau jei užpuolikas įgijo root teises, jis gali manipuliuoti įrankiais ir išvestimis. Tuomet patikimesnė yra patikra iš išorės, pavyzdžiui, saugiame atvaizde.

Ar įtartiną procesą turėčiau nutraukti su kill?

Ne pirmiausia. Pirmiausia išsaugokite komandinę eilutę, programos failą, ryšius ir paleidimo laiką. Nutrauktas procesas nieko nebeišduoda, o dažnai jį vis tiek paleidžia iš naujo cron užduotis ar tarnyba.

Šaltiniai

Skubus kontaktas

Kiekviena valanda svarbi. Parašykite mums dabar.

Trumpai aprašykite sistemą, PHP versiją ir pastebėjimus. Mes atsakysime, išsiaiškinsime padėtį ir dirbsime nuotoliu, kol incidentas bus užbaigtas ir dokumentuotas.

Skubi pagalba