Análise de malware do Skeleton Key

A tradução do artigo foi preparada especialmente para os alunos do curso de engenharia reversa .




Sumário


Pesquisadores da CTU (Dell SecureWorks Counter Threat Unit) descobriram malware que ignora os sistemas de autenticação do Active Directory (AD) que usam autenticação de fator único (somente senha). Os invasores podem usar a senha de sua escolha para autenticação como qualquer usuário. Esse malware é chamado de "Chave do esqueleto" (chave universal).

Os pesquisadores da CTU descobriram o Skeleton Key em uma rede cliente que usava autenticação de fator único para acessar webmail e VPNs, dando aos invasores acesso sem impedimentos a serviços de acesso remoto. A Chave de esqueleto é implantada como um patch na memória nos controladores de domínio AD da vítima para permitir que um invasor se autentique como qualquer usuário, enquanto usuários legítimos continuam a autenticação normalmente. O desvio de autenticação do Skeleton Key também permite que invasores de acesso físico efetuem login e desbloqueiem sistemas que autenticam usuários em controladores de domínio do AD comprometidos.

Os únicos exemplos de chave de esqueleto conhecidos no momento da publicação careciam de persistência - eles devem ser reimplantados quando o controlador de domínio reiniciar. Os pesquisadores da CTU suspeitam que os invasores só podem identificar uma reinicialização com base em sua incapacidade de se autenticar com êxito, pois nenhum outro malware foi detectado nos controladores de domínio. Entre oito horas e oito dias após o reinício, os atacantes usaram outro malware de acesso remoto já implantado na rede da vítima para reimplementar a Chave do Esqueleto nos controladores de domínio.

A implantação da chave de esqueleto requer credenciais de administrador de domínio. Os pesquisadores da CTU observaram os atacantes implantarem a chave do esqueleto usando credenciais roubadas de servidores de missão crítica, estações de trabalho de administrador e controladores de domínio de destino.

Análise


Inicialmente, os pesquisadores da CTU observaram uma amostra da Skeleton Key chamada ole64.dll em uma rede comprometida (consulte a Tabela 1).

atributosignificado ou descrição
nome do arquivoole64.dll
md5bf45086e6334f647fda33576e2a05826
sha15083b17ccc50dd0557dfc544f84e2ab55d6acd92
tempo de compilação2014-02-19 09:31:29
implantadoconforme necessário (geralmente baixado usando malware e excluído após o uso)
tamanho do arquivo49664 bytes
secções.text, .rdata, .data, .pdata, .rsrc, .reloc
exportar

ii (instala o patch)

uu (remove o patch)

dllentrypoint (ponto de entrada da dll padrão)


Tabela 1. Chave de esqueleto de amostra ole64.dll .

Enquanto estudavam ole64.dll , os pesquisadores da CTU descobriram uma versão mais antiga do msuta64.dll em um "host intermediário" na rede da vítima (consulte a Tabela 2). Um host intermediário é qualquer sistema anteriormente comprometido por malware malicioso de acesso remoto. Esta opção inclui operadores de depuração adicionais que permitem ao desenvolvedor do Skeleton Key observar os endereços de memória envolvidos no processo de correção.

atributosignificado ou descrição
nome do arquivomsuta64.dll
md566da7ed621149975f6e643b4f9886cfd
sha1ad61e8daeeba43e442514b177a1b41ad4b7c6727
tempo de compilação2012-09-20 08:07:12
implantado2013-09-29 07:58:16
tamanho do arquivo50688 bytes
secções.text, .rdata, .data, .pdata, .rsrc, .reloc
exportar

ii (instala o patch)

uu (remove o patch)

dllentrypoint (ponto de entrada da dll padrão)


Tabela 2. Amostra de chave de esqueleto msuta64.dll .

