Integritetskontroll har en ubehagelig egenskap: den krever en referanse tatt fra et system som med sikkerhet var rent. Har serveren gått i tredje året, og spørsmålet om innbrudd dukker opp først i dag, er det for sent for en referanse — vi registrerer da det som finnes, som norm.

I Debian og Ubuntu finnes referansen likevel allerede, og den er ikke vår: hver installerte pakke bærer kontrollsummer for filene sine. Sammenligningen krever verken oppsett eller et tidligere øyeblikksbilde og virker på hvilket som helst system når som helst. Verktøyet heter debsums.

Bruk

sudo apt install debsums
sudo debsums -c

Flagget -c skriver bare ut filer som ikke stemmer med referansen. Uten det blir utdataene en linje-for-linje-rapport om hver fil i systemet — titusenvis av linjer.

Kontrollen tar noen minutter og belaster disken, så på en driftsserver er det verdt å kjøre den med senket prioritet:

sudo ionice -c3 nice -n19 debsums -c

Hvordan du leser resultatet

Tomme utdata betyr at alle kontrollerte filer stemmer med det distribusjonen installerte. Ikke-tomme utdata krever analyse, og funnene faller i to svært ulike klasser.

Konfigurasjonsfiler i /etc. At de er endret, er normalt arbeid: vi rettet sshd_config, satte opp nginx, la til kjerneparametere. Slike avvik er ventet. For at de ikke skal forstyrre, finnes en egen modus:

sudo debsums -e -c

-e kontrollerer bare konfigurasjonsfiler — iblant nyttig for å se listen over alt som er endret på maskinen.

Kjørbare filer og biblioteker. Et avvik i /usr/bin, /usr/sbin, /bin eller /usr/lib er nettopp det kontrollen ble kjørt for. Berettigede årsaker finnes, men de er få: filen ble endret for hånd under feilsøking, en fremmed oppdatering ble lagt på, pakken ble oppdatert midt under kontrollen. Passer ingen av dem, må saken tas alvorlig.

De klassiske målene for utskifting er ls, ps, netstat, ss, find og sshd. En utskiftet versjon skjuler de linjene den vil i utdataene sine, og alle våre videre kontroller slutter å fortelle sannheten.

Dekningen er ufullstendig — og det må man vite

En begrensning som sjelden skrives ut: ikke alle pakker leverer kontrollsummer. Filene til slike pakker kontrolleres ikke i det hele tatt og vil aldri vises i rapporten. Listen ser du slik:

sudo debsums -l

En ren debsums-rapport betyr altså «i den kontrollerte delen er alt i orden», ikke «systemet er ikke endret». Det samme gjelder alt som er installert utenfor pakkebehandleren: kompilert fra kildekode, hentet som binærfil, satt opp med et skript fra utviklerens nettsted — det overvåker debsums per definisjon ikke, og det er der AIDE trengs.

Regelmessig kjøring

Pakken inneholder en ferdig jobb som slås på i /etc/default/debsums:

CRON_CHECK=weekly

Én gang i uken er en fornuftig frekvens: kontrollen belaster disken merkbart, og systemfiler endres sjelden mellom oppdateringer. En daglig kjøring tilfører ingenting annet enn belastning.

Hvis en fil virkelig er byttet ut

Den første impulsen er å installere pakken på nytt og gjenopprette originalen:

sudo apt install --reinstall coreutils

Kommandoen er riktig, men ikke som første handling. En utskiftet systemfil betyr at noen har hatt root, og å gjenopprette filen løser ikke det problemet — det ødelegger bare sporene. Rekkefølgen må være omvendt: ta først vare på en kopi av den mistenkelige filen og endringstidspunktet, finn ut hva mer som er endret i samme periode, gå gjennom cron-jobber, SSH-nøkler og brukerlisten. Gjenopprett først deretter.

Det er også verdt å huske metodens grense: er systemet dypt kompromittert, kan debsums selv og bibliotekene det bruker, også være byttet ut. En kontroll innenfra gir ingen absolutt garanti — til det starter man systemet fra et eksternt medium. Til det daglige arbeidet holder den likevel: det store flertallet av angrep er automatiserte og utmerker seg ikke ved den slags forfinelse.

Plassen i helhetsbildet

debsums er bra ved at det ikke krever noe og virker med en gang — derfor er det praktisk å begynne med det på en server hvis historie man ikke kjenner. Svakheten er den ufullstendige dekningen og uvitenheten om alt som står utenfor pakkene. Paret «debsums pluss AIDE» dekker begge sider: distribusjonens ferdige referanse for systemfilene og et eget øyeblikksbilde for resten.

Som vanlig ligger poenget ikke i å kjøre det, men i at det siste resultatet med dato er synlig. Hvordan det ser ut, viser demonstrasjonen nedenfor.