Buscar

Sala de Aula _ Estacio 7

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 16 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 16 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 16 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Análise de Malwares
Aula 7: Contra Engenharia Reversa
Apresentação
Nesta sexta aula analisaremos algumas técnicas utilizadas contra a engenharia reversa. Algumas delas já foram
mencionadas, como as técnicas contra a execução do malware em ambientes virtualizados, por exemplo.
Agora aprofundaremos como essas técnicas serão utilizadas e, mais importante, como identi�car e contornar durante a
análise.
Objetivo
Identi�car técnicas de anti-desmontagem;
Identi�car técnicas de anti-depuração;
Identi�car características dos empacotadores.
Contra Engenharia Reversa
Vimos nas aulas anteriores diversas formas de analisar os artefatos maliciosos, hoje veremos algumas técnicas utilizadas
contra a análise da aplicação.
Algumas técnicas já foram abordadas de forma super�cial. Vamos aprofundar e aprender como reconhecer algumas delas.
Anti-desmontagem
A anti-desmontagem é uma técnica que utiliza códigos ou dados especialmente criados no programa para confundir as
ferramentas de análise de desmontagem atrasando ou, em determinadas situações, impedindo a análise de código.
Lembre-se de que todo malware é projetado com um objetivo especí�co em mente, com os avanços das técnicas de detecção
foi necessário criar técnicas especí�cas para camu�ar do usuário essas intenções.
Qualquer aplicação ou pedaço de código que pode ser executado também pode ser submetido à engenharia reversa, mas
existem técnicas que os autores podem utilizar para proteger seu código, aumentando o grau de habilidade exigido do analista
de malware.
O tempo de investigação em artefatos com esse tipo de proteção é incrementado pela incapacidade do analista de malware
compreender seus recursos e suas assinaturas. Essas camadas adicionais de proteção podem exaurir o nível de habilidade
interna em muitas organizações e exigir consultores especializados apenas para realizar a engenharia reversa.
Além de atrasar ou impedir a análise humana, quando bem realizada, é possível, também, prevenir certas técnicas de análise
automatizada e, com isso, evitar mecanismos de proteção de segurança.
Muitos algoritmos de detecção de similaridade de atividades maliciosas e
mecanismos heurísticos de antivírus empregam análises automatizadas
para identi�car ou classi�car a aplicação maliciosa.
Comentário
A desmontagem não é uma técnica simples de ser realizada. Uma sequência de código pode ter várias representações diferentes,
algumas podem ser inválidas e ofuscar a funcionalidade real do programa. Ao implementar a anti-desmontagem, o atacante cria
uma sequência que engana o desmontador para mostrar uma lista de instruções que diferem daquelas que serão executadas.
As técnicas funcionam se aproveitando de suposições e limitações das ferramentas de desmontagem. Uma técnica simples é
deslocar em apenas um byte a execução de uma instrução, pois os desmontadores representam cada byte de um programa
como parte de uma instrução por vez.
Essa técnica pode causar um desajuste em toda a árvore de códigos e uma instrução válida pode ser camu�ada e passar
desapercebida pelo analista.
Exemplo 1
Vamos analisar o seguinte exemplo de Sikorski:
 
jmp short nearptr loc_2+1
loc_2:
callnearptr 15FF2A71h
or [eax], dl
inceax
Esse fragmento de código foi desmontado usando a técnica
de desmontagem linear e o resultado não re�ete a realidade.
Veri�ca-se uma instrução de chamada para um ponto de
memória sem referência. Como podemos veri�car, a
primeira instrução é uma instrução de salto cujo destino é 1
byte após o início da instrução.
Exemplo 2
Ao analisar a mesma sequência de bytes desmontada com uma estratégia diferente e saltando o byte referenciado no salto,
obtemos o seguinte conjunto de instruções:
 
