[LinuxFocus-icon]
Início  |  Mapa  |  Índice  |  Procura

Novidades | Arquivos | Links | Sobre LF
Este artigo está disponível em: English  Castellano  Deutsch  Francais  Italiano  Nederlands  Portugues  Russian  Turkce  

convert to palmConvert to GutenPalm
or to PalmDoc

[Photo of the Author]
por Georges Tarbouriech

Sobre o autor:

O George é já um utilizador do Unix de há longa data. Acredita que a segurança dos computadores é um dos maiores desafios deste século.


Conteúdo:

 

Psionic Portsentry 1.1, o defensor das portos

[illustration]

Abstrato:

O Psionic portsentry faz parte do conjunto de utilitários do projecto Abacus (além do portsentry, o conjunto também oferece o logcheck e o hostsentry). É um IDS (Sistema de Detecção de Intrusos) dedicado à detecção de portos e defesa activa. Trabalha em muitos sabores do Unix incluindo o Mac OS X. A principal característica de um IDS é a de informar o administrador de sistema acerca da tentativa de intrusão. A Portsentry vai ainda mais longe visto que pode mesmo reagir a um ataque. A última versão deste utilitário (1.1) está disponível em http://www.psionic.com, e além disso, a versão 1.0 já faz parte da maioria das distribuições de Linux (Debian, RedHat...).



 

Porquê utilizar o portsentry ?

Durante a última década, as redes cresceram a uma velocidade incrível. O objectivo era o de permitir a comunicação entre máquinas usando diferentes Sistemas Operativos. Além disso os sistemas proprietários de redes foram lentamente, substituídos pelo TCP/IP. A Internet fez o resto ! Hoje muitas das redes assentam no TCP/IP e o TCP/IP assenta em portos. Para ser breve, os portos estão associados a programas (clientes ou servidores). O servidor escuta até que um cliente o contacte para estabelecer uma ligação. Os serviços (programas acima referenciados) são mapeados para uma porto específico. Nos Sistemas Unix, o mapa com este sistema encontra-se no ficheiro /etc/services. Ou seja, toda a gente sabe a correspondência entre as portos e os serviços. Se toda a gente sabe, os piratas ainda o sabem melhor ! Se considerarmos um porto como uma porta, quando um porto está aberto (à escuta), é como uma porta destrancada. E como é que entra dentro de casa ? Normalmente através da porta (a não ser que prefira a janela, mas isso é consigo !). E os de "chapéu preto" fazem o mesmo para entrar dentro do seu computador...
A primeira coisa a fazer para reduzir o risco é fechar o máximo de portos quanto possível, ou seja parar os serviços. Quanto menos melhor. Mas muito dificilmente consegue fechar todas as portos numa máquina em rede : a mesma não comunicaria mais, o que seria uma pena !
Como limitar o número de serviços activos ou como fechar as portos está para além do alcance deste artigo. Encontrará muita informação acerca do assunto, se for por exemplo até ao Linux Documentation Project ou procurando através das edições da LinuxFocus (por exemplo, Bastille Linux ou Utilitários de Segurança). Então para os diferentes modos de proteger uma máquina, uma rede aplica-se o mesmo. No Linux considere de referência obrigatória Bastille Linux.
E é aqui que o portsentry entra. O Portsentry pode monitorizar portos e é capaz de bloqueá-los se lhe pedir para o fazer. Providencia-lhe diferentes modos de operação, alguns específicos de alguns SO. Por acaso, SO significam Linux aqui.
O Portsentry é capaz de beneficiar da filtragem de pacotes feita pelo ipfwadm, ipchains ou iptables segundo o Kernel de Linux que possuir. Isto também é verdade para outros sabores de Unix usando diferentes utilitários (falaremos disto mais tarde). Aqui estamos : o portsentry possui, uma característica essencial é "auto-bloqueador".
Como é que ele consegue ? Onde vamos nós !

 

Como instalar o portsentry ?

