Trenutno stanje: PHP2Shell. Dvije kritične PHP ranjivosti (CVSS 9.2) omogućuju zlonamjerni kod bez prijave. Zakrpe od 21. 10. 2026.Što sada učiniti →

Znak upozorenja: web-poslužitelj pokreće ljusku

Ako PHP-FPM ili proces web-poslužitelja pokrene ljusku, to je jedan od najjačih znakova upozorenja na provalu. Kako provjeriti stablo procesa, razvrstati iznimke i trajno nadzirati obrazac.

Stanje 5 min čitanjaOtkrivanje i forenzika

Ukratko: Ako PHP-FPM, Apache ili neki drugi proces web-poslužitelja pokrene ljusku poput sh ili bash, to je jedan od najjačih znakova upozorenja na provalu putem web-stranice. Prije nego što išta prekinete, provjerite stablo procesa, naredbeni redak i radni direktorij ljuske. Pojedine kratke ljuske mogu biti legitimne; ljuske koje dugo rade s mrežnim alatima gotovo nikad nisu.

Zašto taj obrazac toliko govori

Web-poslužitelj odgovara na zahtjeve. PHP-FPM, upravitelj procesa koji za web-poslužitelj izvršava PHP skripte, za to normalno ne pokreće dodatne programe. Ljuska pod web-poslužiteljem znači da je PHP kod svjesno pozvao neki program. Ili aplikacija to radi namjerno, ili je netko drugi ubacio kod.

Za PHP2Shell ne postoje objavljeni, potvrđeni Indicators of Compromise, dakle nema popisa čvrstih obilježja prepoznavanja. Prepoznavanje se temelji na ponašanju. Prema izvješćima koja su nam dostupna procesi web-poslužitelja ili PHP-FPM-a koji pokreću ljusku spadaju među najjače opće znakove upozorenja. To vrijedi za svaku ranjivost putem koje napadači izvršavaju kod na poslužitelju. Pregled daljnjih znakova daje članak Jesam li već kompromitiran?.

Zašto je ljuska napadaču toliko važna? Uz ranjivost on isprva može ispaljivati samo pojedine naredbe preko PHP procesa. Ljuska od toga čini udobno radno mjesto: može se razgledati, dohvatiti alate, čitati pristupne podatke iz konfiguracijskih datoteka i trajno se smjestiti. Tko prepozna ljusku, napadača često prepoznaje upravo u trenutku kad prelazi s prvog pristupa na stvarni naum.

PHP-FPM pokreće bash: čitati stablo procesa

Svaki proces pod Linuxom ima roditeljski proces. Pitanje je radi li ljuska kao dijete procesa web-poslužitelja. Sljedeće naredbe samo čitaju:

# Stablo procesa s korisnikom, PID-om roditelja i vremenom pokretanja
ps -eo user,pid,ppid,lstart,cmd --forest | grep -B2 -A4 -E "[p]hp-fpm|[a]pache2|[h]ttpd|[l]sphp"

# Ljuske koje rade pod tipičnim korisnicima web-poslužitelja
ps -eo user,pid,ppid,lstart,cmd | grep -E "^(www-data|apache|nginx) " | grep -E "[ /](ba|da)?sh( |$)"

# Stablo od najstarijeg PHP-FPM procesa
pstree -alp "$(pgrep -o php-fpm)"

Ako ste pronašli sumnjivu ljusku, unosi pod /proc daju daljnje naznake, također samo čitanjem:

PID=12345   # PID sumnjive ljuske
tr '\0' ' ' < /proc/$PID/cmdline; echo        # potpun naredbeni redak
ls -l /proc/$PID/cwd /proc/$PID/exe            # radni direktorij i programska datoteka
ls -l /proc/$PID/fd 2>/dev/null | grep socket  # otvorene mrežne veze

Nazivi procesa na Debianu i Ubuntuu često glase php8.3-fpm ili slično; prilagodite obrasce pretraživanja. Radni direktoriji u /tmp, /dev/shm ili u direktorijima za prijenose jasan su znak.

Legitimne iznimke i pravi znakovi upozorenja

Neke aplikacije putem PHP-a pozivaju programe. Pritom nakratko može nastati ljuska, primjerice kad PHP putem sendmail_path predaje poštu ili aplikacija obrađuje slike vanjskim alatom. Takve ljuske žive samo sekunde i uvijek pozivaju isti program. Te očekivane slučajeve jednom uredno dokumentirajte; tada svako odstupanje odmah upada u oči umjesto da utone u poplavu poznatih poruka.

Opažanje Prije bezazleno ako Sumnjivo ako
Kratka ljuska pod PHP-FPM-om pokreće poznati program aplikacije su cilj i svrha nejasni
Ljuska koja dulje radi nikad radi minutama ili satima
Mrežni alati kao podproces poznati upit aplikacije za ažuriranje ili API slijede preuzimanja u privremene direktorije
Radni direktorij projektni direktorij aplikacije /tmp, /dev/shm, direktoriji za prijenose
Vrijeme odgovara poznatoj radnji, primjerice slanju pošte noću, bez aktivnosti korisnika, učestalo

Ako ne znate poziva li Vaša aplikacija programe, pitajte razvojnog programera ili u kodu potražite funkcije poput exec, shell_exec, system, passthru, proc_open i popen. Pogoci u vlastitom kodu su normalni, pogoci u nepoznatim datotekama nisu.

Trajno nadzirati umjesto jednom pogledati

