Ukratko: Izmijenjene datoteke na Linuxu pronalazite naredbom find i vremenskim prozorom, primjerice od 17. listopada 2026., prema medijskim izvješćima prvog zabilježenog pokušaja napada na PHP2Shell. Pritom ne provjeravajte samo vrijeme izmjene sadržaja (mtime), nego i metapodataka (ctime), jer je prvo lako krivotvoriti. Rezultat postaje pouzdan tek usporedbom s kontrolnim zbrojevima paketa, Gitom ili sigurnosnom kopijom.
Zašto su vremenski žigovi dobar početak, ali ne dokaz
Tko kod unese na poslužitelj, mijenja datoteke. Novi web shellovi, prilagođene konfiguracijske datoteke, dopunjeni retci u postojećim skriptama: sve to ostavlja vremenske žigove. Traženje izmjena u pravom vremenskom prozoru stoga je jedan od najbržih putova do prvih nalaza.
Za PHP2Shell kao početak prozora nameće se 17. listopada 2026., dan prvog pokušaja napada zabilježenog prema medijskim izvješćima. Zakrpe su objavljene 21. listopada. Tko je poslužitelj ažurirao tek nakon toga, traži do dana vlastitog ažuriranja i dalje. Kako među nalazima prepoznati web shellove, opisuje članak Prepoznati i ukloniti web shell. Ovdje je riječ o samoj metodi pretrage.
Tri vremenska žiga jedne datoteke
Linux uz svaku datoteku sprema više vremenskih točaka. Za traženje promjena ključne su dvije.
| Vremenski žig | Značenje | Može li se krivotvoriti? |
|---|---|---|
| mtime | zadnja izmjena sadržaja | da, npr. naredbom touch, svatko tko smije pisati u datoteku |
| ctime | zadnja izmjena sadržaja ili metapodataka poput prava | ne jednostavnim sredstvima |
| atime | zadnji pristup čitanjem | često isključen ili neprecizan, za pretragu malo prikladan |
Napadači rado vraćaju mtime na datum susjednih datoteka kako nova datoteka ne bi upadala u oči. No ctime se pritom mijenja. Datoteka sa starim mtime i svježim ctime stoga je jaka naznaka manipulacije.
Pri usporedbi pazite na vremenske zone. find i ls prikazuju lokalno vrijeme poslužitelja, a mnoge zapisničke datoteke i usluge rade u UTC-u. Tko nalaze iz datotečnog sustava i zapisnika stavlja jedne uz druge, trebao bi sve podatke preračunati u istu vremensku zonu, inače se događaji prividno ne slažu. Zakrpe su objavljene otprilike 21. listopada u 14:00 UTC, dakle u 16 sati po njemačkom vremenu.
Pronaći izmijenjene datoteke na Linuxu pomoću find
Sve naredbe samo čitaju. Prilagodite put i datum.
# Sadržaj izmijenjen od 17. 10. 2026., sortirano, s mtime, ctime i vlasnikom
find /var/www -type f -newermt "2026-10-17" -printf '%TY-%Tm-%Td %TH:%TM %CY-%Cm-%Cd %CH:%CM %u %p\n' | sort
# Metapodaci izmijenjeni od 17. 10. 2026. (pronalazi i datoteke vraćene unatrag)
find /var/www -type f -newerct "2026-10-17" -printf '%C+ %T+ %p\n' | sort
# Izdvojiti poznatu buku: predmemoriju, zapisnike, sesije
find /var/www -type f -newerct "2026-10-17" \
-not -path "*/cache/*" -not -path "*/logs/*" -not -path "*/sessions/*" -printf '%C+ %p\n' | sort
# Pogledati i izvan web-direktorija
find /etc /usr/local/bin /tmp /var/tmp /dev/shm -xdev -type f -newerct "2026-10-17" -printf '%C+ %p\n' 2>/dev/null | sort
Kod svakog pogotka usporedite oba vremenska žiga. Ako je ctime znatno mlađi od mtime, a nitko u to vrijeme nije mijenjao prava ni kopirao datoteke, datoteka pripada na popis. Pazite i na vlasnika: datoteka korisnika web-poslužitelja među datotekama korisnika za isporuku upada u oči.
Ne zaboravite skrivene datoteke i direktorije. Nazive koji počinju točkom mnogi upravitelji datoteka i običan ls ne prikazuju. Napadači to rado koriste, kao i nazive koji su zamjenjivo slični pravim datotekama.
# Skrivene datoteke i mape u web-direktoriju, bez poznatih poput .htaccess i .git
find /var/www -name ".*" -not -name ".htaccess" -not -name ".well-known" -not -path "*/.git/*" -printf '%C+ %u %p\n' | sort
Usporediti s pouzdanim izvorom
Vremenski žigovi pokazuju gdje se nešto pomaknulo. Je li to bila legitimna izmjena, pokazuje tek usporedba s izvorom kojem vjerujete.
- Upravljanje paketima: Za sistemske datoteke
dpkg --verify(Debian/Ubuntu) ilirpm -Va(RHEL obitelj) provjeravaju datoteke prema kontrolnim zbrojevima instaliranih paketa. Konfiguracijske datoteke legitimno odstupaju, programske datoteke ne. - Git: Ako aplikacija leži u repozitoriju,
git -C /var/www/projekt status --porcelainprikazuje svako odstupanje od zadnjeg commita. - CMS kontrolni zbrojevi: Mnogi sustavi mogu svoje jezgrene datoteke usporediti sa službenim kontrolnim zbrojevima, vidi Usporediti CMS jezgrene datoteke s originalom.
- Sigurnosna kopija od prije incidenta: Usporedba u probnom pokretanju navodi razlike bez ičega kopiranja.
# Samo navesti razlike između stanja sigurnosne kopije i živog sustava (probno pokretanje, ništa ne kopira)
rsync -rcn --out-format="%n" /backup/www-2026-10-15/ /var/www/
Usporedba sa sigurnosnom kopijom pretpostavlja da je kopija nastala prije incidenta i da sama nije mijenjana. Zašto su ovdje presudne odvojeno čuvane kopije, objašnjava članak Sigurnosne kopije prema pravilu 3-2-1.
Rezultate svake pretrage spremite s datumom u datoteku izvan poslužitelja. Iz tih popisa kasnije nastaje vremenska crta incidenta i dokazuju što ste kada provjerili.
Ako nema ni sigurnosne kopije ni repozitorija
Kod mnogih manjih web-stranica ne postoji čista osnova za usporedbu: nema Gita, nema sigurnosne kopije od prije incidenta, dodaci se godinama ažuriraju ručno. Potpuno bez uporišta ipak niste.
Preuzmite CMS i proširenja točno u instaliranim verzijama od proizvođača i usporedite te datoteke s poslužiteljem. Što tamo odstupa ili nedostaje, zaslužuje pogled. Ostaju Vaše vlastite prilagodbe, prijenosi i konfiguracija; tamo pomaže pretraga po vremenskim žigovima, dopunjena pogledom na vlasnike i prava. Datoteke koje su jedine u direktoriju s drugom grupom, drugim pravima ili znatno mlađim ctime od susjeda pripadaju na popis.
Iskreno rečeno: bez osnove za usporedbu ostaje preostala nesigurnost. Kod sustava s osjetljivim podacima ponovna izgradnja iz čistih izvora tada je često pouzdanija od traženja svake pojedine izmijenjene datoteke. Za budućnost je pouka jednostavna: repozitorij za kod i redovite, odvojeno čuvane sigurnosne kopije.
Tipični izvori pogrešaka pri pretrazi
- Preširoka isključenja: Direktoriji predmemorije i prijenosa omiljena su skrovišta.
- Provjeren samo mtime: Datoteke vraćene unatrag prolaze.
- Deployment u vremenskom prozoru: Redovita isporuka mijenja stotine datoteka i zaklanja pojedine nalaze. Usporedite s repozitorijem.
- Datoteke već otvorene ili kopirane: Kopije bez očuvanja vremenskih žigova uništavaju tragove. Osigurajte alatima koji čuvaju vremenske žigove.
- Pretražen samo web-direktorij: Napadači alate odlažu i u
/tmp,/dev/shmili u matični direktorij korisnika web-poslužitelja. - Previđene promjene prava: Datoteka čija prava iznenada dopuštaju pisanje svima je nalaz, čak i ako joj je sadržaj nepromijenjen.
Kako se nalazi slažu u tijek, pokazuje članak Izraditi vremensku crtu incidenta.
Kako PHP SOS konkretno pomaže?
- Tražiti sustavno: Pretražujemo web-direktorije i sistemske putove na izmjene u relevantnom vremenskom prozoru i zajednički analiziramo mtime i ctime.
- Provjeriti prema originalima: Uspoređujemo s paketima, repozitorijem, CMS kontrolnim zbrojevima i Vašim sigurnosnim kopijama.
- Procijeniti nalaze: Razdvajamo redovite izmjene od manipulacija i osiguravamo dokaze.
- Očistiti: Uz uklanjanje zlonamjernog softvera uspostavljamo čisto stanje i dokumentiramo ga.
Česta pitanja
Kako pronaći sve datoteke izmijenjene od određenog datuma?
Naredbom find i opcijom -newermt, primjerice find /var/www -type f -newermt "2026-10-17". Za izmjene metapodataka koristite -newerct. Obje naredbe samo čitaju i ništa ne mijenjaju.
Koja je razlika između mtime i ctime?
mtime je trenutak zadnje izmjene sadržaja i može se jednostavnim sredstvima vratiti unatrag. ctime je trenutak zadnje izmjene sadržaja ili metapodataka i ne može se tako lako krivotvoriti. Ako se oba jako razlikuju, isplati se pomniji pogled.
Kako iz pretrage isključiti datoteke predmemorije?
Pomoću -not -path za poznate direktorije predmemorije, zapisnika i sesija. No ne isključujte previše velikodušno, jer napadači datoteke rado odlažu upravo tamo gdje su mnoge izmjene normalne.
Koja je provjera najpouzdanija?
Usporedba s pouzdanim izvorom: kontrolnim zbrojevima upravljanja paketima, Git repozitorijem ili sigurnosnom kopijom od prije incidenta. Vremenski žigovi dobar su početak, ali nisu dokaz.