Tutoriais

MÉTODOS PARA DETECÇÃO LOCAL DE ROOTKITS
E MÓDULOS DE KERNEL MALICIOSOS EM SISTEMAS UNIX

Nelson Murilo
Pangéia Informática
SRTS 701, 70 cj E, sala 304
70340-902 Brasília-DF
nelson@pangeia.com.br

Klaus Steding-Jessen
NIC BR Security Office
Rua Hum, 45 Caixa Postal 6146
13083-970 Campinas-SP
jessen@nic.br

RESUMO


Rootkits são ferramentas utilizadas com freqüência por invasores para ocultar sua presença em máquinas
comprometidas, fazendo parte inclusive de alguns Worms e ferramentas de DDoS. Uma invasão pode passar
meses sem ser descoberta graças a essas ferramentas. Além das versões tradicionais, rootkits vem sendo implementados
também sob a forma de módulos de kernel (LKMs), dificultando a sua detecção. Este artigo descreve o
funcionamento desses dois tipos de rootkit, alguns métodos para sua detecção em sistemas Unix e uma ferramenta
de código aberto, implementada pelos autores, para detecção automatizada de rootkits.


ABSTRACT


Rootkits are a very popular technique among intruders to hide themselves in compromised machines. Some
rootkits are also used by Worms and DDoS tools. An intrusion can remain undetected for months when such a
tool is used by an attacker. Rootkits are also being implemented as Loadable Kernel Modules (LKMs), making
them much harder to detect. This paper describes the traditional as well as the LKM-based rootkit and presents
some rootkit detection methods for Unix machines. This paper also presents an open source tool, developed by
the authors, to detect rootkits.

1 INTRODUÇÃO


Com a popularização de ferramentas de ataque automatizado,
comprometer máquinas Unix com vulnerabilidades
conhecidas tornou-se atividade extremamente
simples.
Após uma fase inicial de varredura o atacante localiza
uma máquina com alguma vulnerabilidade e
a explora, obtendo assim acesso privilegiado. Nesse
momento a preocupação é não ser detectado e garantir
futuros meios de acesso ao sistema através da instalação
de backdoors . Este ciclo eventualmente
recomeça com a utilização da máquina invadida para
a varredura e invasão de outros sistemas vulneráveis.
O procedimento típico de invasão de uma máquina
Unix pode ser dividido genericamente em 4 passos
básicos, como pode ser visto no diagrama da Fig. 1.

A instalação de rootkits é uma maneira bastante utilizada pelos invasores para não serem detectados no sistema e instalar backdoors.
O termo rootkit refere-se a um conjunto de ferramentas usadas pelo invasor não para obter privilégios de root, mas sim para manter esses privilégios [6].
Embora existam rootkits também para a plataforma Windows [3, 7], este artigo concentra-se apenas em rootkits para sistemas Unix.
O artigo inicialmente apresenta um histórico daevolução dos rootkits, seguido da descrição dos componentes e funcionamento dos rootkits tradicionais e também dos implementados sob a forma de LKMs.
São discutidos em seguida alguns métodos de detecção para esses tipos de rootkit. Por fim é mostrada uma ferramenta gratuita e de código aberto, desenvolvida pelos autores, para detecção automatizada de rootkits.

2 HISTÓRICO


A partir de 1989 começaram a surgir, na revista“ underground” Phrack Magazine, códigos-fonte de ferramentas que permitiam editar e remover entradas nos arquivos utmp, wtmp e lastlog1 do sistema. O objetivo dessas ferramentas era ocultar um invasor numa máquina Unix comprometida—desse modo sua presença não era revelada por comandos como w, who,
users e last . Com o tempo foram sendo desenvolvidas várias
outras ferramentas com o objetivo de ocultar um invasor numa máquina Unix: versões de comandos do sistema que ocultam informações relativas ao invasor,
programas para não alterar os tempos de acesso, modificação e o CRC de programas alterados, etc. Estas ferramentas reunidas deram origem aos primeiros rootkits. Os primeiros rootkits, originalmente escritos para SunOS e depois para Linux, são citados, em conjunto com o uso de sniffers, em advisories do CERT já em 1994 .
Em 1995 torna-se muito popular na comunidade underground um rootkit denominado “RootKit”, usado num grande número de invasões . A partir daímuitos outros tipos de rootkits apareceram, para praticamente todas as variantes de Unix. A partir de 1997 surgem referências de construção de rootkits inseridos diretamente no kernel, sob forma de módulos de kernel (Loadable Kernel Modules, ou LKMs) . Nos dias atuais rootkits continuam sendo muito populares entre invasores, fazendo parte inclusive de alguns worms e ferramentas de DDoS .