jmp short loc_3
db E8h
loc_3:
push 2Ah
callSleep
Esse novo fragmento revela uma sequência totalmente
diferente de mnemônicos de instruções e parece ser mais
informativo. Aqui, vemos uma chamada para a função de
Sleep. O destino da instrução de salto agora está
representado corretamente e podemos ver que ele salta
para uma instrução push seguida pela chamada para Sleep.
Atenção
O byte na segunda linha do Exemplo 2 é 0xE8, mas esse byte não é executado pelo programa porque o salto o ignora.
Comentário
No Exemplo 2, foi utilizado um desmontador orientado ao �uxo, diferente do desmontador linear usado no primeiro exemplo. O
segundo caso foi mais preciso porque sua lógica se baseia na execução do programa ao invés da desmontagem de todos os
bytes na área de código, mesmo daqueles que não fazem parte do �uxo de execução do mesmo.
Portanto, uma desmontagem não é tão simples quanto você pode imaginar. Os exemplos acima apresentam dois conjuntos de
instruções completamente diferentes para o mesmo conjunto de bytes.
As técnicas de anti-desmontagem nascem de fraquezas inerentes aos algoritmos de desmontagem. Qualquer desmontador
deve fazer certas suposições para apresentar o código que está desmontando claramente. Quando essas suposições falham, o
atacante tem a oportunidade de enganar o analista.
Existem dois tipos de algoritmos de desmontagem, conforme já mencionados: Linear e orientado a �uxo.
Clique nos botões para ver as informações.
A desmontagem linear é mais fácil de implementar, mas também é mais sujeita a erros. A estratégia de desmontagem
linear itera sobre um bloco de código, desmontando uma instrução por vez linearmente, sem desvios. Essa estratégia
básica é amplamente usada por depuradores. A desmontagem linear usa o tamanho da instrução desmontada para
determinar qual byte desmontar a seguir, sem levar em conta as instruções de controle de �uxo.
Desmontagem linear 
Uma categoria mais avançada de algoritmos de desmontagem é o desmontador orientado a �uxo. Esse é o método
usado pela maioria dos desmontadores comerciais, como o IDA Pro.
Desmontagem orientada por �uxo 
 Desmontagem orientada por �uxo versus desmontagem linear
 Clique no botão acima.