O Portsentry vem como um pequeno ficheiro tar. Depois de descomprimir o arquivo, você obtém o código fonte, os vários ficheiros de configuração e os ficheiros README. Obviamente que é recomendável lê-los. Visto que estamos a falar de segurança, não se esqueça de obter os ficheiros PGP (assinatura e chave).
A instalação do portsentry é óbvia: make (o vosso sistema) e make install. Mas, antes da instalação, deve prepará-la. Ou seja, deve ler a documentação, alterar o ficheiro portsentry.conf para satisfazer as suas necessidades e verificar o Makefile bem como o ficheiro portsentry.h.
Para o portsentry ser mais eficaz, precisa de, pelo menos, TCPWrappers. Pelo menos, porque a sua utilização em conjunto seria melhor como utilitário de filtragem de pacotes. Claro, que se utiliza o Linux, já tem tudo o que precisa. E acerca dos outros Unices ?
Como testámos o portsentry em plataformas diferentes, falemos dos requisitos.
No MAC OS X, é como o Linux : está tudo lá. Você tem TCPWrappers, e ipfw (a versão BSD). Então digitando "make osx" fará a instalação.
No Solaris 2.6 (SPARC), não tem TCPWrappers. Pode obtê-lo a partir de ftp://ftp.porcupine.org/pub/security. Pode, também tentar o IPFilter disponível em ftp://coombs.anu.edu.au/pub/net/ip-filter/ip-fil3.4.9.tar.gz (mas só se tiver um compilador Solaris !!!).
No Irix 6.5, também não tem TCPWrappers. Pode obtê-lo como um pacote a partir de http://freeware.sgi.com/index-by-alpha.html Para a filtragem de pacotes você tem o ipfilterd, que vem com o Irix mas não instalado por omissão.
Por último, mas não o menos importante, a não ser que encontre um vsnprintf() a trabalhar não conseguirá instalar o portsentry no próximo passo... e eu não encontrei nenhum !
Contudo, mais uma vez, você devia configurar o portsentry antes do instalar. Bem, mas é consigo, mas seria melhor entender a sua filosofia antes de fazer todo o resto... mas é só uma opinião !

 

Como é que o portsentry trabalha ?

Muito bem, obrigado !
Mais seriamente, o portsentry assenta em ficheiros de configuração. O mais importante é o ficheiro portsentry.conf. Este diz ao portsentry como reagir contra os seus adversários.
Antes de lidar com este ficheiro, você precisa de conhecer os diferentes modos de operação que existem e o que são.
O Portsentry pode utilizar seis modos diferentes, segundo a opção que dá ao arranque.
- A primeira é a "-tcp" e é o modo básico. Com esta opção o portsentry restringirá os portos TCP encontrados no ficheiro de configuração na secção de "configuração de portos". Pode restringir até um limite de 64 portos.
- A segunda é a "-udp" e faz o mesmo que anterior mas para os portos UDP.
- A terceira é a "-stcp", o "s" significa stealth (difícil de detectar). A opção e as próximas só estão disponíveis para Linux. Com a opção "-stcp", o portsentry utiliza sockets para monitorizar os pacotes de entrada, ou seja os portos não estão reservados para nada.
- A quarta é a "-sudp" e faz o mesmo que a anterior mas para os portos UDP.
- A quinta e sexta são "-atcp" e "-audp". São as opções mais eficazes ("a" significa avançado). Utilizando estas opções o portsentry faz uma lista dos portos que estão à escuta, TCP e UDP, se seleccionar ambos ele bloqueia a máquina que se ligar a estes portos, excepto se a máquina está presente no ficheiro portsentry.ignore.
Isto está mais bem explicado nos ficheiros README que vêm com o portsentry. Assim, não queremos reinventar a roda, ao rescrever a documentação. A leitura dos ficheiros README é obrigatória (como habitualmente, sejamos um pouco fascistas !).

Como é que o portsentry reage ?

