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

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.
Links
PHPIDS Website oficial:PHPIDS Official Website
CakePHPIDS en GitHub: CakePHPIDS on GitHub
CakePHPIDS Plugin Download (Latest Tarball): Download CAKEPHPIDS
tags:cakephp phpids web security