Arquitetura

Arquitetura de um vírus polimórfico:

1)Módulo de decriptação
2)Corpo do vírus
   2.1)Rotina de Mutação

Programa infectado em execução:

O processo abaixo descreve um arquivo já infectado contribuindo para a infecção de outro arquivo que será aberto:

1)O programa infectado chama a rotina de decriptação do vírus
2)O vírus é totalmente decriptado e carregado em memória
3)O vírus interrompe a abertura de um programa
3)O vírus gera nova variante, através do módulo de mutação, com um par de módulo de decriptação e encriptação
4)O vírus infecta outro arquivo
5)O programa é aberto

O corpo do vírus decriptado contém o vírus e a rotina de mutação responsável por gerar o módulo de decriptação e o módulo de encriptação.

Algumas técnicas utilizadas para evitar a detecção:

1)Execução em dias ou momentos pré-definidos

Alguns vírus polimórficos só executam num determinado momento pré-definido, o que dificulta a detecção do vírus por emulação por exemplo.

2)Inserção de instruções aleatórias que não interferem no funcionamento do vírus

Ao se adicionar instruções aleatórias desnecessárias a assinatura do vírus muda de mutação para mutação, dificultando a detecção do vírus.

3)Permutação da ordem das rotinas de decriptação

Assim como inserir instruções aleatórias dificulta a detecção da assinatura do vírus, a permutação da ordem das rotinas de decriptação, como será visto no vírus 1260, também altera a assinatura.

 

Os vírus polimórficos se modificam na replicação mas ao decriptar o código permanece o mesmo.

 Fig. 3 - Corpo preservado nas diferentes gerações [2]

Vírus  1260

O vírus 1260 foi o primeiro vírus polimórfico que se tem notícia [4], ele faz uso de duas chaves que são incrementadas ao longo do código, além disso, ele é capaz de inserir instruções desnecessárias no módulo de decriptação. Essas instruções não fazem nada no código, apenas alteram a aparência do módulo. Esse vírus pode alterar de tamanho dependendo das funções inseridas e do preenchimento aleatório, além disso, as instruções dentro dos grupos podem ser permutadas em qualquer ordem, alterando a estrutura do vírus e dificultando a detecção por assinatura.

 

Rotina de decriptação:

; Group 1  Prolog Instructions

inc     si              ; instrução desnecessária, código variável

mov     ax,0E9B   ; configurar a primeira chave

clc                            ; instrução desnecessária, código variável

mov     di,012A   ; offset da instrução Start (corpo do vírus)

nop                         ; instrução desnecessária, código variável

mov     cx,0571  ; usado como segunda chave

 

; Group 2  Decryption Instructions

Decrypt:

xor     [di],cx        ; decriptar primeira palavra com a segunda chave

sub     bx,dx         ; instrução desnecessária, código variável

xor     bx,cx         ; instrução desnecessária, código variável

sub     bx,ax        ; instrução desnecessária, código variável

sub     bx,cx        ; instrução desnecessária, código variável

nop                       ; código necessário, porém nada faz

xor     dx,cx        ; instrução desnecessária, código variável

xor     [di],ax   ; decriptar primeira palavra com a primeira chave

 

; Group 3  Decryption Instructions

inc     di        ; ir para o próximo byte a ser decriptado

nop               ; código necessário, porém nada faz

clc                 ; instrução desnecessária, código variável

inc     ax      ; incrementar primeira chave

 

; loop

loop    Decrypt   ; até que todos os bytes sejam decriptados incrementar a segunda chave

 

; preenchimento aleatório de 39 bytes

 

Start:

;     Corpo do vírus encriptado/decriptado

 

Em cada grupo de instruções, até cinco instruções desnecessárias são inseridas (INC SI, CLC, NOP, e outras instruções que nada fazem) sem repetição. Existem dois NOPs que sempre aparecem.

Se permutássemos as instruções dos grupos teríamos inicialmente 3! * 2! * 2! = 24 variantes. Também poderíamos permutar as instruções desnecessárias e alterá-las, desde que respeitemos os 39 bytes do preenchimento aleatório. Sendo assim o número de variantes cresce exponencialmente, podendo chegar a milhões.


Vírus W32.ChangeUp

 

O vírus W32.ChangeUp se espalha através de discos removíveis e programas de trocas de arquivo explorando uma vulnerabilidade do Windows. Quando o corpo do vírus é executado ele faz uma requisição a um site e tenta baixar mais conteúdo malicioso. O vírus ainda instala um programa de troca de arquivos e tenta se propagar ao se copiar para a pasta de arquivos compartilhados.

Na figura abaixo é possível ver o código do vírus polimórfico Changeup decompilado, a área em questão é modificada sempre que o programa é executado.

Fig. 4 - Vírus W32/Changeup [3]

O vírus então decripta a área RC4 da figura acima e o resultado pode ser visto na figura abaixo.

Fig. 5 - Código para a decriptação e mensagem decriptada [3]

Depois que a decriptação, o código malicioso executa a seguinte rotina:

O Changeup se modifica todas as vezes que se copia, sem para isso modificar o tamanho do arquivo, mas modificando o valor do seu hash MD5, dificultado a detecção por assinatura. Ele também executa a seguinte rotina:

 O ChangeUp pode ser detectado por heurística.

Anterior Topo Próximo