O PHPIDS é um sistema de Detecção de Intrusos baseado em assinaturas por expressão regular, e impede que scripts maliciosos sejam executados no servidor.
Segue abaixo o guia de instalação e configuração.
Boa Sorte!
Por razões de segurança, vou instalar PHPIDS fora do DocumentRoot e, por isso, criar o diretório / var/www/web1/phpids:
mkdir /var/www/web1/phpids
Baixe a ultima versão do PHPIDS e extraia – vamos precisar apenas do diretório LIB:
cd /tmp
wget http://php-ids.org/files/phpids-0.5.tar.gz
tar xvfz phpids-0.5.tar.gz
cd phpids-0.5
mv lib/ /var/www/web1/phpids/
Entre no diretório IDS…
cd /var/www/web1/phpids/lib/IDS
…e de permissão de escrita para o apache na pasta tmp:
chown -R www-data:www-data tmp/
Agora vamos configurar o Config.ini do PHPIDS.
cd Config/
vi Config.ini
Usei a config default, alterando apenas os 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 = falseexceptions[] = __utmz
exceptions[] = __utmc; If you use the PHPIDS logger you can define specific configuration here
[Logging]
; file logging
path = /var/www/web1/phpids/lib/IDS/tmp/phpids_log.txt; email logging
; note that enabling safemode you can prevent spam attempts,
; see documentation
recipients[] = test@test.com.invalid
subject = “PHPIDS detected an intrusion attempt!”
header = “From: info@php-ids.org”
safemode = true
allowed_rate = 15; database logging
wrapper = “mysql:host=localhost;port=3306;dbname=phpids”
user = phpids_user
password = 123456
table = intrusions; If you would like to use other methods than file caching you can configure them here
[Caching]
; caching: session|file|database|memcached|none
caching = file
expiration_time = 600; file cache
path = /var/www/web1/phpids/lib/IDS/tmp/default_filter.cache; database cache
wrapper = “mysql:host=localhost;port=3306;dbname=phpids”
user = phpids_user
password = 123456
table = cache; memcached
;host = localhost
;port = 11211
;key_prefix = PHPIDS
;tmp_path = /var/www/web1/p
Vamos agora criar o arquivo /var/www/web1/web/phpids.php que irá chamar o PHPIDS (mais tarde, vamos colocar este arquivo para todos os nossos arquivos PHP automaticamente):
vi /var/www/web1/web/phpids.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);
}
?>
Agora, quando você chamar o arquivo em um navegador, (por exemplo, http://192.168.0.100/phpids.php), você verá uma página em branco. Mas se você tentar anexar alguns parâmetros maliciosos para a URL (por exemplo, http://192.168.0.100/phpids.php?test =% 22% 3EXXX% 3Cscript% 3Ealert (1)% 3C/script% 3E), o PHPIDS irá detectar presente e imprimir as suas conclusões no navegador:
Agora temos de encontrar uma maneira de chamar o PHPIDS antes dos sites em PHP.Há duas maneiras de fazer isso.Por exemplo, se nós chamamos o script info.php em um navegador, o PHP iria executar o phpids.php primeiro e, depois, o info.php, (sem modificar o info.php).
Podemos fazer isso usando o parâmetro PHP’s auto_prepend_file no nosso php.ini (esta é uma definição global que é válido para todos os web sites PHP no servidor), ou em um .htaccess (esta é uma configuração válida apenas para o web site em questão):
php.ini
Abra o seu php.ini…
vi /etc/php5/apache2/php.ini
…e procure pela string “prepend_file”.Altere para:
[...]
auto_prepend_file = /var/www/web1/web/phpids.php
[...]
Restarte o apache:
/etc/init.d/apache2 restart
.htaccess
Em vez de alterar o php.ini (que é uma mudança global, ou seja, a mudança é válida para todos os sites que utilizam PHP no servidor), você pode usar o arquivo .htaccess (dessa forma apenas os sites que tiverem esse arquivo e uma configuração no apache chamarão o PHPIDS antes):
Crie um arquivo .htaccess…
vi /var/www/web1/web/.htaccess
…e adicione nele:
php_value auto_prepend_file /var/www/web1/web/phpids.php
Certifique-se que o vhost para o site em /var/www/web1/web contenha a string (caso contrário, o .htaccess será ignorado):
AllowOverride All
Crie o arquivo info.php…
vi /var/www/web1/web/info.php
…com este conteúdo:
phpinfo();
?>
Chame esse arquivo em um navegador (http://192.168.0.100/info.php), e você verá a saída normal do phpinfo ().
Agora se anexarmos alguns parâmetros maliciosos para a URL (por exemplo, http://192.168.0.100/info.php?test =% 22% 3EXXX% 3Cscript% 3Ealert (1)% 3C/script% 3E), você deverá encontrar um relatório PHPIDS antes do phpinfo () (porque o PHP /var/www/web1/web/phpids.php foi executado antes do /var/www/web1/web/info.php):
Cheque os logs em/var/www/web1/phpids/lib/IDS/tmp/phpids_log.txt, você deve ver algo nele:
cat /var/www/web1/phpids/lib/IDS/tmp/phpids_log.txt
“192.168.0.200″,2008-06-04T17:36:08+02:00,54,”xss csrf id rfe lfi”,”REQUEST.test=%5C%22%3EXXX%3Cscript%3Ealert%281%29%3C%2Fscript%3E GET.test=%5C%22%3EXXX%3Cscript%3Ealert%281%29%3C%2Fscript%3E”,
“%2Finfo.php%3Ftest%3D%2522%253EXXX%253Cscript%253Ealert%281%29%253C%2Fscript%253E”
Era isso!
*Traduzido originalmente de http://www.howtoforge.com/intrusion-detection-for-php-applications-with-phpids
Sem comentários ainda até o momento
Deixe um comentário
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <pre> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>