Os invasores usaram o seguinte algoritmo para implantar a chave do esqueleto como um arquivo DLL de 64 bits:

  1. Baixe o arquivo DLL da chave de esqueleto para o diretório de armazenamento temporário no host de armazenamento temporário na rede da vítima. Os pesquisadores da CTU observaram três nomes de arquivos associados ao arquivo DLL do Skeleton Key: ole64.dll, ole.dll e msuta64.dll. Os sistemas Windows incluem o arquivo ole32.dll legítimo, mas não está relacionado a este malware.
  2. Tente acessar recursos administrativos em controladores de domínio usando uma lista de credenciais de administrador de domínio roubadas.
  3. Se as credenciais roubadas não forem mais válidas, use as ferramentas de roubo de senha para extrair as senhas do administrador do domínio em texto não criptografado de um dos seguintes locais, o que implica familiaridade com o ambiente da vítima:

    • memória de outro servidor disponível na rede vítima
    • trabalhos de administrador de domínio
    • controladores de domínio de destino
    • Use credenciais de administrador de domínio válidas para copiar a DLL da chave de esqueleto em C: \ WINDOWS \ system32 \ nos controladores de domínio de destino.
  4. Use o utilitário PsExec para executar remotamente o arquivo DLL da chave de esqueleto nos controladores de domínio de destino usando o comando rundll32. A senha escolhida pelo invasor é formatada como uma senha de hash NTLM e não é apresentada em texto não criptografado. Após implantar a chave de esqueleto, o invasor pode se autenticar como qualquer usuário usando o hash de senha NTLM: psexec -accepteula \\% TARGET-DC% rundll32 < DLL> ii < NTLM> configurado NTLM: psexec -accepteula \\% TARGET-DC% rundll32 < DLL> ii < NTLM>
  5. Exclua o arquivo DLL da chave de esqueleto de C: \ WINDOWS \ system32 \ nos controladores de domínio de destino.
  6. Exclua o arquivo DLL da chave de esqueleto do diretório intermediário no host de transição.
  7. Teste a implantação bem-sucedida da Chave do esqueleto usando os comandos "net use" com uma conta e senha do AD que correspondam ao hash NTLM configurado.

Os pesquisadores da CTU descobriram um padrão de senha incorporado que sugere que um grupo de atacantes implantou a Chave do Esqueleto em várias organizações.

O uso do PsExec pode ser detectado em um ambiente Windows, alertando sobre os eventos do Windows gerados pelo utilitário. Os seguintes identificadores de eventos, observados nos controladores de domínio de destino, registram a ferramenta PsExec que instala seu serviço, inicia o serviço e interrompe o serviço. Esses eventos são gerados sempre que o PsExec é usado, portanto, é necessária uma análise adicional dos eventos para determinar se eles são maliciosos ou legítimos:

  • Eventos inesperados de instalação do serviço PSEXESVC (código de evento 7045) nos controladores de domínio do AD:

    Nome do Log : Sistema
    Fonte : Service Control Manager
    Resumo : Um serviço está instalado no sistema.
    Nome do arquivo de serviço :
    %SystemRoot%\PSEXESVC.exe
  • Eventos inesperados de início / parada do serviço PSEXESVC (código de evento 7036) nos controladores de domínio do AD:

    Nome do Log : Sistema
    Fonte : Service Control Manager
    Resumo :
    • "O serviço PSEXESVC está operacional."
    • "O serviço PSEXESVC passou para um estado parado."

Como uma chave de esqueleto em um estado de execução, você precisa executar as seguintes tarefas:

  1. Verifique se há uma das seguintes versões compatíveis de 64 bits do Windows. O malware não é compatível com versões de 32 bits do Windows ou versões do Windows Server iniciando no Windows Server 2012 (6.2).

    • 6.1 (Windows 2008 R2)
    • 6.0 (Windows Server 2008)
    • 5.2 (Windows 2003 R2)
  2. Use a função SeDebugPrivilege para obter os direitos de administrador necessários para gravar no processo de serviço do subsistema de segurança local (LSASS). Esse processo controla os recursos de segurança do domínio do AD, incluindo a autenticação de conta de usuário.
  3. Liste os processos disponíveis para obter o identificador do processo LSASS.
  4. Obtenha endereços para funções relacionadas à autenticação que serão corrigidas:

    • CDLocateCSystem - localizado em cryptdll.dll
    • SamIRetrieveMultiplePrimaryCredentials - localizado em samsrv.dll
    • SamIRetrievePrimaryCredentials - localizado em samsrv.dll
  5. Faça as configurações do sistema operacional específico usando a variável global definida durante a verificação de compatibilidade na etapa 1.
  6. Use a função OpenProcess para obter o identificador do processo LSASS.
  7. Reserve e aloque o espaço de memória necessário para editar e corrigir a memória do processo LSASS.
  8. Corrigindo funções relacionadas com base no sistema operacional:

    • CDLocateCSystem (todas as versões compatíveis do Windows)
    • SamIRetrieveMultiplePrimaryCredentials (apenas Windows 2008 R2 (6.1))
    • SamIRetrievePrimaryCredentials (todas as versões compatíveis do Windows, exceto o Windows 2008 R2 (6.1))

