Prévia do material em texto
Cap QEM NATÁLIA Análise de MALWARE 26 e 27 de out 2015 1 CAP QEM NATÁLIA APRESENTAÇÃO SUMÁRIO – 1O DIA INTRODUCÃO PARTE 1 – Análise Estática Básica Exercícios PARTE 2 – Análise Dinâmica Básica Exercícios 3 SUMÁRIO – 2O DIA PARTE 3 – Análise Estática Avançada Exercício - demonstração PARTE 4 – Análise Dinâmica Avançada Exercício - demonstração Exemplo de análise de malware no tratamento de incidente – um caso real. ANÁLISE DE MALWARE ANÁLISE: Determinar exatamente o que um binário faz Engenharia reversa Introdução MALWARE: Backdoor Botnet Downloader Information-stealing malware Launcher Rootkit Scareware Spamsending Worm/Virus o Cap regueira ja apresentou 5 POR QUE ANALISAR UM MALWARE? Prover dados para resposta a um incidente de rede MITIGAR OS DANOS CAUSADOS PELO MALWARE Como remover o malware de um máquina Como identificar se outras máquinas foram contaminadas Criar assinatura de IPS e HIPS E para um guerreiro cibernético? Introdução e para um guerreiro cibernetico? Que outras atividades podem utilizar tecnicas de engenharia reversa? Patch do win vista que gerou o 1o zero day do vista Eng reversa do software de protecao do USB (h2hc) 6 O Que buscar - metas Identificar o malware, se este for uma ameaça já conhecida Identificar indícios no host Identificar indícios na rede Identificar técnicas utilizadas para exploração, persistência e anti-reversa. Identificar o propósito do malware Introdução Tipos de anÁlise de malware As técnicas de engenharia reversa são classificadas em: ANÁLISE ESTÁTICA Não executa o malware ANÁLISE DINÂMICA Executa o malware ANÁLISE BÁSICA Não analisa as instruções do código ANÁLISE AVANÇADA Analisa as instruções do código Introdução Lei do menor esforco 8 Análise Estática Básica Análise Dinâmica Básica Análise Estática Avançada Análise Dinâmica Avançada Análise estática básica Analisar o malware sem executá-lo Confirmar se um artefato é malicioso Prover informações iniciais sobre o comportamento do malware Pode ser rápida e simples, mas ineficaz diante de malwares sofisticados e pode deixar de detectar comportamentos importantes Introdução AnÁlise dinÂmica bÁsica Envolve executar o malware, por completo, e observar os sintomas apresentados. Precisa de um ambiente onde o malware vá ser executado, seguro e segregado. Pode ser rápida, simples e até automatizada, mas ineficaz diante de malwares sofisticados e pode deixar de detectar comportamentos importantes Introdução AnÁlise estÁtica AVANÇADA Realizar engenharia reversa do malware utilizando um disassembler Ler as instruções do programa a fim de deduzir sua funcionalidade Requer conhecimento sobre linguagem assembly e conceitos sobre execução de código e sistemas operacionais (o foco da instrução será o sistema operacional Windows, na arquitetura Intel x86) Introdução Análise DINÂMICA AVANÇADA Observa a execução do malware com auxilio de uma ferramenta de debugger. Permite entender exatamente o que o binário faz, permitindo alterar o curso do programa durante sua execução. Pode auxiliar na obtenção de informações que não foram obtidas nos passos anteriores. Introdução Pontos chaves Não se percam nos detalhes – lembrem-se da regra do menor esforço !!! Conheça as ferramentas disponíveis Mantenham-se atualizados com as novas técnicas de evasão e invasão Introdução 13 Consulta na Internet Um primeiro passo MUITO ÚTIL: virustotal.com malwr.com Faça um hash do malware e pesquise sobre ele na Internet. A maioria das bases de dados de malware são em MD5, mas já existem algumas em SHA-1. Análise Estática Básica Lembre-se da lei do menor esforco ! 14 Strings Strings Uma das ferramentas mais simples e valiosas para obter informações importantes sobre o malware é possível obter informações como: Endereço de IP URL Funções e bibliotecas Mensagens Usuário e senha Se o comando não retornar nenhuma string legível, então sugere que o malware está ofuscado ou compactado Análise Estática Básica Pode ser usado para obter DICAS sobre o que o malware faz e depois o analista precisa apenas confirmar. 15 Compactação e Ofuscação Packers são programas que compactam executáveis LoadLibrary e GetProcAddress são bibliotecas do Windows que geralmente aparecem nas strings destes executáveis Análise Estática Básica Estas funcoes sao utilizadas para carregar outras dlls ou funcoes em tempo de execucao. 16 Analisador de cabeçalho PEid UPX upx –d Análise Estática Básica 17 arquivo executÁvel arquivos executáveis podem ser do tipo PE (executable ou DLL), ELF, COFF, COM, a.out etc. No cabeçalho do PE existem informações relevantes sobre o arquivo, tais como a lista de funções importadas e exportadas As bibliotecas são “linkadas” a um arquivo executável das seguintes formas: Estática Em tempo de execução (dica: LoadLibrary, GetProcAddress, LdrGetProcAddress e LdrLoadDll) dinâmica Análise Estática Básica Funções importadas e exportadas Dependency Walker Análise Estática Básica DLL mais comuns Kernel.dll Funções básicas do Windows, tais como, manipulação de arquivos, memoria e hardware Advapi32.dll Funções avançadas do Windows, tais como, acesso a Registro e Gerenciador de Serviços User32.dll Funções que manipulam de interface com usuário Gdi32.dll Exibição de componentes gráficos Ntdll.dll Implementa diversas funções de baixo nível e costuma ser chamada por outras DLLs (implementa diversas funções da kernel.dll) . Se for carregada diretamente, é muito provável que trata-se de um programa malicioso WSock32.dll e Ws2_32.dll Bibliotecas que implementam funções de rede Wininet.dll Implementa protocolos de rede, tais como HTTP, FTP, NTP Análise Estática Básica Arquivos maliciosos utilizam a ntdll para bypassar os antivirus 21 A funcao set windowshook eh frequentemente usada por spyware para implemetar keylogger Programa tambem exporta funcoes : lowlevelkeyboardproc e lowlevelmouseProc Apendice A do livro tem uma lista de funcoes e o servico MSDN da microsoft 22 Ate um hello, world teria mais funcoes do que isso. 24 Ate um hello, world teria mais funcoes do que isso. 25 Seções Um arquivo PE é composto por cabeçalhos e seções. As seções mais comuns são: .text – código executável .rdata – informações sobre funções importadas e exportadas .data – variáveis globais .rsrc – “repositório” usado pelo programa para gravar objetos que serão utilizados no programas, tais como : ícones, imagens, menus, strings. Um arquivo PE é composto por campos de cabecalho e diversas secoes. Cabecalho contem metadados sobre o programa e as secoes sao o conteudo do programa priamente dito Existem secoes padrao criadas pelo compilados, mas podem exitir secoes customizadas em malwares. 26 PE view PEview 27 PE VIEW PEview Um arquivo PE é composto por campos de cabecalho e diversas secoes. Cabecalho contem metadados sobre o programa e as secoes sao o conteudo do programa priamente dito Existem secoes padrao criadas pelo compilados, mas podem exitir secoes customizadas em malwares. O CAMPO IMAGE_OPTIONAL_HEADER CONTEM UM campo chamado subsystem que indica se o programa eh baseado em console ou GUI 28 EXEMPLO Sec Tam V Tam R .text A000 0000 .data 3000 0000 .rdata 4000 0000 .rsrc 19000 3400 Dijfpds 20000 0000 .sdfuok 34000 3313F Kijijl 1000 0200 Sec Tam V Tam R .text 7AF5 7C00 .data 17A0 0200 .rdata 1AF5 1C00 .rsrc 72B8 7400 RESOURCE HACKER resumo Que informações são relevantes pode-se extrair da análise estática básica de um arquivo executável: Strings Imports Exports Time Data Stamp Sections Subsystem Resource Laboratório 1 Sandbox Não corre o risco de causar danos ao ambiente do analista Simples e bastante eficiente. Emitem relatórios bem apresentados. Norma SandBox, GFI Sandbox, Anubis, ThreatExpert, Comodo Instant Malware Analisys. Desvantagens: Confidencialidade(existem ferramentas “in-house”, geralmente comerciais) Pouco flexível ao executar o malware Se depender de um gatilho especifico, não será possível executar o malware Se o malware for uma DLL necessita de parâmetros para executar O ambiente da sandbox pode ser diferente do ambiente que se deseja analisar Análise Dinâmica Básica Falar de preparacao do ambiente Vm em rede Snapshot Lembrando que so se comeca uma ADB apos concluida a AEB e esta tenha se mostrado ineficaz para atingir o objetivo. Confirmar se as hipoteses levantadas na etapa anterior sao verdadeiras ( as funcoes sao realmente invocadas? ) 33 Executando o malware Se for arquivo EXE pode ser executado diretamente pelo Windows, mas uma DLL não. Formas de executar uma DLL: C:\ rundll32.exe <DLLname>, <Export arguments> Neste caso, a DLL estará associada ao programa rundll32.exe. Também é possível modificar o parâmetro do cabeçalho PE que define se o arquivo é executável ou DLL (forca o arquivo a rodar o DLLMain) - pode ter um comportamento inesperado. Se a DLL instalar um serviço, tem que instalar e inicializar Exemplo: C:\ rundll32.exe <DLLname>, InstallService <ServiceName> C:\ net start ServiceName Análise Dinâmica Básica Export arguments pode ser o nome de uma funcao exportada na dll ou um numero ordinal definido na biblioteca 34 Process monitor Ferramenta análoga ao Wireshark, mas para atividades do Sistema Operacional. Captura atividades de registros, arquivos, processos Não funciona muito bem para monitorar atividades de rede e interações entre objetos no nível de usuário com device drivers (ou seja, pode não detectar o comportamento de um rootkit) Não deixe o procmon capturando por muito tempo, pois pode esgotar os recursos da maquina virtual. Parte 2: Análise Dinâmica Básica 35 Start/Stop Capture Default Filters Registry, File system, Network, Processes Erase Filter Filtra por registro, arquivos, processos, rede Pode ser configurado para capturar os eventos durante o boot 37 Process explorer Ferramenta semelhante ao “Task Manager” do Windows Use para listar processos ativos, DLL carregadas, consultar as propriedades dos processos e informacoes gerais sobre o sistema. Parte 2: Análise Dinâmica Básica Process explorer Ferramenta semelhante ao “Task Manager” do Windows Use para listar processos ativos, DLL carregadas, consultar as propriedades dos processos e informacoes gerais sobre o sistema. Parte 2: Análise Dinâmica Básica As propriedades do processo pode indicar se há DEP e ASLR habilitado e o botão “Verify” indica se o processo é original da Microsoft ( verifica apenas a imagem em disco) Compare as strings do processo em memoria e em disco. Se forem muito diferentes, pode indicar que houve um ataque de substituicao de processo (process replacement, binary planting) Que o Proc Explo pode ajudar a identificar: - se houve algum process replacement (binary planting) 43 Regshot Análise Dinâmica Básica Apate dns Alguns malware fazem consultas DNS e somente realizam a atividade maliciosa após obter resposta desta consulta. Portanto é necessário configurar um serviço para responder ou redirecionar consultas DNS. Análise Dinâmica Básica netcat Netcat também pode ser usado para escutar em alguma porta a fim de interagir com o malware Análise Dinâmica Básica wireshark Análise Dinâmica Básica inetsim Emula diversos serviços de rede para interagir com malware (HHTP, HTTPS, FTP, IRC, DNS, SMTP, etc). O principal objetivo é manter o malware executando. Permite customização dos serviços (ex.: configuração de banner) Implementa um “dummy service”, que registra todo trafego recebido do malware, independente da porta. Registra todos os acessos em logs para posterior analise. Análise Dinâmica Básica Assembly Os programas de computador são desenvolvidos em linguagem de alto nível e compilados para código de máquina (opcodes) Opcodes são compostos de instruções e dados que são lidos e interpretados pela CPU. Uma linguagem de baixo nível (Assembly) é a forma “legível” de se representar um conjunto de opcodes. Análise Estática Avançada os malwares que iremos analisar sao em formato binario no nivel de opcode. o disassembly converte o binario para assembly 49 Arquitetura x86 Análise Estática Avançada A arquitetura mais comum encontrada hoje é composta por três componentes: CPU, Memória e Dispositivos de Entrada e Saída. O CPU é composto por: Control Unit, ULA e Registradores. Memória Análise Estática Avançada Esta é a estrutura lógica de um programa em execução na memória RAM. Data: dados estáticos carregados pelo programa Code: instruções de código que implementam as funções do programa Heap: espaço destinado a alocação dinâmica de memória Stack: espaço destinado a variáveis locais e parâmetros de funções (pilha) Instruções em assembly Instruções A sintaxe básica das instruções é da seguinte forma: <NOME_INST> {<OP_DESTINO>{, <OP_ORIGEM>}} São de nome de instruções: MOV, ADD, XOR, INC, JMP ... Operandos Imediato - valores numéricos Registradores : eax, ebx, ecx, edx ... Endereço de memória : [eax], [ebx], [ecx], [edx]... Registradores EAX, EBX, ECX e EDX - usados para uso geral EIP – guarda a endereço da próxima instrução a ser executada EBP – aponta para a base da pilha. ESP – aponta para o topo da pilha ESI, EDI – utilizados para manipular strings Análise Estática Avançada atribuição mov <destino>, <origem> mov eax, ebx mov eax, 0x42 mov eax, [0x4037C4] mov eax, [ebx] mov eax, [ebx+8] lea <destino>, <origem> lea eax, [ebx+8] lea ebx, [eax*5+5] Aritimética Adição e Subtração sub eax, 0x10 add eax, ebx inc edx dec ecx Multiplicação e Divisão mul 0x50 sempre utiliza o EAX como fator. o resultado é gravado em EDX e EAX div 0x75 sempre utiliza o EDX e EAX como dividendo. O resultado é gravado em EAX e o resto no EDX Stack – pilha FUNções EBP – base da pilha: é usado para acessar as variáveis e argumentos ESP - topo da pilha: inserir e remover variáveis PUSH e POP são usados para inserir e remover dados da pilha - LIFO FUNções Chamada a uma função 1) insere argumentos na pilha PUSH <arg> ... 2) chama a função call <endereço> o conteúdo do EIP/EBP são gravado na pilha – prologue executa a função ESP = EBP EBP = POP <Old EBP>, EIP = POP <Return Address> Comparações condicionais cmp <op_1>,<op_2> não modifica os operandos, apenas modifica as flags ZF e CF test <op_1>, <op_2> não modifica o operando, apenas modifica a flag ZF test eax, eax – testar se EAX é nulo ramificacao jmp <location> jz <location> jnz <location> IDA PRo Análise Estática Avançada IDA PRo Análise Estática Avançada IDA PRo Análise Estática Avançada IDA PRO Análise Estática Avançada IDA PRo Análise Estática Avançada IDA PRo Análise Estática Avançada modificando registradores RegOpenKey RegSetValue RegGetValue comunicação de rede a função que manipula rede sempre chamará WSAStartup Server-side: socket, bind, listen Client-side: accept, recv, send Para comunicação em HTTP: InternetOpen InternetOpenUrl InternetReadFile (funções importadas da Wininet.dll) Criar processo o objeto STARTUPINFO contém as informações de standard input, standard output e standard error costuma ser usado na implementação de shell remoto MUTEX e serviços Mutex Service OpenSCManager CreateService StartService type: WIN32_SHARE_PROCESS – combina diversos serviços no processo svchost.exe Debugging Disassembler x Debbuger Ollydbg User mode Windgb Kernel mode Análise Dinâmica Avançada Modo de execução É possível: Iniciar a execução do programa no Debugger Associar um programa que já está executando ao Debugger Debugar um programa passando parâmetros Para que? o analista consegue ver o efeito de cada instrução contida em um programa (mudança nos registradores, na pilha, etc) acompanha a execuçãopasso-a-passo alterar instruções ou dados para mudar a lógica do programa Análise Dinâmica Avançada Funcionalidades Breakpoint interromper a execução de um programa em um determinado ponto para análise Stepping-over Stepping-into Análise Dinâmica Avançada Exemplo Esse código calcula o nome de um arquivo e em seguida cria o arquivo Inserir um breakpoint antes da chamada a função CreateFileW e lê na pilha o nome do arquivo que será criado. OLLY DBG Análise Dinâmica Avançada Exemplo CITEx