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.
- Uložte kópiu súboru alebo úlohy a čas ich zmeny.
- Preverte v logoch webového servera a v
auth.log, čo sa dialo v tej istej minúte. Obvykle je tam vstupný bod. - 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.
- 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.