O A principal diferença entre a desmontagem orientada por �uxo e linear é que o desmontador não itera cegamente em
uma parte da memória, assumindo que os dados nada mais são do que instruções agrupadas ordenadamente. Em vez
disso, ele examina cada instrução e constrói uma lista de locais a serem desmontados.
Na desmontagem linear, o desmontador não tem escolha a fazer sobre quais instruções desmontar em um
determinado momento. Os desmontadores orientados ao �uxo fazem escolhas e suposições. Rami�cações
condicionais fornecem ao desmontador orientado ao �uxo uma escolha de dois locais para desmontar: A rami�cação
verdadeira ou falsa.
Em um código gerado por compilador típico, não haveria diferença na saída se o desmontador processasse primeiro o
branch verdadeiro ou falso, no código de montagem. No entanto, as duas rami�cações podem produzir desmontagens
diferentes para o mesmo bloco de código.
Quando há um con�ito, a maioria dos desmontadores con�a primeiro em sua interpretação inicial de um determinado
local;os desmontadores orientados a �uxo processarão a rami�cação falsa de qualquer salto condicional primeiro.
Outra técnica bastante comum é a inserção  de duas instruções de saltos condicionais consecutivos que apontam para o
mesmo alvo.
Exemplo
Por exemplo, se um jz local_1 for seguido por jnz local_1, esse local será sempre executado. A combinação de jz com jnz é,
portanto, um jmp incondicional, mas o desmontador não o reconhece como tal porque ele desmonta apenas uma instrução por
vez.
Quando o desmontador encontra o jnz, ele continua desmontando o falso branch dessa instrução, apesar do fato de que nunca
será executado na prática.
Existem alguns casos, sob algumas condições, em que nenhuma lista de montagem tradicional representará com precisão as
instruções que são executadas, conhecido como desmontagem impossível.
As técnicas simples de anti-desmontagem que discutimos usam um byte de dados colocado estrategicamente após uma
instrução de salto condicional, com a ideia de que a desmontagem começando nesse byte impediráque a instrução real que se
segue seja visualizada.
Contornamos essa situação ignorando o byte, mas e se ele não puder
ser ignorado? E se for parte de uma instrução legítima que é
realmente executada em tempo de execução?
Aqui, encontramos um cenário complicado em que qualquer byte pode fazer parte de várias instruções que são executadas.
Nenhum desmontador atualmente no mercado representará um único byte como parte de duas instruções, embora o
processador não tenha essa limitação.
Como não há como remover pedaços do código para que todas as instruções em execução sejam representadas, devemos
escolher quais instruções devemos deixar. Essa é uma solução um tanto aceitável porque mostra apenas as instruções
relevantes para a compreensão do programa. No entanto, essa solução pode interferir nos processos de análise.
A anti-desmontagem não se limita às técnicas abordadas nessa aula, existem diversas técnicas que visam tirar proveito das
di�culdades inerentes à análise. Ferramentas de desmontagens avançadas fazem um excelente trabalho para determinar quais
instruções constituem um programa, mas ainda exigem suposições e escolhas no processo.
Para cada escolha ou suposição que pode ser feita por um desmontador, pode haver uma técnica anti-desmontagem
correspondente.
Anti-Depuração
A anti-depuração é uma técnica contra-análise usada pelos malwares para
reconhecer quando está sob o controle de um depurador ou para impedir o
controle sobre o mesmo. Ao perceber que está sendo executado em um
ambiente controlado, a aplicação pode alterar seu �uxo normal de execução
ou modi�car o código para causar uma falha, interferindo assim nas
tentativas dos analistas de compreendê-lo.
Existem muitas técnicas anti-depuração, discutiremos algumas das mais populares que encontramos no mundo real.
O malware usa uma variedade de técnicas para veri�car as indicações de que um depurador está conectado, seja por
chamadas de função do Windows, seja através de uma veri�cação manual da estrutura da memória por artefatos de
depuração ou, ainda, procurando no sistema por qualquer possível traço deixado por um depurador.
A detecção do depurador é a maneira mais comum de o malware realizar a anti-depuração.
O uso de chamada de funções do Windows é a mais óbvia das técnicas anti-depuração. O Windows fornece várias funções que
podem ser utilizadas por um programa para determinar se ele está sendo depurado.
Algumas dessas funções foram projetadas para detecção do depurador; outras foram projetadas para �nalidades diferentes,
mas podem ser reaproveitadas para detecção de um depurador.
Normalmente, a maneira mais fácil de superar uma chamada para uma dessas funções de anti-depuração é modi�car
manualmente o malware durante a execução para não executar a chamada, ou modi�car a �ag após o retorno da chamada
para garantir que o �uxo pretendido seja seguido. Uma opção mais difícil seria fazer um gancho (hook) dessas funções, assim
como com um rootkit.
Listaremos três funções e suas características:
Clique nos botões para ver as informações.
Função mais simples para detectar um depurador. Essa função pesquisa a estrutura PEB (ProcessEnvironmentBlock) para
o campo IsDebugged, que retornará zero se você não estiver executando no contexto de um depurador, ou um valor
diferente de zero se um depurador estiver anexado.
IsDebuggerPresent 
Função semelhante à anterior, apesar do nome, ela não veri�ca o depurador em uma máquina remota, mas sim
localmente. Também veri�ca a estrutura PEB para o campo IsDebugged; no entanto, pode fazer isso para si mesmo ou
para outro processo na máquina local.
Essa função recebe um identi�cador de processo como parâmetro e veri�cará se esse processo possui um depurador
anexado.
CheckRemoteDebuggerPresent 
Função nativa em Ntdll.dll que recupera informações sobre um determinado processo. O primeiro parâmetro para essa
função é um identi�cador de processo; a segunda é usada para informar à função o tipo de informação do processo a ser
recuperado.
Por exemplo, usar o valor ProcessDebugPort (valor 0x7) para esse parâmetro informará se o processo em questão está
sendo depurado. Se o processo não estiver sendo depurado, um zero será retornado; caso contrário, um número de porta
será retornado.
NtQueryInformationProcess 
Usar chamadas de função do Windows pode ser o método mais óbvio para detectar a presença de um depurador, mas a
veri�cação manual das estruturas é o método mais comum usado pelos atacantes.
Existem algumas desvantagens no uso de chamada de funções do Windows para anti-depuração.
Exemplo
Por exemplo, as chamadas de função podem ser conectadas por um rootkit para retornar informações falsas. Portanto, os
autores de malware frequentemente optam por realizar o equivalente à chamada de função manualmente, em vez de depender do
Windows.
Ao realizar veri�cações manuais, vários sinalizadores na estrutura PEB fornecem informações sobre a presença de um
depurador.
Ao analisar malware, normalmente, usamos ferramentas de depuração, que deixam resíduos no sistema. O malware pode
pesquisar esse resíduo para determinar quando você está tentando analisá-lo, por exemplo, pesquisando nas chaves de
registro por referências para depuradores. A seguinte chave de registro é um local comum para um depurador:
 
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug
Essa chave de registro especi�ca o depurador que é ativado quando ocorre um erro de aplicativo. O malware também pode
pesquisar o sistema em busca de arquivos e diretórios, como executáveis de programas de depuração comuns, que
normalmente estão presentes durante a análise de malware. Ou o malware pode detectar resíduos na memória ativa, exibindo
a lista de processos atuais ou, mais comumente, executando FindWindow em busca de um depurador.
Os depuradores podem ser usados para de�nir pontos de interrupção ou para dar uma única etapa em um processo para
ajudar o analista de malware na engenharia reversa. No entanto, quando essas operações são realizadas em um depurador,
elas modi�cam o código no processo.
Algumas técnicas anti-depuração podem ser usadas pelo malware para detectar esse tipo de comportamento do depurador,
como varredura INT e veri�cações de tempo.
01
A instrução INT 3 é a interrupção de software usada por depuradores para substituir temporariamente uma instrução
em um programa em execução e para chamar o manipulador de exceção de depuração: Um mecanismo básico para
de�nir um ponto de interrupção.
02
O opcode para INT 3 é 0xCC;sempre que você usa um depurador para de�nir um ponto de interrupção, ele modi�ca o
código inserindo um 0xCC.
03
As veri�cações de tempo são uma das maneiras mais populares de o malware detectar depuradores, pois os
processos são executados mais lentamente durante o processo de depuração. Por exemplo, uma única etapa em um
programa reduz substancialmente a velocidade de execução.
Existem algumas maneiras de usar veri�cações de tempo para detectar um depurador:
Registrar a data/hora, executar algumas operações, registrar novamente a data/hora e depois comparar os dois registros.
Se houver um atraso, você pode presumir a presença de um depurador.
Registrar a data/hora antes e depois de gerar uma exceção. Se um processo não estiver sendo depurado, a exceção será
tratada de forma instantânea; um depurador tratará a exceção muito mais lentamente.
Por padrão, a maioria dos depuradores requer intervenção humana para lidar com exceções, o que causa um enorme atraso.
Embora muitos depuradores permitam que você ignore as exceções e as transmita ao programa, ainda haverá um atraso
considerável em tais casos. Por padrão, a maioria dos depuradores requer intervenção humana para lidar com exceções, o que
causa um enorme atraso. Embora muitos depuradores permitam que você ignore as exceções e as transmita ao programa,
ainda haverá um atraso considerável em tais casos.
Dica
Existem diversas técnicas populares de anti-depuração; épreciso paciência e perseverança para aprender a reconhecer e
contorná-las. Certi�que-se de fazer anotações durante sua análise e lembre-se da localização de todas as técnicas anti-depuração
e como você as contorna; isso o ajudará se você precisar reiniciar o processo de depuração.
A maioria das técnicas anti-depuração pode ser detectada usando o bom senso, ao depurar um processo lentamente. Por
exemplo, se você vir o código terminando prematuramente em um salto condicional, isso pode sugerir uma técnica anti-
depuração.
Obviamente, como em todas as análises de malware, a melhor maneira de aprender a impedir as técnicas usadas é
persistência. As técnicas estão em constante evolução e sempre aparecerão novas maneiras de anti-depuração.
Anti-máquina virtual
Atacantes utilizam técnicas anti-máquina virtual (anti-VM) para impedir as tentativas de análise, pois elas são muito utilizadas
para esse �m. Com essas técnicas, o malware tenta detectar se está sendo executado dentro de um ambiente virtual.
Caso positivo, ele pode agir de forma diferente da forma pretendida ou, simplesmente, não funcionar e, com isso, atrapalhar
sua identi�cação por parte do analista.
As técnicas anti-VM são mais comumente encontradas em malwares enviados em massa, como bots, scareware e spyware.
Isto se dá, principalmente, porque as honeypots costumam usar máquinas virtuais e, também, porque esse malware
normalmente tem como alvo uma máquina do usuário �nal, que di�cilmente usará uma máquina virtual — em tese.
A popularidade desse tipo de técnica diminuiu recentemente devido ao aumento no uso da virtualização. Essa técnica surgiu
em um tempo em que as máquinas virtuais eram utilizadas em grande maioria para análise. No entanto, hoje, tanto
administradores quanto os usuários �nais utilizam as máquinas virtuais por sua facilidade e versatilidade de uso.
Por isso, os atacantes não utilizam essa técnica com tanta frequência, pois não signi�ca necessariamente que não seja uma
vítima valiosa apenas por se tratar de uma máquina virtual.
Pela popularidade, focaremos em algumas técnicas utilizadas para detecção de uma máquina virtual rodando na solução
VMWare. Nesse ambiente existem diversos artefatos no sistema, especialmente quando o VMware Tools está instalado.
O malware pode usar esses artefatos, que estão presentes no sistema de arquivos, registro e lista de processos, para detectar
a virtualização. A Figura 1 a seguir mostra a lista de processos para uma máquina virtual Windows rodando com o VMware
Tools instalado.
Atenção! Aqui existe uma videoaula, acesso pelo conteúdo online
 Fonte: Autor.
