
Script automatizado de respuesta a incidentes en Linux con triaje en vivo, adquisición de memoria (LiME), imagen de disco, escaneo YARA y generación de informes HTML.
Respuesta a Incidentes en Linux

TuxResponse es un script de respuesta a incidentes para sistemas Linux escrito en bash. Puede automatizar actividades de respuesta a incidentes en sistemas Linux y permitirle evaluar sistemas rápidamente, sin comprometer los resultados. Normalmente, los sistemas corporativos tendrían algún tipo de monitoreo y control, pero hay excepciones debido a TI sombra e imágenes no estándar implementadas en las empresas. Lo que equivale a escribir 10 comandos con pruebas de prueba y error, se puede hacer con solo presionar un botón.
Probado en:
Propósito principal:
Herramientas externas en el paquete:
INSTALL LiME
function init_lime(){
if [ -f /usr/bin/yum ]; then
yum -y install make kernel-headers kernel-devel gcc
elif [ -f /usr/bin/apt-get ]; then
apt-add-repository universe
apt-get -y install make linux-headers-$(uname -r) gcc
fi
rm -f /tmp/v1.8.1.zip
wget -P/tmp https://github.com/504ensicsLabs/LiME/archive/v1.8.1.zip
unzip /tmp/v1.8.1.zip
rm -f /tmp/v1.8.1.zip
pushd LiME-1.8.1/src
make
mv lime-*.ko /tmp/lime.ko
popd
rm -rf LiME-1.8.1
}
Al responder a incidentes, si tiene que instalar LiME escribiendo manualmente todos los comandos, eso lo ralentizará significativamente.
1)Información del sistema, IP, Fecha, Hora, Zona horaria local, último arranque - 'hostnamectl; who -b; uname -a; uptime; ifconfig; date; last reboot'
1)Verificar sistemas de archivos montados - 'df -h'
2)Hash de ejecutables (MD5) - 'find /usr/bin -type f -exec file "{}" \; | grep -i "elf" | cut -f1 -d: | xargs -I "{}" -n 1 md5sum {}'
3)Archivos modificados - 'modified_files_period_select' (llamando a una función en tuxresponse.sh)
4)Listar todos los directorios ocultos - 'find / -type d -name "\.*"'
5)Archivos/directorios sin nombre de usuario/grupo - 'find / \( -nouser -o -nogroup \) -exec ls -l {} \; 2>/dev/null'
6)Archivos cambiados de paquetes -'packaged_files_changed' (llamando a una función en tuxresponse.sh)
1) Verificar rootkits - ejecuta 'chkrootkit'
2) Escaneo Yara - llamando a una función tuxresponse.sh 'yara_select' (escanea el sistema con todas las reglas YARA de Linux disponibles en el repositorio principal)
3) EXIFTool - llamando a una función tuxresponse.sh 'exiftool_select' (instala EXIFTool)
1) Listar procesos en ejecución - 'ps -axu'
2) Binarios eliminados aún en ejecución - 'ls -alR /proc/*/exe 2> /dev/null | grep deleted'
3) Conexiones de red activas (TCP, UDP) - 'ss -tunap | sed "s/[ \t]\+/|/g"'
4) Volcar proceso basado en PID - 'dump_process_select' (llamando a una función en tuxresponse.sh)
1) Ingrese el PID a volcar: **(este es el comando ejecutado - gcore -a -o "${DUMP_FILE}" ${DUMP_PID} )**
5) Procesos ejecutándose desde /tmp, /dev - 'ls -alR /proc/*/cwd 2> /dev/null | grep -E "tmp|dev"'
1) Listar todas las conexiones de red activas/sockets sin procesar - 'netstat -nalp; netstat -plant'
1) Listar todos los usuarios conectados al sistema - 'w'
2) Obtener usuarios con contraseñas - 'getent passwd'
1) Verificar el archivo de historial de bash - 'cat ~/.bash_history | nl'
1) Listar todos los trabajos cron - 'list_all_crontab' (llamando a una función en tuxresponse.sh)
2) Listar todos los programas de inicio/arranque - 'list_all_onstartup' (llamando a una función en tuxresponse.sh)
1) Volcar .bash_history de usuarios - 'cat_all_bash_history' (llamando a una función en tuxresponse.sh)
2) Encontrar registros con contenido binario - 'grep [[:cntrl:]] /var/log/*.log'
Esa opción le permite conectarse a un sistema remoto, copiar todos los scripts y herramientas y analizar el sistema.
Esa opción le permite compilar LiME desde el código fuente y volcar la memoria RAM del sistema. Esta es la forma más fácil de hacerlo, ya que la alternativa sería compilar desde el código fuente para todas las versiones principales del kernel e insertar el LKM.
That option enables you to do a full disk image of the target system using well-known tool - dd. The function is taking source and destination as parameters and inserts them in the following command 'dd if=${IMAGE_IN} | pv | dd of='${IMAGE_OUT}' bs=4K conv=noerror,sync'. If you're investigating remote system, the script is going to copy itself there. Then if the parameter ${TARGET_HOST} is set, then the script is going to download the image to analyst system using this command >> "ssh -p${TARGET_PORT} ${TARGET_USER}@${TARGET_HOST} 'dd if=${IMAGE_IN} bs=4K conv=noerror,sync' | pv | dd of='${IMAGE_OUT}'" (im heavily using pv to make sure progress is tracked)
Todo lo que hace se registra en archivos de texto, por lo que es fácil volver atrás y ver la salida. La belleza de esto es que puede cargarlo en sus herramientas de análisis de registros favoritas y darle sentido en una etapa posterior. Además, puede usar esa función para generar un informe HTML y ver la salida generada por comandos en una forma más legible para humanos.
Instalar los binarios que el script necesita para funcionar correctamente.
1) Dependencias
2) Yara y reglas
3) ExifTool
4) Verificación de inicio
5) chckrootkit
6) LiME
Endurecimiento y pase de solidez forense en tuxresponse.sh:
YYYYMMDDTHHMMSSZ) en lugar de hora local, para un sellado de tiempo defendible.evidence/manifest.txt; las imágenes de disco obtienen un archivo .sha256 hermano.modified_files_period_select ya no toucha un archivo de marca de tiempo en el sistema de archivos objetivo (lo que contaminaba atime/mtime de /tmp antes del recorrido de find). Ahora usa find / -xdev -newermt "1 $opt ago".eval ${DD_CMD} en _create_disk_image; la tubería dd/ssh se ejecuta directamente, y el dispositivo de origen se valida contra antes de su uso.Nota: el modo basado en menú aún depende de
.cmds.sh,.menu_en.shyforensics.sh, que no están presentes en este repositorio. La reconstrucción del catálogo de comandos/menú se sigue como un esfuerzo separado.
^/dev/[a-zA-Z0-9]+$dump_process_select valida que el PID sea numérico y que /proc/<pid> exista antes de invocar gcore.exec_CMD ya no usa eval; los comandos de tubería de shell del catálogo interno se envían a través de bash -c.set -euo pipefail con variables globales inicializadas al inicio.DISTO → DISTRO en la rama de detección de Arch Linux (anteriormente nombraba incorrectamente la distribución de manera silenciosa).apt-get install netstat → net-tools.evidence/*.txt mediante glob (sin más análisis de ls) y omite el manifiesto; las variables de salida están entrecomilladas.VERSION='1.1'; el banner imprime la versión.shellcheck -S error está limpio.