LinuxParty

NUESTRO SITIO necesita la publicidad para costear hosting y el dominio. Por favor considera deshabilitar tu AdBlock en nuestro sitio. También puedes hacernos una donación entrando en linuxparty.es, en la columna de la derecha.
Inicio desactivadoInicio desactivadoInicio desactivadoInicio desactivadoInicio desactivado
 
Esta guía explica cómo configurar PHPIDS en un servidor web con Apache2 y PHP5. PHPIDS (PHP-Intrusion Detection System) es... sencillo, bien estructurado, rápido y funciona bajo una capa de seguridad de última generación para su aplicación web basada en PHP. El IDS no desmonta, ni desinfecta, ni filtra cualquier entrada maliciosa, simplemente reconoce cuando un atacante trata de romper el sitio y reacciona exactamente de la manera que usted desea que lo haga. Sobre la base de un conjunto de reglas de filtrado aprobado y probado ante cualquier ataque, se le da una calificación numérica del impacto que hace que sea fácil decidir qué tipo de acción debería seguir el intento de hacking. Este puede variar desde el simple registro y envío de un correo de emergencia para el equipo de desarrollo, mostrar un mensaje de advertencia al atacante o incluso terminar con la sesión del usuario.
Debe de tener en cuenta, de que no hay completas garantías de que esto le funcione.

Para entender correctamente el artículo, suponemos que usted debe estar familiarizado con algunos conocimientos web, como por ejemplo el significado del directorio raíz donde se hospedan las páginas web (documentos)

Nota preliminar

He probado esto en un sistema Debian Etch con Apache2 y PHP5 y la dirección IP es: 192.168.0.100. El usuario y el grupo "Apache" en Debian Etch es "www-data", si utiliza una distribución diferente, el usuario y el grupo puede cambiar La ubicación del fichero php.ini ( /etc/php5/apache2/php.ini en Debian Etch) podría también variar.

Estoy utilizando un virtual host  /var/www/web1/web en este ejemplo.


En Fedora, CentOS, RedHat, etc... el directorio raíz es: /var/www/html

En Ubuntu, Debian, Slackware, etc... el directorio raíz es: /var/www.


Instalación de PHPIDS

Por razones de seguridad, quiero instalar PHPIDS fuera de la raíz del documento, por lo que he creado el directorio /var/www/web1/phpids:

mkdir /var/www/web1/phpids

