Dobiti pristup je pola posla; druga polovina je ne izgubiti ga. Zato se gotovo sav automatizovan zlonamerni softver pre svega postara da bude ponovo pokrenut: posle restarta, posle brisanja fajla, posle promene lozinke. Otuda i poznata priča — „počistili smo i dva dana kasnije se vratilo".

Mesta gde se to podešava nema baš toliko, i sva se mogu proveriti za nekoliko minuta. Ispod je pun krug po redu.

1. SSH ključevi

Najjednostavniji put nazad: red u authorized_keys preživljava promenu lozinke, ažuriranje sistema i restart.

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

Svaki red je nečiji trajan pristup. Ako ne možete reći čiji, tretirajte ga kao tuđi. Obratite pažnju i na komentar na kraju reda: to je proizvoljan tekst, i poklapanje sa vašim imenom ne dokazuje ništa.

2. Cron poslovi svih korisnika

Nije potrebno proveriti samo sopstveni 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

Znaci koje vredi tražiti: redovi @reboot, duge kodirane komande, pozivi curl-a ili wget-a provučeni kroz ljusku, bilo šta pokrenuto iz /tmp, /dev/shm ili /var/tmp. Ništa standardno ne radi iz tih direktorijuma.

3. systemd tajmeri i servisi

Savremeni ekvivalent cron-a, i proverava se osetno ređe:

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

Posebno, korisnički servisi, koji rade bez root ovlašćenja i ne pojavljuju se na opštoj listi:

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

Još jedan detalj: lingering uključen za korisnika (loginctl enable-linger) dozvoljava njegovim servisima da rade bez aktivne sesije. Proverite to sa loginctl list-users.

4. Startni fajlovi ljuske

Kod dodat na kraj startnog fajla ljuske pokreće se pri svakoj prijavi:

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

Gledajte upravo kraj fajla — tamo se dodaje da ne bi upalo u oči pri brzom pogledu.

5. ld.so.preload

Fajl koji tera sistem da učita zadatu biblioteku u svaki pokrenuti proces. Pod normalnim okolnostima se nikada ne kreira:

ls -l /etc/ld.so.preload

Njegovo prisustvo praktično je nedvosmislen znak ozbiljne kompromitacije, a takva biblioteka obično podjednako skriva fajlove, procese i mrežne veze. Ništa što na toj mašini posle toga vidite ne zaslužuje poverenje.

6. Kuke menadžera paketa

Metod koji se retko pamti: apt može izvršavati komande pre i posle svake radnje sa paketima.

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

Takva kuka aktivira se pri svakoj instalaciji ažuriranja — dakle redovno i kao root.

7. Poruka dana na Ubuntuu

Direktorijum /etc/update-motd.d/ sadrži izvršne skripte koje se pokreću pri svakoj SSH prijavi i sastavljaju tekst dobrodošlice. Mesto je zgodno upravo zato što izgleda kao deo sistema:

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

8. Odloženi at poslovi

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

Star i retko korišćen mehanizam, i stoga onaj koji se najmanje proverava.

Šta raditi ako nešto nađete

Prvi impuls je odmah obrisati nalaz. To je greška: sa njim nestaje informacija o tome kako je tamo dospeo, a bez odgovora na to pitanje sve će se ponoviti.

  1. Sačuvajte kopiju fajla ili posla i vreme njegove izmene.
  2. Koristeći to vreme, pogledajte u dnevnicima veb servera i u auth.log šta se dešavalo u istom minutu. Tu je obično ulazna tačka.
  3. Proverite svih osam mesta sa liste, a ne samo ono na kojem se nešto pojavilo. Zadnja vrata gotovo se nikada ne ostavljaju u jednom primerku.
  4. Tek onda počistite i zatvorite samu ranjivost.

Znati kako izgleda normalno

Glavna teškoća u ovoj proveri nisu komande nego to što nepoznat red u listi poslova ne izgleda sumnjivo ako se ne sećate kakva je lista ranije bila. Na serveru koji je podesio neko drugi, ili koji je podešen pre godinu dana, razlikovati svoje od tuđeg gotovo je nemoguće.

Otuda praktičan zaključak: napraviti snimak „kako jeste" ima smisla danas, dok je server u redu. Lista cron poslova, tajmera, ključeva i servisa na zdravoj mašini referenca je sa kojom se kasnije sve poredi. Sabrana i čuvana sa istorijom, pretvara lov na zadnja vrata iz višesatne vežbe u poređenje dve liste. Kako to izgleda pokazuju demo stranice ispod.