Mario.Heiderich y Christian vienen desarrollando un sistema de detección de intrusos en PHP 5, el cual funciona en base a un conjunto de filtros definidos en un archivo XML, que detectan posibles parámetros peligrosos en las peticiones que se hacen sobre un servidor web.
<filters>
<filter>
<rule><![CDATA[(@import|;base64|alert[\s]?\(|expression[\s]?\(|urn[\s]?\(|fromCharcode[\s]?\(|decodeURIComponent[\s]?\(|eval[\s]?\(|Execute[\s]?\()]]></rule>
<description>detects imported poisoned stylesheets, base64 attacks, vbscript probings and typical js injections</description>
<tags>
<tag>xss</tag>
<tag>csrf</tag>
<tag>id</tag>
<tag>rfe</tag>
</tags>
<impact>4</impact>
</filter>
<filter>
<rule><![CDATA[(SELECT|INSERT|CREATE|DELETE|FROM|WHERE|LIKE|EXEC|SP_|XP_|SQL|ROWSET|OPEN|BEGIN|END|DECLARE|UNION|NULL)]]></rule>
<description>detects common sql keywords</description>
<tags>
<tag>sqli</tag>
<tag>id</tag>
</tags>
<impact>2</impact>
</filter>
</filters>
El modo de uso es el siguiente:
/**
* Cargar las clases
*/
require_once './phpids/ids.php';
require_once './phpids/storage.php';
try {
/**
* Cargar los filtros por omisión distribuidos en el código fuente
*/
$storage = new Filter_Storage();
$storage->getFilterFromXML('./phpids/default_filter.xml');
/**
* Instanciar el IDS y empezar a buscar elementos sospechosos
*
*/
$get = new IDS_Monitor($_GET, $storage); // $_POST, $_REQUEST, etc
$result = $get->run();
/**
* Mostrar los resultados en el navegador
*
* (Lo ideal sería enviar el resultado a otro archivo)
*/
header('Content-type: text/plain; charset=utf-8');
print_r($result);
} catch (Exception $e) {
printf(
'An error occured: %s',
$e->getMessage()
);
}
?>
En las pocas pruebas que hice, pude notar que en algunos casos se pueden saltar los filtros que vienen por omisión, por otro lado también se reportan muchos falsos positivos en cadenas de caracteres totalmente inofensivas -- en mi opinión, es consecuencia del uso de expresiones regulares.
Más allá de las limitaciones (y posibles problemas de rendimiento) que pueda tener, es una alternativa para aquellos servidores donde no está instalado mod_security.
4 replies on “PHP IDS (Intrusion Detection System)”
Hi!
The code samples are pretty old - you can find the current version here.
http://phpids.googlecode.com/svn/trunk/
Greetings!
.mario
Thanks for your comment .mario 😉 , I've used the sample from http://phpids.googlecode.com/svn/trunk/docs/examples/example.php
[...] coming-out, there has been some international coverage already and this is just the start. Obviously this creates an overhead [...]
[...] acaban de anunciar que ya existe un versión estable de PHPIDS, un sistema de detección de intrusos basado en expresiones regulares desarrollado en PHP. Pueden descargar el código desde el [...]