Recentemente, empresas de tecnologia enlouqueceram completamente com o aprendizado de máquina (Machine Learning). Dizem que é a solução para problemas que apenas pessoas podiam resolver. Alguns chegam ao ponto de chamar de “inteligência artificial”. O aprendizado de máquina desperta interesse especialmente na segurança de TI, em que o ambiente de ameaças se altera rapidamente.
A qualidade de uma tecnologia se resume a velocidade e consistência. O aprendizado de máquina é baseado em tecnologias, o que torna sua explanação simples em termos humanos. Então, vamos lá: resolveremos problemas reais por meio de um algoritmo funcional – baseado em aprendizado de máquina. O conceito é simples, e fornece conclusões reais e valiosas.
Problema: distinguir escrita de baboseira
A escrita humana (a de Tery Pratchett nesse caso), tem o seguinte visual:
Dê fogo ao homem e ele se aquecerá por aquele dia. Ensine-o a acender uma fogueira, e ele estará aquecido para o resto da vida. Sabemos que que o ingrediente vital do sucesso é saber que o que você está fazendo não pode ser feito. O problema em ter a mente aberta é que as pessoas insistirão em colocar coisas nela.
Baboseira é algo como:
DFgdgfkljhdfnmn vdfkjdfk kdfjkswjhwiuerwp2ijnsd,mfns sdlfkls wkjgwlreoigh dfjdkjfhgdjbgk nretSRGsgkjdxfhgkdjfg gkfdgkoi
dfgldfkjgreiut rtyuiokjhg cvbnrtyu
Nossa tarefa é desenvolver algoritmos que possam diferenciar as duas coisas. Apesar de ser fácil para um humano, trata-se de um desafio. É necessário muito esforço para formalizar a diferença. Usamos aprendizado de máquina para isso: alimentamos o algoritmo com exemplos para que ele “aprenda” como responder pergunta “escrita ou baboseira?” de forma confiável toda vez que o antivírus analisar um arquivo. Essencialmente, isso que é feito.
Já que estamos tratando este assunto no contexto de segurança de TI, e o principal objetivo de um software antivírus é encontrar códigos maliciosos em um amontoado de dados limpos, chamaremos escrita de fato como texto “limpo” e a baboseira de “malicioso”.
Solução: use um algoritmo
Nosso algoritmo calculará a frequência em que uma letra em particular é sucedida por outra, analisando possíveis pares de letras. Por exemplo, para nossa primeira frase, “Dê fogo ao homem e ele se aquecerá por aquele dia. Ensine-o a acender uma fogueira, e ele estará aquecido para o resto da vida” (Give a man a fire and he’s warm for the day. But set fire to him and he’s warm for the rest of his life), a frequência de letras em particular é a seguinte:
Bu — 1
Gi — 1
an — 3
ar — 2
ay — 1
da — 1
es — 1
et — 1
fe — 1
fi — 2
fo — 2
he — 4
hi — 2
if — 1
im — 1
Para deixar tudo mais simples, ignoramos pontuação e espaços. Na frase temos então, a letra a seguida por n três vezes, f por i duas vezes, e a seguido por y uma vez.
Nesse estágio, entendemos que uma frase não é suficiente para fazer com que um modelo aprenda: Precisamos analisar uma sequência de texto ainda maior, vamos considerar os pares em “O Vento Levou”, de Margaret Mitchell – sendo preciso, nos primeiros 20% do livro. Eis algumas das sílabas:
he — 11460
th — 9260
er — 7089
in — 6515
an — 6214
nd — 4746
re — 4203
ou — 4176
wa — 2166
sh — 2161
ea — 2146
nt — 2144
wc — 1
Como você pode ver, a possibiliade de encontrar a combinação he é duas vezes mais de se ver um an. Já wc aparece apenas uma vez (nesse caso é na palavra newcomer),
Então, agora temos um modelo de texto limpo, mas como podemos usá-lo? Primeiro, definimos a probabilidade de uma linha ser limpa ou maliciosa, o que chamaremos de autenticidade. Definiremos a frequência de cada par de letras com o auxílio de um modelo (pela avaliação do quão realística é a combinação de letras) e a multiplicação de seus números.
F(Gi) * F(iv) * F(ve) * F(e ) * F( a) * F(a ) * F( m) * F(ma) * F(an) * F(n ) * …
6 * 364 * 2339 * 13606 * 8751 * 1947 * 2665 * 1149 * 6214 * 5043 * …
Na determinação do valor final de autenticidade, também consideramos o número de símbolos na linha: quanto maior a linha, mais números multiplicamos. Dessa forma, para tornarmos esse valor adequado para frases longas e curtas fazemos algumas mágicas matemáticas (extraímos a raiz quadrada do “tamanho da linha em questão e subtraímos um” do resultado.
Utilizando o modelo
Agora podemos tirar algumas conclusões: quanto mais alto o número calculad, melhor a linha em questão se encaixa ao modelo – e consequentemente, maior a chance de ter sido escrita por um humano. Se o texto tem nota alta, chamamos de limpo.
Se uma linha contém muitas repetições de combinações raras (como wx, zg, yq, entre outras), é provável que seja maliciosa.
Para a linha sob análise, medimos sua autenticidade por pontos, da seguinte forma:
- Give a man a fire and he’s warm for the day. But set fire to him and he’s warm for the rest of his life — 1984 pontos
- It is well known that a vital ingredient of success is not knowing that what you’re attempting can’t be done — 1601 pontos
- The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it — 2460 pontos
- DFgdgfkljhdfnmn vdfkjdfk kdfjkswjhwiuerwp2ijnsd,mfns sdlfkls wkjgwl — 16 pontos
- reoigh dfjdkjfhgdjbgk nretSRGsgkjdxfhgkdjfg gkfdgkoi — 9 pontos
- dfgldfkjgreiut rtyuiokjhg cvbnrtyu — 43 pontos
Como você pode ver, as linhas limpas faturam mais de 1000 pontos e as maliciosas nem chegam aos 100. Parece que o algoritmo funciona como esperado.
De modo a contextualizar pontuações altas e baixas, a melhor forma é delegar esse trabalho para a máquina e deixá-la aprender. Para isso, submeteremos certo número de linhas limpas reais à avaliação e checaremos sua autenticidade, depois repetiremos o processo para linhas maliciosas. A partir daí calculamos a base da avaliação. No nosso caso, chega a 500 pontos.
E na vida real?
Vamos revisar o que já fizemos.
1. Definimos as características de linhas limpas (ex: pares de caracteres)
Na vida real, para desenvolver um antivírus funcional, analistas também definiram características de arquivos e outros objetos. Inclusive, suas contribuições são vitais: ainda é um ser humano que define as funções de avaliação do sistema, e o nível de expertise e experiência do especialista influencia diretamente na qualidade dessas funções. Por exemplo, quem disse que alguém precisa analisar característica em pares e não trios? Essas considerações são avaliadas também em laboratórios de antivírus. Devo dizer aqui que na Kaspersky Lab usamos aprendizado de máquina para selecionar as melhores funções complementares.
2. Usamos indicadores definidos para construir nossos modelos matemáticos, feitos a partir de aprendizado originado de exemplos.
Claro, na vida real os modelos são um pouco mais complexos. Agora, o melhor resultado vem do conjunto de árvores de decisão construídas pela técnica de Dinamização de Gradiente. Porém, continuamos a ter a perfeição como objetivo, não podemos esperar sentados e aceitar o melhor disponível hoje.
3. Usamos modelos matemáticos simplificados para calcular a taxa de autenticidade
Para ser honesto, na vida real, fazemos bem o contrário: calculamos a taxa de “malícia”. O que parece não ser muito diferente. Contudo considere o quão não autêntica seria uma linha escrita em outra língua para nosso modelo. Mas é inaceitável que um antivírus dê falsos negativos para uma série de arquivos simplesmente porque ainda não os conhece.
Uma alternativa para o aprendizado de máquina?
Por volta de 20 anos atrás, quando malwares eram menos abundantes, a “baboseira” era facilmente identificada por assinaturas (fragmentos distintos). Nos exemplos acima, as assinaturas pareceriam algo como:
DFgdgfkljhdfnmn vdfkjdfk kdfjkswjhwiuerwp2ijnsd,mfns sdlfkls wkjgwl
reoigh dfjdkjfhgdjbgk nretSRGsgkjdxfhgkdjfg gkfdgkoi
Um antivírus verificaria o arquivo e encontraria o trecho erwp2ij e reconheceria: “Ahá, olha a baboseira número 17 aqui!” E ao encontrar gkjdxfhg reconheceria a baboseira número 139.
Quinze anos depois, quando a população de malware cresceu significativamente, a detecção genérica ficou sob os holofotes. Um analista de vírus detectou as regras, as quais, quando aplicadas a texto real, seriam algo como:
- O comprimento de uma palavra deve ter entre 1 e 20 caracteres.
- Letras maiúsculas e números raramente aparecem no meio de uma palavra.
- Vogais estão relativamente misturadas com consoantes.
E por aí vai. Se uma linha não contempla um determinado número destas regras, é definida como maliciosa.
Essencialmente, o princípio funcionava da mesma forma, mas no caso das regras definidas, o analista devia escrevê-las manualmente, no lugar do modelo matemático.
Dez anos atrás, quando o número de amostras de malware cresceu além de qualquer estimativa, algoritmos de aprendizado de máquina começaram a crescer lentamente até chegarem aos programas de antivírus. Em um primeiro momento, em termos de complexidade não faziam nada muito além do que o algoritmo primitivo que descrevemos mais cedo como exemplo. Mas nessa época estávamos ativamente recrutando especialistas e expandindo nossa expertise. Como resultado, temos a mais alta taxa de detecção entre os antivírus. Hoje, nenhum antivírus funcionaria sem aprendizado de máquina. Comparando métodos de detecção, Machine Learning seria a ligação entre técnicas avançadas como análise comportamental. Contudo, análise comportamental utiliza aprendizado! No fim, ela é essencial para proteção eficiente. Ponto final.
Inconvenientes
Aprendizado de máquina possui muitas vantagens, mas trata-se de uma solução absoluta? Bem, não. Esse método funciona eficientemente se os algoritmos mencionados anteriormente estiverem na nuvem ou em algum tipo de infraestrutura que analisa um grande número de objetos limpos e maliciosos.
Além disso, é também útil possuir um time de especialistas que supervisem esse processo de aprendizado e intervenham cada vez que suas experiências possam fazer a diferença.
Nesse caso, os atrasos são minimizados, para uma única desvantagem: a necessidade de uma infraestrutura cara e especialistas bem pagos.
Mas se alguém quiser cortar custos severamente e usar apenas um modelo matemático, as coisas podem dar muito errado.
1.Falsos positivos
Detecção baseada em aprendizado de máquina trata-se sempre de encontrar o ponto certo entre objetos detectados e falsos positivos. Caso queiramos viabilizar mais detecções, eventualmente encontraremos falsos positivos. Com o aprendizado de máquina, eles podem sair de lugares os quais você nunca previu ou imaginou. Por exemplo, a linha limpa “Visite Reykjavik” seria detectada como maliciosa ao marcar apenas 101 pontos de autenticidade. É por isso que é essencial que um laboratório de antivírus mantenha registros de arquivos limpos e viabilize o módulo de aprendizado e testes.
2.Modelo bypass
Um malfeitor pode desmontar um produto para descobrir como ele funciona. Criminosos são humanos, o que os torna mais criativos (se não espertos) que as máquinas, de modo que se adaptam. Por exemplo, a linha a seguir é considerada limpa, mesmo que a primeira parte seja claramente maliciosa para olhos humanos: “dgfkljhdfnmnvdfkAí vai um montão de texto do bom para enganar uma máquina.” Contudo, algoritmos inteligentes sempre estão passíveis de serem enganados por humanos ainda mais espertos. Por isso que um laboratório de antivírus necessita de uma infraestrutura altamente responsiva para reagir instantaneamente as novas ameaças.
3.Atualização de modelo
Descrevendo o algoritmo mencionado anteriormente, falamos que o modelo desenvolvido para o inglês não funcionaria em outras línguas. Dessa perspectiva, arquivos maliciosos (criados por seres humanos que possam pensar fora da caixa) são como um alfabeto em constante mudança. O ambiente de ameaças é extremamente volátil. Por meio de longos anos de pesquisa, a Kaspersky Lab desenvolveu uma abordagem balanceada: atualizamos o modelo etapa à etapa direto nas nossas bases de dados de antivírus. Isso nos permite prover aprendizado extra ou até uma mudança completo do ângulo de aprendizado para um modelo, sem interrupção de suas operações usuais.
Conclusão
Com respeito considerável ao aprendizado de máquina e a sua importância no mundo da cibersegurança, nós na Kaspersky Lab pensamos que a abordagem mais eficiente é baseada em um paradigma multiníveis.
Antivírus devem todos ser consistentes e perfeitos, com análise comportamental, aprendizado de máquina e muitas outras coisas. Mas falaremos dessas “muitas outras coisas” em outra ocasião.