Sobre o L2M

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.


Instalando o L2M

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

  • O primeiro passo é criar o usuário, para isso execute o seguinte comando (ao ser questionado sobre a senha, informe “l2mpass” sem aspas):
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;\""

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

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

  • Name: Nome do novo roteador
  • IP Addr: IP do roteador, será usado na consulta SNMP ou no SCRIPT
  • Query type: Selecione SNMP ou SCRIPT
  • Disabled router: SIM (deixar o roteador desabilitado enquanto finalizamos sua configuração)

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:

  • VLAN ID: número do ID da VLAN (1 a 4096)
  • VLAN Name: nome da VLAN (evite usar espaços)
  • Network: endereço de rede associado àquela VLAN (e.g. 10.0.0.0/24, 192.168.0.0/16, 172.16.32.0/23)
  • Router: escolha um roteador dentre os cadastrados anteriormente

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


Configurando o bloqueio no L2M

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.


Restringindo acesso à interface web

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

Conclusão

Esta é toda a configuração necessária para funcionamento do L2M! Agora você já pode acompanhar os gráficos de utilização da rede e automatizar o processo de bloqueio e desbloqueio de dispositivos, ambos via interface web do L2M. Caso você tenha qualquer problema na instalação ou uso do L2M, ou queira enviar requisição de novas funcionalidades, sinta-se estimulado a nos contactar, conforme descrito em contato.