Stručne: Skrytý cronjob je jedno z najčastejších zadných vrátok na serveroch s Linuxom: pravidelne doťahuje škodlivý kód alebo opätovne spúšťa procesy, aj po aktualizácii PHP. Skontrolujte všetky miesta plánovaných úloh, nielen crontab -l: crontaby všetkých používateľov, /etc/crontab, /etc/cron.d, adresáre cron, časovače systemd a úlohy at. Nálezy zabezpečte skôr, než ich odstránite.
Prečo sú cronjoby ako zadné vrátka také obľúbené
Po úspešnom vlámaní má útočník problém: jeho prístup je krehký. Aktualizácia uzavrie zraniteľnosť, admin zmaže webshell, reštart ukončí proces. Cronjob tento problém rieši. Spúšťa príkazy v pevných časoch bez toho, aby niekto zasiahol, a tak obnovuje stratené prístupy.
Pre PHP2Shell neexistujú potvrdené indikátory kompromitácie (Indicators of Compromise). Nové cronjoby však podľa správ, ktoré máme k dispozícii, patria medzi všeobecné varovné signály po vlámaniach cez webové aplikácie. Kto už hľadal webshelly, mal by hneď skontrolovať aj plánované úlohy. Ďalšie kroky následnej starostlivosti uvádza Kontrolný zoznam po hacku.
Kde sa môžu plánované úlohy ukrývať
Linux pozná niekoľko mechanizmov pre plánované úlohy. Mnohé kontroly zlyhajú preto, že sa pozrie len na jeden z nich.
| Miesto | Debian/Ubuntu | Rodina RHEL | Kto smie zapisovať |
|---|---|---|---|
| Crontab pre každého používateľa | /var/spool/cron/crontabs/ |
/var/spool/cron/ |
príslušný používateľ |
| Systémový crontab | /etc/crontab |
/etc/crontab |
root |
| Jednotlivé súbory | /etc/cron.d/ |
/etc/cron.d/ |
root |
| Periodické adresáre | /etc/cron.hourly až /etc/cron.monthly |
rovnako | root |
| Časovače systemd | /etc/systemd/system/, jednotky používateľa |
rovnako | root, sčasti používateľ |
| Úlohy at | front služby atd |
rovnako | používateľ, ak je to povolené |
Dôležité pre webové servery: používateľ webového servera si spravidla môže vytvoriť vlastný crontab bez práv root. Útočník s právami www-data preto na to nepotrebuje ďalšiu zraniteľnosť. Záznamy v /etc/cron.d alebo jednotky systemd naopak naznačujú, že získal práva root.
Hostingové panely ako Plesk alebo cPanel ponúkajú vlastné rozhranie pre plánované úlohy. Za ním sú spravidla takisto crontaby príslušných systémových používateľov. Kto sa pozrie len do rozhrania, preto nerozpozná každý záznam, ktorý bol vytvorený priamo na serveri. V pochybnostiach skontrolujte oboje.
Ako skontrolovať všetky miesta úplne
Nasledujúce príkazy len čítajú. Spúšťajte ich ako root a výstupy zabezpečte s dátumom.
# Vypísať crontaby všetkých používateľov
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
# Systémové záznamy a časy zmeny
cat /etc/crontab
ls -la --time-style=full-iso /etc/cron.d /etc/cron.hourly /etc/cron.daily /etc/cron.weekly /etc/cron.monthly
# Časovače systemd a úlohy at
systemctl list-timers --all
atq 2>/dev/null
# Hľadať typické vzorce vo všetkých súboroch cron
grep -rnE "curl|wget|base64|/tmp/|/dev/shm|\| *(ba)?sh" /etc/crontab /etc/cron.* /var/spool/cron 2>/dev/null
Dva triky si zaslúžia osobitnú pozornosť. Niektoré záznamy ukrývajú príkazy za mnohými medzerami, takže v editore vybehnú doprava z obrazovky. Iné používajú riadiace znaky, ktoré pri zobrazení prepisujú text. Pomocou cat -A sa takéto znaky stanú viditeľnými:
cat -A /var/spool/cron/crontabs/www-data 2>/dev/null | less
Druhým pohľadom sú protokoly služby cron. Na mnohých systémoch cron zaznamenáva každé vykonanie s používateľom a príkazom. Tak uvidíte aj záznamy, ktoré útočník medzitým odstránil, a rozpoznáte, odkedy podozrivý príkaz beží:
# Vykonané príkazy cron používateľa webového servera (Debian/Ubuntu, resp. žurnál systemd)
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
Podľa čoho rozpoznáte zadné vrátka cez cronjob
- Doťahovanie z internetu: Sťahovanie, ktorého výsledok sa priamo odovzdá shellu.
- Kódovaný obsah: Dlhé reťazce, ktoré sa dekódujú až za behu.
- Neobvyklé cesty: Programy v
/tmp,/dev/shm, skrytých priečinkoch alebo adresároch na nahrávanie. - Nesprávny používateľ: Úlohy pod používateľom webového servera, hoci aplikácia žiadne nepotrebuje.
- Nápadný takt: Vykonávanie každú minútu alebo pri každom štarte cez
@reboot. - Nezodpovedajúce časové pečiatky: Súbor zmenený v období, keď na serveri nikto nepracoval, napríklad po 17. októbri.
Nezabudnite: aj aplikácie majú vlastné plány. WordPress napríklad spravuje plánované úlohy v databáze. Ako to tam skontrolovať, opisuje Hľadanie zadných vrátok vo WordPresse.
Cronjob zriedka prichádza sám. Kto vytvoril plánovanú úlohu, často uložil aj kľúče SSH alebo ukryl súbory. Skontrolujte navyše kľúče, ako opisuje článok Hľadanie neznámych kľúčov SSH.
Nález zabezpečiť, pochopiť, potom odstrániť
Škodlivý cronjob je cenný dôkazný predmet. Ukazuje adresu doťahovania, čas svojho vytvorenia a často aj používateľa, cez ktorého útočník prišiel. Súbor zabezpečte s kontrolným súčtom a časovými pečiatkami skôr, než ho odstránite. Časová pečiatka neskôr pomôže zrekonštruovať priebeh; ako na to, ukazuje Vytvorenie časovej osi incidentu. Aj pre prípadné oznámenie dozornému orgánu pre ochranu údajov alebo pre poisťovateľa je nález dôležitým dokladom o tom, odkedy mal útočník prístup.
Samotné odstránenie nestačí. Ak ešte beží proces, ktorý záznam prepisuje, je po najbližšej minúte späť. A kým je pôvodná zraniteľnosť otvorená, môže útočník kedykoľvek začať znova. Poradie preto znie: zabezpečiť, uzavrieť príčinu, odstrániť všetky súčasti, zmeniť prístupy, sledovať.
Preventívne zabezpečenie cronjobov
Aby zadné vrátka cez cronjob vôbec nemohli vzniknúť alebo si ich rýchlo všimli, pomáhajú tri opatrenia. Po prvé, dá sa určiť, ktorí používatelia vôbec smú vytvoriť crontab. Ak existuje súbor /etc/cron.allow, smú crontab používať len tam uvedení používatelia. Ak vaša aplikácia nepotrebuje cronjob pod používateľom webového servera, tento používateľ do zoznamu nepatrí. Najprv skontrolujte, aké úlohy aplikácia skutočne potrebuje, a vytvorte ich vedome pod samostatným používateľom.
Po druhé, oplatí sa sledovanie súborov. Nástroj na kontrolu integrity ohlási, hneď ako sa zmení súbor v adresároch cron alebo pod /var/spool/cron. Po tretie, plánované úlohy patria do dokumentácie servera: kto vie, aké záznamy majú existovať, cudzí rozpozná okamžite.
Ako konkrétne pomáha PHP SOS?
- Skontrolovať úplne: Preskúmame všetky mechanizmy plánovaných úloh, aj časovače systemd, úlohy at a plány aplikácií.
- Zaradiť nálezy: Podozrivé záznamy vyhodnotíme bez ich spustenia a odvodíme ďalšie stopy.
- Vyčistiť čisto: Prostredníctvom odstránenia malvéru odstránime všetky súčasti a uzavrieme príčinu.
- Rozpoznať návrat: Nastavíme sledovanie, ktoré hlási nové alebo zmenené plánované úlohy.
Časté otázky
Prečo útočníci využívajú cronjoby?
Cronjob spúšťa príkazy pravidelne a bez ďalšieho zásahu. Útočníci tak doťahujú škodlivý kód, znovu vytvárajú zmazané súbory alebo opätovne spúšťajú procesy. Ich prístup tak prežije aktualizáciu a často aj povrchové vyčistenie.
Stačí na kontrolu crontab -l?
Nie. crontab -l ukáže len crontab aktuálneho používateľa. Plánované úlohy sú navyše v crontaboch iných používateľov, v /etc/crontab, /etc/cron.d, v adresároch cron.daily, v časovačoch systemd a v úlohách at.
Ako rozpoznám škodlivý cronjob?
Typické sú sťahovania z internetu s priamym spustením, príkazy s kódovanými reťazcami, programy v dočasných priečinkoch, úlohy pod používateľom webového servera a záznamy, ktoré bežia každú minútu. Jednotlivý znak je náznak, viacero spolu vážne podozrenie.
Môžem podozrivé cronjoby jednoducho zmazať?
Najprv zabezpečiť, potom odstrániť. Záznam často prezrádza pôvod, adresu doťahovania a ďalšie súčasti. Bez objasnenia, ako vznikol, ho útočník často vytvorí znovu.