
Ocorreu-me fazer no roteador Cisco alguma aparência do conhecido pacote fail2ban, usando apenas o próprio roteador.
Funciona assim. As regras de interceptação são criadas na lista de acesso anexada à interface do roteador de Internet de borda. Quando uma regra é acionada, um evento é registrado. Cada linha desse evento contém um rótulo especial para facilitar a seleção. O log é analisado e todos os endereços IP que caem na armadilha são inseridos em um grupo de objetos especial. Esse grupo pode ser usado na mesma lista de acesso para banir o acesso de invasores a todos os endereços IP e portas da nossa rede.
Para entender este artigo, você precisa saber o que são listas de acesso e para que servem e também como usar grupos de objetos em listas de acesso.
Armadilhas da lista de acesso
Por exemplo, escrevemos uma regra para uma lista de acesso recebida, sob a qual todas as tentativas de acessar a porta telnet de nossos dispositivos pela Internet caem. Observe que no final da regra, um rótulo exclusivo "HONEYPOT001" é afixado. Em seguida, procuraremos no log.
ip access-list extended acl-WAN-In … deny tcp any any eq telnet log HONEYPOT001 …
É importante escolher os critérios certos para as armadilhas.
Tentativas de conexão externa pela porta 23 (telnet) são talvez as mais comuns. Nesse caso, o grupo de objetos será preenchido instantaneamente com endereços IP de bots de toda a Internet e a memória alocada para as listas de acesso simplesmente terminará.
Você pode capturar tentativas de conexão com seu equipamento na porta 22 (ssh). Eles são uma ordem de magnitude menor que o telnet. Você pode pegar tentativas de acessar qualquer um dos seus dispositivos.
Um grande número de bots rastreia na porta 7547, tentando se conectar usando o protocolo CPE WAN Management.
Outra opção seria capturar tentativas de usar o Smart Install Client ativado na porta 4786.
Você também pode definir uma interceptação na porta 80, selecionando um endereço IP no qual você não possui um servidor web. O principal aqui é que os robôs dos mecanismos de busca não se enquadram nela.
Aqui está um exemplo de uma armadilha em um endereço IP [192.0.2.10].
ip access-list extended acl-WAN-In … deny tcp any host 192.0.2.10 eq www log HONEYPOT002 …
Análise de Log
Logon no roteador, é claro, deve ser ativado com antecedência, então algo assim entra no log:
225435: Jan 11 08:57:13.838: %SEC-6-IPACCESSLOGP: list acl-WAN-In denied tcp 123.199.32.7(59472) -> 192.0.2.9(23), 1 packet [HONEYPOT001]
Vimos que foi feita uma tentativa de acessar a 23ª porta do nosso endereço IP [192.0.2.9] a partir do endereço IP externo [123.199.32.7]. O rótulo "HONEYPOT001" na linha também está presente. A propósito, [123.199.32.7] é um verdadeiro atacante apanhado enquanto escreve um artigo.
Para analisar o log, usaremos o Embedded Event Manager (EEM), uma ferramenta de automação de tarefas e ajuste de comportamento de software embutida no Cisco IOS.
No modo de configuração do roteador, crie um applet que analise o log e, quando o rótulo "HONEYPOT001" estiver na linha de log, corte o endereço IP do invasor e adicione esse endereço ao grupo de objetos BlackList dos hosts.
event manager applet honeypot event syslog occurs 1 pattern "HONEYPOT001" action 100 regexp "([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)" "$_syslog_msg" result IP_address action 200 if $_regexp_result eq "1" action 210 cli command "enable" action 220 cli command "conf t" action 230 cli command "object-group network hosts-BlackList" action 240 cli command "h $IP_address" action 250 cli command "end" action 260 syslog msg "IP address $IP_address added to blacklist" action 270 end action 300 cli command "exit"
- quando a próxima linha é encontrada no log com o rótulo "HONEYPOT001", ocorre um evento;
- no manipulador de eventos, da linha de log de acordo com o padrão "([0-9] + \. [0-9] + \. [0-9] + \. [0-9] +)") o endereço IP do invasor é cortado e atribuído endereço IP variável (ação 100);
- se o endereço for cortado com êxito e não ocorrerem problemas com a análise da linha (ação 200), serão executados comandos do console que adicionam o endereço IP ao grupo de objetos (ação 210 - 250);
- é feita uma entrada no log sobre o disparo da armadilha (ação 260).
Bloqueio de acesso
A primeira coisa que vem à mente é usar o grupo de objetos para bloquear completamente os atacantes em todos os recursos da nossa rede.
A regra de bloqueio deve estar na lista de acesso acima da regra com o trap, para que o endereço IP proibido não caia no trap novamente.
ip access-list extended acl-WAN-In … deny ip object-group hosts-BlackList any … deny tcp any any eq telnet log HONEYPOT001 …
Anistia
Mais cedo ou mais tarde, o grupo de objetos excederá todos os tamanhos aceitáveis; portanto, você terá que fazer uma anistia limpando endereços IP antigos dele. Para fazer isso, escrevemos um applet que fará isso, por exemplo, uma vez por semana à meia-noite de domingo.
No caminho da escrita, encontraremos duas armadilhas.
Você não pode excluir o grupo de objetos usado na lista de acesso. Portanto, primeiro você precisa descobrir o número da linha da lista de acesso na qual o grupo é usado. No nosso exemplo, essa é a linha 60. Usaremos esse número para remover a linha com o grupo da lista de acesso e, em seguida, retorná-la ao seu local original.
Você não pode criar um grupo de objetos vazio. Portanto, imediatamente ao criar um grupo, adicionaremos o endereço IP [255.255.255.255] a ele. Esse endereço nunca é encaminhado pelos roteadores que conectam a rede local a outras redes, portanto, não esperamos conexões dele.
event manager applet DeleteBlackList event timer cron name timer-cron1 cron-entry "@weekly" action 100 cli command "enable" action 200 cli command "conf t" action 210 cli command "ip access-list ext acl-WAN-In" action 215 cli command "no 60" action 220 cli command "exit" action 225 cli command "no object-group net hosts-BlackList" action 230 cli command "object-group net hosts-BlackList " action 240 cli command "host 255.255.255.255" action 245 cli command "exit" action 250 cli command "ip access-list ext acl-WAN-In" action 255 cli command "60 deny ip object-group hosts-BlackList any" action 260 cli command "exit" action 265 cli command "end" action 300 syslog msg "Completed" action 400 cli command "exit"
- remova a regra com o grupo de objetos da lista de acesso. (ação 210 - 220);
- excluir o próprio grupo (ação 225);
- crie o grupo de objetos novamente e insira o endereço IP de broadcast nele. (ação 230 - 245);
- retornamos a regra ao local antigo na lista de acesso. (ação 250 - 260).
O que fazer se as tags da lista de acesso não forem suportadas
Muitos IOSs, apesar de a função "Syslog Correlation ACL" ser declarada neles, não permitem a marcação de cadeias de caracteres da lista de acesso.
Nesse caso, você pode usar os chamados valores de hash gerados. (valor do hash gerado pelo dispositivo) que será adicionado às linhas da mensagem de log.
Se o IOS não suportar as duas opções, será necessário complicar um pouco a análise.
Modificamos a regra com uma armadilha na lista de acesso. Em vez de "log", usaremos "log-input".
ip access-list extended acl-WAN-In … deny tcp any any eq telnet log-input …
Nesse caso, informações sobre o nome da interface física e, possivelmente, sobre o endereço MAC do roteador vizinho que encaminhou o pacote também serão acessadas no log.
Por exemplo, a seguinte mensagem chega ao log:
Jan 11 00:20:23 172.25.100.43 2394768: Jan 10 20:20:22.808: %FMANFP-6-IPACCESSLOGP: SIP1: fman_fp_image: list acl-WAN-In denied tcp 123.199.32.7(7537) Port-channel1.88-> 192.0.2.9(23), 1 packet
Em seguida, a regra para ativar o evento terá este formato:
event syslog occurs 1 pattern "Port-channel1\.88-> 192\.0\.2\."
O que ler
Sobre a identificação inequívoca das regras que geraram a mensagem no log:
Correlação de syslog da ACLSobre o Embedded Event Manager:
Guia de configuração do Embedded Event Manager