O Laboratório de Pesquisa do avast! é onde alguns dos mais brilhantes gênios do avast! criam novas formas de detectar malware. Elas podem ser funções dentro do produto (como o FileRep e a AutoSandbox, incluindo todos os seus recentes desenvolvimentos) assim como componentes que estão do nosso lado da empresa, isto é, coisas que os usuários não necessariamente vêem, mas que são igualmente importantes para a qualidade do produto final.
De fato, nos dias que correm, cada vez dedicamos mais tempo aos temas de infraestrutura, pois cada vez mais a inteligência do avast! se move para as nuvens e/ou é distribuída em tempo real através da tecnologia das atualizações streaming.
Os motores de classificação do avast! utilizam várias técnicas, mas as duas mais importantes às quais nossa equipe trabalha arduamente são as que chamamos de Malware Similarity Search e Evo-Gen.
A Malware Similarity Search é uma importante função que nos permite quase instantaneamente categorizar uma grande quantidade de amostras que nos chegam. Ou seja, para cada arquivo, é possível dizer se se parece a outro infectado já conhecido (ou a um conjunto de malwares) ou se, por outro lado, é semelhante a um arquivo limpo (ou a um conjunto deles). Isto pode parecer um problema fácil de resolver, mas, na prática, é bastante difícil. Naturalmente, o segredo está em como você define os padrões (já que estamos falando de semelhança) e o que você leva em conta quando analisa um arquivo. No avast!, nós consideramos tanto as propriedades estáticas do arquivo quanto o resultado de uma análise dinâmica (em outras palavras, as informações coletadas durante a execução do arquivo).
Agora, naturalmente, uma tecnologia como está é muito valiosa, pois nos permite tomar rápidas decisões sobre arquivos que nós nunca vimos antes. Por exemço, se um arquivo é muito semelhante a um conjunto de amostras infectadas conhecidas e, ao mesmo tempo, não é semelhante a nenhum dos arquivos limpos, nós o classificamos imediatamente como malware. Acredite ou não, nós estamos vendo milhares de arquivos como este todos os dias.
A segunda tecnologia que mencionei, Evo-Gen, é parecida, mas um pouco mais engenhosa. Trata-se de encontrar o mais próximo possível uma descrição curta e genérica de grandes conjuntos de amostras de malware. Se você tomar uma amostra de 1.000.000 de malwares (e 1.000.000 de arquivos limpos) e der ao algoritmo a seguinte tarefa: encontre as menores descrições possíveis para o maior número de amostras do conjunto, sem descrever nenhum dos arquivos limpos. Evo-Gen é um algoritmo genético que nós desenvolvemos exclusivamente para isto. Ele geralmente encontra alguns gens reais para nós, por exemplo, uma descrição de um aparente conjunto aleatório de dezenas de milhares de arquivos infectados escolhidos ao acaso do conjunto dos vírus que conhecemos. Qual o tamanho da descrição? 8 bytes.
Agora, se você pensar um pouco sobre isto, você irá descobrir que ambos os algoritmos têm algo em comum. Quero dizer, para ambos é preciso ter um acesso superrápido ao nosso gigantesco conjunto de arquivos limpos e de malwares. Esqueça se for um acesso sequencial (ou que envolva qualquer processamento destes arquivos um por um). Mesmo a leitura destas amostras a partir dos discos levaria horas.
Por isso, nosso time desenvolveu outra grande peça tecnológica que nós chamamos de MDE. É basicamente um banco de dados carregado na memória que trabalha sobre estes dados indexados e que permite um altíssimo acesso paralelo.
Tradicionalmente, nós rodamos estas coisas em um hardware de servidor clássico. Para a maioria do trabalho, nós utilizamos servidores Dell padrão baseados em CPUs Intel Xeon. Contudo, o desempenho nunca foi tão alto e nós sempre pensamos que deveríamos fazer algo melhor.
Um dos racks com CPU Intel utilizados pelo Laboratório de Vírus do avast!.
A quebra de paradigma veio quando nós começamos a fazer experiências com as GPUs. Para os iniciantes, as modernas GPUs (tanto da NVidia quando da AMD) não estão limitadas a processadores gráficos ou para jogos. O bom delas é que podem ser massivamente paralelizadas: enquanto as atuais CPUs Intel podem conter 6, 8 ou talvez 10 núcleos, as GPUs para jogos podem conter centenas de núcleos. Verdade que cada um deles não é tão poderoso, mas se você soltar o seu potencial com alguns bons algoritmos de paralelização, o desempenho final é maluco!
Por isso, com o MDE, nós agora estamos no processo de transição para uma plantação de "supercomputadores" baseados em GPUs. O ambiente que nós estamos agora testando se parece com este:
Como você pode ver, não é um servidor montado em racks, mas uma estação de trabalho. Uma infernal estação de trabalho diria eu. Com um Intel i7 E3820 4C 3,6GHz e 32 GB DDR3 RAM, que não é um mau começo, mas o legal nesta caixinha são as quatro placas gráficas GPU da NVidia, cada uma com 3 GB de RAM e conectadas uma à outra e com resfriamento externo por água. O monstro é alimentado por uma fonte de 1.500 W, mas caso seja preciso mais, nós podemos acrescentar mais uma.
Ainda que nós não colocamos estes sistemas na linha de produção, nós o faremos em breve. E eu estou seguro que funcionarão, permitindo que entreguemos a vocês, usuários, um produto ainda melhor. Você nunca sabe... Se isto se provar tão útil quando nós pensamos que será, nós acabaremos construindo um dia algo parecido com o Titã...
(Enquanto isso, o meu trabalho é manter os jogadores longe da sala do servidor... :-)).