Executando verificação de segurança...
-1

Você sabe como funciona um antivírus?

Já parou pra pensar no funcionamento básico de um antivírus? Eu tive essa dúvida a um tempo atrás e resolvi me aprofundar um pouco nesse assunto. Após isso, criei a minha própria versão simples usando Python.

Neste artigo, vou te mostrar como funciona um antivírus.

O funcionamento

Bem, de forma básica, um antivírus funciona comparando os arquivos do seu computador com uma base de dados de malwares. Mas como ele faz essa comparação?

Simples, utilizando hashes. A base de dados de malwares é literalmente uma lista de hashes, seja ele MD5, SHA256 ou outro tipo. Logo, a única função do antivírus é gerar o hash do arquivo e verificar se ele se encontra na base de dados de malwares conhecidos.

Uma forma básica de representar a verificação seria:

  1. Carregar a base de dados de malwares conhecidos
  2. Obter a lista de arquivos do computador
  3. Gerar o hash de um arquivo e verificar se ele está presente na lista de malwares conhecidos. Esse processo é repetido até que todos os arquivos sejam analisados.

Isso parece um trabalho custoso, e realmente é. Mas existem várias formas de otimizar esse processo em qualquer linguagem de programação.

A minha versão de antivírus escrito em Python

Após entender o conceito básico de um antivírus, eu decidi criar o meu próprio programa para aplicar o que eu havia aprendido, afinal...

O que não consigo criar, não entendo – Richard Feynman

E assim surgiu o OpenShield, fiz diversas otimizações nele para que a verificação se tornasse cada vez mais rápida. Basicamente, ele baixa uma base de dados de hashes MD5 de malwares e realiza a verificação. Nesta versão do projeto, você escolhe qual diretório quer escanear.

Um exemplo de funcionamento está aqui:

[!] Checking for database updates... Downloading...
[?] Discovering files... OK
[?] Scanning files... OK
[!] All right, 0 malwares found! (scan in 88.466)

Seguindo a ordem, o OpenShield faz as seguintes ações:

  1. Verifica por atualizações do banco de dados (se não houver nenhum banco de dados, ele realiza o download)
  2. Obtém a lista dos arquivos do diretório. Para otimização, utilizei os generators do Python pra não entupir a memória de dados.
  3. Por fim, realiza o escaneamento de todos os arquivos.

Dá uma olhada no repositório do projeto, o código tá bem escrito e organizado!


É isso! Espero que você tenha entedido o funcionamento básico de um antivírus. Lembrando que o meu projeto foi criado apenas como forma de estudo, mas funciona perfeitamente, até uso ele as vezes.

Obrigado por chegar até aqui!
~$ exit 0

2

Amigo, não sei onde tu leu isso mas não é assim que um antivírus funciona. Para pra pensar: se funcionassem assim eles não conseguiriam, por exemplo, identificar um executável infectado por um vírus. Porque o vírus modifica o executável, logo a hash de cada executável infectado vai ser diferente. E também se um único bit do arquivo fosse modificado, o antivírus não conseguiria identificar mais. O que tornaria a vida dos desenvolvedores de malwares extremamente fácil.

Um antivírus pode ter vários mecanismos de proteção (incluindo sandbox, análise de redes/DNS etc.) mas os dois principais seriam:

  1. Detecção de arquivos infectados (que é o que você tentou explicar aqui) com base em padrões
  2. Detecção de comportamento suspeito de um processo com base em heurísticas

Falando exclusivamente do primeiro, ele não funciona comparando hashes de arquivos. Um analista de malware vai fazer uma análise no malware e compartilhar seus resultados em um paper, descrevendo o comportamento do malware. Com isso ele também vai escrever um código que faz a detecção de padrões no arquivo que pode ser usado para identificar o malware. Esse padrão não é uma coisa específica, pode ser: uma string, uma sequência de instruções, a hash da tabela de importações (e não do arquivo todo) etc.

