Ler em inglês

Partilhar via


RootkitRevealer v1,71

Por Mark Russinovich

Publicado em: 1 de novembro de 2006

DownloadBaixar RootkitRevealer (231 KB)
Execute agora a partir do Sysinternals Live.

Introdução

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

A razão pela qual não há mais uma versão de linha de comando é que os autores de malware começaram a atacar a verificação do 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 mesmo que é executada como um serviço do Windows. Esse tipo de execução não é propício 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 malwares, incluindo vírus, spyware e trojans, tentam esconder sua presença de bloqueadores de spyware, antivírus e utilitários de gerenciamento do sistema. Existem 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 a malware que é ativado cada vez que o sistema é inicializado. Como esses malwares contêm código que deve ser executado automaticamente a cada início de sistema ou quando um usuário faz login, eles devem 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 é 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 têm código persistente e, portanto, não sobrevivem a uma reinicialização.

Rootkits de modo de usuário
Existem muitos métodos pelos quais os rootkits tentam escapar da deteção. Por exemplo, um rootkit de modo de usuário pode intercetar todas as chamadas para as APIs FindFirstFile/FindNextFile do Windows, que são usadas por 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ório que, de outra forma, retornaria resultados que contêm entradas que identificam os arquivos associados ao rootkit, o rootkit interceta e modifica a saída para remover as entradas.

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

Rootkits de modo kernel
Os rootkits de modo kernel podem ser ainda mais poderosos, uma vez que, não só podem intercetar a API nativa no modo kernel, mas também podem manipular diretamente as estruturas de dados do modo kernel. 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 usando APIs seja diferente da visualização real no armazenamento, o RootkitRevealer compara os resultados de uma verificação do sistema no nível mais alto com os do 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 hive do Registro (um arquivo hive é o formato de armazenamento em disco do Registro). Assim, rootkits, seja 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ório, por exemplo, serão vistos pelo RootkitRevealer como uma discrepância entre as informações retornadas pela API do Windows e as vistas na verificação bruta das estruturas do sistema de arquivos de um volume FAT ou NTFS.

Um Rootkit pode se esconder do RootkitRevealer
Teoricamente, é possível que um rootkit se esconda do RootkitRevealer. Fazer isso exigiria intercetar as leituras do RootkitRevealer de dados do hive do Registro ou dados do sistema de arquivos e alterar o conteúdo dos dados de modo que os dados ou arquivos do Registro do rootkit não estejam presentes. No entanto, isso exigiria um nível de sofisticação não visto em rootkits até o momento. Alterações nos dados exigiriam um conhecimento íntimo dos formatos NTFS, FAT e hive do Registro, além da capacidade de alterar estruturas de dados de modo que elas ocultem o rootkit, mas não causem estruturas inconsistentes ou inválidas ou discrepâncias de efeito colateral que seriam sinalizadas pelo RootkitRevealer.

Existe uma maneira infalível de saber da presença de um rootkit
Em geral, não de dentro de um sistema em execução. Um rootkit de modo kernel pode controlar qualquer aspeto do comportamento de um sistema para que as informações retornadas por qualquer API, incluindo as leituras brutas do hive do Registro e os dados do sistema de arquivos realizadas pelo RootkitRevealer, possam ser comprometidas. Embora a comparação entre uma verificação on-line de um sistema e uma verificação off-line de um ambiente seguro, como uma inicialização em uma instalação de sistema operacional baseado em CD, seja mais confiável, os rootkits podem direcionar essas ferramentas para evitar a deteção até mesmo por elas.

A conclusão é que nunca haverá um scanner rootkit universal, mas os scanners mais poderosos serão scanners de comparação on-line/off-line que se integram com antivírus.

Usando o RootkitRevealer

RootkitRevealer requer que a conta a partir da qual sua execução tenha atribuído a ele os arquivos de backup e diretórios, Carregar drivers e Executar tarefas de manutenção de volume (no Windows XP e superior) privilégios. 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 do RootkitRevealer.

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

Digitalização manual