É óbvio, que o portsentry pode criar logs. Se é do tipo de administrador de sistema que não lê os logs (azar o seu!), pode utilizar o logcheck em conjunto com o portsentry. Deste modo, o portsentry envia um email para o informar acerca de uma tentativa de intrusão.
Ele pode utilizar o ficheiro /etc/hosts.deny para escrever as máquinas de destino, para utilizar com os TCPWrappers.
A máquina local é capaz de rotear o tráfego da rede para uma máquina "morta".
Por último, a máquina local pode "eliminar" os pacotes através de um utilitário de filtragem local.
Agora sabe mais um pouco acerca da filosofia do portsentry, pode então, começar a escrever o ficheiro portsentry.conf.
- A primeira secção do ficheiro de configuração diz respeito aos portos. Aqui pode escolher os portos a que quer proteger. Lembre-se, que isto é ignorado quando utiliza os modos avançados para o Linux. Tenha cuidado com os portos que não quer proteger (não protega o porto 6000 se utilizar o X, por exemplo).
- A próxima secção, é para opções avançados de detecção. Por omissão são monitorizadas todas os portos abaixo de 1024, quer TCP e UDP. Aqui, pode também excluir os portos que quer ignorar. Isto é bastante importante para evitar falsos alarmes e obviamente a criação de logs grandes, especialmente se utilizar máquinas Windos na sua rede. Por exemplo, proteger o porto 111 quando o portmap é utilizado e as máquinas não estão discriminadas no ficheiro portsentry.ignore, seria, obviamente, loucura, pois o portmap tem por significado servidores RPC, como o NFS, mas foi avisado. Ou seja, o NFS não é assim tão seguro nas máquinas Unix então imagine-se nas máquinas Windos.
Aqui vem, normalmente a secção fora de contexto: quando escrevo "Windos", não é um tipo : é só para insistir no facto de que o Windows é um ambiente por cima do Dos (D de dirty ? -sujo)... e é menos um caracter a digitar (que maluco eu sou !). Desculpem a digressão.
- A secção dos ficheiros de configuração diz respeito aos ficheiros utilizados pelo portsentry para definir o seu histórico ou para definir as máquinas a ignorar. Se fizer uma instalação por omissão, não altere isto.
- A secção de configuração "miscellaneous" permite-lhe activar, desactivar as procuras por DNS.
- A secção com as opções de resposta é o coração da configuração. É aqui que define como é que o portsentry reagirá.
Primeiro, as opções a ignorar. Pode escolher para bloquear ou não bloquear os "scans" ou para correr um comando externo.
A seguir, na secção de routeamento, diz ao portsentry como eliminar o routeamento ou como beneficiar de um utilitário de filtragem utilizado na sua máquina. Há muitos exemplos para variadas plataformas. Escolha uma (e só uma !) que se adeqùe às suas necessidades.
- A secção dos TCPWrappers indica se quer escrever para o ficheiro /etc/hosts.deny.
- A secção dos comandos externos permite-lhes definir o comando a correr quando uma máquina se liga.
- A secção de valor do "scan trigger" permite-lhe definir o tempo de reacção. Por omissão é "0" sendo o mais rápido logo que é enviado uma alarme na primeira tentativa de ligação.
- A última secção é apresentar uma mensagem no caso da tentativa de intrusão. Não trabalha com os modos "stealth".
Quando terminar com esta parte, está já quase tudo feito. De novo para evitar falsos alarmes ou logs enormes, verifique o ficheiro portsentry.ignore. Adiciona aqui o endereço da sua rede local com a respectiva máscara, ou os endereços IP de algumas máquinas.
E é isto! Pode agora fazer "make yoursystem" e "make install". A script de instalação faz todo o trabalho visto que dá permissões restritivas ao directório e aos ficheiros. Agora, é o suficiente para correr o portsentry com as opções da sua escolha. Verifique os logs para ver o que acontece. Se tudo correu bem o portsentry começou a correr tornando mais segura a máquina.

 

O que é acontece a seguir ?

Utilizando o nmap, você pode simular um scan a um porto da sua nova máquina segura. (Mais acerca do nmap aqui). Esta é a resposta que obtém :

portsentry is
running on the scanned host