Figura1: Listagem de Processos em uma máquina VMWare
Observe que três processos VMware estão em execução:
Vmware Tools Core Service (vmtoolsd.exe), duas vezes, e
VmwareGuestAuthentication Service (VGAuthService.exe).
Qualquer um deles pode ser encontrado pelo malware
enquanto ele pesquisa a lista de processos para a string
“VMware”.
Outra forma de veri�car a presença do serviço em execução é através da listagem de serviços na máquina, que pode ser
veri�cadana Figura 2 a seguir:
 Fonte: Autor.
Figura 2: Listagem de serviços e sua �ltragem
Existem diversas formas, na verdade, de identi�car um ambiente virtualizado.
Dica
Os dispositivos de hardware virtualizados, como a placa de rede, por exemplo, sempre terão uma marca do VMware. O endereço
do MAC da placa de rede sempre iniciará com os mesmos 3 bytes: 00:0C:29.
A Figura 3 a seguir mostra o registro do identi�cador do disco da máquina:
 Fonte: Autor.
Figura3: Registro do Hardware
Outro comando que pode ser utilizado é a busca pela string “VMware” pelo registro, conforme a Figura 4 a seguir:
 Fonte: Autor.
Figura 4: Busca pela stringVMware no registro
Os artefatos mais comuns do VMware podem ser facilmente eliminados desinstalando o VMware Tools ou interrompendo o
VMware Tools Service; fazendo isso, já deixará um pouco mais difícil para o malware.
Outra solução é impedir que o mesmo procure pelos artefatos. Por exemplo, se você encontrar uma única string relacionada ao
VMware no malware, como: “net start | �ndstrVMware” – você sabe que o malware está tentando detectar artefatos;basta você
identi�car o trecho do código que realiza essa busca e evitá-la.
Outra técnica utilizada para reconhecer se está em um ambiente virtualizado é a busca da string malware na memória. O
VMware deixa muitos rastros na memória como resultado do processo de virtualização. Algumas são estruturas críticas do
processador que, por serem movidas ou alteradas em uma máquina virtual, deixam rastros reconhecíveis.
O VMware tem suas vulnerabilidades, que podem ser exploradas para travar o sistema operacional da máquina física ou até
mesmo executar código nele. Muitas vulnerabilidades divulgadas são encontradas no recurso de pastas compartilhadas da
VMware ou em ferramentas que exploram a funcionalidade de arrastar e soltar (copiar e colar) do VMware Tools.
Outra vulnerabilidade abusa das pastas compartilhadas para permitir que um convidado escreva em qualquer arquivo no
sistema operacional da máquina física a �m de modi�car ou comprometer seu sistema operacional. Embora essa técnica
especí�ca não funcione com a versão atual do VMware, várias falhas diferentes foram descobertas no recurso de pastas
compartilhadas.
Portanto, na dúvida, desative as pastas compartilhadas nas
con�gurações da máquina virtual para evitar esse tipo de ataque.
Agora, você já entendeu as formas utilizadas para descobrir se a máquina é virtual ou não. Como os autores de malware usam
essas técnicas para retardar a análise, é importante ser capaz de reconhecê-las.
Abordamos algumas delas para que você possa encontrá-las na desmontagem ou depuração, e enumeramos algumas
maneiras de superá-las sem a necessidade de modi�car o malware no nível de desmontagem.
Comentário
Ao realizar a análise dinâmica básica, você sempre deve usar uma máquina virtual. No entanto, se o malware em questão não
parece funcionar, considere tentar outra máquina virtual com o VMware Tools desinstalado antes de depurar ou desmontar o
malware em busca da detecção da máquina virtual.
Atenção! Aqui existe uma videoaula, acesso pelo conteúdo online
Você também pode executar o malware em questão em um ambiente virtual diferente (como VirtualBox ou Parallels) ou
mesmo em uma máquina física.
Empacotadores e desempacotadores
Os programas de empacotamento, ou empacotadores, tornaram-se extremamente populares entre os criadores de malware
pois auxiliam no processo de camu�agem e evasão de sistemas de segurança, complicando o trabalho do analista e
reduzindoo tamanho de um executável malicioso.
Em geral, os empacotadores possuem as seguintes características: Fácil
utilização, gratuitos e de código aberto, ou seja, seu código fonte está
disponível. O processo de compactação inutiliza a análise estática, pois o
processo de compactação remove padrões.
Para que a análise estática seja e�caz, é preciso inicialmente descompactar a aplicação primeiro, o que, muitas vezes, não é
uma tarefa simples.
Embora haja uma grande variedade de empacotadores, todos seguem um padrão semelhante:
1
Transformam um executável original em um novo
executável que consiste em duas partes básicas.
2
O executável original é transformado em dados e uma rotina
de desempacotamento será chamada pelo sistema
operacional ao executá-lo.
Vamos discutir algumas informações básicas sobre como eles funcionam e como reconhecê-los.
Ao receber um programa malicioso para analisar, ele estará empacotado com um algoritmo, inicialmente, desconhecido do
analista. Para ter um acesso ao arquivo original, o analista precisará fazer o caminho reverso do empacotador;para isso, o
analista deve ter conhecimento do processo realizado para que possa revertê-lo.
Para entender esse processo, vamos analisar o �uxo geral de como os empacotadores funcionam. Eles atuam de forma
semelhante a um compactador comum, recebe um arquivo executável como entradae produz um outro arquivo como saída.
Porém, em contraste aos compactadores, o arquivo de saída deve ser independente, ou seja, não deve depender de outro
programa para realizar seu objetivo.
 Função de um empacotador
 Clique no botão acima.
