# Rozpoznání skrytých cron úloh jako zadních vrátek

> Zadní vrátka v cronu rozpoznat: zkontrolovat všechna místa plánovaných úloh v Linuxu, vyložit podezřelé záznamy a nálezy zajistit dřív, než je smažete.

Zdroj: https://phpsos.de/cs/blog/cronjobs-als-hintertuer/  
Stav: 25.10.2026  
Poskytovatel: PHP SOS, Nouzová pomoc pro PHP a bezpečnost serverů. Okamžitá pomoc přes WhatsApp: https://wa.me/491736494914?text=Dobr%C3%BD%20den%2C%20PHP%20SOS%2C%20pot%C5%99ebujeme%20pomoc%20s%20na%C5%A1%C3%ADm%20PHP%20serverem.%20Firma%3A%20%E2%80%A6%20Web%3A%20%E2%80%A6

**Stručně:** Skrytá cron úloha je jedna z nejčastějších zadních vrátek na serverech s Linuxem: pravidelně stahuje škodlivý kód nebo znovu spouští procesy, i po aktualizaci PHP. Zkontrolujte všechna místa plánovaných úloh, nejen `crontab -l`: crontaby všech uživatelů, `/etc/crontab`, `/etc/cron.d`, složky cron, časovače systemd a úlohy at. Nálezy zajistěte dřív, než je odstraníte.

## Proč jsou cron úlohy jako zadní vrátka tak oblíbené

Po úspěšném průniku má útočník problém: jeho přístup je křehký. Aktualizace zavře zranitelnost, administrátor smaže webshell, restart ukončí proces. Cron úloha tento problém řeší. Spouští příkazy v pevných časech, aniž by někdo zasahoval, a tak obnovuje ztracené přístupy.

