Kontrola integrity má nepříjemnou vlastnost: vyžaduje vzor sejmutý ze systému, který byl jistě čistý. Pokud server běží třetím rokem a otázka průniku vyvstala teprve dnes, na vzor je pozdě — zapsali bychom jako normu to, co je.

V Debianu a Ubuntu ovšem vzor už existuje a není náš: každý nainstalovaný balíček nese kontrolní součty svých souborů. Porovnání nevyžaduje ani konfiguraci, ani dřívější snímek a funguje na libovolném systému kdykoli. Nástroj se jmenuje debsums.

Použití

sudo apt install debsums
sudo debsums -c

Přepínač -c vypisuje jen soubory, které se se vzorem neshodují. Bez něj je výstupem řádek po řádku zpráva o každém souboru v systému — desetitisíce řádků.

Kontrola trvá několik minut a zatěžuje disk, takže na provozním serveru stojí za to spouštět ji se sníženou prioritou:

sudo ionice -c3 nice -n19 debsums -c

Jak číst výsledek

Prázdný výstup znamená, že všechny prověřené soubory odpovídají tomu, co nainstalovala distribuce. Neprázdný vyžaduje rozbor a nálezy se dělí do dvou velmi odlišných tříd.

Konfigurační soubory v /etc. Jejich změna je běžná práce: upravovali jsme sshd_config, nastavovali nginx, přidávali parametry jádra. Takové odchylky jsou očekávané. Aby nepřekážely, existuje zvláštní režim:

sudo debsums -e -c

-e kontroluje výhradně konfigurační soubory — občas užitečné, chcete-li vidět seznam všeho, co se na stroji měnilo.

Spustitelné soubory a knihovny. Odchylka v /usr/bin, /usr/sbin, /bin nebo /usr/lib je přesně to, kvůli čemu se kontrola spouštěla. Oprávněné příčiny existují, ale je jich málo: soubor byl měněn ručně při ladění, byla nasazena cizí záplata, balíček se aktualizoval během kontroly. Pokud nesedí žádná, je třeba se věcí zabývat vážně.

Klasické cíle výměny jsou ls, ps, netstat, ss, find, sshd. Vyměněná verze skryje ve svém výstupu potřebné řádky a všechny naše další kontroly přestanou mluvit pravdu.

Pokrytí je neúplné — a je třeba o tom vědět

Omezení, o kterém se obvykle nepíše: ne všechny balíčky dodávají kontrolní součty. Soubory takových balíčků se nekontrolují vůbec a ve zprávě se za žádných okolností neobjeví. Seznam lze zobrazit takto:

sudo debsums -l

Čistá zpráva debsums tedy znamená „v prověřené části je vše v pořádku“, ne „systém nebyl měněn“. Totéž platí pro vše nainstalované mimo správce balíčků: zkompilované ze zdrojů, stažené jako binárka, nasazené skriptem ze stránek vývojáře — to debsums z definice nehlídá, a právě tam je potřeba AIDE.

Pravidelné spouštění

V balíčku je hotová úloha, zapíná se v /etc/default/debsums:

CRON_CHECK=weekly

Jednou týdně je rozumná frekvence: kontrola znatelně zatěžuje disk a systémové soubory se mezi aktualizacemi mění zřídka. Denní spouštění nepřináší nic kromě zátěže.

Pokud byl soubor skutečně vyměněn

První reflex je přeinstalovat balíček a obnovit originál:

sudo apt install --reinstall coreutils

Příkaz je správný, ale ne jako první krok. Vyměněný systémový soubor znamená, že někdo měl root, a obnovení souboru tento problém neřeší — jen ničí stopy. Pořadí musí být opačné: nejprve uložit kopii podezřelého souboru a čas jeho změny, zjistit, co dalšího se ve stejném období změnilo, projít úlohy cronu, klíče SSH a seznam uživatelů. Obnovovat až potom.

Stojí za to pamatovat i na hranici metody: je-li systém hluboce kompromitován, mohou být vyměněny i samotný debsums a knihovny, které používá. Kontrola zevnitř nedává absolutní záruku — k tomu se systém spouští z externího média. Pro každodenní práci ale stačí: drtivá většina útoků je automatizovaná a takovou vytříbeností se nevyznačuje.

Místo v celkovém obrazu

debsums je dobrý tím, že nic nevyžaduje a funguje hned — proto je pohodlné začít s ním na serveru, jehož historii neznáte. Jeho slabinou je neúplné pokrytí a neznalost všeho, co stojí mimo balíčky. Dvojice „debsums plus AIDE“ pokrývá obě strany: hotový vzor distribuce pro systémové soubory a vlastní snímek pro zbytek.

Jako obvykle nejde o spuštění, ale o to, aby byl poslední výsledek s datem na očích. Jak to vypadá, ukazuje ukázka níže.