Common API used in Malware

Aprenda hacking na AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras formas de apoiar o HackTricks:

Try Hard Security Group


Genérico

Rede

Raw SocketsWinAPI Sockets

socket()

WSAStratup()

bind()

bind()

listen()

listen()

accept()

accept()

connect()

connect()

read()/recv()

recv()

write()

send()

shutdown()

WSACleanup()

Persistência

RegistroArquivoServiç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çãoInstruçõ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

  1. Localize o processo para injetar a DLL maliciosa: CreateToolhelp32Snapshot, Process32First, Process32Next

  2. Abra o processo: GetModuleHandle, GetProcAddress, OpenProcess

  3. Escreva o caminho da DLL dentro do processo: VirtualAllocEx, WriteProcessMemory

  4. 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

  1. Encontre um thread alvo: CreateToolhelp32Snapshot, Thread32First, Thread32Next

  2. Abra o thread: OpenThread

  3. Suspenda o thread: SuspendThread

  4. Escreva o caminho para a DLL maliciosa dentro do processo vítima: VirtualAllocEx, WriteProcessMemory

  5. 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

  1. Crie um novo processo: CreateProcess

  2. Desmapeie a memória: ZwUnmapViewOfSection, NtUnmapViewOfSection

  3. Escreva o binário malicioso na memória do processo: VirtualAllocEc, WriteProcessMemory

  4. 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

Aprenda hacking na AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras formas de apoiar o HackTricks:

Last updated