Ler em inglês

Compartilhar via


RootkitRevealer v1.71

Por Mark Russinovich

Publicado em: 1 de novembro de 2006

Download Baixar o RootkitRevealer (231 KB)
Execute agora do Sysinternals Live.

Introdução

RootkitRevealer é um utilitário avançado de detecção de rootkit. Ele é executado no Windows XP (32 bits) e no Windows Server 2003 (32 bits) e sua saída lista as discrepâncias da API do sistema de arquivos e do Registro que podem indicar a presença de um rootkit no modo de usuário ou no modo kernel. O RootkitRevealer detecta com sucesso muitos rootkits persistentes, incluindo AFX, Vanquish e HackerDefender (observação: o RootkitRevealer não se destina a detectar rootkits como o Fu, que não tentam ocultar seus arquivos ou chaves do registro). Se você usá-lo para identificar a presença de um rootkit, informe-nos!

O motivo pelo qual não há mais uma versão de linha de comando é que os autores de malware começaram a direcionar a verificação de RootkitRevealer usando seu nome executável. Portanto, atualizamos o RootkitRevealer para executar sua verificação a partir de uma cópia nomeada aleatoriamente de si mesma que é executada como um serviço do Windows. Esse tipo de execução não é adequado para uma interface de linha de comando. Observe que você pode usar opções de linha de comando para executar uma verificação automática com resultados registrados em um arquivo, que é o equivalente ao comportamento da versão de linha de comando.

O que é um Rootkit?

O termo rootkit é usado para descrever os mecanismos e técnicas pelos quais o malware, incluindo vírus, spyware e trojans, tenta ocultar sua presença de bloqueadores de spyware, antivírus e utilitários de gerenciamento de sistema. Há várias classificações de rootkit, dependendo se o malware sobrevive à reinicialização e se é executado no modo de usuário ou no modo kernel.

Rootkits persistentes
Um rootkit persistente é aquele associado ao malware que é ativado toda vez que o sistema é inicializado. Como esse malware contém código que deve ser executado automaticamente a cada inicialização do sistema ou quando um usuário faz logon, ele deve armazenar o código em um armazenamento persistente, como o Registro ou o sistema de arquivos, e configurar um método pelo qual o código seja executado sem a intervenção do usuário.

Rootkits baseados em memória
Os rootkits baseados em memória são malwares que não possuem código persistente e, portanto, não sobrevivem a uma reinicialização.

Rootkits no modo de usuário
Há muitos métodos pelos quais os rootkits tentam escapar da detecção. Por exemplo, um rootkit de modo de usuário pode interceptar todas as chamadas para as APIs FindFirstFile/FindNextFile do Windows, que são usadas pelos utilitários de exploração do sistema de arquivos, incluindo o Explorer e o prompt de comando, para enumerar o conteúdo dos diretórios do sistema de arquivos. Quando um aplicativo executa uma listagem de diretórios que, de outra forma, retornaria resultados que contêm entradas que identificam os arquivos associados ao rootkit, o rootkit intercepta e modifica a saída para remover as entradas.

A API nativa do Windows serve como a interface entre clientes do modo de usuário e serviços do modo kernel e rootkits do modo de usuário mais sofisticados interceptam sistema de arquivos, Registro e funções de enumeração de processos da API nativa. Isso impede sua detecção por scanners que comparam os resultados de uma enumeração da API do Windows com os retornados por uma enumeração da API nativa.

Rootkits no modo kernel
Os rootkits no modo kernel podem ser ainda mais poderosos, pois não apenas podem interceptar a API nativa no modo kernel, mas também podem manipular diretamente as estruturas de dados nesse modo. Uma técnica comum para ocultar a presença de um processo de malware é remover o processo da lista de processos ativos do kernel. Como as APIs de gerenciamento de processos dependem do conteúdo da lista, o processo de malware não será exibido em ferramentas de gerenciamento de processos, como o Gerenciador de Tarefas ou o Process Explorer.