Para verificar um sistema, inicie-o no sistema e pressione o botão Digitalizar. 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 faz com que o RootkitRevealer não mostre arquivos de metadados NTFS padrão, que estão ocultos da API do Windows.
  • Scan Registry: esta opção está ativada por padrão. Desmarcando-o tem RootkitRevealer não executar uma verificação do Registro.

Iniciando uma verificação automática

RootkitRevealer suporta várias opções para sistemas de varredura automática:

Uso: rootkitrevealer [-a [-c] [-m] [-r] outputfile]

Parâmetro Description
-a Analise e saia automaticamente quando terminar.
-c Formate a saída como CSV.
-m Mostrar ficheiros de metadados NTFS.
-r Não analise o Registo.

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 para um banco de dados. Você pode executar verificações de sistemas remotos executando-o com o utilitário 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 do RootkitRevealer detetando a presença do popular rootkit HackerDefender. As discrepâncias da chave do Registro mostram que as chaves do Registro que armazenam o driver de dispositivo e as configurações de serviço do HackerDefender não estã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 que elas indiquem 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 elas sejam explicáveis. Se você determinar que você tem um rootkit instalado, procure na web para instruções de remoção. Se você não tiver certeza de como remover um rootkit, você deve reformatar o disco rígido do sistema e reinstalar o Windows.

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

Oculto da API do Windows

Estas discrepâncias são as exibidas pela maioria dos rootkits; no entanto, se você não tiver verificado a opção Ocultar arquivos de metadados NTFS, você deve esperar ver várias dessas entradas em qualquer volume NTFS, já que 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 NTFS que foram habilitados no volume. Existem também produtos antivírus, como o Kaspersky Antivirus, que usam técnicas de rootkit para ocultar dados que armazenam em fluxos de dados alternativos NTFS. Se você estiver executando esse verificador de vírus, verá uma discrepância Oculto da API do Windows para um fluxo de dados alternativo em cada arquivo NTFS. RootkitRevealer não suporta filtros de saída porque rootkits podem tirar proveito de qualquer filtragem. Finalmente, se um arquivo for excluído durante uma verificação, você também poderá ver essa discrepância.

Esta é uma lista de arquivos de metadados 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

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

Visível na API do Windows, índice de diretório, mas não no 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 MFT.

Uma verificação do sistema de arquivos consiste em três componentes: a API do Windows, a MFT (Master File Table) do NTFS e as estruturas de índice de diretório no disco NTFS. Essas discrepâncias indicam que um arquivo aparece em apenas uma ou duas das varreduras. Uma razão comum é que um arquivo é criado ou excluído durante as verificações. Este é um exemplo do 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 dados brutos do hive.
Os rootkits podem tentar se esconder 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 ela também possa aparecer como resultado de valores do Registro que mudam durante uma verificação.

Incompatibilidade de tipo 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 observa que o tipo de um valor, conforme relatado por meio da API do Windows, difere 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 nomes de chave como cadeias de caracteres terminadas em nulo, enquanto o kernel os trata como cadeias de caracteres contadas. Assim, é possível criar chaves do Registro que são visíveis para o sistema operacional, mas apenas parcialmente visíveis para ferramentas do 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 Sysinternals RegDelNull 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 de "última verificação" do verificador de vírus. Você deve investigar qualquer valor relatado para garantir que seja um aplicativo válido ou um valor do Registro 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 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 de Mark sobre sua descoberta e análise de um rootkit Sony em um de seus computadores.

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

Rootkits: Subvertendo o kernel do Windows
Este livro de Greg Hoglund e Jamie Butler é o tratamento mais abrangente de rootkits disponíveis.

www.phrack.org
Este site armazena o arquivo de Phrack, uma revista orientada 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 de Computador, por Peter Szor

Malware: Combatendo Código Malicioso, por Ed Skoudis e Lenny Zeltser

Windows Internals, 4th Edition, de Mark Russinovich e Dave Solomon (o livro não fala sobre rootkits, mas entender a arquitetura do Windows é útil para entender rootkits).

DownloadBaixar RootkitRevealer (231 KB)

Execute agora a partir do Sysinternals Live.