Um empacotador pode compactar, criptografar ou realizar qualquer outra operação com o objetivo de modi�car o
arquivo original. O objetivo desse tipo de ferramenta é di�cultar o reconhecimento e a engenharia reversa, podendo
executar, também, as técnicas discutidas na aula de hoje como anti-desmontagem, anti-depuração ou anti-VM.
Os empacotadores podem empacotar todo o executável, incluindo todos os dados e a seção de recursos, ou
empacotar apenas o código e as seções de dados.
Para manter a funcionalidade do programa original, o empacotador precisa armazenar algumas informações do
mesmo. Essas informações podem ser armazenadas em qualquer formato e existem várias formas para isso.
Os executáveis são carregados pelo sistema operacional, mas, no caso dos empacotados, a rotina de
desempacotamento é carregada pelo sistema operacional e, em seguida, ela carrega o programa original. O ponto de
entrada do código para o executável aponta para essa rotina e não para o código original. O programa original
geralmente é armazenado em uma ou mais seções extras do arquivo.
Essa rotina estará em claro  para o analista de malware e entender suas diferentes partes é fundamental para o
entendimento do artefato original. Ela é geralmente pequena, pois não contribui para a funcionalidade principal do
programa, e sua função é tipicamente simples: Desempacotar o executável original.
A rotina de desempacotamento executa três etapas:
 Fonte: Autor.
