II Workshop de Tecnologias de Redes do PoP-BA Mini-curso: Tratamento de Incidentes de Segurança com o TRAIRA www.pop-ba.rnp.br/wtr Realização: Apoio:
II WTR do POP-BA II Workshop de Tecnologias de Redes Ponto de Presença da RNP na Bahia Instrutor: Italo Valcy Monitor: Thiago Bomfim Material necessário para as práticas: Virtualbox (versão 4.1.0 ou superior) Máquinas virtuais disponibilizadas pelo instrutor (firewall.ova, Gerencia.ova, HostA.ova e HostB.ova) Importe cada uma dessas máquinas no Virtualbox (Arquivo > Importar Appliance), mas não as inicie ainda (veja a configuração abaixo antes). Antes de iniciar as máquinas, precisaremos alterar o endereço MAC da máquina Firewall pois ela será conectada diretamente à interface de rede do hospedeiro e, se não alterarmos, teremos problemas de MACs duplicados na rede. Para alterar o MAC da máquina Firewall clique com o botão direito do mouse sobre a máquina e escolha a opção Configurações ; em seguida escolha as opções de Rede e no Adaptador 1 clique em Avançado (D) e clique no botão de Refresh ao lado do MAC. Veja na figura abaixo:
Prática 01: Instalação e Configuração do NFCT-SNATLOG no Firewall Este laboratório visa apresentar aos alunos os passos para configuração do NFCT-SNATLOG, permitindo a geração dos logs de traduções NAT realizadas pelo Netfilter/IPTables. Parte 01: Instalação do NFCT-SNATLOG Os passos abaixo devem ser executados na máquina Firewall, a menos que outra máquina seja explicitamente citada. Faça o download do pacote do nfct-snatlog (já foi feito o download na pasta /root): wget http://www.pop ba.rnp.br/files/sw/nfct snatlog.tgz Instale as dependências (já estão instaladas): apt get install make gcc libnetfilter conntrack dev Compilação do software: tar xzf nfct snatlog.tgz cd nfct snatlog make make install Com os comandos acima, você terá instalado o NFCT-SNATLOG em /usr/sbin/nfct-snatlog. Para executá-lo precisaremos carregar alguns módulos do kernel: modprobe nf_conntrack modprobe nf_conntrack_ipv4 modprobe nf_conntrack_netlink E finalmente carregar o daemon: /usr/sbin/nfct snatlog daemon OBS: a configuração acima é volátil, o que significa que quando a máquina for reiniciada ela será perdida. Para carregar a configuração na inicialização do sistema, você deve criar um script no init.d (ou equivalente), porém essa configuração não será abordado no curso (na máquina virtual essa configuração foi feita no /etc/rc.local apenas para demonstração). Para testarmos o funcionamento do NFCT-SNATLOG, vamos monitorar os logs no Firewall e realizar uma conexão TCP de uma das máquinas clientes. Para isso, execute o seguinte comando no Firewall: tail f /var/log/syslog (para finalizar a visualização do log, tecle CTRL+C) Agora, na máquina Host A, execute o seguinte comando: wget http://www.pop ba.rnp.br/site/ Volte ao monitoramento do Firewall e verifique a geração dos logs (observe que deve demorar cerca de 120 segundos para a mensagem aparecer discuta com seus colegas sobre esse atraso) Parte 02: Envio dos logs para um servidor remoto Uma configuração importante para garantir segurança e escalabilidade em ambientes desse tipo é a implantação de um servidor de logs remoto. Nessa parte da prática, vamos configurar o Firewall para enviar os logs do NFCT-SNATLOG para o servidor de Gerencia. Para isso, na máquina Gerencia, precisaremos editar a configuração do syslog-ng. Para isso, edite o
arquivo /etc/syslog-ng/syslog-ng.conf e acrescente as seguintes linhas (elas já existem no final do arquivo para facilitar, então apenas descomente-as): source s_udp { udp(port(514)); }; filter f_nfct snatlog { facility(local4) and program( nfct snatlog ); }; destination d_nfct snatlog { file( /var/log/firewall/nfct snatlog ${YEAR}${MONTH}${DAY}.log group( www data )); }; log { source(s_udp); filter(f_nfct snatlog); destination(d_nfct snatlog); }; Em seguida, precisamos criar a pasta que armazenará os logs e setar algumas permissões: mkdir /var/log/firewall chown root.www data /var/log/firewall chmod 750 /var/log/firewall Agora precisamos reiniciar o daemon do syslog-ng: /etc/init.d/syslog ng restart Na máquina Firewall, edite o arquivo /etc/syslog-ng/syslog-ng.conf e acrescente as seguintes linhas (elas já existem no final do arquivo para facilitar, então apenas descomente-as): destination d_logserver { udp( 10.0.0.99 port(514)); }; filter f_nfct snatlog { facility(local4); }; log { source(s_src); filter(f_nfct snatlog); destination(d_logserver); }; Em seguida, reinicie o daemon do syslog para carregar /etc/init.d/syslog ng restart Para testar a configuração acima, execute um acesso na máquina Host A (comando wget) e monitore o log em Gerencia (/var/log/firewall/nfct-snatlog-xxxxx.log). OBS: Em um ambiente de produção, é recomendável a configuração do rotacionamento dos logs do Firewall, inclusive comprimindo-os. Essa configuração, no entanto, não será abordada neste minicurso. Prática 02: Instalação e Configuração do L2M em Gerencia Este laboratório visa apresentar aos alunos os passos para configuração do L2M na máquina Gerencia para coleta e armazenamento da tabela ARP do Firewall. Parte 01: Instalação do L2M Os passos abaixo devem ser executados na máquina Gerencia, a menos que outra máquina seja explicitamente citada. Faça o download do pacote do L2M: wget http://www.pop ba.rnp.br/files/sw/l2m.tgz Descompacte o tarball na pasta do servidor web: tar xzf /root/l2m.tgz C /var/www/ Precisamos criar o banco de dados para o L2M (apenas para ilustração, vamos usar a senha do banco wtr2011, porém em um ambiente de produção recomenda-se usar uma senha aleatória e forte, por exemplo criada através do utilitário mkpasswd). Os passos são os seguintes. - O primeiro passo é criar o usuário, para isso execute o seguinte comando (ao ser questionado sobre a senha, informe wtr2011 ): su postgres c createuser l2musr S D R P
- O próximo passo é criar o banco de dados sob a propriedade do novo usuário. Para isso, execute o seguinte comando: su postgres c createdb l2mdb O l2musr - Finalmente vamos dar permissão total sobre o banco criado para o usuário em questão: su postgres c psql c \ GRANT ALL PRIVILEGES ON database l2mdb TO l2musr;\ Agora, edite o arquivo /var/www/l2m/include/config.php e altere os parâmetros do banco de dados: $db_host = 'localhost'; $db_name = 'l2mdb'; $db_user = 'l2musr'; $db_pass = 'wtr2011'; O próximo passo é criar as tabelas no banco de dados (ao ser questionado pela senha, informe wtr2011 a mesma usada anteriormente): cd /var/www/l2m psql U l2musr d l2mdb h localhost f docs/create.pgsql.sql Acesse a interface do L2M e verifique se está funcionando corretamente (faremos a configuração na próxima seção). Para acessar a interface do L2M, utilize o IP do Firewall na interface eth0 (o comando ifconfig eth0 deve listar tal IP): http://<ip Firewall eth0>/l2m/ Precisamos configurar o poller do L2M. O poller é o script que periodicamente realizará as consultas nas tabelas ARP dos roteadores cadastrados e habilitados. Para habilitar o poller do L2M, adicione o script poller.php para execução no CRON, através dos seguintes comandos: cd /var/www/l2m/ chown root.root docs/cron.d l2m chmod +x docs/cron.d l2m mv docs/cron.d l2m /etc/cron.d/l2m Parte 02: Configurando as consultas no L2M A configuração do L2M que faremos consistirá nos seguintes itens: Adicionar os roteadores que monitoraremos Adicionar as VLANs Configurar os parâmetros para contenção (bloqueio) de hosts O primeiro passo é configurar os roteadores que iremos monitorar, através da opção Settings > Router Settings > Add Router. Adicionaremos o roteador Firewall, que será consultado via SCRIPT (linux-ssh.sh) e deixaremos ele desabilitado enquanto finalizamos a configuração. Os parâmetros de configuração são: Name: firewall IP Addr: 10.0.0.254 Query type: script Script path: linux-ssh.sh Disabled router: SIM (deixar o roteador desabilitado) Para que o script linux-ssh.sh funcione corretamente, necessitaremos executar comandos remotamente, usando o protocolo SSH. A configuração do SSH para esse ambiente é um pouco mais complexa que o usual (e.g. autenticação baseada em chave pública, restrição de comandos, etc.) e não será abordada nesse curso. Assim, as máquinas virtuais que você recebeu já estão preparadas para execução do script. Caso deseje entender a configuração, recomendamos a leitura da seguinte referência: http://www.pop-ba.rnp.br/site/l2mlinuxscripts
O próximo passo é configurar as VLANs que monitoraremos. Apesar de nosso cenário na prática não possuir VLANs, vamos criar três delas para representar a topologia de rede que idealizamos. Para isso acesse a opção Settings > VLAN Settings > Add VLAN, e crie as VLANs conforme parâmetros a seguir: VLAN ID: 100 VLAN Name: RedeExterna Network: <Informar a rede do laboratório (consulte o instrutor)> Router: firewall VLAN ID: 200 VLAN Name: RedeDMZ Network: 10.0.0.0/24 Router: firewall VLAN ID: 300 VLAN Name: RedeLabs Network: 172.16.0.0/24 Router: firewall Vamos voltar à configuração dos roteadores e habilitar a consulta ao Firewall: Settings > Router Settings > editar o firewall > desmarcar opção Disable router. Para testar o funcionamento do script, aguarde o tempo da próxima consulta (a cada 5 minutos) e acesse a tabela de estatísticas para ver os MACs armazenados (Stats > Stats by VLAN). Parte 03: Configurando o bloqueio no L2M Nessa seção vamos analisar uma configuração básica de contenção (bloqueio) no L2M. O bloqueio será feito em um servidor Linux, usando o firewall nativo Netfilter/IPTables. Nesse curso, alguns detalhes de configuração serão omitidos a fim de agilizar o processo. Outras formas de bloqueio são possíveis, a exemplo do bloqueio via EXPECT, ou até mesmo via SNMP. Caso tenha interesse em testar o bloqueio em outros ambientes, entre em contato com o PoP-BA para desenvolvermos scripts alternativos. Toda a configuração de chaves SSH e execução de comandos remoto já foi previamente realizada, bastando apenas alterar alguns parâmetros no L2M. Precisaremos editar a configuração do roteador (firewall) e das VLANs. Acesse Settings > Router Settings > editar firewall e configure os seguintes parâmetros: Block Script: block-linux-ssh.sh Unblock Script: unblock-linux-ssh.sh Acesse Settings > VLAN Settings > editar VLAN 100, 200 e 300, e configure os seguintes parâmetros: VLAN 100 Router interface: eth0 ACL Name: (deixe em branco) VLAN 200 Router interface: eth2
ACL Name: (deixe em branco) VLAN 300 Router interface: eth1 ACL Name: (deixe em branco) Agora vamos tentar bloquear um host através do formulário em Containment. Forneça os dados abaixo: MAC Address: 08:00:27:dd:22:04 VLAN: RedeLabs (VLAN 300) Block! Para testar se o bloqueio teve sucesso (além da mensagem de retorno na interface), vamos acessar a máquina Host A e checar se ela consegue acessar algum recurso na rede: ping c 4 10.0.0.99 Agora realize o desbloqueio na mesma tela do L2M e verifique se a máquina volta a ter acesso à rede. Prática 03: Instalação e Configuração do RT em Gerencia O RT é usado como base para instalação do TRAIRA. Você pode aproveitar um ambiente existe e apenas adicionar a extensão do TRAIRA ou configurar um novo ambiente dedicado ao tratamento de incidentes de segurança. A vantagem dessa segunda abordagem é que você pode ter um servidor com acesso mais restrito, aumentando a segurança do ambiente. Nesse mini-curso, o RT já encontra-se instalado e com configurações básicas. Um passo-a-passo para instalação do RT pode ser encontrado no seguinte endereço: http://certbahia.pop-ba.rnp.br/howtort O instrutor fornecerá uma visão geral sobre os passos de configuração. Acesse a interface do RT e verifique se está funcionando corretamente (faremos a configuração na próxima seção). Para acessar a interface do RT, utilize o IP do Firewall na interface eth0 (o comando ifconfig eth0 deve listar tal IP), usuário será wtr2011 e senha wtr2011 : http://<ip Firewall eth0>/rt/ Prática 04: Instalação e Configuração do TRAIRA em Gerencia Esta prática visa mostrar os passos necessários para instalação e configuração do TRAIRA na máquina Gerencia. Parte 01: Instalação do TRAIRA Faça o download do pacote do TRAIRA: wget http://www.pop-ba.rnp.br/files/sw/rt-traira.tgz Descompacte o pacote do TRAIRA no diretório raiz do RT: tar xzf /root/rt traira.tgz C / chown R root.root /usr/share/request tracker3.8 Parte 02: Configuração do TRAIRA
Caso o TRAIRA tenha sido instalado corretamente, você terá uma nova opção nos menus do RT, conforme pode ser visto na imagem abaixo. O TRAIRA estará acessível no menu principal do RT (menu à esquerda) ou através de Ferramentas > TRAIRA. As configurações necessárias serão listas abaixo. O primeiro passo é criar um fila que será usada para o tratamento de incidentes. Para isso, acesse o menu Configuração > Filas > Criar e informe as seguintes informações: Nome da Fila: Security Descrição: Tratamento de Incidentes de Segurança Endereço para resposta: security@gerencia.wtr-seg.pop-ba.rnp.br Endereço para comentário: security-comment@gerencia.wtr-seg.pop-ba.rnp.br Criar Além de criar a fila, gostaríamos de permitir a criação de chamados via e-mail. Para isso, precisaremos editar o arquivo /etc/aliases e acrescentar o seguinte (remove as entradas anteriores referentes ao alias security caso existam): security: /usr/bin/procmail a Security a correspond security comment: /usr/bin/procmail a Security a comment Não esqueça de executar o newalias para gerar os aliases acima: newaliases Agora definimos os filtros de criação de chamados de incidentes no procmail. Disponibilizamos uma versão básica de filtros do procmail no /root/configs, para ativá-la basta executar: cp /root/configs/procmailrc /etc/procmailrc Uma vez que a fila foi criada, vamos dar permissão para que qualquer usuário possa criar chamados nessa fila (um controle de acesso mais restritivo pode ser feito no procmail). Para isso, acesse o menu Configuração > Filas > Segurity > Direitos de Acesso do Grupo, no grupo Todos adicione a permissão CriarTiquete (basta selecionar essa opção e clicar em Salvar no rodapé da página). Em seguida, vamos informar as configurações básicas do TRAIRA, para isso acesse o menu
Ferramentas > TRAIRA > Configuracao e preencha os seguintes campos: Nome da Fila: Security Tratamento automático: Habilitado Mapeamento Net2NAT: Rede: 0.0.0.0/0 Disp. NAT: iptables Arq. Log: /var/log/firewall/nfct-snatlog-%y%m%d.log Add Net2NAT IP2MAC Config Consulta IP/MAC: URL de Consulta: http://localhost/l2m/query.php?ip=$ip&date=$date&time=$time Usuario p/ Consulta: (deixar em branco) Senha p/ Consulta: (deixar em branco) Realm p/ Consulta: (deixar em branco) IP2MAC Config Bloqueio/Desbloqueio de MACs: URL de bloqueio: http://localhost/l2m/block.php?mac=$mac&vlan=$vlan URL de desbloqueio: http://localhost/l2m/unblock.php?mac=$mac&vlan=$vlan Usuario p/ Bloq/Desb: (deixar em branco) Senha p/ Bloq/Desb: (deixar em branco) Realm p/ Bloq/Desb: (deixar em branco) Com os parâmetros acima, já termos uma configuração funcional do TRAIRA. Vamos agora criar um parser para testarmos as notificações. Para isso, acesse o menu Ferramentas > TRAIRA > Parsers e preencha os seguintes campos em Criar/Editar/Remover um parser : Nome do parser: certbahia-ssh-attack-teste From regex: certbahia@pop-ba.rnp.br Subject regex: Ataque ssh-brute force com origem em [0-9.]{7,15} Código do parser: pode usar o mesmo do exemplo, alterando apenas o número do AS, de 9999 para 53164. O código completo fica assim: my $SPC = '[[:space:]]'; my $IP = '[0 9.]{7,15}'; my $DATE = '[0 9 ]{10}'; my $TIME = '[0 9:]{8}'; my $PORT = '[0 9]+'; if ($line =~ /^53164$SPC\ $SPC($IP)$SPC\ $SPC($DATE)$SPC($TIME)${SPC}srcport$SPC($PORT)\b.*$/ ) { my ($date, $time) = $self >AdjustTimezone($2, $3, ' 0300'); return ($date, $time, $1, $4); } return undef; Salvar A fim de testar nossa configuração, vamos gerar algumas tentativas de ataque de força bruta SSH para um host de monitoramento que o instrutor criou. Verifique com o instrutor o endereço IP do sensor. Para realizar o ataque, foi criado um script simples nas máquinas Host A e Host B, o /root/ssh-brute-force.sh. Assim, execute os seguintes comandos em cada uma das máquinas HostA e HostB (simultaneamente): /root/ssh-brute-force.sh IP-SENSOR /root/user-list /root/pass-list Peça, então, para o instrutor reportar o incidente de segurança gerado para o TRAIRA que você configurou. Agora, acesse a interface web do TRAIRA e verifique o tíquete que foi gerado na fila Security.
Habilite o bloqueio automático, através do menu Ferramentas > TRAIRA > Acoes e na seção de Contencao marque a opção Bloquear Host. Gere outros incidentes de segurança com os mesmos passos anteriores e peça para o instrutor reportar novamente os incidentes de segurança. Verifique agora se o host foi bloqueado na mensagem do tíquete e também diretamente no firewall (use o comando iptables -L -n -v para listar as regras do Netfilter/IPTables). Boa prática! Em caso de dúvidas, não hesite em consultar o instrutor.