Post42 nn

Detectando Web Shells en Nuestro Servidor Web


Perfil
Samuel Esteban

Gran cantidad de desarrolladores webs me ha preguntado constantemente, ¿Cómo puedo detectar si alguien subió alguna Web Shell a mi servidor web? Existen diversas técnicas para realizar este proceso. Tenemos que considerar cosas como, por ejemplo, revisar los últimos archivos dentro de nuestro servidor, verificar que no hallan archivos con funciones que permitan ejecutar comandos en el sistema, etc.

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

Con este comando le decimos de forma recursiva a nuestra ruta de directorio web, que nos traiga TODOS los archivos que contengan las palabrás shell_exec, @eval. A continuación explicaremos en que consiste cada una de ellas.

Al ejecutar esto en nuestro servidor nos percatamos de lo siguiente:


Detectando Web Shells – Archivos Sospechosos

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

Lo primero que nos percatamos es que nos aparece un archivo de imagen, la pregunta es ¿Las imágenes pueden contener código PHP malicioso? Por supuesto que si, ya que una imagen puede esconder cualquier tipo de información, si revisamos la imagen a continuación:


Detectando Web Shells – Imagen jpg con código PHP Incrustado


Esta imagen, posee código PHP incrustado, por que lo que podría tratarse de un archivo potencialmente peligroso, además utiliza la función shell_exe(“ls –latr”), la cual podría permitir a un atacante listar los archivos del directorio actual del servidor, por lo tanto esta “Imagen” debe ser eliminada del servidor.

A continuación tenemos el archivo cmd.php:


Detectando Web Shells – Simple Web Shell PHP


Este archivo  permite ejecutar comandos del sistema a través del método POST. Este archivo puede ser peligroso por ende se recomienda eliminarlo.

Finalmente abriremos el archivo phpi.php (No nos detendremos a revisar todos los archivos,  sin embargo en la vida real se recomienda revisar cada uno de los archivos que fueron detectados con el comando).


Detectando Web Shells – Función Obsoleta de PHP detectada

Esto claramente es un fallo de programación demasiado peligroso, un atacante podría aprovecharse de esta función y de esta manera ejecutar comandos de forma arbitraría sobre el sistema. Un atacante podría hacer hacer una Web Shell con esta función, o si el programador desarrolló una aplicación con esta función se recomienda que la elimine lo antes posible.

También podemos utilizar una herramienta para la detección de Web Shells, su nombre es Web Shell Detector, la cual la pueden descargar de su repositorio oficial:


https://github.com/emposha/PHP-Shell-Detector


Una vez descargado, mover los archivos al directorio raiz del servidor web para realizar pruebas. Ingresamos a la ruta:


http://172.16.45.167/shelldetect.php


Al abrirlo nos pedirá un password el cual es admin/protect.


Detectando Web Shells – WebShell Detector


Detectando Web Shells – WebShell Detector , Web Shell Detectadas


Lo que hace esta herramienta es revisar en profundidad todos los archivos del Servidor Web y buscar posibles Web Shells. Como es posible visualizar en la imagen anterior nos ha detectado 3 archivos de tipo Shell, siempre será bueno verificar esto de forma manual para descartar falsos positivos.




Artículos que te pueden interesar