Esta web utiliza cookies, puedes ver nuestra política de cookies aquí. Si continuas navegando estás aceptándola

mtree


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


Autor: Kr0m -- 22/04/2019 21:03:58