Site hosted by Angelfire.com: Build your free website today!

HACKER

FIRE WALL


uma das grandes preocupações na área de segurança de redes é a vulnerabilidade de um computador, que pode comprometer as transmissões pelo meio físico da rede na qual está ligado. Muito se tem feito para que o host (equipamento computacional) esteja seguro isoladamente, impedindo o acesso indevido a seus dados e monitorando qualquer tentativa de invasão. Entretanto, um outro método tem se mostrado bastante eficiente: impedir que informações indesejadas entrem na rede como um todo.

Não é um método substituto à segurança do host, mas complementar, e consiste no seguinte: na ligação da rede interna com a Internet, instala-se um equipamento que permitirá, ou não, a entrada e saída de informação, baseado em uma lista de restrições e permissões, devidamente configurada para suprir as necessidades básicas de comunicação da rede interna com a Internet e vice-versa. Nem mais, nem menos. Esta configuração é a chave do sucesso ou fracasso de um firewall.

É importante lembrar que o firewall deve estar presente em todas as conexões da rede interna com a Internet. Não adianta nada colocar um firewall super sofisticado na ligação do backbone se, dentro da rede interna, existir um micro com um modem conectado em outra rede...

Em tempo: Firewall não é "Parede contra fogo", como muitos dizem, e sim "Parede de fogo", feita para impedir a passagem de alguém (ou de algo). Mas isso é só um detalhe... Tem gente que ainda chama CD-Rom de CD-Room... ;-)

Aviso: É extremamente recomendado que se tenha conhecimentos de TCP/IP: endereçamento IP, portas de conexão e pacotes TCP/UDP/ICMP, antes de prosseguir na leitura desta página.

 

A Filtragem de Pacotes

Essa é a maneira mais simples de se construir um firewall. Geralmente utilizadas em roteadores, as listas de acesso têm uma ótima relação custo x benefício: os roteadores já possuem estas facilidades, basta sentar e aprender a configurá-los; a filtragem é bem eficiente, invisível e rápida (se o roteador for de boa qualidade).

Mas então, o que vamos configurar? Os roteadores (que toda rede com conexão à internet possui) têm um papel muito simples: interligam duas redes e fazem o transporte de pacotes de informação de uma rede para outra, conforme sua necessidade. Mas muitos destes roteadores, além de identificar o destino do pacote e encaminhá-lo na direção certa, eles checam ainda: a direção dos pacotes; de onde veio e para onde vai (rede interna e Internet); endereço de origem e destino; tipo de pacote; portas de conexão; e flags do pacote.

Estes pontos de conexão da Internet com a rede interna podem receber uma série de regras para avaliar a informação corrente. São as listas de acesso que definem o que deve e o que não deve passar por este ponto de conexão. Elas são mais ou menos assim:

[nº da regra] [sim/não] [protocolo] [origem] [destino] [opções]

A opção "sim/não" equivale a "permitir a passagem do pacote/negar a passagem do pacote" e em "opções" definiremos os flags do pacote e portas de destino. Claro, esta é uma generalização das sintaxes mais comuns, o que nos permite ter uma idéia geral de como isto pode ser configurado. Consulte o manual do seu roteador para checar a sintaxe correta das listas de acesso. Algumas coisas podem estar fora de ordem, portanto, é melhor entender o conceito e não tentar copiar...

Vamos supor que eu queira impedir o acesso à minha rede interna para que não seja possível uma conexão Telnet (pacotes TCPs da porta 23) com meus hosts (pelo menos as conexões vindas da Internet). Este filtro, logicamente, deveria ser colocado na interface de entrada dos pacotes externos na rede interna. Pela sintaxe do exemplo, ficaria assim:

[nº da regra] [sim/não] [protocolo] [origem] [destino] [opções]
Regra #1 Não TCP Qualquer Interno Porta 23

Ou seja, negar todos os pacotes TCP para a porta 23 vindos da Internet em direção à qualquer máquina da rede interna. Isto funciona muito bem! Mas vamos supor que, em algum canto da Internet, exista um funcionário da minha empresa que precise abrir sessões Telnet. Ele vai ficar meio chateado comigo... ;-) Então poderíamos fazer o seguinte: procurar saber *exatamente* de onde ele está tentando se conectar e permitir a entrada dos seus pacotes.

[nº da regra] [sim/não] [protocolo] [origem] [destino] [opções]
Regra #1 Não TCP Qualquer Interno Porta 23
Regra #2 Sim TCP 200.254.36.147 Interno Porta 23

Dessa forma, os pacotes vindo de 200.254.36.147 (isto é apenas um exemplo!) poderiam passar pelo roteador. É uma brecha na segurança? Sem dúvida! Mas cabe a este funcionário tomar conta do seu computador, impedindo que ataques se originem debaixo do seu nariz...

