Baixe o app para aproveitar ainda mais
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.
Compartilhar