Ou seja, a máquina não dá muita informação ao pirata !
Normalmente, esta tentativa devia fornecer a versão do sistema operativo e os portos abertos na máquina pesquisada. Este tipo de informação é muito útil para um pirata visto que ele sabe melhor onde atacar e como atacar. Com o portsentry a correr com um valor do trigger de scan a 0 no modo avançado, o bloqueio é imediato. Correr com um valor de 1 no modo normal, o pirata teria uma lista de portos abertos e provavelmente o SO a correr na máquina. Mas tentando ligar-se a um conhecido porto aberto falharia. O portsentry bloqueou o porto após a primeira tentativa. Simples mas bastante eficaz !
Ou seja, se utilizar os TCPWrappers, o endereço IP do atacante fica escrito no ficheiro /etc/hosts.deny. Se decidir redireccionar para uma máquina "morta", o portsentry é ainda eficaz mas não o previne de ataques UDP.
Se tiver utilizar um utilitário de filtragem de pacotes, a máquina atacada elimina os pacotes vindos do atacante através deste utilitário.
Claro, que este é o melhor meio de beneficiar do poder total do portsentry.
Mais uma vez, o modo avançado no Linux é o ideal. Isto não quer dizer que o portsentry seja tão bom quanto nos outros SOs, tem somente um pouco menos de "performance"... bem, mas não realmente !
Para entendermos melhor, verifique os logs procurando diferentes tentativas de intrusão nos vários SOs a correr o portsentry em modos diferentes. Isto diz tudo !
Segundo os modos utilizados, os logs forneceram falsos alarmes. Para melhorar a qualidade da informação, tem de trabalhar a informação no ficheiro de configuração. Após alguns testes deve obter exactamente o que deseja.

 

Pode viver sem o portsentry ?

Definitivamente NÃO ! Existem imensos IDS, livres ou não. Muitos deles são bastante bons. Mencionemos o bem conhecido snort, disponível em http://www.snort.org.
Normalmente, estes IDSes são passivos. Ou seja, são utilizados para o informar acerca da intrusão. Foram desenhados para tal. Por exemplo, o snort é muito sofisticado, visto que se rege em regras de scripts, permitindo-lhe escrever as suas próprias regras. O website da snort fornece também uma base de dados com regras. E além disso, se não tiver medo de logs enormes, pode correr quer o portsentry e o snort. Não é assim tão estúpido !
Contudo, a força do portsentry é que um IDS activo. O modo como pode reagir e de cortar a respiração. Combiná-lo com um utilitário de filtragem de pacotes é obrigatório. Podemos formular a questão : Será o portsentry o complemento de um utilitário de filtragem de pacotes ou vice-versa ?
De qualquer modo, existe ainda muito por dizer acerca do portsentry. Por exemplo, deve ter bastante cuidado com o modo avançado scan de detecção UDP. Leia a documentação (novamente!) para entender os problemas relacionados ao UDP. Os Solaris podem também causar alguns problemas, visto utilizar intervalos de portos (32700) muito elevados (quer TCP e UDP). Mas este artigo é só uma breve revisão e não uma completa revisão de este grande pedaço de software.
A segurança de computador é uma preocupação, e não só para os administradores de sistema. O crescimento inacreditável da Internet ainda complica mais as coisas. Ou seja, o perigo de intrusão é cada dia maior. A comunidade de software livre fornece utilitários excelentes : o portsentry é um deles. Não os deixe de lado ! Mas lembre-se que estes utilitários só reduzem o risco e não lhe fornecem de qualquer modo um sistema 100% seguro. Isto é outra razão para investigar na área de utilitários de segurança.
Por último, mas não o menos importante, as pessoas no Psionic estão a trabalhar num produto comercial dizendo-nos que não ficaremos "desapontados". Espere e veja, depois !
Entretanto, vá e obtenha o 1.1, não ficará desapontado também. As pessoas no Psionic estão a fazer um trabalho excelente. Além disso o hostentry é digno de ser testado... e utilizado.
Estamos a viver num tempo excelente, não estamos ?

 

Referências

Os websites que se seguem são referências obrigatórias quando se trata de segurança. E, eles conduzem-no a mais websites, e estes a mais... Você sabe, os recenseamentos Russos ? O único problema é que s os quiser ler todos não viverá tempo suficiente !!!
http://www.linuxsecurity.com
http://www.sans.org
http://www.infosyssec.org
http://www.securityfocus.com
http://www.cs.purdue.edu/coast/hotlist/

 

Forma de respostas para este artigo

Todo artigo tem sua própria página de respostas. Nesta página você pode enviar um comentário ou ver os comentários de outros leitores:
 página de respostas 

Páginas Web mantidas pelo time de Editores LinuxFocus
© Georges Tarbouriech, FDL
LinuxFocus.org

Clique aqui para reportar uma falha ou para enviar um comentário para LinuxFocus
Informação sobre tradução:
en -> -- Georges Tarbouriech
en -> pt Bruno Sousa

2001-10-13, generated by lfparser version 2.17