segunda-feira, 28 de novembro de 2011

Como funcionam os antivírus?


Olá pessoal!
No último post um colega levantou uma questão sobre os antivírus não detectarem vírus em alguns programas.
Ele tem razão.
Mas você sabe porque?
Não pretendemos aqui esgotar o assunto, mas vamos tratar o caso mais comum: um arquivo executável infectado com vírus.
Primeiro vamos estabelecer o seguinte:
1 - é impossível ler um executável. Você não consegue abrir um executável no word ou no notepad para ver o que tem dentro. Ele é codificado, e é justamente esta codificação que permite que ele seja executado pelo sistema. A codificação é feita em um processo chamado compilação, no qual você pega o código fonte, este sim legível, e gera o executável. Existem algumas técnicas de engenharia reversa para tentar "descompilar" um executável, mas nenhum antivírus faz isso.
2 - nem tudo é vírus. Quando você usa o Gmail ou o Latitude, informações suas são capturadas e enviadas para a Google, mas não há nada de malicioso nisso, pois estava tudo claramente descrito nos Termos de Uso que você leu e aceitou (você leu né?).
Vírus, ou Malware como eu prefiro, é um código, um programa, ou uma parte de um programa, que usa de artifícios para fazer algo que você não autorizou, como por exemplo, ser executado disfarçado dentro de um jogo, capturar tudo o que você digita e enviar para hacker@deusmelivre.com, ou criptografar todo o conteúdo da pasta Meus Documentos e depois mandar um email pra você dizendo "paga milão que eu te falo a senha".
Ok?
Vamos em frente...
Os antivírus dispõem basicamente de duas maneiras para reconhecer um vírus: Assinatura e Heurística.
Como mais de 90% dos vírus são reconhecidos por assinatura, vamos deixar a heurística para outro post.
Essa tal assinatura é o seguinte.
Digamos que a cada letra do alfabeto corresponde um número: a=01, b=02, c=03, e assim por diante.
Imagine que você tem um texto qualquer. Uma frase. Você pega uma por uma as letras que formam esta frase e executa uma operação matemática com o valor a que ela corresponde, por exemplo, somar os valores das letras.
No final dos cálculos você irá obter um número.
Este número seria a "assinatura" da frase, pois se mudarmos uma letra na frase o resultado final também mudará.
Tecnicamente, a operação matemática se chama ALGORÍTIMO, e o número resultante dela é o HASH.
No nosso mundo de TI, os algorítimos mais comuns são o MD5 e o SHA, que produzem hashes semelhantes a isso:
6559f1c832e7a6dda1ee7485073743d5 (MD5)
67827fb805c4ad04fd9f1c6f0f22cd731d6a21754438c9af7791f9f1c6ebf092 (SHA256)
Para que um algorítimo seja bom é muito importante que origens diferentes não possam gerar o mesmo hash, que é o que chamamos de colisão de hash.
Tá acompanhando?
Então vamos adiante.
Quando você atualiza seu antivírus, o que você faz é download de um arquivo contendo uma lista enorme de hashes de arquivos identificados como vírus, que é a tal da "pattern". Um banco de dados de hashes de vírus.
E quando você faz uma varredura, o que seu antivírus faz é aplicar o algorítimo a cada arquivo do seu disco, e comparar o resultado com a pattern. Se o resultado for encontrado é virus, senão... não é.
Simples não é?
Pois é... Mas vamos aos problemas...
Você sabe quantos arquivos existem no seu micro?
Num micro típico, apenas com Windows e Office, são cerca de 100mil, e se você tem mais uma dúzia de programas instalados e o computador está em uso a mais de 1 ano, este número deve ter passado de 1milhão de arquivos.
E tem ainda os arquivos da rede... sabe quantos temos?
Só arquivos .exe no nosso servidor são cerca de 135mil.
A esta altura você já deve ter percebido que o tal banco de dados de hashes de vírus, deveria ter o hash de cada um destes arquivos. Não só os do meu micro, do seu micro, e do servidor, mas de todos os arquivos existentes no mundo.
Você acha que ele tem isso?
Pois é... não tem.
E é por isso que em alguns casos os antivírus não detectam um vírus.
Na prática, para que o hash de um vírus passe a integrar esta base de dados, é necessário que alguém envie ao fabricante do antivírus o arquivo que supostamente é o vírus. Sem isso o fabricante não pode fazer a análise, confirmar que é vírus, gerar o hash para colocar na base de dados, e trabalhar em uma vacina.
Mas o caos não termina ai...
Se eu alterar um único bit no arquivo, altera-se completamente o hash, e o que acontece...
ISSO MESMO!!!
O antivírus não vai detectar novamente.
Que encrenca não é?
É quase desanimador... Mas... se é ruim com ele, sem ele é muito pior!
Então por mais que o seu antivírus seja falho, mantenha ele instalado e sempre atualizado!
Até o próximo!

Nenhum comentário:

Postar um comentário