Um detalhe: precisamos criar uma regra nova para cada restrição ou permissão? Não, necessariamente. Se duas restrições não forem excludentes (o que NÃO é o caso do exemplo acima) elas podem fazer parte da mesma regra (i.e., terem o mesmo número). Mas, mais uma vez, é melhor consultar o manual do seu roteador para certificar-se de "como" ele dá prioridade às regras.

Outro detalhe: baseado nesta ordem, podemos definir uma política para a segurança da rede. A primeira opção seria liberar tudo e negar os serviços perigosos; a segunda seria negar tudo e liberar os serviços necessários. Sem sombra de dúvidas, a segunda é mais segura, entretanto, os funcionários da rede interna podem precisar acessar livremente à Internet como forma de trabalho, e a manutenção desta lista seria tão trabalhosa, visto a proliferação de programas Internet que, em pouco tempo estaríamos completamente perdidos em um emaranhado de regras sem sentido...

Então vamos pelo caminho mais simples, negar apenas os serviços perigosos. Não entrarei no mérito do "por quê" um serviço é considerado perigoso. Seria uma discussão sem fim. Então vamos nos prender a um pressuposto simples: os serviços disponibilizados em portas menores que 1024 são perigosos. Caso não saiba, estas portas são destinadas a serviços que precisam ser executados com privilégios de root (o todo poderoso), e o comprometimento de um serviço nesta porta estaria pondo as chaves de casa na mão do ladrão. (obs: os serviços NFS, porta 2049 e X-window, porta 6000, apesar de não estarem rodando nas portas privilegiadas, são considerados perigosos demais e também serão bloqueados)

[nº da regra] [sim/não] [protocolo] [origem] [destino] [opções]
Regra #1 Não UDP Qualquer Interno Porta 2049
Regra #1 Não TCP Qualquer Interno Porta 6000
Regra #1 Não UDP/TCP Qualquer Interno Porta < 1024

A liberação de todas as portas altas é necessária porque os clientes dos usuários da rede interna (browsers, mails, telnets etc.) utilizam uma infinidade delas. Seria impossível (ou quase) liberar apenas as necessárias... Aparentemente estas regras resolveriam o problema, não fosse o seguinte fato: os servidores "geralmente" são executados em portas baixas (<1024), mas nada impede que um funcionário da rede execute um servidor de Telnet (que geralmente fica na porta 23), por exemplo, na porta 3456... Não pense você que isto é muito difícil de acontecer. Muita gente se utiliza deste método para escapar justamente das limitações impostas pelo firewall da sua empresa. Para eles é ótimo, pois podem navegar pela rede da empresa sem estar fisicamente lá, baixar arquivos, tirar relatórios, modificar configurações, uma maravilha! Inclusive para os hackers! Muitos gerentes de rede ficaram carecas por causa disso!

Mas, como disse lá em cima, os roteadores verificam também um tal de "flags do pacote". Que diabos é isto? Um flag é uma sinalização entre os computadores intercomunicantes que identificam alguns estados em que o pacote se encontra. Analisaremos um estado bem interessante (não, o pacote não está grávido!): o flag ACK! O ACK (de 'acknowledgment') identifica que este pacote é uma resposta a um pedido, ou seja, que pertence a uma conexão já existente. Os pedidos de conexão originais não possuem o flag ACK. Aí está a chave para o bloqueio da conexão nos servidores dos funcionários irresponsáveis.

[nº da regra] [sim/não] [protocolo] [origem] [destino] [opções]
Regra #1 Sim IP Interno Qualquer
Regra #2 Sim TCP Qualquer Interno Flag ACK

Desta forma, todos os pacotes com o flag ACK ativado poderiam entrar na rede interna, mas os outros (que muito provavelmente estariam fazendo uma tentativa de conexão) seriam bloqueados. É importante lembrar que estas regras se aplicam a cada interface do roteador, ou seja, a regra 1 seria aplicada na interface do roteador com a rede interna e, a número 2, na interface do roteador com a Internet. O sentido em que a informação passa pelo roteador deve ser levado (e muito) em consideração.

Bom, então vamos dormir sossegados, que já está tudo resolvido... não é? NÃO! Primeiro que com este truque do ACK só podemos impedir a passagem do pacote TCP. O UDP não possui este flag! O que fazer? Seja radical: proíba todos os pacotes UDP. Se não puder fazer isso, libere-os e reze. Entende agora porque o firewall é apenas um complemento para a segurança do host?

O segundo motivo para a preocupação é o FTP. Se você precisa de FTP na sua rede, vamos queimar um pouco as pestanas. Isto é um inferno para os firewalls... Os clientes de FTP (assim como todos os outros clientes) iniciam a comunicação com uma porta "local" alta, vamos supor, 2030, direcionada à porta 21 do servidor de FTP do qual se deseja baixar o arquivo. Até aí tudo bem, estamos dentro da última regra imposta pela filtragem de pacotes. O problema é o seguinte: a conexão FTP usa duas portas! Uma para controle e outra para a transmissão dos arquivos. Você, ao se conectar no servidor de FTP (porta local 2030, porta remota 21), os computadores negociam, através das portas 2030/21, uma porta local para a transferência do arquivo, vamos supor 2055, que receberá o arquivo do servidor FTP originado na porta 20. Só que, quem faz o pedido de conexão na porta 2055 é o servidor FTP, portanto, o pacote tentará entrar na rede em uma porta alta sem o flag ACK acionado. Seria barrado no ato!

