Esta pagina se ve mejor con JavaScript habilitado

mtree

 ·  🎃 kr0m

Mtree es una utilidad para genera hashes de una jerarquía de ficheros, estos hashes se regenerarán cada cierto tiempo para ser comparados con los guardados detectando de este modo modificaciones en el sistema de ficheros. Esto resulta muy útil para detectar intrusiones, si los hashes se guardan en un sistema de ficheros de solo append o en un servidor remoto la robustez del sistema aumenta considerablemente ya que el intruso no podrá modificar los hashes para que macheen con los binarios instalados o los ficheros modificados.

Generamos la lista de hashes:

mtree -s SEED -c -K cksum,sha256digest -p /bin > /root/.bin_chksum_mtree

Generamos la lista de nuevo pero la comparamos con la anterior:

mtree -s SEED -p /bin < /root/.bin_chksum_mtree » /root/.bin_chksum_output

Comprobamos que no hay nada en la salida:

cat /root/.bin_chksum_output

Generamos un cambio y volvemos a comprobar:

touch /bin/deleteme
mtree -s SEED -p /bin < /root/.bin_chksum_mtree » /root/.bin_chksum_output
cat /root/.bin_chksum_output

.: modification time (Wed Apr 3 21:56:03 2019, Tue Apr 16 22:27:50 2019)
extra: deleteme

Borramos el cambio:

rm /bin/deleteme

Podemos crear un script que se ejecute vía cron y que nos avise por Telegram de cualquier cambio detectado, en mi caso lo escribo en bash por estar mas familiarizado con esta shell.

Instalamos el software necesario:

pkg install curl

Creamos los directorios necesarios:

mkdir -p /root/.scripts/mtreeCheckOutput
cd /root/.scripts/
vi mtreeCheck

#!/usr/local/bin/bash
if [ $# -ne 1 ]; then
        echo -e "++ ERROR: You must provide one command generate/clear/check"
        exit
fi

function sendTelegram {
        curl -s -X POST https://api.telegram.org/botAPI_KEY/sendMessage -d chat_id=CHAT_ID -d text="$1"
}

COMMAND=$1
SEED='XXXXXXXXXXXX'
mtreeCheckResultPath='/root/.scripts/mtreeCheckOutput'
for DIR in /bin /sbin /usr/bin /usr/sbin /usr/local/bin /etc /usr/local/etc; do
    DIR_NAME=$(echo $DIR|tr -d /)
    case $COMMAND in
        generate )
            mtree -s $SEED -c -K cksum,sha256digest -p $DIR > $mtreeCheckResultPath/$DIR_NAME
        ;;
        clear )
            rm $mtreeCheckResultPath/* 2>/dev/null
        ;;
        check )
            if [ ! -f $mtreeCheckResultPath/$DIR_NAME ]; then
                echo -e "++ ERROR: You must execute generate command before check"
                exit
            fi
            mtree -s $SEED -p $DIR < $mtreeCheckResultPath/$DIR_NAME|grep 'modification time'
            if [ $? -eq 0 ]; then
                echo -e "++ ERROR: Mtree - Missmatch detected in $DIR"
                sendTelegram "Mtree - Missmatch detected in $DIR"
            fi
        ;;
        * )
            echo -e "++ ERROR: Command unknown"
            exit
        ;;
    esac
done

Crontabeamos la tarea cada 30m:

crontab -e

#minute hour mday month wday who command
*/30 * * * * /root/.scripts/mtreeCheck check

NOTA: mtree también está disponible para Linux sys-apps/mtree

Si te ha gustado el artículo puedes invitarme a un RedBull aquí