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:
Generamos la lista de nuevo pero la comparamos con la anterior:
Comprobamos que no hay nada en la salida:
Generamos un cambio y volvemos a comprobar:
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:
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:
Creamos los directorios necesarios:
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:
#minute hour mday month wday who command
*/30 * * * * /root/.scripts/mtreeCheck check
NOTA: mtree también está disponible para Linux sys-apps/mtree