Pro PHP2Shell neexistují potvrzené indikátory kompromitace (Indicators of Compromise). Nové cron úlohy ale podle zpráv, které máme k dispozici, patří k obecným varovným signálům po průnicích přes webové aplikace. Kdo už hledal webshelly, měl by hned zkontrolovat i plánované úlohy. Ostatní kroky následné péče uvádí [Kontrolní seznam po napadení](https://phpsos.de/cs/ratgeber/checkliste-nach-dem-hack/).

## Kde se mohou plánované úlohy skrývat

Linux zná několik mechanismů plánovaných úloh. Mnoho kontrol ztroskotá tím, že se zkontroluje jen jeden z nich.

| Místo | Debian/Ubuntu | Rodina RHEL | Kdo smí zapisovat |
|---|---|---|---|
| Crontab pro každého uživatele | `/var/spool/cron/crontabs/` | `/var/spool/cron/` | příslušný uživatel |
| Celosystémový crontab | `/etc/crontab` | `/etc/crontab` | root |
| Jednotlivé soubory | `/etc/cron.d/` | `/etc/cron.d/` | root |
| Periodické složky | `/etc/cron.hourly` až `/etc/cron.monthly` | stejně | root |
| Časovače systemd | `/etc/systemd/system/`, uživatelské units | stejně | root, částečně uživatelé |
| Úlohy at | fronta `atd` | stejně | uživatel, pokud je povoleno |

Důležité pro webové servery: Uživatel webového serveru si zpravidla může založit vlastní crontab bez práv root. Útočník s právy `www-data` k tomu tedy nepotřebuje další zranitelnost. Záznamy v `/etc/cron.d` nebo units systemd naopak naznačují, že získal práva root.

Hostingové panely jako Plesk nebo cPanel nabízejí vlastní rozhraní pro plánované úlohy. Za ním zpravidla stojí rovněž crontaby příslušných systémových uživatelů. Kdo se podívá jen do rozhraní, nepozná proto každý záznam, který byl založen přímo na serveru. V případě pochybností zkontrolujte obojí.

## Jak zkontrolovat všechna místa úplně

Následující příkazy jen čtou. Spouštějte je jako root a výstupy zajistěte s datem.

```bash
# Vypsat crontaby všech uživatelů
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

# Celosystémové záznamy a časy změn
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

# Hledat typické vzory ve všech souborech cron
grep -rnE "curl|wget|base64|/tmp/|/dev/shm|\| *(ba)?sh" /etc/crontab /etc/cron.* /var/spool/cron 2>/dev/null
```

Dva triky zaslouží zvláštní pozornost. Některé záznamy skrývají příkazy za mnoha mezerami, takže v editoru vyjedou doprava z obrazovky. Jiné používají řídicí znaky, které při zobrazení přepisují text. Pomocí `cat -A` se takové znaky stanou viditelnými:

```bash
cat -A /var/spool/cron/crontabs/www-data 2>/dev/null | less
```

Druhým pohledem jsou protokoly služby cron. Na mnoha systémech cron zaznamenává každé provedení s uživatelem a příkazem. Uvidíte tak i záznamy, které útočník mezitím odstranil, a poznáte, od kdy podezřelý příkaz běží:

```bash
# Provedené příkazy cron uživatele webového serveru (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
```

## Podle čeho poznáte zadní vrátka v cronu

1. **Stahování z internetu:** Stažení, jehož výsledek se přímo předává shellu.
2. **Kódovaný obsah:** Dlouhé řetězce, které se dekódují až za běhu.
3. **Neobvyklé cesty:** Programy v `/tmp`, `/dev/shm`, skrytých složkách nebo adresářích uploadu.
4. **Špatný uživatel:** Úlohy pod uživatelem webového serveru, ačkoli je aplikace nepotřebuje.
5. **Nápadný takt:** Spouštění každou minutu nebo při každém restartu přes `@reboot`.
6. **Nevhodná časová razítka:** Soubor změněn v době, kdy na serveru nikdo nepracoval, například po 17. říjnu.

Nezapomeňte: Také aplikace mají vlastní plány. WordPress například spravuje plánované úlohy v databázi. Jak je tam zkontrolovat, popisuje článek [Hledání backdoorů ve WordPressu](https://phpsos.de/cs/ratgeber/backdoor-wordpress-finden/).

> **Důležité:**
> Cron úloha málokdy přichází sama. Kdo založil plánovanou úlohu, často také uložil klíče SSH nebo ukryl soubory. Zkontrolujte navíc klíče, jak popisuje článek [Hledání neznámých klíčů SSH](https://phpsos.de/cs/blog/ssh-schluessel-pruefen/).

## Nález zajistit, pochopit, pak odstranit

Škodlivá cron úloha je cenný důkazní předmět. Ukazuje adresu stahování, okamžik založení a často uživatele, přes něhož útočník přišel. Soubor před odstraněním zajistěte s kontrolním součtem a časovými razítky. Časové razítko později pomáhá rekonstruovat průběh; jak na to, ukazuje článek [Sestavení časové osy incidentu](https://phpsos.de/cs/blog/zeitleiste-eines-vorfalls/). I pro případné oznámení dozorovému úřadu pro ochranu osobních údajů nebo pro pojišťovnu je nález důležitým dokladem, od kdy měl útočník přístup.

Samotné odstranění nestačí. Běží-li ještě proces, který záznam přepisuje, je za minutu zpět. A dokud je původní zranitelnost otevřená, může útočník kdykoli začít znovu. Pořadí proto zní: zajistit, uzavřít příčinu, odstranit všechny součásti, změnit přístupy, sledovat.

## Cron úlohy preventivně zabezpečit

Aby zadní vrátka v cronu vůbec nemohla vzniknout nebo rychle vyšla najevo, pomáhají tři opatření. Za prvé lze určit, kteří uživatelé vůbec smějí založit crontab. Existuje-li soubor `/etc/cron.allow`, smějí `crontab` používat jen tam uvedení uživatelé. Nepotřebuje-li vaše aplikace cron úlohu pod uživatelem webového serveru, tento uživatel na seznam nepatří. Předem zkontrolujte, jaké úlohy aplikace skutečně potřebuje, a založte je vědomě pod vlastním uživatelem.

Za druhé se vyplatí sledování souborů. Nástroj pro kontrolu integrity ohlásí, jakmile se změní soubor v adresářích cron nebo pod `/var/spool/cron`. Za třetí patří plánované úlohy do dokumentace serveru: kdo ví, jaké záznamy mají existovat, pozná cizí okamžitě.

## Jak konkrétně pomáhá PHP SOS?

- **Zkontrolovat úplně:** Zkoumáme všechny mechanismy plánovaných úloh, i časovače systemd, úlohy at a plány aplikací.
- **Zařadit nálezy:** Podezřelé záznamy vyhodnocujeme, aniž bychom je spouštěli, a odvozujeme další stopy.
- **Vyčistit čistě:** V rámci [odstranění malwaru](https://phpsos.de/cs/leistungen/malware-entfernung/) odstraníme všechny součásti a uzavřeme příčinu.
- **Rozpoznat návrat:** Zavádíme sledování, které hlásí nové nebo změněné plánované úlohy.


## Časté dotazy

**Proč útočníci používají cron úlohy?**  
Cron úloha spouští příkazy pravidelně a bez dalšího přičinění. Útočníci jí stahují škodlivý kód, znovu zakládají smazané soubory nebo spouštějí procesy. Jejich přístup tak přežije aktualizaci a často i povrchní vyčištění.

**Stačí ke kontrole crontab -l?**  
Ne. crontab -l ukazuje jen crontab aktuálního uživatele. Plánované úlohy jsou navíc v crontabech jiných uživatelů, v /etc/crontab, /etc/cron.d, ve složkách cron.daily, v časovačích systemd a v úlohách at.

**Jak poznám škodlivou cron úlohu?**  
Typické jsou stahování z internetu s přímým spuštěním, příkazy s kódovanými řetězci, programy v dočasných složkách, úlohy pod uživatelem webového serveru a záznamy, které běží každou minutu. Jediný znak je vodítko, několik je vážné podezření.

**Mohu podezřelé cron úlohy prostě smazat?**  
Nejprve zajistit, pak odstranit. Záznam často prozradí původ, adresu stahování a další součásti. Bez objasnění, jak vznikl, jej útočník často založí znovu.

## Zdroje

- [BSI: Spolkový úřad pro informační bezpečnost](https://www.bsi.bund.de/)
- [BSI IT-Grundschutz (německý standard IT-Grundschutz)](https://www.bsi.bund.de/DE/Themen/Unternehmen-und-Organisationen/Standards-und-Zertifizierung/IT-Grundschutz/it-grundschutz_node.html)
- [OWASP Cheat Sheet Series](https://cheatsheetseries.owasp.org/)