Como funciona o RootkitRevealer

Como os rootkits persistentes funcionam alterando os resultados da API para que uma exibição do sistema que usa APIs seja diferente da exibição real no armazenamento, o RootkitRevealer compara os resultados de uma verificação do sistema no nível mais alto com o nível mais baixo. O nível mais alto é a API do Windows e o nível mais baixo é o conteúdo bruto de um volume do sistema de arquivos ou o hive do Registro (um arquivo do hive é o formato de armazenamento em disco de Registro). Assim, os rootkits, sejam no modo de usuário ou no modo kernel, que manipulam a API do Windows ou a API nativa para remover sua presença de uma listagem de diretórios, por exemplo, serão vistos pelo RootkitRevealer como uma discrepância entre as informações retornadas pela API do Windows e as observadas na verificação bruta das estruturas do sistema de arquivos de um volume FAT ou NTFS.

Um rootkit pode se ocultar de RootkitRevealer
Teoricamente, é possível que um rootkit se oculte de RootkitRevealer. Isso exigiria a interceptação das leituras do RootkitRevealer dos dados do hive do Registro ou dos dados do sistema de arquivos e a alteração do conteúdo dos dados de forma que os dados ou arquivos do Registro do rootkit não estivessem presentes. No entanto, isso exigiria um nível de sofisticação nunca visto em rootkits até o momento. As alterações nos dados exigiriam um conhecimento profundo dos formatos NTFS, FAT e hive do Registro, além da capacidade de alterar as estruturas de dados de forma que escondam o rootkit, mas não causem estruturas inconsistentes ou inválidas ou discrepâncias de efeito colateral que seriam sinalizado por RootkitRevealer.

Há uma maneira infalível de perceber a presença de um rootkit
Em geral, não de dentro de um sistema em execução. Um rootkit no modo kernel pode controlar qualquer aspecto do comportamento de um sistema, de modo que as informações retornadas por qualquer API, incluindo as leituras brutas do hive do Registro e os dados do sistema de arquivos executados pelo RootkitRevealer, possam ser comprometidas. Embora a comparação de uma verificação online de um sistema e uma verificação offline de um ambiente seguro, como iniciar em uma instalação de sistema operacional baseada em CD, seja mais confiável, os rootkits podem direcionar essas ferramentas para evitar a detecção até mesmo por eles.

O ponto principal é que nunca haverá um scanner de rootkit universal, mas os scanners mais poderosos serão os scanners de comparação online/offline que se integram ao antivírus.

Usando o RootkitRevealer

O RootkitRevealer requer que a conta a partir da qual ele é executado tenha atribuídos os privilégios de Backup de arquivos e diretórios, Carregar drivers e Realizar tarefas de manutenção de volume (no Windows XP e superior). O grupo Administradores recebe esses privilégios por padrão. Para minimizar os falsos positivos, execute o RootkitRevealer em um sistema ocioso.

Para obter melhores resultados, saia de todos os aplicativos e mantenha o sistema ocioso durante o processo de verificação de RootkitRevealer.

Se você tiver dúvidas ou problemas, visite o Fórum do Sysinternals RootkitRevealer.

Verificação manual

Para examinar um sistema, inicie-o no sistema e pressione o botão Examinar. O RootkitRevealer verifica o sistema relatando suas ações em uma área de status na parte inferior de sua janela e observando discrepâncias na lista de saída. As opções que você pode configurar:

  • Ocultar Arquivos de Metadados NTFS: essa opção está ativada por padrão e o RootkitRevealer não mostra arquivos de metadados NTFS padrão, que estão ocultos na API do Windows.
  • Verificar Registro: essa opção está ativada por padrão. Desmarcá-la faz com que o RootkitRevealer não execute uma verificação do Registro.

Iniciando uma Verificação Automática

O RootkitRevealer dá suporte a várias opções para sistemas de verificação automática:

Uso: rootkitrevealer [-a [-c] [-m] [-r] arquivo de saída]