O fator principal para esta bagunça é a aleatoriedade com que os programas escolhem uma porta local para a transmissão do arquivo. O único jeito de se conseguir baixar os arquivos por FTP seria liberando novamente as portas altas, mas como vimos, esta não é uma atitude aceitável.

Há uma outra maneira bastante interessante de se contornar este problema, mas os recursos necessários para isto são um pouco mais difíceis de se encontrar: podemos filtrar pacotes baseado na porta de *origem* em que foram criados. A regra ficaria mais ou menos assim:

[nº da regra] [s/n] [protc] [origem] [destino] [opções]
Regra #1 Sim IP Interno Qualquer
Regra #1 Sim TCP Qualquer Interno Flag ACK
Regra #1 Sim TCP Qualquer Porta 20 Interno Porta >1023

É lógico que isto somente reduziria um pouco os problemas, até porque nada impede que o hacker utilize justamente a porta 20 para passar pelo firewall. O único inconveniente é que ele precisaria ter privilégios de root no sistema originador do ataque para poder usar estas portas de número baixo. Mas só se estiver usando algum sabor de Unix, porque se estiver em DOS não há maiores problemas (para o hacker!). O mais importante nestas regras é o fato de que, com elas, o número de pessoas que vai desistir da invasão sem ao menos tentar entender o motivo da falha é de 90%. A grande maioria dos supostos hackers utiliza "receitinhas de bolo" para invasões. Se acontecer qualquer coisa diferente do planejado, ela ficará perdida. E o firewall é uma excelente arma contra estas pessoas.

O autor do livro "Firewall - Repelling the wily hacker", Steve Bellovin, propôs a utilização de um recurso no FTP chamado "FTP Passivo" que resolveria este problema da filtragem de pacotes. Com este método, os clientes e servidores de FTP trocariam normalmente as informações mas, no momento de transferir o arquivo, quem faria o pedido de envio pela porta 20 seria o cliente. Com isto os pacotes do arquivo chegariam com o flag ACK acionado (já que agora se trata de uma conexão feita, e não mais de uma tentativa de estabelece-la), e assim poderíamos impedir a conexão com todas as portas altas da sua rede Interna. Mas infelizmente (ahhhh...) nem todos os servidores e clientes de FTP já implementaram esta característica (que, diga-se de passagem, já existe no protocolo FTP). Uma pena...



Os Filtros Inteligentes

Pensando nas dificuldades de configuração e falta de recursos dos roteadores para a implementação dos filtros de pacotes, muitos fabricantes criaram ferramentas para fazer este tipo de filtragem, desta vez baseada em um host (computador) específico para esta tarefa, localizado nos pontos de conexão da rede interna com a Internet.

Os chamados filtros inteligentes são aplicações executadas em, por exemplo, computadores ligados ao roteador e à rede interna. O tráfego de um lado para outro se dá (ou não) conforme as regras estabelecidas nas aplicações. Apesar desta solução requerer um equipamento extra, ela nos dá uma série de vantagens sobre os filtros baseados em roteador, principalmente no que diz respeito à monitoração de acesso.

Roteadores, quando possuem algum tipo de log, não guardam informações muito precisas sobre as tentativas de conexão na (ou da) rede interna, enquanto os filtros inteligentes possuem vários níveis de logs, nos quais é possível (e bastante recomendável) perceber os tipos de tentativa de acesso, e até definir certas ações caso um evento em especial relacionado à segurança aconteça.

Uma outra característica interessante dos filtros inteligentes é a tentativa de implementar um controle de pacotes UDP, guardando informações sobre eles e tentando "improvisar" o flag ACK. Montando-se uma tabela de pacotes UDP que passam, pode-se comparar os pacotes UDP que retornam e verificar se eles são uma resposta ou se são uma tentativa de novo contato.

Mais uma vez, volto a avisar: nem mesmo os filtros inteligentes são substitutos para a segurança dos computadores internos. Fica fácil visualizar a quantidade de problemas se seus computadores da rede interna não apresentarem nenhum nível de segurança e o firewall for comprometido. Lembre-se que um colete à prova de balas dificilmente lhe protegerá se eu enfiar o dedo no seu olho...



Os Servidores Proxy

Esqueça tudo o que você viu acima! Estes tipos de firewalls são completamente diferentes... Neste sistema, temos um gateway (computador que faz uma ligação) entre o nosso host e o host que desejamos acessar. Esse gateway possui uma ligação com a rede externa e outra com a rede interna. Tudo o que passa de uma para outra deve, obrigatoriamente, passar pelo gateway. O fato de terem duas ligações lhe confere o nome de "Gateway de Base Dupla".