Debian - Rendszer integritás ellenőrzés utólagosan Live CD-ről

Ez a fórum bejegyzésem alapján szerettem volna megoldást találni arra, hogy egyszerűen ellenőrizni tudjam egy Debian rendszer integritását utólag mindenfajta biztonsági ellenőrző program előzetes telepítése nélkül. És mindezt Live CD-ről, és nem a rendszeren található csomag bejegyzések alapján, hanem külső hivatalos forrás felhasználásával.

Mivel nem találtam választ a kérdésemre és mivel úgy gondolom hogy sok esetben megbízhatóbb az alábbi megoldásom annál, mint hogy állandóan generáltassuk + frissítsük + ellenőrizzük az épségét a hash adatbázisnak, ezért írtam egy scriptet ami az alábbit teszi:

Megvizsgálja a rendszeren található fájlok integritását a gyári telepítő lemezen található .deb csomagokban lévő md5 hash alapján.

Ezt így tehetjük meg:
1) Live CD-ről boot-oljunk
2) fel kell csatolnunk a Debian CD-t vagy DVD-t egy mappába
3) csatoljunk fel a vizsgálandó merevmelez partíciót is egy mappába
4) futtassuk a script-et megadva neki a cd és a partíció mappáját
5) ha végzett, akkor kiírja azoknak a fájloknak a neveit, amelyeknek nem egyezett a hash kódja egyetlen CD-n található debian-os csomagban sem

Egyébként a művelet nem nagyon időigényes, mivel a debian-os csomag archívumból mindösszesen a picike md5sums fájlt kell kivenni, majd pedig egy md5sum ellenőrzés egy ciklusban, kb. ennyi.

Annyit megjegyeznék, hogy az ISO telepítő készletek nem olyan ütemben frissűlnek, mint ahogy a biztonsági frissítések jönnek a rendszerhez, ezért amit kiír a script eredményként (hogy ezeknek nem stimmel az md5 ellenőrző összege), ezekt nézzük meg a dpkg és apt log-ban, hogy nem frissűltek-e pl. az utóbbi 1 hétben.

Ha más nem, akkor véleményem szerint elég letölteni az 1-es CD-t, mivel azon rajta van az összes core és fontos rész + kernel stb. Ha ezzel jól lefutott a rendszer ellenőrzése, akkor jó.

megj.: ha pongyolán vagy hülyén fogalmaztam valahol vagy hibát találtok a kódban, megköszönöm a javítást - folyamatosan teszteltem, elvileg jó eredményeket ad -kézzel egyenként ellenőriztem - egyébként egy átlagos rendszeren először futtatva pár perc alatt lefut


---------------------------------------------------------
#!/bin/sh

# THIS SCRIPT CHECKS SYSTEM INTEGRITY POSTERIORLY BASED ON OFFICIAL DEBIAN CD OR DVD
# (finds .deb files recursively in directory and
# checks md5sums of package files against the files on the system)
# ----------------------------------------------------------------------------------------------------------------


# first parameter must be directory name or file name
# second parameter must be the mounted root directory of the system disk
if [ "$#" == "0" ]
then
    echo
    echo USAGE: $0 [deb files dir] [system root dir]
    echo
    echo EXAMPLE:
    echo mount /dev/cdrom /mnt/cdrom
    echo mount /dev/sda1 /mnt/custom
    echo $0 /mnt/cdrom /mnt/custom
    echo

    exit
fi

if [ "$#" != "2" ]
then
    echo $0: two directory names must be given
    exit
fi



# working directory
WORKDIR="$1"
# base directory to check binaries in
BASEDIR="$2"
# temporary directory
TEMPDIR="/tmp"
# temporary log file
TEMPLOG=`mktemp -t log1.XXXXXX`
TEMPLOG_OK=`mktemp -t log2.XXXXXX`
TEMPLOG_FAILED=`mktemp -t log3.XXXXXX`

cd "$TEMPDIR"

# find .deb files in work directory recursively
find "$WORKDIR" -type f -name "*.deb" | while read FILE
do

    echo "$FILE"

    ar x "$FILE" control.tar.gz 2>/dev/null
    tar xf control.tar.gz ./md5sums 2>/dev/null

    if [ -f md5sums ]
    then
        cd "$BASEDIR"
        md5sum -c "$TEMPDIR/md5sums" 2>/dev/null 1>>"$TEMPLOG"
    fi

    cd "$TEMPDIR"
    rm -f control.tar.gz
    rm -f md5sums

done


# create a log file from OK files, and another from the FAILED ones
sort "$TEMPLOG" | grep "OK$"     | grep -o ".*:" | grep -o ".*[^:]" > "$TEMPLOG_OK"
sort "$TEMPLOG" | grep "FAILED$" | grep -o ".*:" | grep -o ".*[^:]" > "$TEMPLOG_FAILED"


# print file names of the failed checksums
# compare FAILED file names to OK ones, if any matches, then file should be marked OK
# because several debian package can contain binary files for the same ones
COUNT=`cat "$TEMPLOG_FAILED" | wc -l`
LINE=1

if [ "$COUNT" -gt "0" ]
then
    echo
    echo "FAILED FILES:"

    while [ "$LINE" -le "$COUNT" ]
    do

        NAME=`head -n "$LINE" "$TEMPLOG_FAILED" | tail -n 1`

        if ! grep -q -x "$NAME" "$TEMPLOG_OK"
        then
            echo "$NAME"
        fi

        LINE=$(($LINE+1))

    done

else
    echo "ALL FILES ARE OK."

fi


# delete log files
rm -f "$TEMPLOG"
rm -f "$TEMPLOG_OK"
rm -f "$TEMPLOG_FAILED"

Hozzászólások

Az a gond ezzel a módszerrel, hogy nem minden csomagnak van md5sums file-ja, nem minden file-t ellenőrzöl ezzel a módszerrel (config scriptek, initscriptek), sőt lehetnek a rendszeren a dpkg által nem nyilvántartott file-ok is. A semminél mindenesetre több ez is, de nem pótol egy aide/tripwire jellegű megoldást.

Egyetértek, de olyan rendszeren is szükségem van ellenőrzésre, amin nem volt telepítve eredetileg hasonló. És a core rész binárisok legalább megfelelően ellenőrizhetőek imho.

Szerk.: illetve a tripwire-el nem biztos hogy felfedezhető lenne egy kernel rootkit.

Ha meg talál egy korrupt fájlt, akkor lehetőség van a live rendszerről be-chroot-olni és felültelepíteni dpkg-vel. Illetve az ellenőrzés után chroot-ból még lehet futtatni anti-rootkit-eket.