Common API used in Malware
Try Hard Security Group
Genérico
Rede
Raw Sockets | WinAPI Sockets |
---|---|
socket() | WSAStratup() |
bind() | bind() |
listen() | listen() |
accept() | accept() |
connect() | connect() |
read()/recv() | recv() |
write() | send() |
shutdown() | WSACleanup() |
Persistência
Registro | Arquivo | Serviço |
---|---|---|
RegCreateKeyEx() | GetTempPath() | OpenSCManager |
RegOpenKeyEx() | CopyFile() | CreateService() |
RegSetValueEx() | CreateFile() | StartServiceCtrlDispatcher() |
RegDeleteKeyEx() | WriteFile() | |
RegGetValue() | ReadFile() |
Criptografia
Nome |
---|
WinCrypt |
CryptAcquireContext() |
CryptGenKey() |
CryptDeriveKey() |
CryptDecrypt() |
CryptReleaseContext() |
Anti-Análise/VM
Nome da Função | Instruções de Assembly |
---|---|
IsDebuggerPresent() | CPUID() |
GetSystemInfo() | IN() |
GlobalMemoryStatusEx() | |
GetVersion() | |
CreateToolhelp32Snapshot [Verificar se um processo está em execução] | |
CreateFileW/A [Verificar se um arquivo existe] |
Furtividade
Nome | |
---|---|
VirtualAlloc | Alocar memória (empacotadores) |
VirtualProtect | Alterar permissão de memória (empacotador dando permissão de execução a uma seção) |
ReadProcessMemory | Injeção em processos externos |
WriteProcessMemoryA/W | Injeção em processos externos |
NtWriteVirtualMemory | |
CreateRemoteThread | Injeção de DLL/Processo... |
NtUnmapViewOfSection | |
QueueUserAPC | |
CreateProcessInternalA/W |
Execução
Nome da Função |
---|
CreateProcessA/W |
ShellExecute |
WinExec |
ResumeThread |
NtResumeThread |
Diversos
GetAsyncKeyState() -- Registro de teclas
SetWindowsHookEx -- Registro de teclas
GetForeGroundWindow -- Obter nome da janela em execução (ou o site de um navegador)
LoadLibrary() -- Importar biblioteca
GetProcAddress() -- Importar biblioteca
CreateToolhelp32Snapshot() -- Listar processos em execução
GetDC() -- Captura de tela
BitBlt() -- Captura de tela
InternetOpen(), InternetOpenUrl(), InternetReadFile(), InternetWriteFile() -- Acessar a Internet
FindResource(), LoadResource(), LockResource() -- Acessar recursos do executável
Técnicas de Malware
Injeção de DLL
Execute uma DLL arbitrária dentro de outro processo
Localize o processo para injetar a DLL maliciosa: CreateToolhelp32Snapshot, Process32First, Process32Next
Abra o processo: GetModuleHandle, GetProcAddress, OpenProcess
Escreva o caminho da DLL dentro do processo: VirtualAllocEx, WriteProcessMemory
Crie uma thread no processo que carregará a DLL maliciosa: CreateRemoteThread, LoadLibrary
Outras funções a serem usadas: NTCreateThreadEx, RtlCreateUserThread
Injeção de DLL Reflexiva
Carregue uma DLL maliciosa sem chamar chamadas normais de API do Windows. A DLL é mapeada dentro de um processo, resolverá os endereços de importação, corrigirá as realocações e chamará a função DllMain.
Sequestro de Thread
Encontre um thread de um processo e faça-o carregar uma DLL maliciosa
Encontre um thread alvo: CreateToolhelp32Snapshot, Thread32First, Thread32Next
Abra o thread: OpenThread
Suspenda o thread: SuspendThread
Escreva o caminho para a DLL maliciosa dentro do processo vítima: VirtualAllocEx, WriteProcessMemory
Retome o thread carregando a biblioteca: ResumeThread
Injeção de PE
Injeção de Execução Portátil: O executável será escrito na memória do processo vítima e será executado a partir dali.
Oco de Processo
O malware desmapeará o código legítimo da memória do processo e carregará um binário malicioso
Crie um novo processo: CreateProcess
Desmapeie a memória: ZwUnmapViewOfSection, NtUnmapViewOfSection
Escreva o binário malicioso na memória do processo: VirtualAllocEc, WriteProcessMemory
Defina o ponto de entrada e execute: SetThreadContext, ResumeThread
Hooking
A SSDT (Tabela de Descritores de Serviço do Sistema) aponta para funções do kernel (ntoskrnl.exe) ou driver GUI (win32k.sys) para que processos de usuário possam chamar essas funções.
Um rootkit pode modificar esses ponteiros para endereços que ele controla
IRP (Pacotes de Solicitação de E/S) transmitem pedaços de dados de um componente para outro. Quase tudo no kernel usa IRPs e cada objeto de dispositivo tem sua própria tabela de funções que podem ser hookadas: DKOM (Manipulação Direta de Objetos do Kernel)
A IAT (Tabela de Endereços de Importação) é útil para resolver dependências. É possível hookar essa tabela para sequestrar o código que será chamado.
EAT (Tabela de Endereços de Exportação) Hooks. Esses hooks podem ser feitos do espaço do usuário. O objetivo é hookar funções exportadas por DLLs.
Hooks Inline: Esse tipo é difícil de alcançar. Isso envolve modificar o código das funções em si. Talvez colocando um salto no início disso.
Try Hard Security Group
Last updated