# Prepoznavanje i uklanjanje webshella

> Prepoznavanje webshella nakon PHP2Shella: pronađite sumnjive PHP datoteke, procese i veze, osigurajte tragove i dajte uredno ukloniti stražnja vrata.

Izvor: https://phpsos.de/hr/ratgeber/webshell-erkennen/  
Stanje: 25.10.2026  
Pružatelj: PHP SOS, PHP hitna pomoć i sigurnost poslužitelja. Hitna pomoć putem WhatsAppa: https://wa.me/491736494914?text=Pozdrav%20PHP%20SOS%2C%20trebamo%20pomo%C4%87%20s%20na%C5%A1im%20PHP%20poslu%C5%BEiteljem.%20Tvrtka%3A%20%E2%80%A6%20Web-stranica%3A%20%E2%80%A6

**Ukratko:** Webshell prepoznajete po novim ili izmijenjenim PHP datotekama na neuobičajenim mjestima, po stranim procesima korisnika web-poslužitelja i po neuobičajenim vezama. Osigurajte tragove prije nego išta obrišete i vratite kod iz čistog izvora. Zakrpa sama ne uklanja stražnja vrata.

## Zašto su webshellovi tema nakon PHP2Shella

Ranjivosti CVE-2026-109618 i CVE-2026-109619 u samom PHP-u omogućuju izvršavanje zlonamjernog koda izdaleka bez prijave. Logičan cilj nakon uspješnog napada je trajna stražnja vrata, dakle webshell. Ona ostaju i kad je PHP u međuvremenu ažuriran.

Prema medijskim izvješćima prvi pokušaj napada opažen je već 17.10.2026., a zakrpe su uslijedile 21.10. Tko je u tom razdoblju bio ranjiv, trebao bi ciljano provjeriti. Potvrđeni Indicators of Compromise do sada nisu objavljeni. Potraga se stoga temelji na upadljivostima u ponašanju, a ne na gotovom popisu.

> **Djelujte odmah:**
> Ako na poslužitelju s podacima klijenata pronađete webshell: ništa ne brišite na brzinu. Najprije osigurajte dokaze, zatim izolirajte poslužitelj i planirajte daljnju obradu.

## Kako prepoznati webshell: provjera datoteka

Većina webshellova su PHP datoteke u web-direktoriju. Upadljive su datoteke nastale ili izmijenjene nakon 17.10., PHP datoteke u mapama za uploade i cache te datoteke sa zamaskiranim kodom. Sljedeće naredbe ništa ne mijenjaju, samo ispisuju:

```bash
# PHP datoteke izmijenjene od 17.10.2026.
find /var/www -type f -name "*.php*" -newermt "2026-10-17" -ls

# PHP datoteke u mapama za upload, cache ili tmp
find /var/www -type f -name "*.php*" \( -path "*upload*" -o -path "*cache*" -o -path "*tmp*" \) -ls

# Tipično maskiranje: eval u kombinaciji s dekodiranjem
grep -rlE "eval\s*\(\s*(base64_decode|gzinflate|str_rot13|gzuncompress)" /var/www --include="*.php"

# Neobično dugi retci često upućuju na pakirani kod
grep -rlE ".{3000,}" /var/www --include="*.php"
```

Pogoci su naznake, a ne dokazi. Neki dodaci legitimno koriste kodirani kod. Usporedite sumnjive datoteke s izvornim paketom proizvođača. Najpouzdanija je usporedba s kontrolnim zbrojevima ili sustavom za kontrolu verzija poput Gita:

```bash
# Odstupanja od zadnjeg poznatog stanja u Git repozitoriju
git -C /var/www/projekt status --porcelain
```

Vremenska oznaka može biti krivotvorena. Zato se ne oslanjajte samo na datum izmjene datoteke.

### Koja obilježja datoteku čine sumnjivom

| Obilježje | Zašto upada u oči |
|---|---|
| PHP datoteka u mapi za upload ili slike | Tamo bi trebali biti samo mediji |
| Dvostruki nastavak poput `.jpg.php` ili `.php.png` | Prikrivanje kao bezazlena datoteka |
| Vrlo dugi retci bez prijeloma | Tipično za pakirani ili šifrirani kod |
| Ime datoteke slično jezgrenoj datoteci, ali nije u izvornom paketu | Prikrivanje u poznatom okruženju |
| Vlasnik ili prava odstupaju od susjednih datoteka | Datoteka je stvorena drugim putem |

Što se više obilježja podudara, veća je vjerojatnost pronalaska. Sumnjive datoteke otvarajte samo kao tekst, nikad putem preglednika, jer bi poziv preko web-stranice izvršio kod.

## Provjera procesa, veza i cron zadataka

Aktivni webshell često ostavlja tragove izvan datotečnog sustava. Korisnik web-poslužitelja, primjerice `www-data`, `apache` ili `nginx`, uobičajeno ne pokreće shellove, mrežne alate ni kompajlere.

```bash
# Procesi uobičajenih korisnika web-poslužitelja
ps -eo user,pid,ppid,lstart,cmd | grep -E "^(www-data|apache|nginx)"

# Otvorene mrežne veze s pripadajućim procesom
sudo ss -tunap | grep -E "php|www-data|apache|nginx"

# Planirani zadaci korisnika web-poslužitelja
sudo crontab -u www-data -l
ls -la /etc/cron.d /var/spool/cron 2>/dev/null
```

