Integriteitscontrole heeft een lastige eigenschap: ze vraagt een referentie die van een aantoonbaar schoon systeem is genomen. Draait de server al drie jaar en komt de vraag over een inbraak pas vandaag op, dan is het voor die referentie te laat: u zou vastleggen wat er is als normaal.

Op Debian en Ubuntu bestaat de referentie echter al, en ze is niet van u: elk geïnstalleerd pakket draagt de controlesommen van zijn eigen bestanden mee. De vergelijking vereist geen inrichting en geen voorafgaande momentopname en werkt op elk systeem op elk moment. Het hulpmiddel heet debsums.

Gebruik

sudo apt install debsums
sudo debsums -c

De optie -c drukt alleen de bestanden af die niet met de referentie overeenkomen. Zonder die is de uitvoer een regel-voor-regelrapport over elk bestand in het systeem, tienduizenden regels lang.

De controle duurt enkele minuten en belast de schijf, dus voer haar op een productieserver uit met verlaagde prioriteit:

sudo ionice -c3 nice -n19 debsums -c

Hoe u het resultaat leest

Lege uitvoer betekent dat alle gecontroleerde bestanden overeenkomen met wat de distributie heeft geïnstalleerd. Niet-lege uitvoer vraagt onderzoek, en de vondsten vallen in twee zeer verschillende klassen uiteen.

Configuratiebestanden onder /etc. Die wijzigen is normaal werk: u bewerkte sshd_config, richtte nginx in, voegde kernelparameters toe. Zulke afwijkingen zijn te verwachten. Om ze niet in de weg te laten zitten is er een aparte modus:

sudo debsums -e -c

-e controleert uitsluitend configuratiebestanden — soms nuttig om de lijst te zien van alles wat u op deze machine hebt gewijzigd.

Uitvoerbare bestanden en bibliotheken. Een afwijking in /usr/bin, /usr/sbin, /bin of /usr/lib is precies datgene waarvoor de controle is gestart. Legitieme oorzaken bestaan, maar het zijn er weinig: het bestand is tijdens het foutzoeken met de hand aangepast, er is een externe patch toegepast, het pakket werd tijdens de controle bijgewerkt. Past niets daarvan, dan moet er serieus worden uitgezocht.

De klassieke doelwitten van een vervanging zijn ls, ps, netstat, ss, find, sshd. Een vervangen versie verbergt in haar uitvoer juist de regels die ertoe doen, en al uw verdere controles houden op de waarheid te vertellen.

De dekking is onvolledig — en dat moet u weten

Een beperking waarover meestal niet wordt gesproken: niet elk pakket levert controlesommen mee. Bestanden uit zulke pakketten worden helemaal niet gecontroleerd en verschijnen onder geen enkele omstandigheid in het rapport. De lijst bekijkt u zo:

sudo debsums -l

Een schoon debsums-rapport betekent dus «in het gecontroleerde deel is alles in orde» en niet «het systeem is niet gewijzigd». Hetzelfde geldt voor alles wat buiten de pakketbeheerder om is geïnstalleerd: uit broncode gebouwd, als binair bestand gedownload, door een script van de site van de ontwikkelaar neergezet — daarop houdt debsums per definitie geen toezicht, en juist daar is AIDE nodig.

Periodiek uitvoeren

Het pakket levert een kant-en-klare taak mee, in te schakelen in /etc/default/debsums:

CRON_CHECK=weekly

Eens per week is een redelijke frequentie: de controle belast de schijf merkbaar en systeembestanden veranderen tussen updates zelden. Dagelijks uitvoeren voegt niets toe behalve belasting.

Als een bestand werkelijk is vervangen

De eerste ingeving is het pakket opnieuw te installeren en het origineel terug te halen:

sudo apt install --reinstall coreutils

Het commando is juist, maar niet als eerste handeling. Een vervangen systeembinary betekent dat iemand root heeft gehad, en het bestand herstellen lost dat probleem niet op — het vernietigt slechts de sporen. De volgorde moet omgekeerd zijn: eerst een kopie van het verdachte bestand en de wijzigingstijd bewaren, kijken wat er in dezelfde periode nog meer veranderde, de cron-taken, de SSH-sleutels en de gebruikerslijst nalopen. Pas daarna herstellen.

Denk ook aan de grenzen van de methode: is het systeem diep gecompromitteerd, dan kunnen debsums zelf en de bibliotheken die het gebruikt eveneens zijn vervangen. Een controle van binnenuit kan geen absolute zekerheid geven — dat doet men door vanaf een extern medium op te starten. Voor het dagelijkse werk volstaat het echter: de overgrote meerderheid van de aanvallen is geautomatiseerd en niet zo verfijnd.

De plaats in het geheel

debsums is waardevol omdat het niets vereist en meteen werkt — wat het een handig startpunt maakt voor een server waarvan u de geschiedenis niet kent. Zijn zwakte is de onvolledige dekking en het niet-weten van alles wat buiten de pakketten om is geïnstalleerd. Het paar «debsums plus AIDE» sluit beide kanten: de kant-en-klare referentie van de distributie voor systeembestanden en uw eigen momentopname voor de rest.

Zoals altijd gaat het er niet om het uit te voeren, maar om het laatste resultaat met datum voor ogen te hebben. Hoe dat oogt, toont de demo hieronder.