integriteitscontrole met bash scripting

Om te controleren dat een systeem veilig is, is het aan te bevelen de integriteit van de belangrijkste bestanden op het systeem te controleren.
Hiermee kun je te weten komen of onverwachts bestanden gewijzigd zijn of nieuwe onbekende bestanden zijn toegevoegd.
Het is mogelijk hiervoor kant en klare oplossingen te gebruiken zoals AIDE, Tripwire of OSSEC.
Maar je kunt het ook zelf een bash script maken om controle van de integriteit van bestanden op systeem te controleren.
Om het onszelf makkelijker te maken schrijven we eerst een script die alle bestanden en hash waardes in een nieuw script automatisch vastlegt.
Hierdoor hoeven we niet handmatig de hash waardes van bestanden te gaan bijwerken. Wat ook een groot risico op het maken van fouten heeft als het veel bestanden zijn die handmatig de hash waardes van bijgewerkt moeten worden.
Het script opgeslagen als antitampercheck_generate.sh om hash waardes van bestanden in een nieuw script te genereren ziet er als volgt uit.

#!/bin/sh
# Write hashes of all files in a folder.
printhashesfolder() {
        if [ ! -d $1 ] ; then
                echo "Error: not a folder."
                exit 1
        fi

        foldersearchpath=$1'/*'
        for file in $foldersearchpath
        do
                if [ -f $file ] ; then
                      HASH=$(sha1sum $file | cut -d ' ' -f 1)
                      if [ "$HASH" != "" ]; then
                           echo 'checkhashsha1 "'$file'" "'$HASH'"' 1>> antitamperchecks.sh
                      fi
                fi
        done

        # add number of files check:
        NUMBERFILES=$(ls -1 $1 | wc -l)
        echo 'checknumberfiles "'$1'" "'$NUMBERFILES'"' 1>> antitamperchecks.sh
}

echo 'remove old script.'
sudo rm antitamperchecks.sh
echo 'creating new script.'
sudo touch antitamperchecks.sh
sudo chmod 700 antitamperchecks.sh
echo 'write basics functions in script.'
cat antitamperchecks_funtions.txt 1>> antitamperchecks.sh
echo 'writing new file hashes to script.'
printhashesfolder '/bin'
printhashesfolder '/usr/sbin'
printhashesfolder '/sbin'
printhashesfolder '/etc/ssh'

Dit script genereert van elke bestand in de map /bin, /usr/sbin, /sbin en /etc/ssh een nieuwe regel met de aanroep naar de checkhashsha1 functie met als parameter de sha1 checksum van het bestand. Verder schrijft het ook een regel bij elke map met de aanroep van checknumberfiles met als parameter hoeveel bestanden in de map stonden.
Vervolgens creƫren we nog een tekst bestand genaamd antitamperchecks_functions.txt waarin de de volgende regels staan.

# Check and compare sha1 hash of a file.
checkhashsha1() {
        HASH=$(sha1sum $1 | cut -d ' ' -f 1)
        if [ "$HASH" != $2 ]
        then
                echo "Bad: $1 file. It's: $HASH and should be sha1: $2."
                MODIFYDATE=$(stat -c %y $1)
                echo "Last modify on: $MODIFYDATE"
        fi
}

# Check the number of files in a folder
checknumberfiles() {
        NUMBERFILESNOW=$(ls -1 $1 | wc -l)
        if [ "$NUMBERFILESNOW" != $2 ]
        then
                echo "There are new or deleted files in: $1."
        fi
}

# Selfcheck of sha1sum program with sha256sum.
SHA256BINSHA1=$(sha256sum /usr/bin/sha1sum | cut -d ' ' -f 1)
if [ "$SHA256BINSHA1" != "91b690492d585e70467f8cbafa4c30bf93dee13fcd31a4aba8deae663739ee93" ]; then
        echo 'Alert sha1sum changed! Environment cannot be trusted.';
        exit 1;
fi

Het bestand voegt nog de controle toe aan het script om het sha1sum programma dat de sha1 bestands hash berekent met een sha256 hash te controleren dat het hash programma zelf niet aangepast is.
Als laatste stap kunnen we nu ons script genaamd antitampercheck.sh genereeren door antitampercheck_generate.sh uit te voeren.
Het bestand antitampercheck.sh kan dan later uitgevoerd worden om te zien welke bestanden gewijzigd zijn sinds de laatste keer dat antitampercheck_generate.sh uitgevoerd is.
(beveilings aantekening: Letop dat de bash interpreter zelf ook nog aangepast kan worden het is misschien aan te raden de bash interpreter samen met checksum programma’s en de scripts offline veilig te bewaren.)