
Análise de memória ao vivo detectando IOCs de malware em processos, módulos, handles, tokens, threads, assemblies .NET, espaço de endereçamento de memória e variáveis de ambiente. Despeja, detecta e desmonta hooks, shellcode, regiões de memória, módulos e processos.

WhacAMole é um programa que analisa processos na memória de forma integral, detectando e alertando sobre anomalias relacionadas a malware e apresentando e salvando em arquivos todas as informações relevantes para verificação, correlação ou análise, além de despejar regiões de memória, processos e módulos suspeitos. Para isso, analisa não apenas as anomalias das regiões de memória dos processos e dos módulos que eles carregam, mas também analisa em profundidade todo o espaço de memória em uso pelo processo. Neste momento, o WhacAMole é capaz de identificar 67 alertas relacionados a comportamentos maliciosos ou que só podem ser devidos a malware. Ele exibe mais de 70 propriedades dos processos, memória e módulos, comparando muitos de seus atributos lidos na memória com os que aparecem no arquivo correspondente em disco, desmonta parcialmente regiões de memória suspeitas e desmonta parcialmente funções exportadas que foram modificadas na memória para que analistas realizem suas próprias investigações.

Ao contrário de outros programas similares, ele disponibiliza todas as informações relevantes sobre os processos aos analistas, rotulando com diferentes alertas as características relacionadas a malware, para que possam realizar sua própria análise ou buscar outros indícios da existência de processos maliciosos. Os alertas são classificados, de acordo com seu perigo e o número de processos em que o mesmo comportamento aparece, segundo uma escala de seis valores, refletida no documento html com uma escala de cores, sendo 6 (cor preta) um indicador da maior probabilidade de que a característica detectada seja devida a malware e 1 (cor cinza) que, embora o comportamento seja anormal, há muitos processos do sistema onde o mesmo comportamento foi observado:

Para facilitar o trabalho dos analistas, as informações são apresentadas na tela, em um arquivo HTML com um painel de navegação dos processos analisados e em arquivos csv de texto. No painel lateral do documento html, é mostrada a árvore de processos, com a cor correspondente ao alerta mais alto detectado neles, com o hiperlink para sua localização no documento, e com a cor azul em seu PID se for um processo de 32 bits ou verde se for um processo .NET. Processos que possuem Control Flow Guard (CFG) habilitado são mostrados em itálico.

Informações sobre sessões RDP remotas são exibidas no início das informações do processo:

A capacidade de rede é exibida de duas maneiras: se uma conexão TCP foi detectada, é exibida com o símbolo do globo terrestre, e se um socket conectado foi detectado, é exibida com um símbolo de globo vazio. Símbolo adicionado (círculo branco) para processos com bibliotecas de navegação http na memória: wininet.dll e winhttp.dll.

Detalhe da rede:

Socket conectado:

Há um símbolo especial (uma chave) quando uma atividade tipo Mimikatz é detectada.

Na parte inferior do painel de navegação do documento html, todos os alertas são mostrados, com sua cor, com os PIDs dos processos em que foram detectados na forma de um hiperlink para a posição do documento onde o processo é exibido.

Se não houver processos detectados com um alerta, seu nome é exibido em fundo branco.
O painel principal exibe todos os processos com suas informações em seções recolhíveis que por padrão estão ocultas. Todos os alertas estão sempre visíveis.

As regiões de memória salvas são xored com a chave 0x0E para evitar que o antivírus as exclua.
Analisar, comparar e apresentar informações de:
1. Processos:
• Avisos:
[Admin Privs]
[Alternate credentials]
[Alternate network credentials]
[Delphi 4 – Delphi 2006]
[Entry Point]
[LogonType]
[Managed code but no Assemblies detected - .NET ETW disabled]
[Mismatching Path]
[Name of the module hidden in memory]
[NTLM Authentication]
[PE anomalies]
[PEB ImageBaseAddress forgery]
[Possible .NET in memory loaded as Assembly.Load(byte[])]
[Process checkSum is 0]
[Process checkSum mismatch]
[Process Ghosting]
[Process Hollowing]
[Process Memory region hash mismatch]
[Process Memory region Protection value modified]
[Process Memory region WX]
[Process Name != Internal Name]
[PROCESS NOT SIGNED]
[Process Private memory region]
[Process Unknown executable memory region]
[Section Table]
[Shared memory subversion]
[SizeOfInitializedData is 0]
[SUSPENDED PROCESS]
[Suspicious Commandline]
[Suspicious Environment Variable]
[TimeDateStamp Inequality]
[Transaction detected: TxF/TxR]
[Unmanaged process/managed code execution detected]
[Unusual CWD]

2. Módulos:
O que se esperaria ver em um módulo normal é LMIVH:
L = InLoadOrderModuleList(PEB).
M = InMemoryOrderModuleList (PEB).
I = InInitializationOrderModuleList (PEB).
V = Detectado na memória virtual do processo.
H = Detectado na lista de hash do PEB.
Se foi desvinculado das três listas encadeadas do PEB, você veria:
---VH
Se o módulo for carregado manualmente pelo malware, não apareceria em nenhuma das listas do PEB, mas poderia ser detectado pela varredura da memória,
portanto apareceria como:
−−−V−
Com a técnica DLL Hollowing com Moat (veja https://github.com/forrest-orr/artifacts-kit para um POC) o resultado seria:
-----
• Avisos:
[Abnormal PE Header]
[Delphi 4 – Delphi 2006]
[DLL Hiding]
[DLL Hollowing]
[Mismatching Path]
[Module checkSum is 0]
[Module checkSum mismatch]
[Module Name != OriginalFileName]
[MODULE NOT SIGNED]
[Module PE anomalies]
[Module SizeOfInitializedData is 0]
[Module TimeDateStamp Inequality]
[Name of the module hidden in memory]
[Phantom DLL Hollowing TxF]
[Private memory region]
[Section Table]
[Signed PE NOT MEM_IMAGE]
[Unsigned PE NOT MEM_IMAGE]
[Unusual module]

3. Handles: Todos os handles do processo dos tipos File, Key, Mutant, Process, Thread, Token e Section são exibidos. Dependendo do tipo de handle, as seguintes informações são exibidas:








• Avisos:
[Handle-Section Phantom DLL Hollowing TxF]
[Handle-Section Suspicious: Injection]
[Pipe Handle to another process]
[Process Handle to another process]
[ShadowMove Lateral Movement]
4. Tokens: Nas threads onde um token é detectado, é exibido o seguinte:
• Avisos:
[Thread with TOKEN]

5. Threads:
• Avisos:
[Thread-Memory NOT MEM_IMAGE]
[Thread-Possible Ekko technique]
[Thread-Possible Foliage technique]
[Thread-Unknown module in Stack]

6. Assemblies .NET
• Avisos:
[.NET Assembly w/o ILPath]

7. Espaço de endereço de memória. Exibe de todas as regiões de memória do processo os valores de:
• Avisos:
[Executable memory region not MEM_IMAGE]
[Hidden PE]
[Lagos Island Method]
[Mapped Image]
[Memory region hash]
[Memory region Protection value modified]
[Memory region WX]
[Memory/File values mismatch]
[Moat detected]
[MZ/PE Not Present]
[Shellcode]
[Unknown executable memory region]

