Últimamente, las compañías tecnológicas se han vuelto totalmente locas por el aprendizaje automático. Dicen que soluciona los problemas que antes solo podían solucionar las personas. Algunos van más lejos y lo llaman “inteligencia artificial”. El aprendizaje automático es de especial interés para la seguridad informática, un ámbito en el que las amenazas cambian con rapidez y en el que se deben crear soluciones adecuadas.
Algunos llegan a llamarlo “inteligencia artificial” así porque sí.
La tecnología depende de la velocidad y de la consistencia. Y el aprendizaje automático se basa en tecnología, lo que hace que sea fácil de explicar con términos simples. Así que, vayamos al grano: resolveremos problemas reales mediante un algoritmo (basado en aprendizaje automático). El concepto es muy fácil y da una visión real y valiosa.
Problema: distinguir texto con sentido de uno incomprensible
La escritura humana (en este caso, la de Terry Pratchetts), tiene un aspecto como este:
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
(en español: Dale fuego a un hombre y estará caliente un día, pero préndele fuego y estará caliente el resto de su vida).
It is well known that a vital ingredient of success is not knowing that what you're attempting can't be done
(en español: Es sabido que un ingrediente esencial del éxito es no saber que lo intentas hacer no puede hacerse).
The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it
(en español: El problema de tener una mente abierta es que la gente insiste en entrar dentro y poner allí sus cosas).
Una escritura incomprensible se parece a esta:
DFgdgfkljhdfnmn vdfkjdfk kdfjkswjhwiuerwp2ijnsd,mfns sdlfkls wkjgwl
reoigh dfjdkjfhgdjbgk nretSRGsgkjdxfhgkdjfg gkfdgkoi
dfgldfkjgreiut rtyuiokjhg cvbnrtyu
Nuestro trabajo es desarrollar un algoritmo de aprendizaje automático que diferencie ambos tipos. Aunque sea fácil para un humano, la tarea es un gran reto. Se necesita tiempo para formalizar la diferencia. Nosotros usamos el aprendizaje automático: Añadimos algunos ejemplos al algoritmo y dejamos que “aprenda” cómo responder de manera fiable la pregunta de “si es humano o incomprensible”. Cada vez que un programa antivirus del mundo real analiza un archivo, es exactamente lo que hace.
Porque abarcamos el tema dentro del contexto de la seguridad informática y el objetivo principal del antivirus es encontrar código malicioso entre una gran cantidad de datos limpios; nos referiremos al texto con sentido como “limpio” y al incomprensible como “malicioso”.
Parece una tarea insignificante para un humano: pueden ver inmediatamente cuál está “limpio” y cuál es “malicioso”. Pero es un gran reto marcar la diferencia, o más, explicárselo a un ordenador. Usamos el aprendizaje automático aquí: “introducimos” algunos ejemplos en el algoritmo y dejamos que “aprenda” de ellos para que pueda responder correctamente a la pregunta.
Solución: utilizar un algoritmo
Nuestro algoritmo calculará la frecuencia de una letra en particular seguida de otra letra en particular para así analizar todos los pares de letras posibles. Por ejemplo, para la primera frase 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, la cual sabemos que está limpia, la frecuencia de pares de letras en particular es esta:
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 simplificarlo, ignoramos los signos de puntuación y los espacios. Por lo que, en esa frase, a va seguida de n tres veces, a f le sigue i dos veces y a va seguida de y una vez.
En esta fase, comprendemos que una frase no es suficiente para que nuestro modelo aprenda: necesitamos analizar una cantidad mayor de texto. Así que contemos los pares de letras de la versión en inglés de Lo que el viento se llevó de Margaret Mitchell (para ser precisos, del primer 20 % del libro). Estos son algunos:
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 puedes ver, la probabilidad de encontrar la combinación he es dos veces mayor que de ver an. Y wc solo aparece una vez (en la palabra newcomer).
Entonces, ya tenemos un modelo de texto limpio, pero ¿cómo lo usamos? En primer lugar, para definir la probabilidad de que una línea esté limpia o sea maliciosa, definiremos su autenticidad. Definiremos la frecuencia de cada par de letras con la ayuda de un modelo (evaluando lo realista que es una combinación de letras) y luego multiplicaremos esos 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 * …
Al determinar el valor final de autenticidad, también consideramos el número de símbolos que hay en la línea: cuanto más larga sea la línea, más números habremos multiplicado. Así que, para que este valor se adapte a líneas cortas y largas, hacemos magia matemática (extraemos la raíz del grado de “tamaño de la línea en cuestión menos uno” del resultado).
Utilizando el modelo
Ahora podemos extraer algunas conclusiones: cuanto más alto es el numero calculado, mejor encaja la línea en nuestro modelo (y, por ello, la probabilidad de que la haya escrito un humano es mayor). Si el texto da una cifra alta, podemos decir que está limpio.
Si la línea en cuestión contiene una alta cifra sospechosa de combinaciones raras (como wx, zg, yq, etc.), tendrá más probabilidades de ser maliciosa.
En la línea que hemos elegido para el análisis, medimos la probabilidad (“autenticidad”) en puntos, como mostramos a continuación:
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 puntos.
It is well known that a vital ingredient of success is not knowing that what you're attempting can't be done:
1601 puntos.
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 puntos.
DFgdgfkljhdfnmn vdfkjdfk kdfjkswjhwiuerwp2ijnsd,mfns sdlfkls wkjgwl:
16 puntos.
reoigh dfjdkjfhgdjbgk nretSRGsgkjdxfhgkdjfg gkfdgkoi:
9 puntos.
dfgldfkjgreiut rtyuiokjhg cvbnrtyu:
43 puntos.
Como puedes ver, las líneas limpias dan como resultado más de 1 000 puntos y las maliciosas no llegan a los 100 puntos. Parece que nuestro algoritmo funciona como esperábamos.
Por lo que respecta a asignar puntuaciones altas y bajas en contexto, el mejor modo es dejar que una máquina haga este trabajo y dejarla aprender. Para ello, le introduciremos una cantidad de líneas reales y limpias, calcularemos su autenticidad y, luego, introduciremos algunas líneas maliciosas y lo repetiremos. Entonces, calcularemos el punto de referencia para la evaluación. EN nuestro caso, es de 500 puntos.
En la vida real
Analicemos lo que acabamos de hacer.
1. Hemos definido las características de las líneas limpias (con los pares de caracteres).
En la vida real, cuando desarrollamos un antivirus funcional, los analistas también definen las características de los archivos y otros objetos. Por cierto, sus contribuciones son muy importantes: sigue siendo una tarea para humanos definir las características que se deben evaluar en los análisis y el nivel de experiencia de los especialistas influencia directamente en la calidad de la funcionalidad. Por ejemplo, ¿quién dijo que se deben analizar los caracteres de dos en dos y no de tres en tres? Estas suposiciones hipotéticas también se evalúan en los laboratorios de los antivirus. Cabe puntualizar que en Kaspersky Lab utilizamos el aprendizaje automático para seleccionar las mejores características complementarias.
2. Utilizamos indicadores definidos para construir un modelo matemático en el que basamos el aprendizaje con ejemplos.
Por supuesto, en la vida real los modelos son algo más complejos. Ahora, los mejores resultados vienen de un árbol de decisión construido con la técnica Grandient boosting, pero nuestro esfuerzo por acercarnos a la perfección no nos permite cruzarnos de brazos y pensar que no podemos hacerlo mejor.
3. Utilizamos un modelo matemático simple para calcular la tasa de autenticidad.
Para ser sincero, en la vida real, hacemos lo contrario: calculamos la tasa de “peligro”, lo que puede no parecer muy diferente, pero imagina lo poco auténtica que parecería una línea en otro lenguaje o alfabeto con nuestro modelo. Es inaceptable que un antivirus dé respuestas falsas cuando compruebe toda una nueva clase de archivos solo porque aún no los conoce.
¿Hay alternativa al aprendizaje automático?
Hace unos 20 años, cuando el malware abundaba menos, las líneas sin sentido podían detectarse con facilidad mediante firmas (fragmentos distintivos). En los ejemplos anteriores, las firmas serían así:
DFgdgfkljhdfnmn vdfkjdfk kdfjkswjhwiuerwp2ijnsd,mfns sdlfkls wkjgwl
reoigh dfjdkjfhgdjbgk nretSRGsgkjdxfhgkdjfg gkfdgkoi
Un antivirus que analice el archivo y encuentre erwp2ij diría: “Se trata del texto incomprensible #17”. Al encontrar gkjdxfhg, lo reconocería como texto incomprensible #139.
Luego, hace unos 15 años, las muestras de malware crecieron bastante y la detección “genérica” cobro protagonismo. Un analista de virus definió las reglas que, cuando se aplicaban a un texto con sentido, se parecían a estas:
1. La longitud de una palabra debe comprender entre 1 y 20 caracteres.
2. Las letras mayúsculas y los números rara vez van en medio de una palabra.
3. Las vocales se combinan con consonantes de manera homogénea.
Y así. Si una línea no cumplía con una cantidad de estas reglas, se detectaba como malicioso.
En esencia, el principio funcionaba igual, pero en este caso una serie de normas, que los analistas escribieron manualmente se sustituyeron por el modelo matemático.
Hace 10 años, cuando la cifra de muestras de malware aumentó hasta sobrepasar niveles inimaginables, los algoritmos de aprendizaje automático no llegaban a encajar con los programas antivirus. Primero, en términos de complejidad, no se amoldaban más allá del algoritmo primitivo que hemos descrito antes como ejemplo. Pero, luego, empezamos a contratar especialistas y a aumentar nuestra experiencia. Como resultado, tenemos el nivel más alto de detección entre los antivirus.
Hoy en día, ningún antivirus funcionaría sin el aprendizaje automático. En comparación con los métodos de detección, el aprendizaje automático funcionaría junto con otros métodos como el análisis de comportamiento. Aun así, ¡el análisis de comportamiento utiliza aprendizaje automático! En resumen, el aprendizaje automático es esencial para una protección eficiente. Punto.
Inconvenientes
El aprendizaje automático tiene muchas ventajas (¿es la cura para todo?) Pues… no. Este método funciona de manera eficiente si el algoritmo mencionado funciona en la nube o en algún tipo de infraestructura que aprenda de analizar una gran cantidad de objetos limpios y maliciosos.
También ayuda tener un equipo de expertos que supervise este proceso de aprendizaje e intervenga si su experiencia marcara la diferencia.
En este caso, los inconvenientes se minimizan (hasta tener solo uno): la necesidad de una solución de infraestructura cara y de un equipo de expertos muy bien pagados.
Pero en el caso de que se quiera ahorrar en costes y usar solo el modelo matemático, y solo desde el punto de vista del producto, las cosas puede que no salgan como se espera.
1. Falsos positivos.
La detección basada en aprendizaje automático siempre trata de encontrar el punto exacto entre el nivel de objetos detectados y el nivel de falsos positivos. Si activáramos más mecanismos de detección, habría más falsos positivos. Con el aprendizaje automático, aparecerían en algún lugar que no imaginaba. Por ejemplo, la línea limpia “Visit Reykjavik” sería calificada como maliciosa al obtener solo 101 puntos en nuestra puntuación de autenticidad.
2. Evitar el modelo.
Un malhechor podría escoger un producto de ese tipo para ver cómo funciona. Los delincuentes son humanos, por lo que son más creativos (si no más listos) que una máquina y se adaptarían. Por ejemplo, la siguiente línea está considerada como limpia, aunque la primera parte sea (a ojos humanos) maliciosa: dgfkljhdfnmnvdfkY se añade algo de texto coherente para engañar a la máquina. A pesar de que el algoritmo es inteligente, un humano inteligente siempre puede encontrar un modo de sortearlo. Por ello, un laboratorio de antivirus necesita una infraestructura de alta respuesta para reaccionar instantáneamente a las nuevas amenazas.
3. Actualización del modelo.
Al describir el algoritmo mencionado, hemos mencionado que un modelo que aprende a partir de textos en inglés no funcionará para textos en otros idiomas. Desde esta perspectiva, los archivos maliciosos (siempre y cuando los hayan creado humanos, los cuales pueden pensar por sí mismos) son alfabeto en constante evolución. El panorama de las amenazas es muy volátil. A lo largo de años de investigación, Kaspersky Lab ha desarrollado un enfoque equilibrado: actualizamos nuestros modelos paso a paso directamente en nuestras bases de datos de antivirus. Ello nos permite proveer de un aprendizaje extra o de un cambio completo en el ángulo del aprendizaje, sin interrumpir sus operaciones habituales.
Conclusión
Con un respeto considerable por el aprendizaje automático y su gran importancia en el mundo de la ciberseguridad, en Kaspersky Lab creemos que el enfoque más eficiente en el mundo de la ciberseguridad se basa en un paradigma multinivel.
Los antivirus deberían ser totalmente perfectos e incluir análisis de comportamiento, aprendizaje automático, entre otras funciones. Pero hablaremos de esas “otras funciones” la próxima vez.