Controlul integrității are o proprietate neplăcută: cere un etalon luat de pe un sistem sigur curat. Dacă serverul funcționează de al treilea an, iar întrebarea despre o intruziune a apărut abia azi, pentru etalon este prea târziu — am înregistra ca normă exact ceea ce există.

În Debian și Ubuntu etalonul există însă deja și nu este al nostru: fiecare pachet instalat poartă sumele de control ale fișierelor sale. Comparația nu cere nici configurație, nici un instantaneu anterior și funcționează pe orice sistem, oricând. Instrumentul se numește debsums.

Utilizare

sudo apt install debsums
sudo debsums -c

Opțiunea -c afișează doar fișierele care nu coincid cu etalonul. Fără ea, ieșirea este un raport linie cu linie despre fiecare fișier din sistem — zeci de mii de linii.

Verificarea durează câteva minute și încarcă discul, așa că pe un server de producție merită rulată cu prioritate redusă:

sudo ionice -c3 nice -n19 debsums -c

Cum se citește rezultatul

O ieșire goală înseamnă că toate fișierele verificate corespund cu ceea ce a instalat distribuția. Una care nu este goală cere analiză, iar descoperirile se împart în două clase foarte diferite.

Fișierele de configurare din /etc. Modificarea lor este muncă normală: am corectat sshd_config, am configurat nginx, am adăugat parametri de nucleu. Astfel de abateri sunt așteptate. Ca să nu deranjeze, există un mod separat:

sudo debsums -e -c

-e verifică exclusiv fișierele de configurare — uneori util, dacă vrei să vezi lista a tot ce s-a modificat pe mașină.

Fișiere executabile și biblioteci. O abatere în /usr/bin, /usr/sbin, /bin sau /usr/lib este exact ceea ce pentru care s-a rulat verificarea. Cauze justificate există, dar sunt puține: fișierul a fost modificat manual la depanare, s-a aplicat un patch străin, pachetul s-a actualizat în timpul verificării. Dacă niciuna nu se potrivește, chestiunea trebuie tratată serios.

Țintele clasice ale înlocuirii sunt ls, ps, netstat, ss, find, sshd. O versiune înlocuită ascunde în ieșirea ei liniile necesare, iar toate verificările noastre ulterioare încetează să spună adevărul.

Acoperirea este incompletă — și trebuie să știi asta

O limitare despre care de obicei nu se scrie: nu toate pachetele furnizează sume de control. Fișierele unor astfel de pachete nu sunt verificate deloc și nu vor apărea în raport în nicio împrejurare. Lista se vede astfel:

sudo debsums -l

Un raport debsums curat înseamnă deci „în partea verificată totul este în regulă”, nu „sistemul nu a fost modificat”. Același lucru este valabil pentru tot ce a fost instalat în afara managerului de pachete: compilat din surse, descărcat ca binar, instalat cu un script de pe site-ul dezvoltatorului — asta debsums, prin definiție, nu supraveghează, și tocmai acolo este nevoie de AIDE.

Rularea periodică

În pachet există o sarcină gata făcută, activată în /etc/default/debsums:

CRON_CHECK=weekly

O dată pe săptămână este o frecvență rezonabilă: verificarea încarcă vizibil discul, iar fișierele de sistem se schimbă rar între actualizări. Rularea zilnică nu aduce nimic în afară de încărcare.

Dacă un fișier chiar a fost înlocuit

Primul reflex este să reinstalezi pachetul și să restaurezi originalul:

sudo apt install --reinstall coreutils

Comanda este corectă, dar nu ca primă acțiune. Un fișier de sistem înlocuit înseamnă că cineva a avut root, iar restaurarea fișierului nu rezolvă această problemă — doar distruge urmele. Ordinea trebuie să fie inversă: mai întâi păstrează o copie a fișierului suspect și ora modificării lui, află ce altceva s-a schimbat în aceeași perioadă, parcurge sarcinile cron, cheile SSH și lista utilizatorilor. Restaurează abia după aceea.

Merită reținută și limita metodei: dacă sistemul este profund compromis, pot fi înlocuite și debsums însuși, și bibliotecile pe care le folosește. O verificare din interior nu dă o garanție absolută — pentru asta se pornește sistemul de pe un mediu extern. Pentru munca zilnică este însă suficientă: covârșitoarea majoritate a atacurilor este automatizată și nu se remarcă printr-o asemenea rafinare.

Locul în tabloul general

debsums este bun prin faptul că nu cere nimic și funcționează imediat — de aceea este comod să începi cu el pe un server a cărui istorie nu o cunoști. Slăbiciunea lui este acoperirea incompletă și necunoașterea a tot ce stă în afara pachetelor. Perechea „debsums plus AIDE” acoperă ambele laturi: etalonul gata făcut al distribuției pentru fișierele de sistem și un instantaneu propriu pentru rest.

Ca de obicei, nu contează rularea, ci faptul ca ultimul rezultat, cu dată, să fie la vedere. Cum arată asta arată demonstrația de mai jos.