sexta-feira, 26 de novembro de 2010

Segurança de Dados: Solução ou Obstáculo

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 { 192.168.10.1, 10.1.15.20/24}

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/