Získat přístup je polovina věci; druhá polovina je o něj nepřijít. Proto si téměř veškerý automatizovaný škodlivý software v prvé řadě zajišťuje opětovné spuštění: po restartu, po smazání souboru, po změně hesla. Odtud typický příběh — „uklidili jsme to a za dva dny se to vrátilo“.

Míst, kde se to zařizuje, není zase tolik a všechna lze prověřit během několika minut. Níže je celá obhlídka po pořádku.

1. Klíče SSH

Nejjednodušší způsob návratu: řádek v authorized_keys přežije změnu hesla, aktualizaci systému i restart.

sudo find /home /root -name authorized_keys -exec ls -l {} \; -exec cat {} \;

Každý řádek je něčí trvalý přístup. Pokud nelze říct čí, považujte jej za cizí. Všimněte si i komentáře na konci řádku: je to libovolný text a shoda s vaším jménem nic nedokazuje.

2. Cronové úlohy všech uživatelů

Prověřovat je třeba nejen vlastní crontab:

for u in $(cut -f1 -d: /etc/passwd); do echo "== $u"; sudo crontab -u "$u" -l 2>/dev/null; done
sudo ls -la /etc/cron.d/ /etc/cron.hourly/ /etc/cron.daily/
sudo cat /etc/crontab

Čemu věnovat pozornost: řádky @reboot, dlouhé zakódované příkazy, volání curl nebo wget předávaná do shellu, vše, co se spouští z /tmp, /dev/shm nebo /var/tmp. Z těchto adresářů se nespouští nic obvyklého.

3. Časovače a služby systemd

Současný protějšek cronu, prověřovaný znatelně řidčeji:

systemctl list-timers --all
systemctl list-units --type=service --state=running
sudo ls -la /etc/systemd/system/ /run/systemd/system/

Zvlášť uživatelské služby, které běží bez oprávnění roota a do obecného seznamu se nedostanou:

systemctl --user list-units --type=service
sudo ls -la /home/*/.config/systemd/user/

Ještě jeden detail: zapnuté udržování sezení pro uživatele (loginctl enable-linger) umožňuje jeho službám běžet bez aktivního sezení. Ověřuje se to příkazem loginctl list-users.

4. Startovací soubory shellu

Kód dopsaný na konec startovacího souboru shellu se vykoná při každém přihlášení:

sudo tail -5 /root/.bashrc /root/.profile /home/*/.bashrc /home/*/.profile
sudo ls -la /etc/profile.d/

Dívat se je třeba právě na konec souboru — tam se dopisuje, aby to při zběžném pročtení nebylo vidět.

5. ld.so.preload

Soubor nutící systém načíst uvedenou knihovnu do každého spouštěného procesu. Za normálních okolností nevzniká nikdy:

ls -l /etc/ld.so.preload

Jeho přítomnost je prakticky jednoznačnou známkou vážné kompromitace a taková knihovna obvykle skrývá soubory, procesy i síťová spojení. Nic, co na tomto stroji dál uvidíte, si nezaslouží důvěru.

6. Háčky správce balíčků

Metoda, na kterou se málokdy pamatuje: apt umí spouštět příkazy před každou operací s balíčky i po ní.

sudo ls -la /etc/apt/apt.conf.d/
sudo grep -r 'DPkg::Pre-Invoke\|DPkg::Post-Invoke\|APT::Update' /etc/apt/apt.conf.d/

Takový háček se spouští při každé instalaci aktualizací — tedy pravidelně a s oprávněními roota.

7. Zpráva dne v Ubuntu

Adresář /etc/update-motd.d/ obsahuje spustitelné skripty spouštěné při každém přihlášení přes SSH, které skládají uvítací text. Místo je pohodlné právě tím, že vypadá systémově:

sudo ls -la /etc/update-motd.d/

8. Odložené úlohy at

sudo atq
sudo ls -la /var/spool/cron/atjobs/ 2>/dev/null

Starý a zřídka používaný mechanismus, a proto ze všech nejméně často prověřovaný.

Pořadí kroků, pokud se něco najde

První reflex je nález okamžitě smazat. To je chyba: spolu s ním zmizí informace o tom, jak se tam dostal, a bez odpovědi na tuto otázku se vše zopakuje.

  1. Uložte kopii souboru nebo úlohy a čas jejich změny.
  2. Prověřte v logách webového serveru a v auth.log, co se dělo ve stejné minutě. Obvykle je tam vstupní bod.
  3. Prověřte všech osm míst ze seznamu, ne jen to, kde se něco našlo. Zadní vrátka se téměř nikdy nenechávají v jediném exempláři.
  4. Teprve potom ukliďte a zavřete samotnou zranitelnost.

Vědět, jak vypadá norma

Hlavní potíží této kontroly nejsou příkazy, ale to, že neznámý řádek v seznamu úloh nevypadá podezřele, pokud si nepamatujeme, jak seznam vypadal dřív. Na serveru, který nastavoval někdo jiný nebo který se nastavoval před rokem, je odlišit vlastní od cizího téměř nemožné.

Odtud praktický závěr: snímek stavu „jak to je“ se vyplatí udělat dnes, dokud je server v pořádku. Seznam cronových úloh, časovačů, klíčů a služeb na zdravém stroji je vzor, s nímž budeme později porovnávat. Shromážděný a uchovaný spolu s historií mění hledání zadních vrátek z několikahodinové práce v porovnání dvou seznamů. Jak to vypadá, ukazují ukázkové stránky níže.