Trenutna snimka naredbom ps hvata samo ljuske koje upravo rade. Kratkotrajni procesi proklize. Pouzdanije je pokretanja programa od korisnika web-poslužitelja trajno bilježiti. Na Linuxu to omogućuje audit usluga auditd s pravilom za pokretanja programa korisnika web-poslužitelja. Evaluacija se radi čitanjem:

# Prikazati zabilježena pokretanja programa pod ključem pravila (ključ kao primjer)
sudo ausearch -k web_exec --start today -i | grep -E "exe=|proctitle="

Kako pravilo izgleda, ovisi o distribuciji i ID-u korisnika; najprije ga testirajte jer na jako opterećenim poslužiteljima nastaje mnogo unosa.

Dvije dopune čine nadzor otpornim. Prvo, zapisnici bi trebali dodatno ići u središnji sustav, jer napadač s root pravima može obrisati lokalne zapisnike. Drugo, treba alarmiranje: pokretanje programa od korisnika web-poslužitelja koje nije na kratkom popisu očekivanih programa trebalo bi izazvati poruku, ne samo zapis u zapisniku. Tko već koristi rješenje za prepoznavanje na krajnjim uređajima ili poslužiteljima, isto pravilo može preslikati tamo. Preventivno se putem disable_functions može blokirati ono što aplikacija ne treba. To ne zatvara ranjivost u interpreteru, ali otežava napadačev sljedeći korak. Pojedinosti su u članku Ispravno koristiti disable_functions.

Što učiniti kad pod web-poslužiteljem pronađete ljusku

  1. Dokumentirati: Ispis naredbe ps, naredbeni redak, radni direktorij i otvorene veze spremiti u datoteku izvan web-direktorija.
  2. Ne čistiti: Ne brisati datoteke i ne prekidati procese prije nego što su tragovi osigurani.
  3. Izolirati: Poslužitelj maknuti s mreže ili pristup jako ograničiti.
  4. Tražiti uzrok: Provjeriti zapisnike, nove datoteke i postojanost poput cron poslova, vidi Pronaći sumnjive procese na Linux poslužiteljima.
  5. Promijeniti pristupe: Sve lozinke i ključevi koji su bili na poslužitelju smatraju se poznatima.

Ako aplikacija radi u kontejnerima, isto načelo vrijedi u malom. Ljuska u PHP kontejneru jednako je sumnjiva kao i na klasičnom poslužitelju, a image-i kontejnera sadrže je često samo zato što je donosi osnovni image. Prije ponovnog pokretanja kontejnera osigurajte njegovo stanje, jer s kontejnerom nestaju i tragovi u prolaznom datotečnom sustavu.

Provjerite i susjedstvo. Napadač s ljuskom na web-poslužitelju često odatle pokušava doći do drugih sustava, primjerice baze podataka, pohrane sigurnosnih kopija ili internih sučelja za upravljanje. Pristupni podaci u konfiguracijskim datotekama aplikacije to mu olakšavaju.

Djelujte odmah

Ljuska koja dugo radi pod PHP-FPM-om na poslužitelju s podacima o klijentima je sigurnosni incident. Tretirajte je tako: osigurati, izolirati, strukturirano obraditi, dati provjeriti obveze prijave.

Kako PHP SOS konkretno pomaže?

  • Razvrstati nalaz: Provjeravamo stablo procesa, naredbene retke i veze te odvajamo ponašanje aplikacije od tragova provale.
  • Osigurati tragove: Stanje sustava osiguravamo provjerljivo prije nego što se išta promijeni.
  • Obraditi incident: Uz odgovor na incidente vodimo od ograničavanja do dokumentiranog zaključka.
  • Trajno zaštititi: Postavljamo bilježenje pokretanja programa i ograničavamo PHP funkcije na nužno. Kako PHP-FPM radi iznutra, objašnjava članak PHP-FPM objašnjen.

Česta pitanja

Je li svaka ljuska pod PHP-FPM-om napad?

Ne svaka. Neke aplikacije putem PHP-a svjesno pozivaju programe, primjerice za obradu slika ili slanje pošte, pri čemu nakratko može nastati ljuska. Sumnjivo postaje ako ljuska radi dulje, pokreće mrežne alate ili radi iz neuobičajenih direktorija.

Trebam li sumnjivi proces odmah prekinuti?

Prvo dokumentirati, zatim djelovati. Zabilježite podatke o procesu, naredbeni redak, radni direktorij i mrežne veze. Nakon toga izolirajte poslužitelj. Prenagljeno prekidanje uništava tragove i ne sprječava napadača da se vrati.

Postoje li za PHP2Shell potvrđena obilježja prepoznavanja?

Ne. Nema objavljenih, potvrđenih Indicators of Compromise. Ljuske pod web-poslužiteljem opći su znak upozorenja na provale putem web-aplikacija, a ne specifični za PHP2Shell.

Kako spriječiti da PHP uopće pokreće ljuske?

Putem disable_functions mogu se blokirati funkcije poput exec, shell_exec, system i proc_open ako ih aplikacija ne treba. To ne zatvara ranjivost u PHP interpreteru, ali otežava iskorištavanje.

Izvori

Hitni kontakt

Svaki sat se računa. Pišite nam odmah.

Ukratko opišite sustav, verziju PHP-a i opažanje. Javit ćemo Vam se, razjasniti situaciju i raditi na daljinu dok incident nije zaključen i dokumentiran.

Hitna pomoć