Ubuntu 16 / integrity check

Letöltöttem Opera Linux verzióját, mely egy telepíthető .deb fájl és root jog kell így hozzá. Mivel külső forrásból jön, így nem megy át az oprendszer gyártói folyamaton, nyilván valamivel nagyobb gyakorlati eséllyel megbízhatatlanabb a számomra. Virustotal nem hiszem hogy megfelelően ki tudja elemezni, illetve egyáltalán egy AV megoldás.

Fel akartam tenni Ubuntu 16-ra egy integrity checker-t (pl. tripwire), aztán gondolkodtam hogy jó lenne ha olyan lenne, amely az OS által frissített fájlok változásait nem veszi figyelembe.

Írtam egyet Ruby-ban (nincs semmi külső függősége), futtatható Ubuntu alapú rendszereken, pl. Linux Mint:
https://github.com/log69/myscripts/blob/master/ubuntu_integrity_check.rb

Használat helyi gépen:
wget "https://github.com/log69/myscripts/blob/master/ubuntu_integrity_check.rb"
sudo apt install ruby
sudo ruby ubuntu_integrity_check.rb

Integritás ellenőrzés távoli szerverhez:
scp ubuntu_integrity_check* root@server:
ssh root@server "ruby ubuntu_integrity_check.rb"
scp root@server:ubuntu_integrity_check*.yml .

A következőt csinálja:
- első futásra létrehoz egy db-t ubuntu_integrity_check_db.yml néven az összes fájl adataival (jog, módosítás dátuma és hash)
- többszöri futtatáskor ellenőrzi hogy mely fájlok változtak a legutóbbi futás óta és a települt csomag neveket is kiírja
- vannak kivétel mappák, pl. /home stb., lásd a forráskódot
- figyelembe veszi, hogy a db legutolsó módosítása óta mely fájlokat módosította az oprendszer frissítéssel és ezeket nem jelzi
- a dpkg plugin mellé további OS támogatást is bele lehetne tenni, pl. Arch stb.

Nyilván nem ultimate biztonsági megoldás, viszont ha külső forrásba mentem a létrehött db-t hogy ezt ne tudja módosítani semmi (pl. feltolom ssh-n valahová, kb. 6 MB nálam bzip-pel tömörítve), akkor meg tudom nézni hogy egy külső számomra megbízhatatlan szoftver futása óta módosultak-e fontos rendszer fájlok.

Egyelőre U16-on volt időm csak tesztelni. Nálam <2 perc alatt fut elsőre és többedszerre is. Szívesen veszek minden kritikát, tesztelést, ötletet.

Szerk.: szokásos módon a teszt miatt rossz volt a kód, mostantól működik és tesztelve nagyjából.

Hozzászólások

Szóval feltaláltad az rpm -y Debian/Ubuntu változatát :-P Vagy épp az rkhunter egyik funkcióját :-)

Igazad van egyébként, látom az rkhunter-nek vannak jó funkciói. Mondjuk a debsums-ot is lehet használni integritás ellenőrzéshez, de az csak a csomag fájlokhoz jó tudtommal - a nem oda tartozót nem ellenőrzi - miért is tenné. Gondolom az rpm is "csak" ennyit tud ezen területen, de a saját apró kódot jobban tudom bővíteni és alakítgatni saját igények szerint. Például színezni akarom a kimenetet gyökér mappák alapján.

Lehet teszek bele egy olyan ellenőrző funkciót, amely elemzi és tárolja, hogy mely folyamat mennyi erőforrást használt - és a "normálistól" eltérőt jelzi. Persze a normális érték megállapítása nem egyszerű és sok felé ágazó kérdéskör. (Ugye lehet vizsgálni a futás óta elvett cpu, disk, egyéb I/O stb erőforrást is, ahogy pl. ebben a kódomban is olvasom.). Ehhez vélemény?

Az rpm is csak a csomagból felrakott fájlokat ellenőrzi, de az a csomag ugye aláírt, és a repódata része a checksum az összes fájlra. (Ha a saját magad által forgatott cuccokból csomagot csinálsz, akkor az is belekerül ebbe a körbe.)

Az rkhunter egyrészt ezt használja, másrészt meg a megadott könyvtárakban lévő fájlokra saját maga csinál checksum-ot, és azt rakja el/ellenőrzi.