Vulnerabilidades são falhas que podem ser exploradas para acessar recursos não autorizados. Incidentes de segurança ocorrem quando vulnerabilidades são exploradas, comprometendo a segurança do sistema ou informações. Vulnerabilidades podem ser causadas por erros de projeto, implementação ou configuração. A Internet é vulnerável devido aos protocolos iniciais não terem segurança como prioridade e sua estrutura aberta, tornando ataques fáceis e difíceis de rastrear.
1. Conceitos Básicos sobre Segurança - Parte III
Por: Elias Barenboim ( 02/05/2001 )
O que é vulnerabilidade? E incidente de segurança?
Uma vulnerabilidade é uma falha que o usuário poderá explorar para obter algo que não é autorizada como
usuária legítima daquela máquina ou serviço.
Quando uma vulnerabilidade é explorada e compromete de fato a segurança do sistema ou informações nele
contidas, podemos dizer que ocorreu um incidente de segurança.
Tais vulnerabilidades podem ser causadas por falhas de engenharia, design do programa ou mesmo por
problemas em sua implementação e configuração.
Por que a Internet é vulnerável?
Vários dos protocolos que hoje fazem parte da infra-estrutura da grande rede foram desenhados sem
preocupações de segurança. Quando algo é criado tratando um fator como secundário, é muito difícil torná-lo
eficiente posteriormente. Assim aconteceu com a segurança na Internet(futuramente isso vai mudar, já
estamos caminhando para isso) . Outro problema é a dinamicidade da Grande Rede, sua topologia,
tecnologias empregadas e massa de público .
Por causa de sua estrutura altamente aberta e seus protocolos básicos, os ataques que sofrem geralmente
são rápidos, fáceis, baratos, e além disso podem ser difíceis de detectar ou rastrear. Um invasor não
necessariamente precisa estar fisicamente no local, pode estar em qualquer lugar do mundo, que ainda pode
ser omitido facilmente.
Existem vários sites que não consideram as questões de segurança. Eles acham que sua segurança já é
suficiente, que nunca serão atacados ou até mesmo que a Internet é um meio seguro !
Atualmente, técnicas são desenvolvidas constantemente, ferramentas novas estão surgindo a cada hora e as
velhas soluções são dadas como certas. Na verdade,o administrador acaba assim ficando mais iludido que
seguro.
Nota-se também que a grande quantidade de dados que trafegam na Internet não são criptografados.
Confidenciabilidade e integridade são muito difíceis de se obter com isso. Isso prejudica não só
aplicativos(como de financeiras) mas todos os mecanismos fundamentais como autenticacão e não
repudiação. Exemplo disso é a utilização de um sniffer, onde, através de um site comprometido, podemos
obter informações de um outro computador, até então "seguro", através deste. Dados como login, senhas,
nomes de máquinas, dados do sistema e vários dados pessoais acabam ficando disponíveis.
Outro fator interessante é o crescimento exponencial da Internet nos últimos anos. Com esse aumento de
público veio também o aumento de tráfego, de protocolos e de serviços, que ainda não estão 100 % para
utilização. Além disso, os fabricantes inserem novos recursos, com mais buracos, e acabam piorando ainda
mais o programa.
Um questão interessante é o fato das máquinas já entregues, montadas. Em geral, elas são colocadas lá já
com o intuito de mostrar que possui o máximo de programas possíveis, de recursos e de fácil utilização .
Questões de segurança são esquecidas nesta hora.
Tipos de Vulnerabilidades
Falhas nos Programas ou Design do Protocolo:
Primeiramente, protocolos são as regras básicas de conversa entre computadores numa rede, ele é como se
fosse a língua que ambos os computadores são "obrigados" a falar para se comunicarem.
Se o protocolo contiver uma falha em seu design, isso será fácil de se explorar independente de quão bom ele
2. seja implementado. Um exemplo clássico disto é o NFS. Seu objetivo básico é compartilhar arquivos,
intrinsicamente ele não inclui nenhum tipo de restrição quanto ao acesso e à autenticação: não se sabe quem
realmente é quando se loga. NFS é algo que já é altamente batido no universo Internet, recomendo uma
experiência com Coda (muito bom!).
Quando um programa é desenvolvido e secundariamente se fala na questão da segurança, ela é tratada
como algo adicional. Por não ser core (essencial) ao sistema, ela não engloba este como um todo; sempre há
furos. Não se desenvolveu pensando nisso, é apenas um ¨bônus. Essa situação, lamentavelmente, é bem
comum entre os desenvolvedores atuais, porém, cada vez mais (ainda não podemos generalizar), a questão
da segurança está sendo mais refletida quando se quer desenvolver algo.
Falhas na Implementação do Protocolo:
Mesmo sendo bem desenhado e planejado, o programa ainda não está imune totalmente. A implementação
(fase do desenvolvimento quando começamos a pôr em prática o que foi definido, deixar operacional) é
importante para definir como o protocolo vai se comportar em seu ambiente.
Um serviço pode então se tornar altamente perigoso pela forma que é implementado.
Um servidor de Email por natureza deixa qualquer um se conectar a ele (a princípio). Imagine um destes que
aceita conexões de todos os lugares, pode-se conectar, tentar mandar um email para determinado usuário e
caso retorne sucesso já se descobriu uma conta na máquina. Caso deseje, tente outras coisas.
Lógico que isso não parece muito significativo, mas é o primeiro passo para se obter informações relevantes,
como nome de usuários, versões de programas, configurações da máquina e vários outros detalhes que
parecem não importar.
Algumas falhas comuns no design/implementação dos programas:
checar pelo conteúdos dos dados e tamanho;
checar pelo sucesso ou falha;
falta de habilidade para se adaptar ao esgotamento dos recursos do sistema;
checagem incompleta do ambiente operacional;
uso inapropriado de chamadas do sistema;
reutilização de funções para outros propósito que não tenham sido previamente determinado.
Lembre-se, coisas que parecem irrelevantes ou mesmo uma conta (máquina, rede) que não merece grande
atenção são os primeiros passos para que o invasor ganhe acesso a partes mais privilegiadas de seu sistema
(isso serve para usuários, máquinas e redes).
Falhas nas Configurações do Sistema e Rede:
São falhas que não são causadas pelo design do protocolo nem mesmo por implementação. São falhas
causadas pelo método que são instaladas e configuradas.
Um grande problema é a famosa palavra "default", tudo vem por default e é deixado no default, até que
aconteça maiores problemas e se tenha que sair dele. Ou seja, as pessoas tem uma tendência enorme de
não mexer o que já vem configurado. Também pode acontecer por equívocos em suas configurações que
acabe causando falhas grotescas em segurança.
Costuma-se pedir que servidores em geral sejam rodados em ambientes isolados. Pegando o FTP como
exemplo, pede-se para que ele seja rodado isoladamente do sistema atual, não permitindo o usuário a leitura
da árvore de diretórios: apenas aquela sub-árvore pré-determinada. Caso aconteça um erro na configuração,
pode-se com isso expor o sistema por inteiro, por uma coisa relativamente trivial(este exemplo de separar
por ambientes será discutido em outros artigos e é válido para vários outros serviços).
Referências do Artigo
http://www.cert.org
http://www.securityfocus.com
3. Bem, acho que é isso, agradeço os emails que tenho recebido e espero que gostem, qualquer dúvida postem
mensagem nos nossos fóruns.
Abraços,
Elias Bareinboim
Copyright (C) 1999-2000 Linux Solutions