Parâmetro Descrição
-a Verificar e sair automaticamente quando terminar.
-c Formatar saída como CSV.
-m Mostrar arquivos de metadados do NTFS.
-r Não verificar o Registro.

Observe que o local de saída do arquivo deve estar em um volume local.

Se você especificar a opção -c, ela não relatará o progresso e as discrepâncias serão impressas no formato CSV para facilitar a importação em um banco de dados. Você pode realizar verificações de sistemas remotos executando-o com o utilitário do Sysinternals PsExec usando uma linha de comando como a seguinte:

psexec \\remote -c rootkitrevealer.exe -a c:\windows\system32\rootkit.log

Interpretando a saída

Esta é uma captura de tela de RootkitRevealer que detecta a presença do rootkit HackerDefender popular. As discrepâncias da chave do Registro mostram que as chaves do Registro que armazenam o driver de dispositivo e as configurações do serviço do HackerDefender não são visíveis para a API do Windows, mas estão presentes na verificação bruta dos dados do hive do Registro. Da mesma forma, os arquivos associados ao HackerDefender não são visíveis para as verificações de diretório da API do Windows, mas estão presentes na verificação dos dados brutos do sistema de arquivos.

Rootkit Revealer

Você deve examinar todas as discrepâncias e determinar a probabilidade de indicarem a presença de um rootkit. Infelizmente, não há uma maneira definitiva de determinar, com base na saída, se um rootkit está presente, mas você deve examinar todas as discrepâncias relatadas para garantir que sejam explicáveis. Se você determinar que tem um rootkit instalado, pesquise na Web as instruções de remoção. Se não tiver certeza de como remover um rootkit, reformate o disco rígido do sistema e reinstale o Windows.

Além das informações abaixo sobre possíveis discrepâncias do RootkitRevealer, o Fórum do RootkitRevealer no Sysinternals discute os rootkits detectados e falsos positivos específicos.

Oculto da API do Windows

Essas discrepâncias são as exibidas pela maioria dos rootkits; no entanto, se você não verificou os arquivos de metadados do NTFS, deverá ver várias dessas entradas em qualquer volume NTFS, pois o NTFS oculta seus arquivos de metadados, como $MFT e $Secure, da API do Windows. Os arquivos de metadados presentes nos volumes NTFS variam de acordo com a versão do NTFS e os recursos do NTFS habilitados no volume. Também há produtos antivírus, como o Kaspersky Antivirus, que usam técnicas de rootkit para ocultar dados armazenados em fluxos de dados alternativos do NTFS. Se você estiver executando um scanner de vírus, verá uma discrepância Oculto da API do Windows para um fluxo de dados alternativo em cada arquivo NTFS. O RootkitRevealer não dá suporte a filtros de saída porque os rootkits podem tirar proveito de qualquer filtragem. Por fim, se um arquivo for excluído durante uma verificação, você também poderá ver essa discrepância.

Essa é uma lista de arquivos de metadados do NTFS definidos a partir do Windows Server 2003:

  • $AttrDef
  • $BadClus
  • $BadClus:$Bad
  • $BitMap
  • $Boot
  • $LogFile
  • $Mft
  • $MftMirr
  • $Secure
  • $UpCase
  • $Volume
  • $Extend
  • $Extend\$Reparse
  • $Extend\$ObjId
  • $Extend\$UsnJrnl
  • $Extend\$UsnJrnl:$Max
  • $Extend\$Quota

Acesso negado.
O RootkitRevealer nunca deve relatar essa discrepância, pois usa mecanismos que lhe permitem acessar qualquer arquivo, diretório ou chave do registro em um sistema.

Visível na API do Windows, índice de diretório, mas não na MFT.
Visível na API do Windows, mas não na MFT ou no índice de diretório.
Visível na API do Windows, MFT, mas não no índice de diretório.
Visível no índice de diretório, mas não na API do Windows ou na MFT.

