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