Pitanje retko dolazi niotkuda. Server je usporio, hosting provajder je poslao poruku o odlaznom saobraćaju ili u pošti stoji obaveštenje o prijavi koju nikada niste napravili. Sledi neprijatan deo: nije očigledno šta gledati i kojim redom, a prvi instinkt — obrisati sve i početi iznova — gotovo je uvek preuranjen.

Ispod je redosled provera koji traje oko dvadeset minuta i u većini slučajeva daje jasan odgovor. Ide od najjeftinijeg ka najskupljem: prvo ono što se vidi odmah, zatim ono što se mora uporediti sa referencom.

Korak prvi: ko se prijavio

Počnite od prijava. Ako je neko drugi ušao, gotovo sigurno je došao preko SSH-a i postoji trag.

last -20
lastb | head -20
who

last prikazuje najskorije uspešne prijave, lastb neuspešne, who onoga ko je povezan upravo sada. Nije bitan broj nego oblik. Hiljade neuspešnih pokušaja sa adresa koje se nikada ne vraćaju običan su pozadinski šum grube sile; radi bez prestanka protiv svake javne adrese i ne znači ništa.

Zabrinuti treba nešto drugo:

  • uspešna prijava sa adrese na kojoj nema nikoga vašeg;
  • prijava pod korisničkim imenom koje nikada niste kreirali;
  • neuspešni pokušaji protiv korisničkog imena koje stvarno postoji na ovoj mašini — to znači da je neko saznao ko su vaši korisnici umesto da prolazi kroz rečnik;
  • sesija otvorena upravo sada koju vi niste otvorili.

Posebno proverite da li su se pojavili nepoznati ključevi. Fajl ~/.ssh/authorized_keys najčešći je način da se ostane unutra: lozinka se može menjati koliko god želite, ključ ostaje.

cat ~/.ssh/authorized_keys
sudo cat /root/.ssh/authorized_keys

Svaki red tamo je nečiji pristup. Ako ne možete reći čiji, tretirajte ga kao tuđi.

Korak drugi: šta se promenilo u sistemu

Upad gotovo uvek ostavlja tragove na disku: zamenjen binarni fajl, dodatni red u konfiguraciji, novi fajl u direktorijumu veb servera. Provera na oko je beznadežna — potrebna vam je referenca.

Na Debianu i Ubuntuu referenca već postoji: svaki paket zna kontrolne sume sopstvenih fajlova.

sudo apt install debsums
sudo debsums -c

Komanda navodi fajlove koji se razlikuju od onoga što je distribucija instalirala. Deo nalaza biće legitiman — konfiguracioni fajlovi u /etc i postoje da bi se menjali. Izmenjen izvršni fajl u /usr/bin, /usr/sbin ili /bin na serveru koji nikada niste dirali rukom sasvim je druga stvar.

Drugi izvor su skorašnji fajlovi tamo gde ih ne bi trebalo biti. Veb ljuska obično sedi u direktorijumu za otpremanje i izgleda kao bezazlen .php:

find /var/www -type f -name '*.php' -mtime -14 -ls

Četrnaest dana je samo polazna tačka; koristite period za koji znate da niste ništa objavljivali.

Korak treći: šta izlazi napolje

Kompromitovan server retko se provaljuje radi njega samog. On se koristi: za slanje nepoželjne pošte, za rudarenje, za dosezanje drugih mreža, za smeštanje tuđih fajlova. Sve to stvara odlazne veze kojih ranije nije bilo.

ss -tulpn
ss -tp state established

Prva komanda prikazuje šta osluškuje, druga šta je povezano upravo sada. Čitajte kolonu procesa. Pitanja izazivaju: nepoznat proces koji osluškuje na 0.0.0.0; odlazne veze ka visokim portovima adresa sa kojima vaša aplikacija nema posla; i pre svega proces pokrenut iz /tmp ili /dev/shm — ništa legitimno ne radi iz tih direktorijuma.

Pogledajte i opterećenje dok ste tu. Rudar se odaje time što drži procesor zauzetim na sajtu koji ne uživa baš nikakvu popularnost.

Ako znaci postoje

Prvi impuls je brzo počistiti: obrisati tuđi ključ, ubiti proces, ukloniti fajl. Nemojte — uništili biste upravo ono što bi kasnije moglo objasniti kako su ušli. A ako to ostane neobjašnjeno, vratiće se, možda već sutra.

Redosled koji čuva i podatke i sliku:

  1. Napravite snimak diska kod provajdera ako je dostupan. To je jedini korak koji se kasnije ne može ponoviti.
  2. Odsecite mašinu od mreže ili zatvorite sve osim sopstvene IP adrese — ali je nemojte gasiti. Gašenje gubi listu procesa i otvorene veze, a to je polovina dokaza.
  3. Kopirajte dnevnike sa mašine: /var/log/auth.log, dnevnike veb servera, izlaz tri gornje komande.
  4. Tek sada utvrdite kako su ušli.

Čista reinstalacija je ispravan kraj ako je pristup dobijen sa root ovlašćenjima. Nikakvo čišćenje ne garantuje da ništa nije ostalo. Ali reinstalacija bez razumevanja uzroka je besmislena: istu rupu ćete vratiti na svež sistem.

Kako sprečiti da pitanje dođe iznenada

Sve gore navedeno je jednokratna ručna provera i odgovara na pitanje „šta se dešava upravo sada". Nevolja je što se pitanje obično postavlja kasno: pošto je provajder pisao ili je sajt pao.

Svaka od ovih provera postoji kao zaseban alat koji može pratiti neprekidno: neuspešne prijave — fail2ban, izmene fajlova — AIDE, integritet paketa — debsums, otvoreni portovi — redovan snimak ss. Instalirati ih jedan po jedan nije teško; teško je steći naviku da se svakodnevno prijavljujete da biste čitali šest različitih izlaza, zbog čega ih u praksi niko i ne čita.

Upravo je to smisao panela koji ih objedinjuje: isti podaci, ali na jednoj stranici i sa istorijom, tako da se „juče nije bilo ovako" vidi bez posebnog pohoda. Ispod su demo stranice koje pokazuju kako to izgleda sastavljeno.