original in en Georges Tarbouriech
en to pt Bruno Sousa
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.
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...).
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 !
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 !
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 !).
É ó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.
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 :
Ou seja, a máquina não dá muita informação ao pirata !
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 ?
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/