Como instalar un sistema de detección de intrusos en tu aplicación CakePHP

·4 min de lectura

Esta publicación fue reconstruida a partir de una copia archivada (ver original).

Como instalar un sistema de detección de intrusos en tu aplicación CakePHP

Decidí compartir mi implementación de PHPIDS para CakePHP 1.2 y 1.3 debido a que no hay documentación pública disponible. Espero les sirva.

Qué es PHPIDS?

PHPIDS (PHP-Intrusion Detection System) es un sistema avanzado de detección de intrusos para aplicaciones en PHP escrito por Mario Heiderich.

El IDS (Intrusion Detection System) no filtra ni limpia contenido malicioso, simplemente reconoce cuando tu aplicación esta siendo atacada y actua de acuerdo a la forma que lo configures. PHPIDS es sin duda el mejor sistema de detección de intrusos open source el día de hoy. No te olvides de leer su documentación en su p´gina oficial para aprovechar todo su poder.

Qué hace este plugin?

El plugin monitoreará y protejerá tu aplicación en CakePHP contra ataques web. Si un atacante trata de mandar contenido malicioso a tu aplicación, el IDS lo detectará, grabar´, alertará al administrador o bloqueará la conexión del atacante segun el peligro acumulado del ataque y tu configuración

La primera versión de este plugin soporta las siguientes funciones:
Log: Guarda información del atacante en la base de datos o archivo de texto
Alerta al administrador: Manda un email alerta
Bloquea atacantes por IP: Bloquea peticiones por IPs

Instalación

Paso 1: Descarga y descomprime

Descarga y extrae el folder del plugin dentro de /app/plugins

Paso 2: Crea la tabla en la base de datos

Para grabar los ataques recibidos necesitas crear la siguiente tabla en tu base de datos.


CREATE TABLE IF NOT EXISTS `phpids_intrusions` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(128) NOT NULL,
  `value` text NOT NULL,
  `page` varchar(255) NOT NULL,
  `userid` int(11) unsigned NOT NULL,
  `session` varchar(32) NOT NULL,
  `ip` varchar(15) NOT NULL,
  `reaction` tinyint(3) unsigned NOT NULL COMMENT '0 = log; 1 = mail; 2 = warn; 3 = kill;',
  `impact` int(11) unsigned NOT NULL,
  `created` datetime NOT NULL,
  `tags` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
)

Nota: El plugin adicionalmente guarda los ataques en un archivo de texto dentro del folder /logs

Paso 3: Configura PHPIDS

Abre el archivo de configuracion (app/plugins/phpids/config/Config.php.ini) y busca la siguiente sección:


[General]
    filter_type     = xml
    base_path       = /app/plugins/phpids/vendors/phpids/
    use_base_path   = true

Escribe tu ruta absoluta al folder que contiene PHPIDS. Este folder se encuentra dentro del folder ‘vendors’ en nuestro plugin. Ex. /var/www/webapp/app/plugins/phpids/vendors/phpids/


[General]
    filter_type     = xml
    base_path       = /var/www/myapp/app/plugins/phpids/vendors/phpids/
    use_base_path   = true

Nota: Esta es la configuración mínima requerida para hacer funcionar a PHPIDS. Sin embargo, existen muchas otras opciones de configuración para personalizar PHPIDS. Les recomiendo que lean toda la documentación para entender toda su funcionalidad.

Ahora configuraremos nuestro plugin. Busca la sección que dice ‘Cakephpids’ y cambia los valores según tu sistema.


[CakephpIDS]

    production_mode = false
    notification_email = your@email.com
    ban_duration = 30

    ;Reaction threshold

    reaction_threshold_log=3
    reaction_threshold_warn=15
    reaction_threshold_mail=50
    reaction_threshold_kill=150

Opciones de configuración:

**base_path:**Ruta absoluta a PHPIDS
**notification_email:**Email que recibira las notificaciones de ataques
**production_mode:**Util para probar que todo funcione bien antes de correr en producción
ban_duration: Duración del ban en días
**reaction_threshold_log:**Impacto requerido para grabar el ataque
**reaction_threshold_mail:**Impacto requerido para notificar al administrador
**reaction_threshold_kill:**Impacto requerido para bannear la IP.

Paso 4: Configura tu aplicación

Para aumentar rendimiento solo monitorearemos las acciones que reciban informacion de usuarios. Por ejemplo, digamos que tienes un controlador para comentarios:


function add() {
        if (!empty($this->data)) {
            if ($this->Post->save($this->data)) {
                $this->Session->setFlash('Your post has been saved.');
                $this->redirect(array('action' => 'index'));
            }
        }
    }

Para empezar a monitorearla solo necesitas agregar ‘$this->requestAction(“/phpids/phpids_intrusions/detect”)’ al inicio de la función


function add() {
    $this->requestAction("/phpids/phpids_intrusions/detect");
        if (!empty($this->data)) {
            if ($this->Post->save($this->data)) {
                $this->Session->setFlash('Your post has been saved.');
                $this->redirect(array('action' => 'index'));
            }
        }
    }

Paso 5: Pruebas

Finalmente necesitamos probar que el IDS este funcionando adecuadamente, asi que abran sus navegadores y traten de romper su aplicación CakePHP ;). Aquí hay algunos vectores básicos de ataques en caso de que no conozcan ninguno (Solo copien y peguen en los campos de entrada).


<script>alert(1)</script>
' OR 'X'='X
../../../../../../etc/passwd

Si todo funciona bien deberán recibir una alerta de intrusión en sus logs.

Falsos positivos

PHPIDS soporta el uso de excepciones para solucionar el problema de falsos positivos que se puede presentar. Estas excepciones necesitan ser agregadas manualmente a tu configuración de PHPIDS.

Abre tu configuración de PHPIDS y busca la sección de ‘Exceptions’ para agregar tu entrada.


    exceptions[]    = GET.__utmz
    exceptions[]    = GET.__utmc

Y no olvides mandar un reporte del falso positivo para ayudar a PHPIDS a seguir mejorando.

Manten las reglas al día

Finalmente, es muy importante que mantengas tus reglas y convertidor al día. La comunidad detr´s de PHPIDS es muy activa y nuevos vectores de ataques son añadidos cada semana.

Descarga la última version de default_filter.xml y Converter.php de sus repositorios.

Contribuye

Si tienes ideas o codigo que aportar no dudes hacerlo a traves de Github.

PHPIDS Website oficial:PHPIDS Official Website
CakePHPIDS en GitHub: CakePHPIDS on GitHub
CakePHPIDS Plugin Download (Latest Tarball): Download CAKEPHPIDS

tags:cakephp phpids web security