Uma verificação do sistema de arquivos consiste em três componentes: a API do Windows, a Tabela de arquivos mestre NTFS (MFT) e as estruturas de índice de diretório em disco NTFS. Essas discrepâncias indicam que um arquivo aparece em apenas uma ou duas das verificações. Um motivo comum é que um arquivo é criado ou excluído durante as verificações. Esse é um exemplo de relatório de discrepância do RootkitRevealer para um arquivo criado durante a verificação:

C:\newfile.txt
01/03/2005 17:26
8 bytes
Visível na API do Windows, mas não na MFT ou no índice de diretório.

O comprimento da API do Windows não é consistente com os dados brutos do hive.
Os rootkits podem tentar se ocultar deturpando o tamanho de um valor do Registro para que seu conteúdo não fique visível para a API do Windows. Você deve examinar qualquer discrepância, embora também possa aparecer como resultado de valores do Registro que mudam durante uma verificação.

Tipos incompatíveis entre a API do Windows e os dados brutos do hive.
Os valores do Registro têm um tipo, como DWORD e REG_SZ, e essa discrepância indica que o tipo de valor relatado por meio da API do Windows difere daquele dos dados brutos do hive. Um rootkit pode mascarar seus dados armazenando-os como um valor REG_BINARY, por exemplo, e fazendo com que a API do Windows acredite que seja um valor REG_SZ; se armazenar um 0 no início dos dados, a API do Windows não poderá acessar os dados subsequentes.

O nome da chave contém nulos incorporados.
A API do Windows trata os nomes das chaves como cadeias de caracteres terminadas em nulo, enquanto o kernel os trata como cadeias de caracteres contadas. Portanto, é possível criar chaves do Registro visíveis para o sistema operacional, mas apenas parcialmente visíveis para ferramentas de registro como o Regedit. O código de exemplo Reghide no Sysinternals demonstra essa técnica, que é usada por malware e rootkits para ocultar dados do Registro. Use o utilitário RegDelNull do Sysinternals para excluir chaves com nulos incorporados.

Incompatibilidade de dados entre a API do Windows e os dados brutos do hive.
Essa discrepância ocorrerá se um valor do Registro for atualizado enquanto a verificação do Registro estiver em andamento. Os valores que mudam com frequência incluem carimbos de data/hora, como o valor de tempo de atividade do Microsoft SQL Server, mostrado abaixo, e os valores da "última verificação" do verificador de vírus. Investigue qualquer valor informado para garantir que seja um valor válido do Registro do aplicativo ou do sistema.

HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\RECOVERYMANAGER\MSSQLServer\uptime_time_utc
01/03/2005 16:33
8 bytes

Recursos do Rootkit

Os seguintes sites da Web e livros são fontes de mais informações sobre rootkits:

Sony, Rootkits e Gerenciamento de Direitos Digitais Foram Longe Demais
Leia a entrada do blog do Mark sobre sua descoberta e análise de um rootkit da Sony em um de seus computadores.

Desenterrando rootkits
O artigo de junho da Windows IT Pro Magazine do Mark fornece uma visão geral das tecnologias de rootkit e como o RootkitRevealer funciona.

Rootkits: Subvertendo o Kernel do Windows
Este livro de Greg Hoglund e Jamie Butler é o tratamento mais abrangente disponível sobre os rootkits.

www.phrack.org
Esse site armazena o arquivo da Phrack, uma revista voltada para crackers onde os desenvolvedores discutem falhas em produtos relacionados à segurança, técnicas de rootkit e outros truques de malware.

A Arte da Pesquisa e Defesa de Vírus do Computador, por Peter Szor

Malware: Combatendo Código Mal-intencionado, por Ed Skoudis e Lenny Zeltser

Windows Internals, 4th Edition, por Mark Russinovich e Dave Solomon (o livro não fala sobre os rootkits, mas entender a arquitetura do Windows ajuda a entender os rootkits).

Download Baixar o RootkitRevealer (231 KB)

Executar agora a partir do Sysinternals Live.