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:
- Replica-se para o sistema
- Cria entradas de registro para ser inicializado automaticamente
- Replica-se para drives removíveis e pastas compartilhadas
- Baixa e executa arquivos do site mostrado na figura acima
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:
- Carrega-se na memória
- Gera um arquivo de oito letras
- Altera o módulo e os nomes de formulário
- Altera a versão do produto, arquivo, e nome interno da seção de recursos
- A seção mostrada na figura é reencriptada com uma nova chave
O ChangeUp pode ser detectado por heurística.