Segurança da informação com TCP_Wrappers
SEGURANÇA
Segurança garantida
Conheça o TCP_Wrapper, sistema de segurança simples e eficaz criado nos
anos 90 e ultimamente esquecido pelos novos administradores de sistemas.
por Marcellino Júnior
A
melhor maneira de impedir um cracker de explorar
um determinado serviço é
removê-lo completamente do seu
sistema. Você pode tomar alguma
medida de segurança desabilitando
ou removendo serviços sem uso nos
diretórios /etc/xinted.d e etc/init.d,
mas talvez você queira manter esse
serviço ativo porque planeja utilizálo no futuro.
Tendo em vista os serviços de
que precisa, você poderá ativá-los
sem comprometer a segurança do
sistema, bloqueando o acesso de determinados usuários, computadores
ou qualquer rede através dos arquivos
hosts.allow ou hosts.deny no diretório
Tabela 1: Exemplos de comandos em /etc/hosts.allow
e /etc/hosts.deny
68
Cliente
Descrição
.abc.com.br
Nome de domínio. Com o nome de
domínio começando com um ponto (.),
especifica todos os clientes do domínio.
172.16.
Endereço de IP. Garante ou
impede acesso de endereços IP de
numeração iniciada por 172.16.
172.16.10.0/255.255.254.0
Controla um particular grupo
de endereços IP.
[email protected]
Usuário específico do
determinado computador.
/etc. Esse sistema é conhecido como
TCP_Wrappers [1], e tem seu foco
na proteção de serviços xinetd que
está presente em várias distribuições
GNU/Linux.
O TCP_Wrapper foi originalmente escrito por Wietse Zweitze
Venema [2] em 1990 para monitorar
atividades cracker de uma estação
de trabalho UNIX do departamento
de Matemática e Ciência da Computação da Universidade Eindhoven of Technology, na Holanda, e
mantido até 1995. Em primeiro de
junho de 2001, foi lançado sob a
licença BSD.
Para entender seu funcionamento,
imaginemos um sistema recebendo
um pedido pela rede procurando
um determinado serviço; este serviço passa antes pelo TCP_Wrappers.
O sistema de segurança faz o log
do pedido e então confere as regras
de acesso. Se não existirem regras
de impedimento de um endereço
IP ou de um host em particular, o
http://www.linuxmagazine.com.br
TCP_Wrapper | SEGURANÇA
TCP_Wrappers devolve o controle
ao serviço. Caso exista alguma regra
de impedimento, a requisição será
negada. A melhor definição para o
TCP_Wrappers seria a de um intermediário entre a requisição de uma
conexão e o serviço.
Tabela 2: Coringas
Coringa
Descrição
ALL
Significa todos os serviços ou todos os clientes,
dependendo apenas do campo em que se encontra.
LOCAL
Este coringa casa com qualquer nome
de host que não contenha um caractere
ponto “.”, isto é, uma máquina local.
PARANOID
Casa com qualquer nome de host que não case
com seu endereço. Permite, por exemplo, a
liberação do serviço para a rede interna e impede
que redes externas consigam requisitar serviços.
KNOWN
Qualquer host onde o nome do host e endereço do host
são conhecidos ou quando o usuário é conhecido.
UNKNOWN
Qualquer host onde o nome do host e endereço do host
são desconhecidos ou quando o usuário é desconhecido.
Configurações
Sua configuração é objetiva, e os
arquivos principais são hosts.allow
e hosts.deny. A parte operacional
também é bastante simples: usuários
e clientes listados em hosts.allow
estão liberados para acesso; usuários
e clientes listados no hosts.deny não
terão acesso. Usuários e/ou clientes
listados nos dois arquivos, o sistema
do TCP_Wrappers irá seguir os seguintes passos:
m primeiro lugar, o sistema
E
irá procurar no arquivo /etc/
hosts.allow. Se o TCP_Wrapper
encontrar a regra correspondente, garante o acesso. O arquivo
hosts.deny será ignorado.
Em seguida será feita uma busca no arquivo /etc/hosts.deny.
Se o TCP_Wrapper encontrar
alguma regra correspondente,
irá impedir o acesso.
Se as regras não forem encontradas em nenhum dos dois arquivos, o acesso é automaticamente
garantido ao requisitante.
Podemos usar a mesma linguagem em ambos os arquivos, /etc/
hosts.allow e /etc/hosts.deny, para
informar ao TCP_Wrappers quais
clientes serão liberados ou impedidos
de acessar os serviços e/ou dados. O
formato básico – um registro por linha –, é o daemon_list : client_list.
A versão mais simples para esse
formato é ALL : ALL.
Esta regra especifica todos os
serviços e torna-a aplicável a todos
os hosts em todos os endereços IP.
Se você inserir essa linha em /etc/
hosts.deny, o acesso será negado para
Linux Magazine #71 | Outubro de 2010
todos os serviços. Entretanto, você
pode criar um filtro mais refinado.
Por exemplo, a linha a seguir em
/etc/hosts.allow autoriza o cliente com endereço IP 192.168.15.5
a conectar-se ao seu sistema através do serviço OpenSSH sshd :
192.168.15.5.
A mesma linha em /etc/hosts.
deny, impediria o computador com
aquele endereço IP conectar-se em
seu sistema. Você pode especificar
um número de clientes de maneiras diferentes, como mostrado na
tabela 1.
Como podemos observar na tabela 2, existem tipos diferentes de co-
ringas. O coringa ALL pode ser usado
para representar qualquer cliente ou
serviço, o ponto (.) especifica todos
os hosts com o nome de domínio ou
endereço de rede IP.
Múltiplos serviços
Você pode configurar múltiplos serviços e endereços com vírgulas. Exceções são muito simples de serem
criadas com o operador EXCEPT. A
seguir, um exemplo de exceção no
arquivo /etc/hosts.allow:
Tabela 3: Operadores do TCP_Wrappers
Campo
Descrição
%a
Endereço do cliente
%A
Endereço do host
%c
Informação do Cliente
%d
Nome do processo
%h
Nome do host cliente
%H
Nome do host servidor
%p
Identificação do processo
%s
Informação do servidor
69
SEGURANÇA | TCP_Wrapper
#hosts.allow
ALL : .abc.com.br
telnetd :
192.168.15.0/255.255.255.0
EXCEPT 192.168.15.51
sshd, in.tftpd : 192.168.15.10
do comando twist, não envia uma
resposta individual a quem fez o
pedido de conexão. Como exemplo, considere: ALL : .abc.com.br :
A primeira linha é um comentário. A linha seguinte abre os serviços
para todos (ALL) os computadores do
domínio abc.com.br. A outra linha
abre o serviço Telnet para qualquer
computador na rede 192.168.15.0,
exceto o endereço IP 192.168.15.51.
Os serviços SSH e FTP estão abertos somente para o computador de
endereço IP 192.168.15.10.
Estas linhas, negam todas as
tentativas de conexão do domínio
*.abc.com.br.. Simultaneamente,
está realizando o log do nome do
host, endereço IP e o serviço que
está sendo requisitado no arquivo
/etc/log/conexoes.log. Para conhecer a descrição dos operadores, veja
a tabela 3.
Citados anteriormente, os coringas
podem ser utilizados tanto na lista de
serviços quanto na lista de clientes.
Os coringas KNOWN, UNKNOWN e PARANOID devem ser utilizados com cautela. Um problema na resolução de
nomes pode impedir que usuários
legítimos tenham acesso a um serviço.
Como não existe nenhum sistema
de segurança perfeito, posso destacar algumas possíveis considerações
(ou seriam dicas?) que precisam
#hosts.deny
ALL EXCEPT in.tftpd : .abc.com.br
Telnetd : ALL EXCEPT 192.168.15.10
A primeira linha no arquivo hosts.
deny é um comentário. A segunda
linha impede que todos os serviços
exceto o FTP para os computadores
do domínio abc.com.br. A terceira
linha indica que apenas um computador, de endereço IP 192.168.15.10,
tem acesso ao servidor Telnet. A
última linha seria uma negação
geral onde todos os outros computadores serão impedidos de acessar
todos os serviços controlados pelo
TCP_Wrappers, exceto o endereço
IP 192.168.15.10.
Você também poderá utilizar comandos externos na configuração de
regras para o TCP_Wrappers com as
opções twist ou spawn nos arquivos
/etc/hosts.allow ou /etc/hosts.deny
para ter acesso a comandos do Shell.
Imagine que você precise negar uma
conexão e enviar uma razão individual a quem tentou estabelecer a
conexão. Essa ação poderia ser feita
pela opção twist, para executar um
comando ou script. Por exemplo:
sshd : .xyz.com.br : twist /bin/echo
Desculpe %c, acesso negado.
Outra possibilidade é utilizar a
opção spawn, que diferentemente
70
spawn (/bin/echo %a da %h tentativa
de acesso %d >> /var/log/conexoes.
log) : deny.
ser observadas na implantação do
TCP_Wrappers:
» O serviço identd em um sistema
remoto pode fornecer dados falsos.
» Se um cracker conseguir falsificar
os nomes e endereços IP, através da
técnica de spoofing [3], o TCP_Wrappers não será capaz de detectá-los.
Mesmo com o coringa PARANOID.
» Um ataque DoS (Denial of Service) [4] pode sobrecarregar o sistema
de log, dependendo da configuração
implantada.
Conclusão
Para que o sistema TCP_Wrapper
realmente funcione a contento, é
importante que no momento da
configuração dos arquivos /etc/
hosts.allow e /etc/hosts.deny sejam
utilizados critérios minuciosos, pois
usuários na lista de negação podem
ter seu acesso totalmente bloqueado,
assim como usuários indevidos podem
ter total acesso ao sistema. Procure
analisar cada situação no momento
de criar as regras. A segurança de seu
sistema depende disso! n
Mais informações
[1]TCP_Wrappers ftp://ftp.porcupine.org/pub/security/index.html/
[2]Site oficial do programador Wietse Zweitze Venema
http://www.porcupine.org/wietse/
[3]Técnica de spoofing: http://pt.wikipedia.org/wiki/IP_spoofing/
[4]Ataque DoS http://pt.wikipedia.org/wiki/Denial_of_Service/
Sobre o autor
Marcellino Júnior é Engenheiro da Computação e atua como Analista de Segurança Sênior em
grandes empresas.
Gostou do artigo?
Queremos ouvir sua opinião. Fale conosco em
[email protected]
Este artigo no nosso site:
http://lnm.com.br/article/4042
http://www.linuxmagazine.com.br
Livro C
e r t i fi c
o
ã
ç
i
d
e
ª
2
2
I
P
L
açã o
A Linux Magazine está lançando
a 2ª edição revisada e ampliada
do livro que te prepara para a
Certificação LPIC-2 com as
seguintes novidades:
• Exercícios em todos os tópicos
• Todo conteúdo ampliado para
a nova versão da prova,
atualizada em abril/2009
Garanta já o seu pelo site da Linux Magazine
www.linuxmagazine.com.br
Download

Segurança garantida