Upadljive su trajne odlazne veze prema nepoznatim odredištima, procesi s kriptičnim imenima i cron zadaci koji s interneta učitavaju datoteke. Provjerite i logove pristupa za zahtjeve prema datotekama kojih prije nije bilo. Kako to učiniti, opisuje vodič [Analiza logova web-poslužitelja nakon napada](https://phpsos.de/hr/ratgeber/logfiles-auswerten/).

## Osigurajte tragove prije uklanjanja

Tko najprije briše, gubi odgovor na najvažnija pitanja: kako je napadač ušao, što je vidio, koji su podaci pogođeni? Ti su Vam odgovori potrebni za moguću prijavu prema GDPR-u, za osiguravatelje i za odluku jesu li ugroženi drugi sustavi.

Razumljiv redoslijed:

1. Dokumentirajte stanje: popis procesa, mrežne veze, prijavljeni korisnici.
2. Kopirajte sumnjive datoteke i logove s kontrolnim zbrojem, bez otvaranja ili izvršavanja.
3. Ako je moguće, napravite sliku sustava ili snapshot virtualnog stroja.
4. Isključite poslužitelj s mreže ili jako ograničite pristup.

Kod sustava s osjetljivim podacima ili mogućim sudskim sporom osiguravanje bi trebalo biti forenzički uredno. Pozadinu pronađite na stranici [IT forenzika nakon napada na web-poslužitelj](https://phpsos.de/hr/leistungen/it-forensik/).

## Uredno uklanjanje webshellova

Brisanje jedne datoteke rijetko je kraj. Napadači često postave više pristupa: dodatne datoteke na skrivenim mjestima, zapise u konfiguracijskim datotekama poput `.htaccess` ili `.user.ini`, nove administratorske račune u aplikaciji ili cron zadatke. Pouzdano čišćenje slijedi ove korake:

- Dovedite PHP na ispravljeno stanje (8.5.12, 8.4.27, 8.3.36, 8.2.35 ili potvrđeni backport) i ponovno pokrenite sve PHP procese.
- Aplikacijski kod postavite iznova iz čistog izvora umjesto popravljanja pojedinih datoteka.
- Preuzmite samo provjerene sadržaje poput uploada i baze podataka te tamo ciljano tražite ubačeni kod.
- Promijenite sve pristupne podatke: bazu podataka, SSH, FTP, administratorske račune, API ključeve.
- Ograničite prava pisanja web-poslužitelja na nužno i onemogućite izvršavanje PHP-a u mapama za upload.

Za WordPress postoje vlastita tipična skrovišta, koja opisuje vodič [Pronalaženje stražnjih vrata u WordPressu](https://phpsos.de/hr/ratgeber/backdoor-wordpress-finden/). Nakon toga web-stranicu treba neko vrijeme pomnije nadzirati kako bi se ponovni pristup rano uočio.

## Kako PHP SOS konkretno pomaže?

- Logove, datoteke i stanje sustava osiguravamo na provjerljiv način prije nego se bilo što promijeni.
- Tražimo stražnja vrata u datotekama, bazi podataka, cron zadacima i konfiguraciji te razvrstavamo pronađeno.
- Aplikaciju postavljamo iznova iz čistog izvora, mijenjamo pristupe i ojačavamo poslužitelj.
- Incident dokumentiramo do zaključenja, kao osnovu za prijave i osiguravatelje.

Tijek čišćenja opisuje usluga [Uklanjanje zlonamjernog softvera i webshellova](https://phpsos.de/hr/leistungen/malware-entfernung/).


## Česta pitanja

**Što je webshell?**  
Webshell je ubačena datoteka, najčešće PHP, putem koje napadači mogu izdaleka upravljati poslužiteljem. Često se prikriva kao bezazlena datoteka s neupadljivim imenom i ostaje aktivna i nakon ažuriranja.

**Pronalazi li antivirusni skener svaki webshell?**  
Ne. Skeneri prepoznaju poznate obrasce, a nove ili jako zamaskirane varijante prolaze. Za PHP2Shell uz to nema objavljenih, potvrđenih Indicators of Compromise, pa je analiza ponašanja važnija od popisa potpisa.

**Je li dovoljno obrisati pronađenu datoteku?**  
Najčešće nije. Napadači često postave više pristupa, primjerice dodatne datoteke, cron zadatke ili nove administratorske račune. Bez analize uzroka i promjene svih pristupnih podataka ponovni pristup je vjerojatan.

**Moram li nešto prijaviti nakon pronalaska webshella?**  
Ako mogu biti pogođeni osobni podaci, može postojati obveza prijave prema GDPR-u, u pravilu u roku od 72 sata. Razjasnite to sa svojim službenikom za zaštitu podataka ili odvjetnikom; ovo nije pravni savjet.

## Izvori

- [php.net: sigurnosne objave](https://www.php.net/)
- [OWASP Cheat Sheet Series](https://cheatsheetseries.owasp.org/)
- [BSI: Savezni ured za sigurnost informacijske tehnologije](https://www.bsi.bund.de/)
- [GDPR čl. 33: prijava nadzornom tijelu](https://dsgvo-gesetz.de/art-33-dsgvo/)
