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:
PRÊMIO IC - DESTAQUES DE TIC 2024
Usuários e profissionais do setor de TIC escolhem os produtos e as marcas que melhor os atenderam
TELECOMUNICAÇÕES
5G: a real revolução ainda está para acontecer
ESCPECIAL - ANUÁRIO DE TIC 2024/25
Contatos estratégicos
Esta você só vai ler na versão digital
TENDÊNCIAS
As tecnologias que estão moldando o futuro do e-commerce
Baixe o nosso aplicativo