3 O ROOTKIT TRADICIONAL


Por rootkit tradicional entende-se o rootkit que não é implementado em kernel space sob a forma de LKM. Tipicamente esse tipo de rootkit é composto,
pelo menos, de:
* versões modificadas de comandos importantes do sistema como ls, ps, netstat, crontab, tcpd, syslogd, etc. Os comandos substituídos podem omitir processos, conexões, arquivos e logs do invasor, de modo que sua presença não seja notada pelo administrador e demais usuários do sistema.
Geralmente contém algumas ferramentas adicionais:
* Programas para remoção de entradas em arquivos de log do sistema bem como nos arquivos utmp, wtmp e lastlog, como por exemplo z2 e wted.
* Ferramentas para alterar os tempos de modificação, acesso e status (MAC times), o tamanho e o CRC2 dos arquivos modificados pelo invasor, de modo a torná-los iguais aos originais. (por exemplo as ferramentas addlen e fix).
* Sniffers para a captura de senhas que trafeguem pela rede sem criptografia, como por exemplo em protocolos como ftp, telnet, pop2, pop3, imap2, rlogin, etc. Nesse caso geralmente o comando ifconfig é modificado para que não
indique que uma determinada interface de rede está em modo promíscuo.
Modificações em clientes ssh também se tornaram um excelente método usado por invasores para obtenção de senhas.
* Backdoors que garantam o acesso remoto futuroà máquina, mesmo em caso de mudança de senhas ou correções de vulnerabilidades. Geralmente
permitem acesso privilegiado (root) e não deixam registro nos logs do sistema.
Esse acesso remoto pode ser obtido através da instalação de um processo que escuta em uma. Para fins de checagem de integridade o uso de CRCs (de 16
e 32 bits) não é recomendado. Um invasor pode facilmente gerar versões modificadas de arquivos que possuam os mesmos CRCs dos originais, quando verificados pelo comando sum do Unix. Para um resultado mais confiável, o uso de algum hash criptográfico,determinada porta e inicia uma shell (por exemplo o programa bindshell). Uma chamada a esse tipo de processo é comumente inserida nos scripts de inicialização da máquina para garantir seu funcionamento mesmo por ocasião da reinicialização do sistema. Alguns backdoors desse tipo implementam autenticação com senha e sessões criptografadas.
Outro mecanismo que o invasor possui para garantir acesso remoto é a modificação de daemons do sistema, como inetd, e sshd, entre outros. Embora pareça estar funcionando normalmente, a versão modificada usualmente é
programada para escutar em alguma porta alternativa que inicia uma shell ou aceitar alguma senha especial que garanta acesso privilegiado.
* Ferramentas para o aumento de privilégios de contas locais.
Caso o invasor perca o acesso remoto privilegiado através de backdoors ou escolha entrar usando uma conta do sistema, mecanismos que permitam a obtenção de privilégio de root através de uma conta comum são geralmente utilizados.
Para permitir esse aumento de privilégio alguns comandos são alterados e fornecem uma shell de root ao serem executados de modo especial, como por exemplo através de uma senha.
Exemplos de comandos normalmente alterados são chfn e chsh.
* Exploits, programas de Denial of Service (DoS) e Scanners.
É muito comum uma máquina invadida estar sendo usada apenas como base para comprometer outras redes—desse modo muitos rootkits já incluem ferramentas para realizar as fases de varredura e exploração de vulnerabilidades em outras máquinas, como descrito na Fig. 1.
* Programas relacionados com IRC, como bouncers.
Estes programas permitem que o invasor se conecte em canais de IRC usando a máquina invadida como “proxy”, desse modo não revelando o seu ponto de origem real.


