Upload
carlos-domingues
View
81
Download
5
Embed Size (px)
Citation preview
By Carlos Domingues (cabdomingues)
IT Security - Como criar mapas (suportados no Google maps) com a geolocalização dos atacantes usando o fail2ban / fail2sql / fail2ban-geo
IT Security - Como criar mapas (suportados no Google maps) com a geolocalizaçãodos atacantes usando o fail2ban / fail2sql / fail2ban-geo
Objetivo: Aumentar a segurança da rede informáticaBloquear de forma automática tentativas de acesso indevido através de vários protocolos:
ex. smtp, imap, ssh, ftp, etc., etc. Facilitar a análise dessas tentativas
Solução: Fail2ban – http://www.fail2ban.orgFail2sql – http://fail2sql.sourceforge.netFail2ban-geo - PHP interface - http://www.byteme.org.uk/2014/04/21/ban-hammer-fail2ban-
geo-ip-on-google-maps/
Pre-requisitos: Servidor com iptables instaladoServidor Mysql disponívelApache web server (ou outro que interprete PHP e aceda a BDs Mysql)Conta no Google (para criar a API de autenticação aplicacional)
Fail2ban
• Detectar tentativas de acesso indevido à rede (através de análise de logs de smtp, imap, ftp, ssh, etc.)
Fail2sql• Registar essas
tentativas numa base de dados mysql para análise posterior
Fail2geo & Google maps
• Usar o fail2ban-geo para representar de forma geolocalizadastodas as tentativas de acesso indevido
Fail2ban - install
• Dependendo da distribuição de Linux, o processo de instalação poderá ser diferente• yum install fail2ban
• apt-get install fail2ban
• Extrair código from tar.gaz and ./configure / make / make install
Etc..
Alguns guias de instalação do Fail2ban
https://www.digitalocean.com/community/tutorials/how-to-install-and-use-fail2ban-on-ubuntu-14-04
https://www.digitalocean.com/community/tutorials/how-to-protect-ssh-with-fail2ban-on-centos-6
https://help.ubuntu.com/community/Fail2ban
Fail2sql - install
Fail2SQL é escrito em PHP e usa o serviço do MaxMind GeoIP PHP API para dar informação geográfica do IP.
Os dados são guardados numa BD MySQL
• Name
• Protocol
• Port
• IP
• Count (total banned)
• Longitude
• Latitude
• Country Code
• Geo Data (city, country)• NOTA cabdomingues : Adicionei mais uma linha chamada timestamp (datetime) para registar a data em que o IP foi banido.
Ver mais informação em https://www.samculley.co.uk/log-fail2ban-bans-to-mysql-using-fail2sql/ e http://fail2sql.sourceforge.net/
Fail2sql - install
O Fail2SQL instala-se de forma muito simples:
1º download
wget http://fail2sql.sourceforge.net/fail2sql-1.0.tar.gz
2º untar
tar –zxvf fail2sql-1.0.tar.gz
3º execute
mv fail2sql-1.0/* /usr/share/fail2ban/fail2sql/bin/ //colocam-se os ficheiros numa pasta mais adequada
/opt/fail2sql-1.0/fail2sql –u //faz o update da base dados GeoIP
/opt/fail2sql-1.0/fail2sql –l //lista os Ips banidos
Fail2sql – config
Editar o ficheiro /usr/share/fail2ban/fail2sql/bin/file2sql(neste caso está em /usr/share/fail2ban/fail2sql/bin. Pode estar noutro lado qualquer, dependendo da pasta de instalação)
Alterar as configurações de acesso ao mysql, que deverão ser criadas (ver páginas seguintes)
$home = "/usr/share/fail2ban/fail2sql/bin";
$link = mysql_connect('srv-nomeservidor_mysql', 'fail2ban_user', ‘change_password')
or die('Could not connect: ' . mysql_error());
Fail2sql – install db
CREATE TABLE `fail2ban` (`id` int NOT NULL AUTO_INCREMENT,`name` text NOT NULL,`protocol` varchar(4) NOT NULL,`port` int(11) NOT NULL,`ip` varchar(20) NOT NULL,`count` int(11) NOT NULL,`longitude` varchar(20) DEFAULT NULL,`latitude` varchar(20) DEFAULT NULL,`country` varchar(5) DEFAULT NULL,`geo` varchar(255) DEFAULT NULL,`timestamp` datetime DEFAULT NULL, //nova coluna adicionada cabdominguesPRIMARY KEY (`id`)
) ENGINE=MyISAM;
Criar user específico na BD para este serviço (ex. file2ban_user) e dar as permissões adequadas.
Fail2sql – customize
Como adicionei mais um campo (datetime) na BD, pretendo que esse campo seja preenchidocom a data de registo. Alterar o script fail2sql e adicionar mais um campo nos inserts (que é a data atual – now() )
Linha 58 :-
$query = "INSERT INTO `fail2ban` values ('', '".$name."', '".$protocol."', '".$port."', '".$ip."', '1', '".$geoip->longitude."', '".$geoip->latitude."', '".$geoip->country_code."', '".$geoip->city.", ".$geoip->country_name."', NOW())";
Linha 61:-
$query = "INSERT INTO `fail2ban` values ('', '".$name."', '".$protocol."', '".$port."', '".$ip."', '1', '', '', '', '', NOW())";
Fail2ban
• Pressupondo que o Fail2ban está corretamente configurado, a única alteração para este efeito (usar o fail2sql) será adicionar a linha abaixo identificada no ficheiro de configuração da ação do iptables:
ex. /etc/fail2ban/action.d/iptables.conf
actionban = iptables -I fail2ban-<name> 1 -s <ip> -j <blocktype> //esta linha supostamente já deve existir
/usr/share/fail2ban/fail2sql/bin/fail2sql <name> <protocol> <port> <ip> //esta deve ser adicionada
Esta linha deve ser customizada de acordo com a directoria de instalação do fail2sql (ver página Fail2sql -install)
• Restart fail2ban service
NOTA:
Nesta fase, os IPs banidos pelo fail2ban já devem estar a ser inseridos na base de dados mysql.
Se isso não acontecer, rever as configurações de acesso à BD mysql no script fail2sql e rever as configurações do fail2ban (iptables action) /etc/fail2ban/action.d/iptables.conf
Google mapsPara poder usar os mapas Google, temos de criar em primeiro lugar, uma chave de API:
1º go to https://console.developers.google.com/project2º criar novo projeto3º No menu de APIs e autenticação, escolher “Credenciais”
4º e depois criar “Chave para aplicativos do navegador”Será esta chave que deve ser usada na linha 8 do index.php (script PHP do fail2ban-geo)
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&sensor=false"></script>
Google maps
Fail2ban-geo - install
Download dos ficheiros do fail2ban-geo (chamei-lhe assim, mas o autor chama-lhe banhammer).
http://static.byteme.org.uk/banhammer.tar.gz
Extrair todos os ficheiros para uma área do apache (dentro da zona publica - html)
tar –zxvf banhammer.tar.gz
mv banhammer/* /var/www/html/fail2ban-geo/
Neste caso a minha pasta de instalação vai ser : /var/www/html/fail2ban-geo/ e o endereço de acesso
http://nome_do_servidor/fail2ban-geo
Fail2ban-geo – customize
Editar index.php e adicionar a chave do Google:
Depois de criar “Chave para aplicativos do navegador” no google temos de adicionar esta chave na linha 8 do index.php (script PHP do fail2ban-geo)
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&sensor=false"></script>
Nota: Qualquer erro que aconteça ao gerar o mapa do Google pode estar relacionado com este ponto.
Fail2ban-geo – customize
Edit dbinfo.php
<?php //aconselho a adicionar php a seguir ao <? para evitar erros por causa dos short tags do php.ini. O autor tinha apenas <?
$db_host = '127.0.0.1'; //ip do servidor de mysql (pode nao ser o mesmo do apache)
$db_user = 'fail2ban_user';
$db_pwd = ‘change_password';
$database = 'fail2ban';
$table = 'fail2ban';
?>
Fail2ban-geo – customize
Edit getmarkers.php
Como eu adicionei um campo (timestamp) na BD Myssql, com a data na qual este IP foi banido, vou configurar o meu sistema para apenas mostrar o mapa com as localizações dos ataques dos últimos 3 dias:
$query = "SELECT * FROM $table WHERE timestamp >= ( CURDATE() - INTERVAL 3 DAY )";
Adicionei a esta query a condição WHERE timestamp >= ( CURDATE() - INTERVAL 3 DAY )"; para ver no mapa apenas os ultimos 3 dias. Casocontrário o mapa ficava muito preenchido e ilegível.
Fail2ban-geo – customize
Edit maps.js
Uma informação que para mim é importante na alálise das tentativas de acesso indevido é saber qual o ISP (Internet Service Provider) de onde vêm os ataques.
Uma forma muito simples, mas eficaz, é usar um outro serviço (o db-ip.com):
Assim sendo, no mapa produxido pelo maps.js alterei a linha, adicionando um link novo:
var html = "<b>" + type+ " ATTACK" + "</b><br />"+name + "<br/><a href='https://db-ip.com/" + address + "'>Mais INFO " + "</a> ou <a href='http://whois.domaintools.com/" + address + "'> WHOIS</a> sobre </a>" + address;
O efeito que se consegue é este
e ao clickar nos links, temos toda a informação que precisamos ->
RESULTADO FINAL