Uma etapa inicial ao analisar malware é reconhecer se ele está ou não empacotado. Abordamos algumas técnicas para essa
detecção em aulas anteriores. A lista a seguir resume os sinais a serem observados que auxiliarão nesse processo:
O programa tem poucas importações,
principalmente se as únicas importações
forem LoadLibrary e GetProcAddress.
Quando o programa é aberto no IDA Pro,
apenas uma pequena quantidade de código é
reconhecida pela análise automática.
Quando o programa é aberto em OllyDbg, há
um aviso de que o programa pode estar
empacotado.
O programa mostra nomes de seção que
indicam um empacotador especí�co (como
UPX0).
O programa tem tamanhos de seção
anormais, como uma seção de texto com um
tamanho de dados brutos de 0 e tamanho
virtual diferente de zero.
Ferramentas de detecção de empacotador, como PEiD, também podem ser usadas para facilitar nessa parte do processo. Os
executáveis compactados também podem ser detectados por meio de uma técnica conhecida como cálculo de entropia.
Os dados compactados ou criptografados se parecem mais com os dados aleatórios e, portanto, têm alta entropia; executáveis
que não são criptografados ou compactados têm entropia mais baixa.





Atenção! Aqui existe uma videoaula, acesso pelo conteúdo online
 Fonte: madartzgraphics / Pixabay.