4 O LKM ROOTKIT


Módulos de kernel (Loadable Kernel Modules ou LKMs) são componentes que podem ser dinamicamente carregados no kernel, modificando a funcionalidade
de um sistema sem a necessidade de uma reinicialização. LKMs são implementados em vários sistemas Unix (Linux, BSD, Solaris, HP-UX) e geralmente usados para carregar device drivers de maneira dinâmica.

Enquanto os rootkits tradicionais funcionam alterando os comandos do sistema para omitir informações da presença do invasor, como conexões, arquivos,
processos, etc, os rootkits implementados sob forma de LKMs funcionam alterando chamadas do sistema (syscalls) tais como kill, getdents e read
e atuando diretamente em algumas estruturas do kernel.
Do ponto de vista do administrador a detecção desses rootkits implementados como LKMs é muito mais difícil, pois todos os comandos do sistema continuam inalterados e o próprio kernel responderá à s requisições mas ocultando a presença do invasor.
Mesmo uma checagem dos hashes criptográficos de todos os comandos do sistema não apontará nenhuma modificação. Normalmente esse tipo de rootkit altera também as chamadas do sistema que permitem listar os módulos de kernel instalados.


5 WORMS


Worms são programas com a capacidade de comprometer
outras máquinas e se propagar para elas de
modo automático usando a rede. Tipicamente executam
uma varredura por sistemas e serviços vulneráveis,
exploram essas vulnerabilidades e se copiam
para a máquina recém explorada. Uma vez instalados
na nova máquina, o ciclo à procura de novas máquinas
recomeça.
Outras ações em alguns casos incluem: instalação
de rootkits para evitar sua detecção, correção da vulnerabilidade
explorada para evitar ataques por terceiros,
envio de email com informações sobre o sistema,
instalação de backdoors, web defacements, etc.

6 MÉTODOS DE DETECÇÃO


A seguir são comentados alguns métodos para detecção de rootkits tradicionais, rootkits implementados em módulos de kernel (LKMs) e Worms:
6.1 Busca por Arquivos de Configuração Muitos componentes de rootkits consultam, durante sua execução, arquivos de configuração. Nesses arquivos o invasor normalmente insere quais informações devem ser ocultadas do usuário, como processos, arquivos, conexões e entradas em arquivos de
log .
Abaixo mostro um trecho do arquivo de cabeçalho usado no Linux Rootkit 6 (lrk6) que define, em tempo de compilação, a senha e os arquivos de configuração usados pelos vários programas que compõe este rootkit.
É possível localizar a presença de um rootkit procurando por ocorrências de nomes de arquivos de configuração no interior de comandos alterados por um
rootkit. As ferramentas strings, od e hexdump do Unix são normalmente usadas para esse tipo de análise.


/* LINUX ROOTKIT DEFINES. */
#define PW_LEN 6
#define ROOTKIT_PASSWORD "vejeta"
/* Processes to hide */
#define ROOTKIT_PROCESS_FILE "/dev/hda01"
/* Addresses to hide */
#define ROOTKIT_ADDRESS_FILE "/dev/hda02"
/* Files and directories to hide */
#define ROOTKIT_FILES_FILE "/dev/hda03"
/* Log entries to hide */
#define ROOTKIT_LOG_FILE "/dev/hda04"
#define ROOTKIT_IFE_FILE "/dev/hda05"
#define ROOTKIT_TELNET_FILE "/dev/hda06"
Figura 2: Trecho do rootkit.h do lrk6.


6.2 Busca por Seqüências de Caracteres em Arquivos Além de arquivos de configuração, outras evidências de comprometimento podem ser obtidas através do exame de cadeias de caracteres em comandos do sistema modificados por rootkits. Essas seqüências incluem senhas, endereços de email, a tabela de símbolos, compilador e bibliotecas usadas na compilação.

