Quando se projeta um ambiente seguro, a primeira solução que chega à mente é a compra de um hardware onde acredita-se que vai bloquear todos os acessos não autorizados, proteger a rede de dados e os usuários que dela depende. Entretanto, isto é apenas uma parte da solução e não a solução como um todo.
Para entender melhor, um sistema de segurança tem em sua composição três pilares: o hardware, as pessoas e as normas ou processos que regem o que e como serão feitas as atividades. Olhando do ponto de vista da segurança da informação como gestão, também é comum encontramos na literatura uma extensão deste conceito diluído da sigla CIDAL-Confidencialidade Integridade Disponibilidade Autenticidade e Legalidade.
A Confidencialidade garante que a informação deve ser disseminada somente para aqueles que realmente necessitam da informação. A Integridade garante que o controle da adulteração seja feito. Já a Disponibilidade controla o quanto e como a informação estará acessível no momento desejado. A Autenticidade prevê a autenticação para acesso a informação e a Legalidade auxilia a criar procedimentos, normas ou diretrizes que terão respaldo legal.
Retornando a figura do firewall, é bom ter em mente que é possível compor uma solução segura, proativa, inteligente e resistente a ataques usando diversos fornecedores como Microsoft ISA Server, Check Point, CISCO ASA, Juniper e muitos outros, mas também podemos ter um resultado muito bom com uma solução de firewall open source como o OpenBSD, um sistema operacional BSD (Berkeley Software Distribution) criado especificamente para a tarefa de firewall.
Estudando um pouco mais a fundo este modelo de firewall, verifica-se estruturas presentes no arquivo de configuração do OpenBSD (/etc/pf.conf) que facilitam a elaboração de um firewall. Este arquivo é lido no processo de inicialização do firewall ou interpretado pelo comando pfctl. São exemplos destas estruturas: macros, tabelas, regras de bloqueio previamente elaboradas e uma sintaxe de fácil entendimento. Fazemos uso de macros quando é desejado o uso de uma variável para guardar endereços IP ou representação de interfaces:
Servidores_Web=”{10.1.10.3, 10.1.10.4, 10.100.10.1, 192.168.20.1}”
Notebook_para_Gerenciamento=”192.168.1.10”
Interface_Externa=”fxp0”
Como os ambientes BSD possuem uma codificação de interface para cada fornecedor de hardware, veja que fxp0 representa uma interface de rede fabricada pela Intel e esta codificação pode ser depositada em uma macro para facilitar. Havendo outra placa deste mesmo fornecedor, o dispositivo encontrado seria fxp1 e assim em diante.
Quando se deseja algo mais flexível, com uma composição mais dinâmica, incluindo ou removendo endereços IP a qualquer momento, faz-se uso de estruturas chamadas de tabelas:
table
Observe que foi feito uso de um endereço de rede (10.1.15.20/24) junto com um endereço de host dentro da tabela. Como temos flexibilidade, pode-se em tempo de execução, excluir um endereço:
# pfctl -t Maquinas_Importantes -T delete 192.168.10.1
Ou incluir novos endereços:
# pfctl -t Maquinas_Importantes -T add 192.168.15.10
Pode-se ainda verificar o conteúdo de uma tabela:
# pfctl -t Maquinas_Importantes -T show
Veja como seria simples implementar regras mais complexas incluindo as linhas seguintes no arquivo /etc/pf.conf:
| 1 | Servidor_Web=”192.168.1.10” |
| 2 | Interface_Externa=”rl0’” |
| 3 | table <> |
| 4 | block in quick from <> |
| 5 | pass in on $Interface_Externa proto tcp to $Servidor_Web port www flags S/SA keep state \ (max-src-conn 150, max-src-conn-rate 10/5, overload <> flush) |
Ver-se com esta composição que:
ü As duas primeiras linhas definem o endereço do servidor Web e a interface de rede usada para mitigar o ataque;
ü A terceira linha define a tabela que será usada para bloqueio;
ü Na quarta linha pode-se fazer um bloqueio imediato (quick) de todos os endereços IP presentes nesta tabela;
ü A ultima linha faz diversas atividades, dentre elas deixa passar para o servidor Web somente às conexões com o protocolo tcp que respeitam uma regra previamente estabelecida: limite de conexões menor ou igual a 150 e sem superar a taxa de 10 conexões a cada 5 segundos. O desrespeito a esta regra, coloca o endereço IP do usuário dentro de uma lista de bloqueio e cancela as conexões existentes.
Imaginando um ambiente que tem como hardware um CISCO ASA, tem-se algo bem similar para o seu arquivo de configuração:
| 1 | ASA(config)# access-list conn-limit-acl extended permit tcp any host 192.168.1.10 eq 80 |
| 2 | ASA(config)# class-map conn-limit-class |
| 3 | ASA(config-cmap)# match access-list conn-limit-acl |
| 4 | ASA(config)# policy-map conn-limit-policy |
| 5 | ASA(config-pmap)# class conn-limit-class |
| 6 | ASA(config-pmap)# set connection embryonic-conn-max 150 per-client-max 10 |
| 7 | ASA(config)# service-policy conn-limit-policy interface EXT |
A primiera linha cria a access-list conn-limit-acl para permitir o acesso a porta 80 comprotocolo TCP para o servidor Web 192.168.1.10. A segunda linha cria um class-map, uma classe que auxiliará na análise do tráfego. Na terceira linha o comando match access-list identifica o tráfego que será analisado. A quarta e quinta linhas definem a política (policy) para enviar o tráfego para o AIP SSM (Advanced Inspection and Prevention Security Services Module). Na sexta linha define o número máximo de conexões TCP a 150 e limita o número de 10 conexões por host. Para concluir a sétima linha aplica a política na interface externa definida pelo nome EXT.
O que foi visto aqui é um pequeno leque do que vem a ser segurança da informação e deve-se ter em mente que manter um sistema seguro é acima de tudo manter as pessoas conscientes de que todos possuem um papel importante e que existem técnicas chamadas de Engenharia Social que testam, a cada segundo o quão seguro este sistema é, analisando o que muitos denominam como “aspecto comportamental do indivíduo”. Mas isto é tema para outro artigo.
Referências:
OpenBSD: www.openbsd.org
Filtro de pacotes do OpenBSD: http://www.openbsd.org/faq/pf/pt/tables.html
Os Pilares da Segurança: http://www.via6.com/topico/60533/os-pilares-da-seguranca
Microsoft ISA Server: http://www.microsoft.com/forefront/edgesecurity/isaserver/en/us/
CISCO ASA exemplos: http://informationsecuritytips.com/2010/07/cisco-asa-embryonic-tcp-connection-and-per-client-connection-limits-config-example/