Integritetskontroll har en obehaglig egenskap: den kräver en referens tagen från ett system som med säkerhet var rent. Har servern gått i tredje året och frågan om intrång dyker upp först i dag är det för sent för en referens — vi registrerar då det som finns som norm.
I Debian och Ubuntu finns referensen emellertid redan, och den är inte vår: varje installerat paket bär kontrollsummor för sina filer. Jämförelsen kräver varken konfiguration eller tidigare ögonblicksbild och fungerar på vilket system som helst när som helst. Verktyget heter debsums.
Användning
sudo apt install debsums
sudo debsums -c
Flaggan -c skriver bara ut filer som inte stämmer med referensen. Utan den blir utdatan en rad-för-rad-rapport om varje fil i systemet — tiotusentals rader.
Kontrollen tar några minuter och belastar disken, så på en produktionsserver är det värt att köra den med sänkt prioritet:
sudo ionice -c3 nice -n19 debsums -c
Hur du läser resultatet
Tom utdata betyder att alla kontrollerade filer stämmer med det distributionen installerade. Icke-tom utdata kräver analys, och fynden faller i två mycket olika klasser.
Konfigurationsfiler i /etc. Att de ändrats är normalt arbete: vi rättade sshd_config, ställde in nginx, lade till kärnparametrar. Sådana avvikelser är väntade. För att de inte ska störa finns ett eget läge:
sudo debsums -e -c
-e kontrollerar enbart konfigurationsfiler — ibland nyttigt för att se listan över allt som ändrats på maskinen.
Körbara filer och bibliotek. En avvikelse i /usr/bin, /usr/sbin, /bin eller /usr/lib är precis det kontrollen kördes för. Berättigade orsaker finns, men de är få: filen ändrades för hand vid felsökning, en främmande patch lades på, paketet uppdaterades mitt under kontrollen. Passar ingen av dem behöver saken tas på allvar.
De klassiska målen för utbyte är ls, ps, netstat, ss, find och sshd. En utbytt version döljer de rader den vill i sin utdata, och alla våra fortsatta kontroller slutar tala sanning.
Täckningen är ofullständig — och det behöver man veta
En begränsning som sällan skrivs ut: alla paket levererar inte kontrollsummor. Sådana pakets filer kontrolleras inte alls och kommer aldrig att synas i rapporten. Listan ser du så här:
sudo debsums -l
En ren debsums-rapport betyder alltså ”i den kontrollerade delen är allt i ordning”, inte ”systemet har inte ändrats”. Detsamma gäller allt som installerats utanför pakethanteraren: kompilerat från källkod, hämtat som binärfil, uppsatt med ett skript från utvecklarens webbplats — det bevakar debsums per definition inte, och det är där AIDE behövs.
Regelbunden körning
Paketet innehåller ett färdigt jobb som slås på i /etc/default/debsums:
CRON_CHECK=weekly
En gång i veckan är en rimlig frekvens: kontrollen belastar disken märkbart, och systemfiler ändras sällan mellan uppdateringar. En daglig körning tillför ingenting utom belastning.
Om en fil verkligen bytts ut
Den första impulsen är att installera om paketet och återställa originalet:
sudo apt install --reinstall coreutils
Kommandot är riktigt, men inte som första åtgärd. En utbytt systemfil betyder att någon haft root, och att återställa filen löser inte det problemet — det förstör bara spåren. Ordningen måste vara den omvända: spara först en kopia av den misstänkta filen och dess ändringstid, ta reda på vad mer som ändrats under samma period, gå igenom cron-jobb, SSH-nycklar och användarlistan. Återställ först därefter.
Det är också värt att minnas metodens gräns: är systemet djupt komprometterat kan debsums självt och biblioteken det använder också vara utbytta. En kontroll inifrån ger ingen absolut garanti — till det startar man systemet från ett externt medium. För det dagliga arbetet räcker den ändå: de allra flesta angrepp är automatiserade och utmärker sig inte av den sortens förfining.
Platsen i helhetsbilden
debsums är bra genom att det inte kräver något och fungerar direkt — därför är det bekvämt att börja med det på en server vars historia man inte känner. Dess svaghet är den ofullständiga täckningen och okunskapen om allt som står utanför paketen. Paret ”debsums plus AIDE” täcker båda sidorna: distributionens färdiga referens för systemfilerna och en egen ögonblicksbild för resten.
Som vanligt ligger poängen inte i att köra det, utan i att det senaste resultatet med datum syns. Hur det ser ut visar demonstrationen nedan.