Integritetskontrol har en ubehagelig egenskab: den kræver en reference taget fra et system, der med sikkerhed var rent. Har serveren kørt på tredje år, og spørgsmålet om indbrud dukker først op i dag, er det for sent til en reference — vi registrerer så det, der findes, som norm.

I Debian og Ubuntu findes referencen dog allerede, og den er ikke vores: hver installeret pakke bærer kontrolsummer for sine filer. Sammenligningen kræver hverken opsætning eller et tidligere øjebliksbillede og virker på ethvert system når som helst. Værktøjet hedder debsums.

Brug

sudo apt install debsums
sudo debsums -c

Flaget -c udskriver kun filer, der ikke stemmer med referencen. Uden det bliver outputtet en linje-for-linje-rapport om hver fil i systemet — titusindvis af linjer.

Kontrollen tager nogle minutter og belaster disken, så på en driftsserver er det værd at køre den med sænket prioritet:

sudo ionice -c3 nice -n19 debsums -c

Hvordan du læser resultatet

Tomt output betyder, at alle kontrollerede filer stemmer med det, distributionen installerede. Ikke-tomt output kræver analyse, og fundene falder i to meget forskellige klasser.

Konfigurationsfiler i /etc. At de er ændret, er normalt arbejde: vi rettede sshd_config, satte nginx op, tilføjede kerneparametre. Sådanne afvigelser er forventede. For at de ikke skal forstyrre, findes en særlig tilstand:

sudo debsums -e -c

-e kontrollerer udelukkende konfigurationsfiler — undertiden nyttigt for at se listen over alt, hvad der er ændret på maskinen.

Eksekverbare filer og biblioteker. En afvigelse i /usr/bin, /usr/sbin, /bin eller /usr/lib er præcis det, kontrollen blev kørt for. Berettigede årsager findes, men de er få: filen blev ændret i hånden under fejlsøgning, en fremmed rettelse blev lagt på, pakken blev opdateret midt under kontrollen. Passer ingen af dem, skal sagen tages alvorligt.

De klassiske mål for udskiftning er ls, ps, netstat, ss, find og sshd. En udskiftet version skjuler de linjer, den vil, i sit output, og alle vores videre kontroller holder op med at fortælle sandheden.

Dækningen er ufuldstændig — og det skal man vide

En begrænsning, der sjældent skrives ud: ikke alle pakker leverer kontrolsummer. Sådanne pakkers filer kontrolleres slet ikke og vil aldrig optræde i rapporten. Listen ser du sådan:

sudo debsums -l

En ren debsums-rapport betyder altså »i den kontrollerede del er alt i orden«, ikke »systemet er ikke ændret«. Det samme gælder alt, hvad der er installeret uden om pakkehåndteringen: kompileret fra kildekode, hentet som binærfil, sat op med et script fra udviklerens hjemmeside — det overvåger debsums per definition ikke, og det er der, AIDE er nødvendig.

Regelmæssig kørsel

Pakken indeholder et færdigt job, der slås til i /etc/default/debsums:

CRON_CHECK=weekly

Én gang om ugen er en fornuftig frekvens: kontrollen belaster disken mærkbart, og systemfiler ændres sjældent mellem opdateringer. En daglig kørsel tilfører intet ud over belastning.

Hvis en fil virkelig er skiftet ud

Den første impuls er at geninstallere pakken og gendanne originalen:

sudo apt install --reinstall coreutils

Kommandoen er rigtig, men ikke som første handling. En udskiftet systemfil betyder, at nogen har haft root, og at gendanne filen løser ikke det problem — det ødelægger blot sporene. Rækkefølgen skal være omvendt: gem først en kopi af den mistænkelige fil og dens ændringstidspunkt, find ud af, hvad der ellers er ændret i samme periode, gennemgå cron-job, SSH-nøgler og brugerlisten. Gendan først derefter.

Det er også værd at huske metodens grænse: er systemet dybt kompromitteret, kan debsums selv og de biblioteker, det bruger, også være skiftet ud. En kontrol indefra giver ingen absolut garanti — til det starter man systemet fra et eksternt medie. Til det daglige arbejde rækker den alligevel: langt de fleste angreb er automatiserede og udmærker sig ikke ved den slags forfinelse.

Pladsen i helhedsbilledet

debsums er godt ved, at det ikke kræver noget og virker med det samme — derfor er det praktisk at begynde med det på en server, hvis historie man ikke kender. Dets svaghed er den ufuldstændige dækning og uvidenheden om alt, der står uden for pakkerne. Parret »debsums plus AIDE« dækker begge sider: distributionens færdige reference for systemfilerne og et eget øjebliksbillede for resten.

Som sædvanlig ligger pointen ikke i at køre det, men i at det seneste resultat med dato er synligt. Hvordan det ser ud, viser demonstrationen nedenfor.