Uma Introdução a Detecção de Intrusão: Metodologias e Cenários

Fabiana M. Ramos, Pedro A. B. Jr.
Departamento de Informática, UFPE
{fmr, pabj}@di.ufpe.br

20 de Novembro de 1996

Resumo

Como os sistemas de computadores têm sido amplamente usados para processamento de informações e execução de tarefas críticas, é fundamental garantir a segurança das operações desses sistemas. Falhas na segurança podem levar a prejuízos incalculáveis. Apesar da evolução de segurança de computadores e engenharia de software, a maioria dos sistemas de computadores ainda possuem vulnerabilidades que permitem ataques. Este problema aumentou com a proliferação das redes de computadores, pois os sistemas agora podem ser acessados por qualquer pessoa na rede. Este trabalho é baseado na dissertação de doutorado Execution Monitoring of Security-Critical Programs in a Distributed System: A Specification-Based Approach por Calvin Cheuk Wank Ko (University of California, Davis). Serão apresentadas metodologias de deteção de intrusão e cenários de intrusões provocadas por vulnerabilidades conhecidas de utilitários do Unix.

1 Introdução

1.1 Segurança de Computadores

Para que um sistema de computador seja dito seguro três requisitos de alto nível devem ser satisfeitos: confidencialidade, integridade e disponibilidade. Confidencialidade preocupa-se com a prevenção de acessos não autorizados à informação. Integridade diz respeito a manutenção da consistência e corretude dos dados no sistema. Disponibilidade concentra-se na prevenção de exaustão de recursos e negação de serviços a usuários autorizados.

A maioria dos sistemas de computadores empregam controle de acesso como a primeira linha de defesa para proteger recursos e informação nos sistemas. Controles de acesso regulam o acesso direto a objetos, mas não o que os sujeitos podem fazer com a informação contida nestes objetos. Para alcançar confidencialidade, são necessários controles de fluxo de informação para regular a disseminação de informação, além de autenticação para assegurar a identidade dos usuários.

A metodologia de detecção de intrusão tem como objetivo detectar atividades que violem a política de segurança ou comprometam a segurança do sistema.

As metodologias que serão apresentadas para detecção de intrusão incluem análise de configuração, detecção de anomalia, detecção de mau uso e, por fim, monitoração baseada em especificação.

1.2 Análise de Configuração

Análise de configuração, também conhecido como análise estática, envolve o exame da configuração atual do sistema tal como o conteúdo de seus arquivos e tabelas.

Uma percentagem significante de break-ins de computadores é causada por configurações impróprias de sistemas. Mesmo em sistemas operacionais com fortes mecanismos de proteção, seu uso incorreto leva a falhas de segurança. Análise de configuração ajuda a descobrir se uma configuração é consistente com a política de segurança adotada.

Análise de configuração provê uma solução razoável para muitos problemas de segurança. No entanto, esta não é uma solução completa. Mesmo que a configuração de um sistema esteja correta, ele pode ainda conter vulnerabilidades que facilitem invasões. Para aumentar a segurança, as atividades do sistema devem ser monitoradas para detectar potenciais comprometimentos.

1.3 Detecção de Anomalia

Detecção de anomalia foi proposta para detectar intrusões em sistemas de computadores, envolvendo monitoração das atividades em um sistema usando audit trails.

A idéia básica é estabelecer padrões de comportamento normal dos sujeitos (usuários individuais, grupos de usuários, hosts, etc.) observando os audit trails em um intervalo de tempo. Um audit trail que se desvia do comportamento padrão estabelecido é considerado uma indicação de intrusão.

Os sistemas gerais de detecção de anomalia usam profiles estatísticos ou baseados em regras. Um profile é uma descrição de um comportamento normal de sujeito em termos de medidas de detecção de intrusão ou características como hora do login, localização do login, tempo de uso da CPU e acessos a arquivos. Um profile estatístico consiste em estatísticas com relação às características. Um profile baseado em regras é um conjunto de regras que especificam os valores legais de características, que podem depender dos valores de outras características. Selecionar características que indiquem melhor um comportamento normal é um problema difícil.