6.3 Comparação de Hashes Criptográficos Hashes criptográficos como MD5 e SHA-1 podem ser úteis na determinação de quais comandos do sistema foram alterados por rootkis. Comparando-se o hash de um comando com suspeita de alteração com o hash do mesmo comando feito no momento da instalação da máquina (ou de outra mídia confiável, como um CDROM de distribuição do sistema) é possível identificar uma modificação.
Esse método exige que os hashes dos comandos a serem testados sejam conhecidos e que tenham sido obtidos de binários confiáveis. Exige também que esses hashes de comparação sejam mantidos de forma segura, de maneira a não poderem ser alterados pelo invasor, e que o próprio programa que calcula os hashes não tenha sido comprometido.
Alguns sistemas possuem um esquema de packages que permite a verificação dos comandos instalados no sistema com uma base de hashes (geralmente
MD5) mantida on-line.

6.4 Exame de Chamadas do Sistema Outro método de detecção é o exame das chamadas do sistema efetuadas por um programa sob suspeita de modificação e observar se existem acessos a arquivos de configuração de rootkits.
Os comandos strace (Linux), ktrace / kdump (BSD) e truss (Solaris) podem ser usados para este fim.

6.5 Exame dos Tempos de Modificação, Acesso e Status (MAC Times)
Para cada arquivo e diretório do sistema de arquivos do Unix estão associados três atributos de tempo:última modificação (mtime), último acesso (atime) e
última mudança no inode (ctime).
Através do exame cuidadoso desses atributos em um determinado sistema é possível achar evidências de uma invasão, da instalação de um rootkit por um
invasor ou da presença de um worm .

6.6 Exame de Conexões Vários rootkits e worms instalam backdoors escutando
em diversas portas da máquina. Descobrir essas portas em estado de LISTEN, bem como conexões suspeitas, pode servir para localizar os processos associados a essas portas de backdoor.
Normalmente o comando netstat é alterado para não mostrar tais informações. No caso de LKMs estas são ocultadas diretamente pelo kernel e uma varredura
a partir de uma máquina remota pode se fazer necessária.

6.7 Exame da Tabela de Chamadas do Sistema e Símbolos do Kernel
O exame da tabela de chamadas do sistema, usando por exemplo uma ferramenta como o kstat em sistemas Linux, pode ser extremamente útil para se determinar a presença de um LKM rootkit .
Alguns LKM rootkits deixam definições de símbolos característicos que podem ser observados na tabela de Símbolos do kernel (/dev/ksyms em alguns
sistemas).

6.8 Busca por Outros Indícios de Comprometimento Muitas vezes os indícios de um rootkit não são encontrados facilmente. Nesses casos é extremamente
importante que o administrador seja capaz de reconhecer alguns indícios clássicos de invasão e assim intensificar suas buscas pelo rootkit.
Evidências de invasão incluem: interfaces de rede em modo promíscuo (instalação de sniffer), evidências de remoção de entradas nos arquivos utmp, wtmp e lastlog do sistema, arquivos regulares abaixo de /dev (este diretório contém normalmente apenas arquivos de dispositivos), arquivos e diretórios começando com ‘.’ ou espaço, entre outras.

7 IMPLEMENTAÇÃO


Nem todos os administradores de sistemas têm o conhecimento necessário para por em prática todos os métodos apresentados acima. Mesmo um administrador experiente pode se beneficiar automatizando alguns dos testes, principalmente se for responsável por um grande número de máquinas.
Embora já existam algumas ferramentas para deteção de rootkits, seus testes são restritos a poucos sistemas e comandos ou específicos para LKM
rootkits.
Considerando esses fatores os autores desenvolveram uma ferramenta gratuita e de código aberto que implementa grande parte dos métodos de detecção de
rootkits expostos neste artigo.

