Ukratko: Skriveni cron posao jedna je od najčešćih stražnjih vrata na Linux poslužiteljima: redovito dohvaća zlonamjerni kod ili ponovno pokreće procese, i nakon PHP ažuriranja. Provjerite sva mjesta planiranih zadataka, ne samo crontab -l: crontabove svih korisnika, /etc/crontab, /etc/cron.d, cron direktorije, systemd timere i at zadatke. Nalaze osigurajte prije nego ih uklonite.
Zašto su cron poslovi kao stražnja vrata toliko omiljeni
Nakon uspješne provale napadač ima problem: njegov je pristup krhak. Ažuriranje zatvara ranjivost, administrator briše web shell, ponovno pokretanje prekida proces. Cron posao rješava taj problem. Pokreće naredbe u određeno vrijeme bez ičijeg uplitanja i tako ponovno uspostavlja izgubljene pristupe.
Za PHP2Shell nema potvrđenih Indicators of Compromise. No novi cron poslovi prema izvješćima koja su nam dostupna spadaju među opće znakove upozorenja nakon provala putem web-aplikacija. Tko je već tražio web shellove, trebao bi odmah provjeriti i planirane zadatke. Ostale korake naknadne obrade navodi kontrolni popis nakon hakerskog napada.
Gdje se planirani zadaci mogu skrivati
Linux poznaje više mehanizama za planirane zadatke. Mnoge provjere propadnu jer se pogleda samo jedan od njih.
| Mjesto | Debian/Ubuntu | RHEL obitelj | Tko smije pisati |
|---|---|---|---|
| Crontab po korisniku | /var/spool/cron/crontabs/ |
/var/spool/cron/ |
dotični korisnik |
| Sistemski crontab | /etc/crontab |
/etc/crontab |
root |
| Pojedinačne datoteke | /etc/cron.d/ |
/etc/cron.d/ |
root |
| Periodični direktoriji | /etc/cron.hourly do /etc/cron.monthly |
isto | root |
| systemd timeri | /etc/systemd/system/, korisničke jedinice |
isto | root, djelomično korisnik |
| at zadaci | red čekanja usluge atd |
isto | korisnik, ako je dopušteno |
Važno za web-poslužitelje: korisnik web-poslužitelja u pravilu može stvoriti vlastiti crontab bez root prava. Napadaču s pravima korisnika www-data za to dakle ne treba dodatna ranjivost. Unosi u /etc/cron.d ili systemd jedinice, nasuprot tome, upućuju na to da je stekao root prava.
Hosting paneli poput Plesk-a ili cPanela nude vlastito sučelje za planirane zadatke. Iza njega su u pravilu također crontabovi pojedinih sistemskih korisnika. Tko gleda samo u sučelju, zato ne prepoznaje svaki unos koji je stvoren izravno na poslužitelju. U slučaju sumnje provjerite oboje.
Kako potpuno provjeriti sva mjesta
Sljedeće naredbe samo čitaju. Izvedite ih kao root i ispise osigurajte s datumom.
# Ispisati crontabove svih korisnika
for u in $(cut -d: -f1 /etc/passwd); do
out=$(crontab -l -u "$u" 2>/dev/null) && printf '### %s\n%s\n' "$u" "$out"
done
# Sistemski unosi i vremena izmjene
cat /etc/crontab
ls -la --time-style=full-iso /etc/cron.d /etc/cron.hourly /etc/cron.daily /etc/cron.weekly /etc/cron.monthly
# systemd timeri i at zadaci
systemctl list-timers --all
atq 2>/dev/null
# Potražiti tipične obrasce u svim cron datotekama
grep -rnE "curl|wget|base64|/tmp/|/dev/shm|\| *(ba)?sh" /etc/crontab /etc/cron.* /var/spool/cron 2>/dev/null
Dva trika zaslužuju posebnu pozornost. Neki unosi skrivaju naredbe iza mnogo razmaka pa u uređivaču desno izlaze iz slike. Drugi koriste kontrolne znakove koji pri prikazu prepisuju tekst. Naredbom cat -A takvi znakovi postaju vidljivi:
cat -A /var/spool/cron/crontabs/www-data 2>/dev/null | less
Drugi pogled su zapisnici cron usluge. Na mnogim sustavima cron bilježi svako izvršavanje s korisnikom i naredbom. Tako vidite i unose koje je napadač u međuvremenu ponovno uklonio i prepoznajete otkad sumnjiva naredba radi:
# Izvršene cron naredbe korisnika web-poslužitelja (Debian/Ubuntu odnosno systemd journal)
grep -h "CRON" /var/log/syslog* 2>/dev/null | grep -E "\((www-data|apache|nginx)\) CMD"
journalctl -u cron -u crond --since "2026-10-17" --no-pager 2>/dev/null | grep CMD | head -100
Po čemu prepoznajete cron stražnja vrata
- Dohvaćanje s interneta: Preuzimanje čiji se rezultat izravno predaje ljusci.
- Kodirani sadržaji: Dugi nizovi znakova koji se dekodiraju tek tijekom rada.
- Neobični putovi: Programi u
/tmp,/dev/shm, skrivenim direktorijima ili direktorijima za prijenose. - Pogrešan korisnik: Zadaci pod korisnikom web-poslužitelja iako ih aplikacija ne treba.
- Upadljiv takt: Izvršavanje svake minute ili pri svakom ponovnom pokretanju putem
@reboot. - Neodgovarajući vremenski žigovi: Datoteka promijenjena u razdoblju u kojem nitko nije radio na poslužitelju, primjerice nakon 17. listopada.
Ne zaboravite: i aplikacije imaju vlastite rasporede. WordPress, primjerice, planirane zadatke vodi u bazi podataka. Kako ih tamo provjeriti, opisuje članak Pronaći stražnja vrata u WordPressu.
Cron posao rijetko dolazi sam. Tko je stvorio planirani zadatak, često je ostavio i SSH ključeve ili sakrio datoteke. Dodatno provjerite ključeve, kako opisuje članak Pronaći nepoznate SSH ključeve.
Osigurati nalaz, razumjeti, zatim ukloniti
Zlonamjerni cron posao vrijedan je dokazni predmet. Pokazuje adresu dohvaćanja, trenutak nastanka i često korisnika preko kojeg je napadač ušao. Datoteku osigurajte s kontrolnim zbrojem i vremenskim žigovima prije nego je uklonite. Vremenski žig kasnije pomaže rekonstruirati tijek; kako, pokazuje članak Izraditi vremensku crtu incidenta. I za moguću prijavu nadzornom tijelu za zaštitu podataka ili za osiguravatelja nalaz je važan dokaz otkad je napadač imao pristup.
Samo uklanjanje nije dovoljno. Ako još radi proces koji unos iznova upisuje, vraća se već sljedeće minute. A dok je izvorna ranjivost otvorena, napadač može bilo kada ponovno krenuti. Redoslijed stoga glasi: osigurati, zatvoriti uzrok, ukloniti sve sastavnice, promijeniti pristupe, nadzirati.
Preventivno zaštititi cron
Da cron stražnja vrata uopće ne nastanu ili brzo upadnu u oči, pomažu tri mjere. Prvo, može se odrediti koji korisnici uopće smiju stvoriti crontab. Ako postoji datoteka /etc/cron.allow, samo tamo navedeni korisnici smiju koristiti crontab. Ako Vašoj aplikaciji ne treba cron posao pod korisnikom web-poslužitelja, taj korisnik ne pripada na popis. Prije toga provjerite koje zadatke aplikacija doista treba i stvorite ih namjerno pod zasebnim korisnikom.
Drugo, isplati se nadzor datoteka. Alat za provjeru integriteta javlja čim se promijeni datoteka u cron direktorijima ili pod /var/spool/cron. Treće, planirani zadaci pripadaju u dokumentaciju poslužitelja: tko zna koji unosi trebaju postojati, odmah prepoznaje tuđi.
Kako PHP SOS konkretno pomaže?
- Provjeriti potpuno: Istražujemo sve mehanizme za planirane zadatke, i systemd timere, at zadatke i rasporede aplikacija.
- Razvrstati nalaze: Sumnjive unose analiziramo bez izvršavanja i izvodimo daljnje tragove.
- Čisto očistiti: Uz uklanjanje zlonamjernog softvera uklanjamo sve sastavnice i zatvaramo uzrok.
- Prepoznati povratak: Postavljamo nadzor koji javlja nove ili izmijenjene planirane zadatke.
Česta pitanja
Zašto napadači koriste cron poslove?
Cron posao pokreće naredbe redovito i bez daljnjeg uplitanja. Napadači njime dohvaćaju zlonamjerni kod, iznova stvaraju izbrisane datoteke ili ponovno pokreću procese. Tako njihov pristup preživi ažuriranje, a često i površno čišćenje.
Je li crontab -l dovoljan za provjeru?
Ne. crontab -l prikazuje samo crontab trenutnog korisnika. Planirani zadaci nalaze se i u crontabovima drugih korisnika, u /etc/crontab, /etc/cron.d, direktorijima cron.daily, u systemd timerima i at zadacima.
Kako prepoznati zlonamjerni cron posao?
Tipična su preuzimanja s interneta s izravnim izvršavanjem, naredbe s kodiranim nizovima znakova, programi u privremenim direktorijima, zadaci pod korisnikom web-poslužitelja i unosi koji rade svake minute. Pojedino obilježje je naznaka, a više njih ozbiljna sumnja.
Mogu li sumnjive cron poslove jednostavno obrisati?
Najprije osigurati, zatim ukloniti. Unos često odaje podrijetlo, adresu dohvaćanja i druge sastavnice. Bez razjašnjenja kako je nastao napadač ga često ponovno stvori.