19
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 - Fail2ban, fail2sql e googlemaps (PT Language)

Embed Size (px)

Citation preview

Page 1: IT security  - Fail2ban, fail2sql e googlemaps (PT Language)

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

Page 2: IT security  - Fail2ban, fail2sql e googlemaps (PT Language)

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)

Page 3: IT security  - Fail2ban, fail2sql e googlemaps (PT Language)

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

Page 4: IT security  - Fail2ban, fail2sql e googlemaps (PT Language)

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

Page 5: IT security  - Fail2ban, fail2sql e googlemaps (PT Language)

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/

Page 6: IT security  - Fail2ban, fail2sql e googlemaps (PT Language)

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

Page 7: IT security  - Fail2ban, fail2sql e googlemaps (PT Language)

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());

Page 8: IT security  - Fail2ban, fail2sql e googlemaps (PT Language)

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.

Page 9: IT security  - Fail2ban, fail2sql e googlemaps (PT Language)

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())";

Page 10: IT security  - Fail2ban, fail2sql e googlemaps (PT Language)

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

Page 11: IT security  - Fail2ban, fail2sql e googlemaps (PT Language)

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

Page 12: IT security  - Fail2ban, fail2sql e googlemaps (PT Language)

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>

Page 13: IT security  - Fail2ban, fail2sql e googlemaps (PT Language)

Google maps

Page 14: IT security  - Fail2ban, fail2sql e googlemaps (PT Language)

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

Page 15: IT security  - Fail2ban, fail2sql e googlemaps (PT Language)

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.

Page 16: IT security  - Fail2ban, fail2sql e googlemaps (PT Language)

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';

?>

Page 17: IT security  - Fail2ban, fail2sql e googlemaps (PT Language)

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.

Page 18: IT security  - Fail2ban, fail2sql e googlemaps (PT Language)

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 ->

Page 19: IT security  - Fail2ban, fail2sql e googlemaps (PT Language)

RESULTADO FINAL