7.1 Decisões de Implementação Dada a grande evolução dos rootkits, a crescente facilidade para efetuar invasões e o grande número de plataformas para as quais existem rootkits, chegouseà conclusão de que para ser útil a ferramenta dedetecção deveria rodar no maior número possível de sistemas Unix. Isso inclui sistemas que não possuem compiladores C nem interpretadores como Perl em sua instalação padrão. Decidiu-se então escrever
a base do programa em Bourne Shell, por ser padrão dentre os diversos sistemas Unix.
O programa principal, chkrootkit, faz a grande maioria dos testes, usando comandos padrão do Unix e invocando alguns programas auxiliares escritos em
C. Caso esses programas auxiliares não estejam disponíveis (por não haver um compilador C instalado) os demais testes ainda podem ser executados.

7.2 Componentes
Um sumário dos componentes da ferramenta, suas funcionalidades e tamanhos (em linhas de código), pode ser observado na Tab. 1.

 

7.2.1 chkrootkit
Shell script que implementa os testes principais e invoca, opcionalmente, os demais programas da ferramenta. Inicialmente o script testa se os seguintes comandos, usados nos testes para a detecção de rootkits, estão presentes na máquina: awk, cut, echo, egrep, find, head, id, ls, netstat, ps, sed, strings e uname.
Como os comandos citados acima também podem estar modificados por algum rootkit e assim comprometer a detecção, o script prevê duas outras possibilidades de operação:

1. O uso de um path alternativo para os comandos acima, através da opção de linha de comando ‘ -p’. Com essa opção definem-se outro(s) diretório( s) onde o script deve buscar seus comandos.
Essa opção permite ao administrador, por exemplo, o uso de comandos de uma mídia confiável, como um CDROM ou floppy, no exame de uma máquina com suspeita de instalação de rootkits.

2. Especificar um diretório raiz alternativo, através da opção ‘-r’. Desse modo é possível fazer uma análise post-mortem de um sistema levando seu(s) disco(s) para outra máquina e executando o chkrootkit a partir dela. Esse método tem como vantagem o fato de poder contar, além de binários, com um kernel confiável, elimando assim a possibilidade de um LKM na máquina que se deseja examinar ocultar dados importantes.
Se todos os comandos necessários estão presentes no sistema o script começa os testes. O comportamento padrão é realizar todos os testes disponíveis, mas o usuário pode especificar, na linha de comando, apenas os testes de interesse.
Existem duas categorias de testes: internos, isto é , realizados pelo próprio script e os testes externos, realizados por programas em C que acompanham a
ferramenta.
Os testes internos são implementados como funções
em Bourne Shell. Um exemplo de uma função
desse tipo é mostrada na Fig. 3.

 

Figura 3: Função chk_su(), implementada pelo script chkrootkit. Esta função testa a ocorrência de duas cadeias associadas à modificação por rootkits (senhas padrão do rootkit lrk3 e lrk6) no comando su. A linha do if foi quebrada por questões de legibilidade.
Essas funções geralmente iniciam tentando localizar o comando a ser testado, visto que muitas vezesa localização de um comando difere bastante entre os
vários sistemas Unix. Do mesmo modo, alguns testes são efetuados de maneira diferente dependendo do sistema no qual o script está executando.
Muitos testes procuram por assinaturas específicas dentro do comando que está sendo testado, isto é , ocorrência de cadeias de caracteres que são sabidamente associadas a rootkits.
Outros testes incluem checagem por permissões não usuais, nomes de arquivos e diretórios associados a rootkits e worms conhecidos, indícios que o arquivo
de “history” do usuário root tenha sido apagado, etc.
A determinação das cadeias de caracteres e nomes de arquivos e diretórios provém da análise de rootkits conhecidos e de informações obtidas através da interação com a comunidade de segurança.
Implementou-se também um modo de operação da ferramenta denominado expert mode. Nesse modo toda a interpretação da saída dos comandos executados é deixada a cargo do usuário. É útil para a detecção de variantes de rootkits que ainda não possuem assinaturas incorporadas ao programa.
Atualmente são implementados 57 testes para determinar a presença de rootkits tradicionais, LKMs e worms3.

7.2.2 chklastlog

