O L2M (Layer 2 Manager) é um software desenvolvido pelo CERT.Bahia em parceria com a Universidade Federal da Bahia, cujo objetivo primordial é manter um histórico sobre a tabela ARP dos roteadores de uma instituição. De posse desse dado, é possível determinar por exemplo a média de computadores que acessam a rede diariamente, o horário de entrada e saída de um equipamento na rede, mobilidade dos dispositivos entre subredes (VLANs), dentre outras informações. No contexto do tratamento de incidentes de segurança (TRAIRA), em redes que não possuem associação direta de endereços IP por dispositivo (ou nas quais essa associação pode ser facilmente burlada), esse histórico é indispensável para localizar o dispositivo que de fato causou o incidente.
Os passos abaixo devem ser executados na máquina de gerência (conforme discutimos no Passo-a-passo para a instalação do TRAIRA), a menos que outra máquina seja explicitamente citada. Optamos por ilustrar os passos de forma que eles possam ser reproduzidos a partir de uma sessão SHELL no seu servidor GNU/Linux.
Faça o download do L2M:wget http://www.pop-ba.rnp.br/files/sw/l2m.tgz
Descompacte o tarball na pasta do servidor web:
tar -xzf l2m.tgz -C /var/www/
Precisamos agora criar um banco de dados PostgreSQL para o L2M (apenas para ilustração, vamos usar a senha do banco “l2mpass”, 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 (esses passos devem ser executados no servidor em que o banco Postgres está instalado, que pode ou não ser na máquina de gerência):
su - postgres -c "createuser l2musr -S -D -R -P"
su - postgres -c "createdb l2mdb -O l2musr"
su - postgres -c "psql c \"GRANT ALL PRIVILEGES ON database l2mdb TO l2musr;\""
De volta ao servidor de gerência, edite o arquivo /var/www/l2m/include/config.php
e altere os
parâmetros do banco de dados:
$db_host = 'servidor-banco.domain.tld'; $db_name = 'l2mdb'; $db_user = 'l2musr'; $db_pass = 'l2mpass';
O próximo passo é criar as tabelas no banco de dados (ao ser questionado pela senha, informe “l2mpass” - a mesma usada anteriormente):
cd /var/www/l2m psql -U l2musr -d l2mdb -h servidor-banco.domain.tld -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 servidor de gerência no qual o software foi instalado:
http://<IP-servidor-gerencia>/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
A configuração do L2M que faremos consistirá nos seguintes itens:
O primeiro passo é configurar os roteadores que iremos monitorar, através da opção
Settings > Router Settings > Add Router. O tipo de monitoramento pode variar entre SCRIPT
ou SNMP. No monitoramento via SCRIPT você desenvolve um script (via shell script ou expect), ou
utiliza algum script pronto, que consulta a tabela ARP do equipamento e retorna uma lista de tuplas
IP e MAC dos dispositivos atualmente acessando a rede. Já na consulta via SNMP, utilizamos o
OID 1.3.6.1.2.1.3.1.1.2
(definido na RFC1213-MIB) para obter essa mesma lista.
Para adicionar um novo roteador, informe os seguintes parâmetros:
Os parâmetros restantes dependem do tipo de consulta que será utilizada. Para configurar a consulta via SNMP você precisará informar a comunidade (community) e a versão do protocolo (versão 1, 2 ou 3). Para a consulta via SCRIPT, selecione o caminho do script, Script path, e informe uma lista de parâmetros extra que serão enviados ao script (já será enviado o IP do roteador). Distribuímos junto ao L2M um script para consulta da tabela ARP em roteadores GNU/Linux via SSH (com autenticação baseada em chave), caso tenha interesse em usar esse script confira a configuração necessária em Scripts Linux do L2M.
O próximo passo é configurar as VLANs que serão monitoradas. Na modelagem do L2M, cada VLAN possui um endereçamento IP diferente a fim de facilitar o controle de acesso. Caso sua instituição não adote o esquema de separação da rede em VLANs, ainda assim poderá criar as VLANs no L2M para representar a topologia idealizada. Atente-se para o fato que cada VLAN (ou subrede) é roteada em apenas um roteador (o gateway padrão daquela VLAN/subrede). Esse roteador é o que será configurado abaixo. Para isso acesse a opção Settings > VLAN Settings > Add VLAN, e crie as VLANs conforme parâmetros a seguir:
10.0.0.0/24
, 192.168.0.0/16
, 172.16.32.0/23
)Finalizado a adição das VLANs/subredes a monitorar, voltaremos à configuração do roteador para ativar a coleta da tabela ARP. Para isso, acesse Settings > Router Settings > escolha o roteador em questão > desmarcar opção “Disable router” > Save
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).
Uma das etapas no processo de tratamento de incidentes de segurança é a contenção do host envolvido no incidente. O L2M suporta o tipo mais simples de contenção que é o bloqueio do host o roteador da rede em questão. Para uma discussão mais detalhada sobre a etapa de contenção e os tipos possíveis, recomenda-se a leitura do artigo “Tratamento Automatizado de Incidentes de Segurança da Informação em Redes de Campus”, seção 3.3 (veja aqui).
Aqui listamos instruções para bloqueio em cenários já testados: Bloqueio L2M em roteadores Linux
Diversas formas de bloqueio são possíveis, a exemplo do bloqueio via EXPECT, ou até mesmo via SNMP. O L2M é apenas um frontend que abstrai o tipo de bloqueio específico, implementado a partir de um comando no servidor. Caso tenha interesse em testar o bloqueio em outros ambientes, entre em contato com o CERT.Bahia para desenvolvermos scripts alternativos.
É interessante que você configure seu servidor web (e.g. apache) para restringir o acesso ao L2M, uma vez que ele possui funcionalidades importantes e perigosas. Um exemplo de configuração para esse bloqueio é mostrada abaixo:
<Directory "/var/www/l2m"> AuthType Basic AuthUserFile /var/www/l2m/.htpasswd AuthName 'restricted' Require valid-user Order Deny,Allow Deny from all Allow from 10.1.0.0/24 Allow from 192.168.100.0/24 </Directory>