Publicidade

Estado de Minas

Blog do Forcepoint Security Labs - Primeira parte ? Segurança, desempenho, ofuscação e compressão


postado em 29/08/2017 18:00

(foto: Dino)
(foto: Dino)
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 em nosso 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ém e criptografa o código-fonte do script para abrir no momento em que o script é executado. Essas técnicas ocasionalmente produzem resultados incomuns, como no exemplo abaixo.

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 auto modificaçã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.

Os comentários não representam a opinião do jornal e são de responsabilidade do autor. As mensagens estão sujeitas a moderação prévia antes da publicação

Publicidade