Esta ferramenta verifica indícios de remoções de entradas do arquivo lastlog do sistema.
O programa percorre as entradas do arquivo wtmp e para cada nome de usuário encontrado, testa sua presença no arquivo lastlog. Se este usuário não é encontrado emite um alerta, indicando que esta entrada pode ter sido apagada por um invasor. O comando retorna o número de anomalias encontradas.
Foi originalmente escrito pelo DFN-CERT para SunOS e depois adaptado para pelos autores para que pudesse ser utilizado também em Linux, FreeBSD,
OpenBSD e Solaris. Outra modificação foi a possibilidade de especificar arquivos de wtmp e lastlog alternativos através da opção ‘-f’.

7.2.3 chkwtmp

Ferramenta que verifica indícios de remoções de entradas do arquivo wtmp do sistema e retorna o número de anomalias encontradas.
O arquivo wtmp é aberto e o conteúdo de cada entrada é testado—se for zero emite um alerta. Este teste se baseia no fato de várias ferramentas de edição deste arquivo, como wted e z2, sobrescreverem as entradas
com zeros.
Este programa também foi originalmente escrito pelo DFN-CERT para SunOS e adaptado pelos autores, que o portaram para outros Unices e adicionaram
alguma funcionalidade, por exemplo a habilidade de especificar outros arquivos de wtmp, não apenas o arquivo padrão do sistema.

7.2.4 ifpromisc

Este programa testa por interfaces de rede em modo promíscuo, estado geralmente associado à instalação de sniffers em máquinas comprometidas.
Obtém do kernel a lista de interfaces de rede da máquina, e para cada interface (com excessão da inteface de loopback), testa suas flags pela condição IFF_PROMISC.
Esta ferramenta pode dar falsos positivos em casos de uso legítimo de ferramentas que deixam a interface de rede em modo promíscuo, como por exemplo tcpdump e snort.

7.2.5 chkproc

Alguns sistemas Unix implementam o process filesystem, geralmente abaixo de /proc. Este filesystem contém, entre outras informações, uma entrada para cada processo ativo no sistema. Essas entradas são visíveis como diretórios, onde o nome de cada diretório é o Process ID (PID) do processo.
A chamada do sistema readdir é normalmente usada para obter-se o conteúdo de um diretório. Alguns LKMs modificam esta chamada de modo a ocultar
diretórios abaixo de /proc e desse modo ocultar processos do sistema .
Embora ocultos da chamada readdir, é possível entrar nesses diretórios, com a chamada chdir, se o nome do diretório for conhecido.
O chkproc tenta, seqüencialmente, um chdir em cada um dos diretórios que representam os PIDs de processos do sistema (de 1 a 65535)—toda vez que o
chdir é bem sucedido o PID associado a este diretório é colocado em uma lista. Estes PIDs são comparados com os resultados obtidos através do uso da
chamada readdir e com a saída do comando ps. Diferenças nesses resultados podem revelar, respectivamente, a presença de um LKM malicioso ou a modificação do comando ps com o objetivo de ocultar processos.
Em sistemas onde existe a criação de um grande número de processos de curta duração este comando pode reportar alguns falsos positivos.

7.3 Exemplos de Uso

O chkrootkit é uma ferramenta de linha de comando
e deve ser executada como root:
# ./chkrootkit
Também é possível fazer testes específicos como
nos exemplos a seguir.
Teste pela presença de versões modificadas de ps
e ls e se a interface de rede está em modo promíscuo:
# ./chkrootkit ps ls sniffer
Especificação de um path alternativo para binários
confiáveis a serem usados pelo programa.
# ./chkrootkit -p /floppy
Verificação do disco de uma máquina montado
abaixo de /mnt:
# ./chkrootkit -r /mnt
Execução em expert mode procurando por pathnames:
# ./chkrootkit -x | egrep ’^/’

7.4 Trabalhos Futuros


