Historicamente, a maioria das soluções tradicionais de AV dependia das assinaturas estáticas para identificar malwares conhecidos. Como resultado, os autores de malware naturalmente começaram a empregar uma variedade de ferramentas para ofuscar o código subjacente de seu software para evitar a detecção com base em assinatura e dificultar as análises estáticas (humanas).
Essas ferramentas de ofuscação se proliferaram nos últimos anos, com numerosas ofertas comerciais disponíveis, já que até mesmo autores de softwares legítimos buscam dificultar a engenharia reversa de seus produtos. Embora métodos e resultados variem, a intenção final agora é elevar a dificuldade de leitura do código a ponto de desencorajá-la (em oposição à intenção do design original por trás dos packers tradicionais, que era diminuir o tamanho de um arquivo executável).
Em série de três publicações emnosso blog, abordaremos várias técnicas comumente usadas para evitar a detecção por produtos de antivírus e a disponibilidade imediata dessas ferramentas. Esta é a primeira da série.
Segurança por meio da ofuscação
A ofuscação tem uma longa história em linguagens interpretadas. À medida que as pessoas esperavam experiências mais ricas ao navegar em sites – geralmente entregues via JavaScript e outros idiomas do lado do cliente – os autores legítimos foram motivados a desenvolver métodos de proteção e compressão de seu código-fonte.
Por outro lado, o ofuscamento malicioso geralmente vai aléme criptografa o código-fonte do script para abrir no momento em que o script é executado. Essas técnicas ocasionalmente produzem resultados incomuns.
Como os aplicativos .NET são convertidos em um idioma intermediário e geralmente são compilados just-in-time no tempo de execução, seu código está exposto a muitos dos mesmos riscos (do ponto de vista do autor) como linguagens de script interpretadas: os arquivos executáveis do .NET podem ser descompilados em uma cópia bem próxima do código C#/VB original de forma relativamente fácil.
Neste ponto, deve-se ressaltar que nem toda a ofuscação – mesmo a criptografia mais avançada, geralmente vista em amostras maliciosas – é ruim. O Forcepoint Security Labs está ciente de pelo menos um produto antifraude embutido em vários sites bancários importantes que se protegem usando uma combinação de ambos os métodos.
Packers
O principal tipo de ferramenta utilizado para ofuscar e “proteger” binários compilados são os packers. Os packers tradicionais são arquivos com extração automática eficaz – ou, pelo menos, trabalham em termos bastante similares. Junto com os dados comprimidos/ofuscados (o binário original na forma ofuscada), eles contêm um “stub” desofuscador que, em execução, desofusca o binário e pula para seu ponto de entrada restaurado.
Uma importante semelhança compartilhada por esta categoria é que o binário original é completamente recuperado após a desofuscação e disponível para engenharia reversa adicional. Assim, esse tipo de compactador é facilmente derrotado por um ponto de interrupção bem colocado em um depurador logo após a conclusão da desofuscação, quando o controle de execução é transferido ao binário original.
Um dos packers mais básicos atualmente utilizados é o UPX de código aberto que foi desenvolvido na década de 1990, que usa um algoritmo de compressão extremamente simples, que não foi projetado para ofuscar.
Outro exemplo normalmente usado é o ASPack, mais focado na ofuscação e na segurança do que na compressão. Algumas versões do ASPack utilizam o código de automodificação, que dificulta o uso dos pontos de interrupção. Porém, no fim das contas, os mesmos princípios se aplicam ao descompactá-lo.
Packers baseados na virtualização
Outra categoria de packer – ou melhor, ofuscador, já que este tipo aumenta o tamanho do arquivo em vez de reduzi-lo – são os que se baseiam em virtualização. Eles operam destruindo o binário original e criam um novo binário funcionalmente equivalente usando o bytecode personalizado, que é executado em um interpretador ofuscado personalizado. A principal conclusão é que o binário original nunca é restaurado (diferente do tipo de ofuscador mencionado anteriormente) e permanece ofuscado em toda sua execução. As desvantagens significantes e óbvias são o tamanho de arquivo drasticamente aumentado e a velocidade de execução mais lenta.
Um exemplo notável desta categoria é o VMProtect. A desofuscação manual de binários do VMProtect é geralmente muito difícil: é preciso decodificar cada bytecode para todos os binários protegidos conforme são gerados aleatoriamente quando um binário é ofuscado e, portanto, não permanecem constantes entre binários ofuscados.
No entanto, com perseverança, é possível decodificar cada instrução do bytecode, uma vez que o stack baseado no tradutor é muito simples (apesar das instruções inúteis utilizadas para frustrar as tentativas de engenharia reversa).
Curiosamente, o VMProtect parece não ser muito popular entre os autores de malware desde meados de 2017: o Forcepoint Security Labs desenvolveu um método genérico para detectar binários compactados do VMProtect e descobriu que as amostras identificadas não tipicamente malware, sendo que a maioria estava integrada por adware e software fraudulento para games.
Leia nesta edição:
CAPA | TECNOLOGIA
Centros de Dados privados ainda geram bons negócios
TENDÊNCIA
Processadores ganham centralidade com IA
TIC APLICADA
Digitalização do canteiro de obras
Esta você só vai ler na versão digital
TECNOLOGIA
A tecnologia RFID está madura, mas há espaço para crescimento
Baixe o nosso aplicativo