Cada antivírus pode ter uma engine própria para isso, então não me pergunte em qual linguagem isso é escrito. Mas se você quiser ter uma noção de como é, dá uma olhada no Yara:

1

Obrigado pelo comentário! O que eu mostrei aqui foi a detecção de arquivos que são malwares, ou seja, se você executá-lo, seu computador provavelmente vai ser infectado. Sei que um antivírus é bem mais complexo que isso, por isso deixei claro sobre o "funcionamento básico". O MalwareBaazar disponibiliza vários arquivos com os hashes de executáveis que são malware, e é com base nisso que escrevi meu código.

Mais uma vez, agradeço pelo comentário! 👾

2

O meu ponto é que esse não é "o funcionamento básico". Nenhum antivírus tenta detectar malware com base em hash, isso não acontece. Não rola, amigo. É uma péssima ideia tentar fazer isso. É desperdício de processamento no computador do usuário.

Para deixar claro: não estou dizendo que isso é básico, estou dizendo que está errado.

Deixa eu te explicar sobre o MalwareBaazar: é um uma plataforma que pesquisadores compartilham samples entre si. Ou seja, um analista de malware após concluir sua análise pode (se quiser) fazer upload do sample que ele analisou para que outros analistas possam ter acesso ao sample analisado.

Um sample é um arquivo do malware. A hash compartilhada lá não é usada por antivírus para detectar o malware, é usada por outros analistas para que possam verificar se o arquivo que eles têm é idêntico ao que foi analisado ou não.

Assim eles comparam as hashes para ver se há diferença entre os arquivos. E com base nesta informação (se há ou não diferença) eles podem determinar se precisam reanalizar o malware ou não. Porque se for idêntico outro analista já analisou ele, logo não é necessário fazer isso de novo. Só consultar os resultados compartilhados pelo colega.

2

Entendi, Silva! Obrigado pelas explicações quanto ao funcionamento do antivírus e sobre o MalwareBaazar. Novamente, quanto ao código escrevi, ele consegue identificar executáveis já apontados na base de dados e impedir que o usuário execute esse programa, e isso já se encaixa como um "antivírus". Obviamente, nada moderno e nem tão seguro, mas funciona em alguns casos.

Quanto a fonte das informações que tive:

Onde posso destacar o seguinte parágrafo:

A função mais simples de um antivírus é monitorar arquivos e outros programas de um dispositivo para detectar vírus. Quando novas aplicações são instaladas, o programa faz a verificação delas para saber se existe alguma ação suspeita. Se algo foi identificado, a instalação é bloqueada ou a nova aplicação é encaminhada para a quarentena.

Com certeza há muita mais coisa envolvida em um antivírus, e é algo extremamente complexo para garantir a segurança das máquinas.

1

Uma pergunta: mesmo que um bit do arquivo mude, o hash dele mudará também? Se sim, o criador do malware pode inserir arbitrariamente bytes vazios (se isso for possível sem danificar a operação do seu malware) no seu arquivo para que ele não se pareça com um malware da base de dados do antivírus?

1

Sim, o hash mudará caso qualquer dado seja alterado. Porém, os antivírus modernos realizam uma análise comportamental nos arquivos e programas que estão no computador, podendo detectar se é um malware ou não a partir dessa técnica. Além disso, os banco de dados são sempre atualizados para tentar minimizar essa tática.

1

Bacana! Queria saber como o Eset funciona, pois muitas vezes ele já bloqueia por exemplo um site ou aplicação antes mesmo de ser executado, no caso, vc saberia dizer como funciona esses processos? valeu!

1

Um antivírus pode usar várias formas pra detectar o malware, uma delas é a que eu citei no artigo, e essa técnica básica pode ter sido usada para impedir que o executável seja iniciado no seu exemplo. Já para sites, o antivírus pode reconhecer sites infectados a partir de outra base de dados, além de análise de scripts disponibilizados pelo site e outros métodos envolvendo a rede.