Atualmente todas as assinaturas de rootkits testados são mantidas dentro do corpo do programa. Adições de novos testes e assinaturas implica na alteração
do código. Planeja-se separar completamente o código propriamente dito da base de dados de assinaturas, tornando a sua manutenção mais fácil.
Outra meta é consultar uma base de assinaturas de rootkits on-line—desse modo a ferramenta poderia obter e manter atualizada a sua base de assinaturas de rootkits através da rede. O projeto de criação de um repositório on-line de assinaturas de rootkits, com contribuições da comunidade mundial de segurança, já existe por parte do projeto cyberabuse.org. Este repositório poderá ser usado pelo chkrootkit.
Atualmente todas as assinaturas de rootkits testados são mantidas dentro do corpo do programa. Adições de novos testes e assinaturas implica na alteração
do código. Planeja-se separar completamente o código propriamente dito da base de dados de assinaturas, tornando a sua manutenção mais fácil.
Outra meta é consultar uma base de assinaturas de rootkits on-line—desse modo a ferramenta poderia obter e manter atualizada a sua base de assinaturas de rootkits através da rede. O projeto de criação de
um repositório on-line de assinaturas de rootkits, com contribuições da comunidade mundial de segurança, já existe por parte do projeto cyberabuse.org. Este repositório poderá ser usado pelo chkrootkit.

8 CONCLUSÕES

Rootkits são ferramentas muito poderosas e sua detecção está ficando cada vez mais difícil, principalmente no caso de rootkits implementados como módulos de kernel. Worms estão ficando comuns e é de se esperar que cada vez mais incorporem rootkits para evitar sua detecção nos sistemas atingidos.
Claramente o crescimento da variedade de rootkits, tanto tradicionais como em módulos de kernel, está sendo mais rápido que a capacidade dos administradores de acompanhar essa evolução, dificultando assim a sua detecção.
É extremamente importante que o conhecimento acumulado da comunidade de segurança na detecção de rootkits possa ser convertido na construção de ferramentas automatizadas. Além de auxiliar um grande número de administradores vítimas de invasões, ferramentas como o chkrootkit podem tornar o exame periódico de ambientes com muitas máquinas mais fácil e eficiente, auxiliando na detecção precoce de invasões.

AGRADECIMENTOS

Os autores gostariam de agradecer a ajuda de Cristine Hoepers na revisão deste artigo e por sua contribuição ao longo do desenvolvimento do chkrootkit,
especialmente as idéias e os testes que deram origem ao comando chkproc.

