Získať prístup je polovica veci; druhá polovica je oň neprísť. Preto si takmer všetok automatizovaný škodlivý softvér v prvom rade zaisťuje opätovné spustenie: po reštarte, po zmazaní súboru, po zmene hesla. Odtiaľ typický príbeh — „upratali sme to a o dva dni sa to vrátilo“.

Miest, kde sa to zariaďuje, nie je zas toľko a všetky sa dajú preveriť za niekoľko minút. Nižšie je celá obhliadka po poriadku.

1. Kľúče SSH

Najjednoduchší spôsob návratu: riadok v authorized_keys prežije zmenu hesla, aktualizáciu systému aj reštart.

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

Každý riadok je niečí trvalý prístup. Ak nemožno povedať čí, považujte ho za cudzí. Všimnite si aj komentár na konci riadka: je to ľubovoľný text a zhoda s vaším menom nič nedokazuje.

2. Cronové úlohy všetkých používateľov

Preverovať treba nielen 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

Čomu venovať pozornosť: riadky @reboot, dlhé zakódované príkazy, volania curl alebo wget odovzdávané do shellu, všetko, čo sa spúšťa z /tmp, /dev/shm alebo /var/tmp. Z týchto adresárov sa nespúšťa nič obvyklé.

3. Časovače a služby systemd

Súčasný náprotivok cronu, preverovaný badateľne zriedkavejšie:

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

Zvlášť používateľské služby, ktoré bežia bez oprávnení roota a do všeobecného zoznamu sa nedostanú:

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

Ešte jeden detail: zapnuté udržiavanie relácie pre používateľa (loginctl enable-linger) umožňuje jeho službám bežať bez aktívnej relácie. Overuje sa to príkazom loginctl list-users.

4. Štartovacie súbory shellu

Kód dopísaný na koniec štartovacieho súboru shellu sa vykoná pri každom prihlásení:

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

Pozerať sa treba práve na koniec súboru — tam sa dopisuje, aby to pri zbežnom prečítaní nebolo vidieť.

5. ld.so.preload

Súbor nútiaci systém načítať uvedenú knižnicu do každého spúšťaného procesu. Za normálnych okolností nevzniká nikdy:

ls -l /etc/ld.so.preload

Jeho prítomnosť je prakticky jednoznačným znakom vážnej kompromitácie a taká knižnica obvykle skrýva súbory, procesy aj sieťové spojenia. Nič, čo na tomto stroji ďalej uvidíte, si nezaslúži dôveru.

6. Háčiky správcu balíkov

Metóda, na ktorú sa málokedy pamätá: apt vie spúšťať príkazy pred každou operáciou s balíkmi aj po nej.

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

Taký háčik sa spúšťa pri každej inštalácii aktualizácií — teda pravidelne a s oprávneniami roota.

7. Správa dňa v Ubuntu

Adresár /etc/update-motd.d/ obsahuje spustiteľné skripty spúšťané pri každom prihlásení cez SSH, ktoré skladajú uvítací text. Miesto je pohodlné práve tým, že vyzerá systémovo:

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 zriedka používaný mechanizmus, a preto zo všetkých najmenej často preverovaný.

Poradie krokov, ak sa niečo nájde

Prvý reflex je nález okamžite zmazať. To je chyba: spolu s ním zmizne informácia o tom, ako sa tam dostal, a bez odpovede na túto otázku sa všetko zopakuje.

  1. Uložte kópiu súboru alebo úlohy a čas ich zmeny.
  2. Preverte v logoch webového servera a v auth.log, čo sa dialo v tej istej minúte. Obvykle je tam vstupný bod.
  3. Preverte všetkých osem miest zo zoznamu, nielen to, kde sa niečo našlo. Zadné vrátka sa takmer nikdy nenechávajú v jedinom exemplári.
  4. Až potom upracte a zatvorte samotnú zraniteľnosť.

Vedieť, ako vyzerá norma

Hlavným problémom tejto kontroly nie sú príkazy, ale to, že neznámy riadok v zozname úloh nevyzerá podozrivo, ak si nepamätáme, ako zoznam vyzeral predtým. Na serveri, ktorý nastavoval niekto iný alebo ktorý sa nastavoval pred rokom, je odlíšiť vlastné od cudzieho takmer nemožné.

Odtiaľ praktický záver: snímku stavu „ako to je“ sa oplatí urobiť dnes, kým je server v poriadku. Zoznam cronových úloh, časovačov, kľúčov a služieb na zdravom stroji je vzor, s ktorým budeme neskôr porovnávať. Zhromaždený a uchovaný spolu s históriou mení hľadanie zadných vrátok z niekoľkohodinovej práce na porovnanie dvoch zoznamov. Ako to vyzerá, ukazujú ukážkové stránky nižšie.