1.3.1 Avaliação de Detecção de Anomalia

Detecção de anomalia provê um método para detectar invasões sem exigir conhecimento específico do sistema operacional ou de suas falhas de segurança. No entanto, em muitos ambientes, é difícil estabelecer padrões de comportamento para usuários e determinar os valores limites que sinalizam uma anomalia. Além disso, detecção de anomalia sozinha não pode detectar todos os tipos de intrusões, pois nem todas as invasões produzem uma anomalia identificável.

1.4 Detecção de Mau Uso

Detecção de mau uso corresponde a detecção de ações de usuários que são suspeitas, que se parecem com intrusões conhecidas, que exploram vulnerabilidades conhecidas do sistema, ou que são uma violação direta da política de segurança.

O objetivo da detecção de mau uso é identificar essas ações suspeitas (ou assinaturas de mau uso) e checar as ocorrências dessas ações em audit trails. Não existe nenhuma forma sistemática para identificar assinaturas de mau uso, detecção de mau uso é altamente guiada por vulnerabilidades conhecidas do sistema e cenários de intrusões conhecidos.

Muitos sistemas de detecção de mau uso estão sendo desenvolvidos. Eles diferem na forma como as assinaturas são representadas e nos mecanismos usados para checar ocorrências de assinaturas nos audit trails. Eles podem ser classificados em quatro abordagens: sistemas especialistas, análise de estados e transições, pattern matching e detecção de intrusão baseada em modelo.

Sistemas especialistas são baseados em regras da forma “se condição então ação”, onde condição especifica restrições sobre os campos de registros de audit e ação especifica as ações que devem ser tomadas quando condição for satisfeita.

Análise de estados e transições concentra-se nos efeitos de passos indivíduais de uma intrusão sobre o estado do sistema. A regra básica é independente de registros de audit. Este modelo só pode representar uma intrusão como uma sequência ordenada de ações, não permitindo formas mais complexas de especificar invasões como ações parcialmente ordenadas.

Na abordagem de pattern matching, uma assinatura de ataque é uma Redes de Petri Coloridas (CPN). Este modelo possue um poder expressivo de especificar ações parcialmente ordenadas e restrições de tempo entre ações. Usar pattern matching para detectar intrusões é mais eficiente que usar sistemas especialistas.

Detecção de intrusão baseada em modelo trata com intrusões em um nível mais abstrato que registros de audit. São construídos modelos de cenários que representam o comportamento característico de intrusões.

1.4.1 Avaliação de Detecção de Mau Uso

Uma vantagem de detecção de mau uso é poder garantir detecção de intrusões conhecidas se suas assinaturas são incluídas na base de dados do detector de mau uso. Porém a limitação fundamental deste modelo é a sua inabilidade em tratar ataques imprevisíveis e vulnerabilidades do sistema desconhecidas.

1.5 Monitoração Baseada em Especificação

A idéia, nesta metodologia, é escrever especificações de segurança que descrevam os comportamentos desejáveis dos programas críticos, e monitorar a execução desses programas para detectar violações das especificações. Uma especificação determina as sequências de operações válidas da execução de um ou mais programas.

Gramáticas são usadas como especificações de sequências de operações válidas de programas, onde o alfabeto das gramáticas são operações do sistema. Um novo tipo de gramática foi desenvolvida, parallel environments grammars (PE-grammars), para especificação de políticas de trace. Uma PE-grammar serve como uma especificação de projeto para o desenvolvimento de um parser que determina se um trace de uma execução de programa é uma sentença da gramática.

As especificações de programas são independentes das suas vulnerabilidades. Portanto, monitoração baseada em especificação tem o potencial de detectar ataques que explorem vulnerabilidades desconhecidas desses programas.

2 Cenários de Intrusão

Nesta seção serão apresentadas várias vulnerabilidades de programas privilegiados do Unix que podem ser maliciosamente exploradas para se obter acesso não autorizado ao sistema. O objetivo é mostrar as formas como essas vulnerabilidades são exploradas e como detectar essas intrusões.