REFERÊNCIAS
[1] L. Spitzner, “Know Your Enemy: The Tools
and Methodologies of the Script Kiddie.” http://
project.honeynet.org/papers/enemy/, 2000.
[2] S. Garfinkel and G. Spafford, Practical UNIX and
Internet Security. O’Reilly & Associates, Inc., second
ed., 1996.
[3] J. Scambray, S. McClure, and G. Kurtz, Hacking
Exposed: Network Security Secrets & Solutions.
Osborne/McGraw-Hill, second edition ed., 2001.
[4] L. Spitzner, “Know Your Enemy: III, They Gain
Root.” http://project.honeynet.org/papers/
enemy3/, 2000.
[5] “The Honeynet Project’s Forensic Challenge.”
http://project.honeynet.org/challenge/,
January 2001.
[6] D. Brumley, “invisible intruders: rootkits
in practice,” ;login: Magazine, Intrusion
Detection Special Issue, September 1999.
http://www.usenix.org/publications/login/
1999-9/features/rootkits.html.
[7] G. Hoglund, “A Real NT Rootkit, Patching the NT
Kernel,” Phrack Magazine, Volume 9, Issue 55, File 5,
September 1999. http://www.phrack.org/show.
php?p=55&a=5.
[8] B. T. Affair, “Hiding Out Under Unix,” Phrack Magazine,
Issue 25, File 6, March 1989. http://www.
phrack.org/show.php?p=25&a=6.
[9] S. Hackalot, “C UNIX nasties part I,” Phrack Magazine,
Volume 3, Issue 32, File 5, November 1990.
http://www.phrack.org/show.php?p=32&a=5.
[10] P. Accident, “Playing Hide and Seek, Unix Style,”
Phrack Magazine, Issue 43, File 14, Jul 1993. http:
//www.phrack.org/show.php?p=43&a=14.
[11] CERT/CC, “CERT Advisory CA-94-01 Ongoing Network
Monitoring Attacks.” http://www.cert.org/
advisories/CA-1994-01.html, 1994.
[12] CERT/CC, “CERT Advisory CA-95-18 Widespread
Attacks on Internet Sites.” http://www.cert.org/
advisories/CA-1995-18.html, December 1995.
[13] D. H. Freedman and C. C. Mann, At large: the strange
case of the world’s biggest internet invasion. Simon
& Schuster, 1997. pg. 282–283.
[14] halflife, “Abuse of the Linux Kernel for Fun and
Profit,” Phrack Magazine, Volume 7, Issue 50, File 5,
Apr 1997. http://www.phrack.org/show.php?p=
50&a=5.
[15] plaguez, “Weakening the Linux Kernel,” Phrack Magazine,
Volume 8, Issue 52, File 18, Jan 1998. http:
//www.phrack.org/show.php?p=52&a=18.
[16] pragmatic, “Complete Linux Loadable Kernel Modules.”
http://packetstorm.securify.com/docs/
hack/LKM_HACKING.html, 1999.
[17] M. Vision, “Lion internet worm analysis.”
http://www.whitehats.com/library/worms/
lion/index.html, 2001.
[18] M. Fearnow and W. Stearns, “Adore Worm.” http:
//www.sans.org/y2k/adore.htm, April 2001.
[19] R. Wash and J. Nazario, “Analysis of a Shaft
Node and Master.” http://biocserver.cwru.edu/
~jose/shaft_analysis/, 2000.
[20] D. Dittrich, “Rootkits and hiding files /
directories / processes after a break-in.”
http://staff.washington.edu/dittrich/
misc/faqs/rootkits.faq, 2001.
[21] CERT/CC, “CERT Incident Note IN-2001-05
The “cheese” Worm.” http://www.cert.org/
incident_notes/IN-2001-05.html, May 2001.
[22] CERT/CC, “CERT Incident Note IN-2001-01
Widespread Compromises via “ramen” Toolkit.”
http://www.cert.org/incident_notes/
IN-2001-01.html, January 2001.
[23] CERT/CC, “CERT Advisory CA-2001-11 sadmind/
IIS Worm.” http://www.cert.org/
advisories/CA-2001-11.html, May 2001.
[24] D. Dittrich, “Basic Steps in Forensic Analysis of
Unix Systems.” http://staff.washington.edu/
dittrich/misc/forensics/, 2000.
[25] D. Farmer, “What Are MACtimes?,” Dr. Dobb’s
Journal, October 2000. http://www.ddj.com/
articles/2000/0010/0010f/0010f.htm.
[26] W. Venema and D. Farmer, “The Coroner’s Toolkit.”
http://www.fish.com/forensics/.
[27] T. Miller, “Detecting Loadable Kernel Modules
(LKM).” http://members.prestige.net/
tmiller12/papers/lkm.htm, 2001.
[28] CERT/CC, “CERT/CC Intruder Detection Checklist.”
http://www.cert.org/tech_tips/intruder_
detection_checklist.html.
[29] D. Simpson, “checkps: Linux rootkit detector.” http:
//sourceforge.net/projects/checkps/.
[30] A. Daviel, “rkdet: rootkit detector for Linux.” http:
//vancouver-webpages.com/rkdet/.
[31] S. Aubert, “Rkscan: Rootkit Scanner for Loadable
Kernel-module Rootkits.” http://www.hsc.fr/
ressources/outils/rkscan/index.html.en.
[32] K. Mandia and K. J. Jones, “Carbonite: A Linux
Kernel Module to aid in RootKit detection.” http:
//www.incident-response.org/Carbonite.htm.


 

Quer enviar seu Tutorial?

Envie um e-mail para thorking@gmail.com sem anexos mande no corpo do e-mail.

Obrigado!