Para corrigir cada função:

  1. Chame a função VirtualProtectEx para alterar a proteção de memória para permitir a gravação nas alocações de memória necessárias (PAGE_EXECUTE_READWRITE, 0x40). Esta etapa permite atualizar o código da função na memória.
  2. Chame a função WriteProcessMemory para alterar o endereço da função de destino para que aponte para o código corrigido. Essa alteração faz com que a chamada de função use o patch.
  3. Restaure a proteção de memória original chamando o VirtualProtectEx com os sinalizadores de proteção de memória original. Esta etapa é necessária para evitar alocação suspeita de memória para gravação e execução.

Após o patch, um invasor pode usar a senha da chave de esqueleto configurada durante a implantação para efetuar login como qualquer usuário do domínio. Usuários legítimos ainda podem fazer login usando suas próprias senhas. Esse desvio de autenticação se aplica a todos os serviços que usam autenticação unidirecional do AD, como webmail e VPN, e também permite que um invasor com acesso físico a um sistema comprometido desbloqueie um computador digitando uma senha incorporada no teclado.

Possível associação com problemas de replicação de domínio


Código malicioso O Skeleton Key não transmite tráfego de rede, o que torna a descoberta baseada em rede ineficaz. No entanto, esse malware está envolvido em problemas de replicação de domínio que podem indicar infecção. Logo após cada implantação do malware Skeleton Key detectada pelos pesquisadores da CTU, os controladores de domínio encontraram problemas de replicação que não podiam ser explicados ou resolvidos pelo Suporte da Microsoft e, finalmente, foi necessária uma reinicialização para resolvê-los. Essas reinicializações removeram o desvio de autenticação da chave de esqueleto porque o malware não possui um mecanismo de persistência. Na fig. A Figura 1 mostra a linha do tempo dessas reinicializações, bem como o subsequente roubo de senhas por invasores, a expansão lateral e a implantação da Chave do esqueleto. As realocações geralmente ocorreram algumas horas ou vários dias após a reinicialização.


Figura 1. Relação de implantação e reinicialização observada pelos pesquisadores da CTU, abril - julho de 2014 (Fonte: Dell SecureWorks)

Contramedidas


O código malicioso Skeleton Key ignora a autenticação e não gera tráfego de rede. Como resultado, os sistemas de detecção e prevenção de intrusões de rede (IDS / IPS) não detectam essa ameaça. No entanto, os pesquisadores da CTU anotaram as assinaturas YARA no Apêndice A para descobrir a DLL da chave do esqueleto e o código que ele insere na memória do processo LSASS.

Indicadores de ameaças


Os indicadores de ameaça na Tabela 3 podem ser usados ​​para detectar atividades relacionadas ao malware Skeleton Key.

indicadortipocontexto
66da7ed621149975f6e643b4f9886cfdhash md5patch de chave de esqueleto msuta64.dll
ad61e8daeeba43e442514b177a1b41ad4b7c6727has1 sha1patch de chave de esqueleto msuta64.dll
bf45086e6334f647fda33576e2a05826hash md5patch chave de esqueleto ole64.dl
5083b17ccc50dd0557dfc544f84e2ab55d6acd92has1 sha1patch chave de esqueleto ole64.dl

Tabela 3. Indicadores para a chave do esqueleto.

Conclusão


