-->

quarta-feira, 19 de novembro de 2008

Locações "perigosas" do Registro.

Nota: Este post vem sendo preparado há muito tempo e não está completo ainda. Estou publicando agora porque está atrapalhando o andamento de outras coisas, mas poderá ser largamente editado sem aviso depois da publicação.

O que vou explicar aqui, para quem não está familiarizado e não compreende imediatamente, vai soar como: "PQP! Por que a Microsoft deixa uma brecha de segurança desse tamanho aberta?!"

Na verdade, não é bem assim. Existem boas razões para a maioria dos "problemas" do Windows e esse caso é apenas mais um exemplo de algo que foi criado para dar poder ao usuário e flexibilidade ao SO, mas que pode ser explorado com fins malignos. Um usuário comum ou um xiita Linux (que por mais que diga o contrário, não entende PN de Windows) não vão conseguir enxergar o benefício oculto, por mais que você explique, mas um Power User Windows pode imediatamente lembrar de uma situação onde o domínio da aplicação dessas chaves poderia ter sido útil.



Image File Execution Options (IFEO)

HKLM\SOFTWARE\Microsoft\Windows NT\ CurrentVersion\Image File Execution Options

Nota: "Image", neste contexto, é um termo de programação que nada tem a ver com "fotos".

Esta é a mais simples de demonstrar como funciona e a que mais é usada para enlouquecer os "amigos".

Abaixo da chave IFEO, crie uma chave chamada "calc.exe" e dentro dessa chave adicione um valor chamado "debugger" com o conteúdo "notepad.exe" (pode ter o caminho completo, se você quiser, mas não é necessário nesse caso).



Agora tente executar a Calculadora. Não importará a forma como você tente, o Bloco de Notas será exibido em seu lugar. O único meio de realmente rodar a calculadora sem reverter a alteração em IFEO é renomear o arquivo calc.exe.

Normalmente, abaixo da chave IFEO já existem várias outras chaves, com diversos parâmetros cujo propósito não é inteiramente conhecido. A única coisa realmente suspeita é a presença de sub-chaves com o valor "debugger". E é isso que é observável com o Autoruns, na aba Image Hijacks.



Ignore o valor default "Your Image File Name Here without a path". Esse é só um exemplo de como uma tentativa de documentar o funcionamento de uma chave no Registro pode acabar confundindo o usuário. Veja no exemplo que calc.exe redireciona para notepad.exe.

Um exemplo de uso benigno é feito pelo Process Explorer. Quando você seleciona "Replace Task Manager", PE acrescenta uma entrada em IFEO redirecionando taskmgr.exe para o seu próprio executável.

No geral, IFEO é raramente usada legitimamente a menos que o PC seja de um programador (somente programadores sabem usar debuggers).


AppInit_DLLs

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows

Ao contrário de IFEO, essa locação do Registro não pode ser explorada por Power Users, a menos que sejam (bons) programadores, mas um Power User precisa conhecê-la. Toda e qualquer DLL que esteja listada nesse valor (não é uma chave) é carregada por toda e qualquer aplicação que carregue USER32.DLL. Ou seja: por quase todos os programas do Windows.

O particularmente perigoso nesse caso é que a DLL é carregada no mesmo espaço de memória que a aplicação, tornando-se parte indistinguível da mesma do ponto de vista do executável. Nessa situação fica facílimo (para programadores competentes) usar técnicas de "hooks" e "injection" para alterar o funcionamento de um programa. Isso é prato cheio para malware, mas também tem usos benignos. O danado é que mesmo os usos benignos são discutíveis.

Essa locação é raramente utilizada, mas é explorada pelo Kaspersky Antivirus 2009 para supostamente (foi anunciado em julho, está instalado no meu computador, mas não consigo fazer funcionar) acrescentar um teclado virtual a toda aplicação, contornando qualquer keylogger.



O problema é que qualquer aplicação que faz uso disso tem que ser cuidadosamente construída, porque vai ser carregada no espaço de memória de todas as outras aplicações. Corrompa uma DLL listada em AppInit_DLLs e provavelmente o Windows vai entrar em parafuso. A própria Microsoft recomenda que esse caminho não seja usado.

"We do not recommend that applications use this feature or rely on this feature. There are other techniques that can be used to achieve similar results."

Veja o resultado da peripécia do Kaspersky no Process Explorer:



O que danado o tal "Mozilla Virtual Keyboard" precisa fazer no espaço de memória do Regedit? E duas vezes? Felizmente o uso de memória é pequeno pois cada DLL tem apenas 13K.




Por que a MS não enxerga essas locações como "vetores de malware" ou "brechas de segurança"?

Porque não são.

IFEO e AppInit_DLLs estão sob HKEY_LOCAL_MACHINE no Registro. Só é possível escrever nessas locações se você estiver logado como administrador e se você deu a oportunidade para um malware rodar enquanto você estava logado como administrador, a sua máquina já pertence a ele. Como dizem em inglês: "You already lost" e "pwned!".

Nessa condição o malware pode substituir ou acrescentar o arquivo que quiser, se entranhando onde bem entender e não precisa explorar essas locações pois as possibilidades são ilimitadas. Nem o Linux ou o MacOS são seguros se você rodar um malware como Root. Na realidade eu tenho mais medo das aplicações que tentam fazer uso "legítimo" dessas chaves (ou de amigos palhaços, como no caso de IFEO) do que de malware.

2 comentários:

  1. Ahhh, agora entendi como o PE consegue se situar como Taskmanager default. Engenhoso, muito engenhoso.
    E, de fato, não dá para assumir esses ítens como brechas, porque para poder ter acesso a eles, o malware já está rodando como Admin, e aí, tanto faz, já era.

    ResponderExcluir
  2. Pois é... ai nesse caso entra aquele ditado: Salve a alma, porque o corpo já era. (no caso de "instalar" um malware logado como Admin).

    ResponderExcluir

Siga as regras do blog ou seu comentário será ignorado.