2.1 Rdist

Rdist (Remote File distribution Program) é um utilitário do Unix que mantém idênticas cópias de arquivos sobre múltiplos hosts. Ele é um programa do root com setuid - está é a base para a exploração. Sua vulnerabilidade consiste em permitir que um intruso adquira privilégios de superusuário ilegalmente. A tabela abaixo resume as chamadas ao sistema que o deamon rdistd executa para atualizar o arquivo /pabj/arq.

PassoSystem Call
1.fd = create(“/pabj/arqt”);
2.write(fd, ...);
3. close(fd);
4.chown(“/pabj/arqt”,owner);
5.chmod(“/pabj/arqt”, pmode);
6.rename(“/pabj/arqt”, “/pabj/arq”);

Tabela - Sequência de chamadas ao sistema do rdist

Descreveremos um cenário de intrusão em que um intruso explora a seqüência de chamadas ao sistema executadas pelo rdistd para trocar o modo de permissão da shell do sistema (/bin/sh). A tabela abaixo descreve os passos de uma exploração. Se o primeiro parâmetro do chmod for um slink, o modo de permissão do arquivo que está sendo apontado pelo slink será mudado. Depois que o rdistd cria, escreve e fecha o arquivo temporário (passos 1, 2 e 3), o invasor renomeia o arquivo temporário (passo 4) e cria um link simbólico que aponta para o arquivo alvo (/bin/sh). O problema está no passo 7, onde chmod troca o modo de permissão do /bin/sh, setando o bit setuid, portanto o intruso pode obter privilégios de superusuário invocando o /bin/sh.

PassoSystem Call (rdistd)System Call (invasor)
0.
  
execve(“/usr/ucb/rdist”);
1.fd = create(“/pabj/arqt”);
  
2.write(fd, ...);
  
3. close(fd);
  
4.
  
rename(“/pabj/arqt”,”/pabj/tmp”);
5.
  
symlink(“/bin/sh”,”/pabj/arqt”);
6.chown(“/pabj/arqt”,owner);
  
7.chmod(“/pabj/arqt”, pmode);
  
8.rename(“/pabj/arqt”, “/pabj/arq”);
  

Tabela 2 - Chamadas ao sistema executadas pelo Rdist e pelo invasor

2.2 Mail

Esta seção descreve a vulnerabilidade no utilitário mail do 4.2 BSD UNIX e um exemplo de intrusão que explora esta vulnerabilidade. O problema no utilitário mail está em outro programa, binmail. Binmail é um programa do root com setuid porque ele precisa concatenar mensagens ao mail-box de qualquer usuário. Depois de concatenar a mensagem, binmail troca o owner do arquivo mail-box para o próprio usuário sem checar o modo de permissão deste arquivo.

Se um intruso puder criar um arquivo de mail-box do root que, na realidade, é um programa executável público e tem o bit setuid setado quando o binmail é executado, binmail trocará o owner do falso mail-box para root , resultando em um arquivo setuid executável publicamente com privilégio de superusuário. A tabela abaixo apresenta uma situação em que o falso mailbox do root é o programa /bin/sh (passo 1).

PassoComando
1.% cp /bin/csh /usr/spool/mail/root
2.% chmod 4755 /usr/spool/mail/root
3.% touch x
4.% mail root < x
5.% /usr/spool/mail/root
6.root%

Tabela 3 - Exemplo de intrusão explorando mail

3 Conclusão

Segurança é uma área da computação que vem se desenvolvendo largamente, principalmente depois do surgimento das redes de computadores. Apesar de todas as metodologias apresentadas, os sistemas de computadores ainda apresentam falhas de segurança, por falta de uma aplicação efetiva de tais metodologias ou pela evolução da habilidade dos hackers.

Ainda não existem metodologias que garantam que um sistema seja totalmente seguro. O nível de segurança é obtido a partir de um trade-off entre custo e segurança desejada, portanto, quanto mais sofisticado o nível de segurança, maior o investimento necessário.