O CTU Research Group recomenda que as organizações implementem os seguintes recursos de segurança da Chave do Esqueleto:

  • A autenticação multifator para todas as soluções de acesso remoto, incluindo VPN e email remoto, não permite que os agentes de ameaças ignorem a autenticação ou fator único usando credenciais estáticas roubadas.
  • Um log de auditoria de criação de processo em estações de trabalho e servidores, incluindo controladores de domínio AD, pode detectar implantações do Skeleton Key. Em particular, as organizações devem procurar os seguintes artefatos:

    • Processos inesperados do PsExec.exe e uso do argumento da linha de comando PsExec "-accepteula"
    • Processos inesperados do rundll32.exe
    • Manipular argumentos semelhantes aos códigos de hash NTLM (32 caracteres contendo números de 0 a 9 e caracteres AF)
  • O monitoramento de eventos do Windows Service Manager nos controladores de domínio do AD pode detectar eventos inesperados de instalação de serviços (código de evento 7045) e eventos de inicialização / parada (código de evento 7036) para o serviço PSEXESVC PsExec.

Apêndice A - Assinaturas YARA


As seguintes assinaturas YARA detectam a presença de uma chave de esqueleto no sistema, verificando um arquivo suspeito ou um despejo de memória de controladores de domínio do Active Directory que supostamente contêm a chave de esqueleto.

 rule skeleton_key_patcher { strings: $target_process = "lsass.exe" wide $dll1 = "cryptdll.dll" $dll2 = "samsrv.dll" $name = "HookDC.dll" $patched1 = "CDLocateCSystem" $patched2 = "SamIRetrievePrimaryCredentials" $patched3 = "SamIRetrieveMultiplePrimaryCredentials" condition: all of them } rule skeleton_key_injected_code { strings: $injected = { 33 C0 85 C9 0F 95 C0 48 8B 8C 24 40 01 00 00 48 33 CC E8 4D 02 00 00 48 81 C4 58 01 00 00 C3 } $patch_CDLocateCSystem = { 48 89 5C 24 08 48 89 74 24 10 57 48 83 EC 20 48 8B FA 8B F1 E8 ?? ?? ?? ?? 48 8B D7 8B CE 48 8B D8 FF 50 10 44 8B D8 85 C0 0F 88 A5 00 00 00 48 85 FF 0F 84 9C 00 00 00 83 FE 17 0F 85 93 00 00 00 48 8B 07 48 85 C0 0F 84 84 00 00 00 48 83 BB 48 01 00 00 00 75 73 48 89 83 48 01 00 00 33 D2 } $patch_SamIRetrievePrimaryCredential = { 48 89 5C 24 08 48 89 6C 24 10 48 89 74 24 18 57 48 83 EC 20 49 8B F9 49 8B F0 48 8B DA 48 8B E9 48 85 D2 74 2A 48 8B 42 08 48 85 C0 74 21 66 83 3A 26 75 1B 66 83 38 4B 75 15 66 83 78 0E 73 75 0E 66 83 78 1E 4B 75 07 B8 A1 02 00 C0 EB 14 E8 ?? ?? ?? ?? 4C 8B CF 4C 8B C6 48 8B D3 48 8B CD FF 50 18 48 8B 5C 24 30 48 8B 6C 24 38 48 8B 74 24 40 48 83 C4 20 5F C3 } $patch_SamIRetrieveMultiplePrimaryCredential = { 48 89 5C 24 08 48 89 6C 24 10 48 89 74 24 18 57 48 83 EC 20 41 8B F9 49 8B D8 8B F2 8B E9 4D 85 C0 74 2B 49 8B 40 08 48 85 C0 74 22 66 41 83 38 26 75 1B 66 83 38 4B 75 15 66 83 78 0E 73 75 0E 66 83 78 1E 4B 75 07 B8 A1 02 00 C0 EB 12 E8 ?? ?? ?? ?? 44 8B CF 4C 8B C3 8B D6 8B CD FF 50 20 48 8B 5C 24 30 48 8B 6C 24 38 48 8B 74 24 40 48 83 C4 20 5F C3 } condition: any of them } 

Source: https://habr.com/ru/post/pt481778/


All Articles