Detectando Web Shell y Rootkit en Linux

Una de las principales preocupaciones que siempre está presente cuando tenemos un sistema expuesto a Internet, es la posibilidad de que algún atacante sea capaz de instalar o subirle algún tipo de software o archivo malicioso a nuestro servidor y pueda generar una puerta trasera, escalar privilegios o tomar el control total del mismo.

Generalmente cuando ocurre defacement de un portal web, la primera solución que viene a nuestra mente es levantar el respaldo, pero en muchas ocasiones pasa que luego de esto, le vuelven a realizar el defacement.

Aunque este artículo no se trata de desfiguraciones de portales web, si es un buen ejemplo de cómo podemos emplear la detección de alguna web shell o rootkit que tengamos en nuestro servidor.

Es importante tratar de ir a la raíz del problema y pensar algunos detalles:

.- Si un atacante pudo cambiar el aspecto de tu portal, es porque de cierta forma tiene acceso a tu server.

.- Tu aplicación o servidor debe tener alguna vulnerabilidad que permite a ese atacante realizar modificaciones sin tu autorización.

.- Acuérdate siempre de las instalaciones por defecto, siempre es un buen punto de partida para un atacante.

.- Los accesos de administración de tu servidor o aplicación seguro no están bien restringidos.

.- Si te enteraste de la desfiguración de tu portal cuando entraste a tu página a ver alguna noticia o porque algún amigo te llamó, es evidente que no estás monitoreando tu servidor.

Se nos ocurren algunas otras cosas, pero lo dejamos para un próximo artículo dedicado a tratar de mitigar este tipo de ataques. Lo que queremos dejar claro es que con solo levantar tu respaldo desesperadamente, no es garantía que ya estés a salvo.

Para tratar de detectar web shell o rootkit en nuestro servidores Linux vamos a utilizar tres herramientas:

Rkhunter

Rootkit Hunter es una herramienta basada en Unix que busca rootkits, backdoors y posibles exploits locales.

Esta herramienta se puede configurar para realizar los chequeos de forma automatizada, incluso habilitar el envío de alertas por correo electrónico, pero en este caso vamos a realizar los chequeos de forma manual.

Lo primero que hacemos es instalar el software

$ sudo apt-get install rkhunter

Para chequear la versión de rkhunter que estamos utilizando

$ sudo rkhunter --versioncheck

Para actualizar rkhunter y comprobar si existe alguna versión nueva disponible de cualquiera de sus archivos.

$ sudo rkhunter --update

Con este comando vamos a realizar un chequeo y comprobaciones de nuestro sistema local. Para escanear todo el sistema de archivos, ejecute el rkhunter como usuario raíz.

$ sudo rkhunter --check

En la terminal vas a poder ver las comprobaciones que se están realizando, pero también se genera el archivo de registro en /var/log/rkhunter.log con los resultados de las comprobaciones realizadas.

Y para obtener más ayuda

# rkhunter --help

Chkrootkit

Es una herramienta para verificar localmente si hay signos de un rootkit.

Lo primero que hacemos es instalar el software

$ sudo apt-get install chkrootkit

Para comenzar a buscar los rootkits

$ sudo chkrootkit

Si quieres buscar cadenas sospechosas

$ sudo chkrootkit -x | less

Shell Detector

Es una herramienta que se utiliza para buscar las “Web Shells” dentro de un directorio Web, viene en las versiones PHP y Python y tiene una base de datos de “web shells” que permite identificar los posibles archivos maliciosos.

Nosotros vamos a utilizar la versión en Python.

Para comenzar a utilizarlo descargamos el script en el repositorio desde GitHub de la siguiente manera:

wget https://raw.github.com/emposha/Shell-Detector/master/shelldetect.py

Solo queda ingresar al directorio y ejecutar la herramienta shelldetector.py especificando como argumento -d el directorio que queremos revisar.

python shelldetector.py -d /var/www/miportalweb

Shell Detector va a investigar y analizar cada archivo dentro de ese directorio web en búsqueda de funciones que generalmente los malos utilizan para ocultar y ofuscar scripts como base64_encode, system, exec, etc. y por medio de su firma, expresiones regulares y contenido puede llegar a determinar si se trata de un Web Shell instalado en el servidor.

Un último tips

Otra forma bastante sencilla de detectar una web shell dentro de nuestro servidor es con este comando:

grep -lir "shell_exec\|@eval" /var/www/html/

Para esto tenemos que considerar algunas cosas, como por ejemplo:

  • Revisar los últimos archivos dentro de nuestro servidor.
  • Verificar que no hayan archivos con funciones que permitan ejecutar comandos en el sistema.

Y con este comando le decimos de forma recursiva a nuestra ruta de directorio web, que nos traiga TODOS los archivos que contengan las palabras:

shell_exec, @eval 

La función shell_exec permite ejecutar comandos del sistema en conjunto con la función @eval, la cual permite imprimir datos por pantalla. Ninguna de estas dos funciones se recomienda utilizar a menos que sea bajo tu responsabilidad.

Si entre los resultados te muestra algún archivo que es una imagen, recuerda que en las imágenes también se puede incrustar código PHP.

Esperamos que esta información te sirva para mejorar la postura de seguridad de tus sistemas.