Entonces he instalado PHPIDS de la siguiente manera (en el momento de escribir el artículo la última versión era 0.4.7, pero esto puede haber cambiado, por eso utilizaremos el nombre del fichero phpids-0.4.7.tar.gz que es un tarball, nosotros tras su descompresión sólo necesitamos el directorio lib/

Ya no está disponible el sitio web php-ids, con lo que tendrás que utilizar el único sitio que hemos visto para ello:

http://drupal.org/project/phpids

tar xvfz phpids-0.4.7.tar.gz
cd phpids-0.4.7
mv lib/ /var/www/web1/phpids/

Y se moverá la carpeta lib/ al directorio de nuestra aplicación /var/www/web1/phpids/

Accedo al directorio /var/www/web1/phpids/lib/IDS

cd /var/www/web1/phpids/lib/IDS

 

Y creo el directorio tmp/ (el cual contendrá el fichero de log de PHPIDS) escribible por el usuario y grupo de Apache.
chown -R www-data:www-data tmp/

Next we configure the PHPIDS configuration file (Config.ini):

Lo siguiente, configuraré el fichero de configuración PHPIDS (config.ini)

cd config/
vim config.ini

Utilizaré la configuración por defecto, todo lo que tendría que hacer es ajustar las rutas (paths)


; PHPIDS Config.ini
; General configuration settings
; !!!DO NOT PLACE THIS FILE INSIDE THE WEB-ROOT IF DATABASE
; CONNECTION DATA WAS ADDED!!!
[General]
    filter_type  = xml
    filter_path  = /var/www/web1/phpids/lib/IDS/default_filter.xml
    tmp_path   = /var/www/web1/phpids/lib/IDS/tmp
    scan_keys  = false
    exceptions[]    = __utmz
    exceptions[]    = __utmc
; If you use the PHPIDS logger you can define specific configuration here
[Logging]

3 Uso de PHPIDS

Ahora vamos a crear el archivo / var/www/web1/web/phpids.php que llame a PHPIDS para nosotros (que más adelante se anteponga ese archivo a todos nuestros archivos PHP para que nuestros archivos PHP puedan hacer uso de PHPIDS automáticamente):

vi / var/www/web1/web/phpids.php


inicio php
set_include_path(
   get_include_path()
   . PATH_SEPARATOR
   . '/var/www/web1/phpids/lib'
  );
  require_once 'IDS/Init.php';
$request = array 'REQUEST' => $_REQUEST, 'GET' => $_GET, 'POST' => $_POST, 'COOKIE' => $_COOKIE ); $init = IDS_Init::init('/var/www/web1/phpids/lib/IDS/Config/Config.ini'); $ids = new IDS_Monitor($request, $init); $result = $ids->run(); if (!$result->isEmpty()) { // Take a look at the result object echo $result; require_once 'IDS/Log/File.php'; require_once 'IDS/Log/Composite.php'; $compositeLog = new IDS_Log_Composite(); $compositeLog->addLogger(IDS_Log_File::getInstance($init)); $compositeLog->execute($result); }

finphp

Ahora cuando se llama a ese archivo en un navegador, (http://192.168.0.100/phpids.php por ejemplo), podrás ver una página en blanco. Pero si se intenta añadir algunos parámetros a la URL maliciosas (por ejemplo, http://192.168.0.100/phpids.php?test=%22%3EXXX%3Cscript%3Ealert(1)%3C/script%3E) PHPIDS detectará e imprimirá sus resultados en el navegador.

Ahora tenemos que encontrar una manera de hacer que nuestros scripts PHP utilicen PHPIDS. Por supuesto, usted no desea modificar todos los scripts PHP (que podría haber cientos de ellos ...). Afortunadamente, hay una forma de hacerlo: podemos decir que un script PHP (en este caso será phpids) se anteponga a la ejecución cada vez que se llama otro script PHP. Por ejemplo, si llamamos a la info.php en el navegador, PHP primero ejecutará phpids.php y, a continuación info.php sin tener que modificar ningún fichero

Podemos hacer esto mediante el parámetro auto_prepend_file de PHP. Podemos definir esta variable en nuestro php.ini (esta es una configuración global que es válido para todos los sitios web de PHP en el servidor), o en un archivo htaccess (válido sólo para el sitio web en cuestión).:


[...]
auto_prepend_file = /var/www/web1/web/phpids.php
[...]
Reiniciar apache...

Si utiliza un fichero .htaccess

vi /var/www/web1/web/.htaccess

Y el contenido sería:


php_value auto_prepend_file /var/www/web1/web/phpids.php


Por favor, asegúrese de que el host virtual para el sitio web /var/www/web1/web contiene algo como esto (de lo contrario la línea php_value en el htaccess. será ignorado) (si tiene que modificar el host virtual, por favor, no se olvide de reiniciar Apache):
< Directory /var/www/web1/web/ >
AllowOverride All
< /Directory >


Creamos un fichero phpinfo.php SÓLO con la funcion phpinfo(); y comprobamos si fucniona...

Escribe en el navegador (http://192.168.0.100/info.php),y verás una salida normal de phpinfo()

Ahora añade algunos parámetros maliciosos a la URL (e.g. http://192.168.0.100/info.php?test=%22%3EXXX%3Cscript%3Ealert(1)%3C/script%3E), y se mostrará un mensaje en la salida (porque /var/www/web1/web/phpids.php se ejecutó antes que /var/www/web1/web/info.php):Puedes ver el log escribiendo:
cat /var/www/web1/phpids/lib/IDS/tmp/phpids_log.txt

Ahora, mediante la observación de ese registro aprenderá lo que los hackers están tratando de hacer sobre sus aplicaciones PHP, y usted puede tratar de endurecer sus aplicaciones.


Para añadir otro nivel de seguridad adicional, podemos impedir que nuestros scripts PHP se ejecuten si PHPIDS descubre que están bajo ataque: nosotros simplemente añadiremos algo como: 
die('<h1>Go away!</h1>') a la sección (!$result->isEmpty()) {} de la secuencia de comandos var/www/web1/web/phpids.php


inicio php
set_include_path(
get_include_path()
. PATH_SEPARATOR
. '/var/www/web1/phpids/lib'
);

require_once 'IDS/Init.php';
$request = array(
'REQUEST' => $_REQUEST,
'GET' => $_GET,
'POST' => $_POST,
'COOKIE' => $_COOKIE
);
$init = IDS_Init::init('/var/www/web1/phpids/lib/IDS/Config/Config.ini');
$ids = new IDS_Monitor($request, $init);
$result = $ids->run();

if (!$result->isEmpty()) {
// Take a look at the result object
echo $result;
require_once 'IDS/Log/File.php';
require_once 'IDS/Log/Composite.php';

$compositeLog = new IDS_Log_Composite();
$compositeLog->addLogger(IDS_Log_File::getInstance($init));
$compositeLog->execute($result);

die('Go away!');
}

fin php

4 Links

http://www.howtoforge.com/intrusion-detection-for-php-applications-with-phpids

Pin It

Escribir un comentario


Código de seguridad
Refescar



Redes:



 

Suscribete / Newsletter

Suscribete a nuestras Newsletter y periódicamente recibirás un resumen de las noticias publicadas.

Donar a LinuxParty

Probablemente te niegues, pero.. ¿Podrías ayudarnos con una donación?


Tutorial de Linux

Filtro por Categorías