Existem programas automatizados de descompactação estática que desempacotam e/ou descriptografam o executável. Esse
é o método mais rápido e, quando funciona, é o mais simples, pois não depende da execução da aplicação e restaura o
executável ao seu estado original.
Os programas de desempacotamento estático são especí�cos para um único empacotador e não funcionam naqueles
projetados para impedir a análise.
Comentário
Lembrando que não existe solução “bala de prata”, se esta operação falhar em determinar onde a rotina termina, todo o processo
falhará. Às vezes, o malware empacotado pode ser desempacotado automaticamente por um programa existente, mas com mais
frequência esse processo deve ser feito manualmente.
Tal ação pode ser feita rapidamente, com o mínimo de esforço; mas também pode ser um processo longo e árduo. Como
mencionamos, sempre haverá essa corrida do gato e rato, do analista e do atacante, com criação de novas técnicas e novas
formas de confundir o analista, o atacante estará sempre fugindo.
Nenhuma estratégia ou ferramenta única funcionará em todos os casos, então você precisa estar familiarizado com várias
técnicas.
Atividade
1. Sobre algoritmos de desmontagem, faça a correspondência entre a coluna da esquerda e a coluna da direita:
I. Usado pelos desmontadores comerciais a. Desmontagem linear
II. Examina instrução a instrução e constrói a aplicação b. Desmontagem orientado a fluxo
III. Utiliza o tamanho da instrução para determinar as próximas
IV. Itera sobre um bloco de código sem desvios
a) I.aII.bIII.aIV.b
b) I.aII.bIII.bIV.a
c) I.bII.aIII.bIV.a
d) I.bII.bIII.aIV.a
e) I.aII.aIII.bIV.b
2. Analise o seguinte caso esquemático e responda o que se pede: Todas as vezes em que uma aplicação era executada dentro
da ferramenta de desmontagem, não executava nenhuma ação. Mas, ao executar dentro de uma máquina virtual, veri�cou-se que
executava algumas ações.
O analista veri�cou que existia uma função que realizava uma chamada, a função difftime,com duas ações distintas dependendo
da resposta. Qual técnica anti-análise foi utilizada pelo autor do malware?
a) Ofuscação
b) Anti-máquina virtual
c) Anti-depuração
d) Anti-desmontagem
e) Empacotamento
3. Quais das a�rmações abaixo são corretas acerca dos empacotadores:
I. Reduzem o tamanho dos programas;
II. Auxiliam a análise estática;
III. Impedem ou di�cultam a detecção ou análise;
a) I e II.
b) II e III.
c) I, II e III.
d) I e III.
e) Apenas III.
NotasReferências
ANLEY, C. The shellcoder’sHandbook: discoveringandexploringsecurityholes. 2.ed. [S.1.]: WileyPublishing, Inc., 2007.
SIKORSKI,M.;HONIG, A. PracticalMalwareAnalysis: The Hands-On GuidetoDissectingMalicious Software(1.ed.). No Starch
Press, 2012.
TANENBAUM, A.S. Organização Estruturada de Computadores. 5.ed. São Paulo: Pearson Prentice Hall, 2010.
Próxima aula
Investigação de malwares via análise de memória em ambientes Windows;
Aquisição de memória;
Análises e identi�cação de atividades maliciosas.
Explore mais
Existem diversas técnicas que não foram abordadas na aula de hoje, procure na internet sobre elas e tente analisar alguma das
saídas. Não se prenda ao que foi abordado aqui, expanda sua visão.

Outros materiais