Fran Brizzolis en beBee en Español, Informáticos, Informática y Tecnología Gestor comercial 7/11/2016 · 5 min de lectura · 1,3K

Programación de “malware”: Lo primero es inutilizar o disminuir la eficiencia de los “sistemas de defensa” (AV)


Programación de “malware”: Lo primero es inutilizar o disminuir la eficiencia de los “sistemas de defensa” (AV)


Los programadores de malware han desarrollado diferentes técnicas que hacen que la eficiencia de los antivirus (AV) y otras aplicaciones defensivas se haya visto reducida drásticamente en los últimos tiempos, evitando en muchos casos la detección.


Los antivirus generalmente utilizan diferentes técnicas para identificar el malware. Entre las más utilizadas podemos encontrar las siguientes:


  • Firma digital: Compara el archivo contra una BBDD de firmas (hashes) de malware conocido. Si el hash coincide, se puede asegurar que es una muestra de malware ya reconocido. Este método exige actualizaciones muy frecuentes de la BBDD y su efectividad depende de que el malware haya analizado por el fabricante de AV y no se haya modificado. Esta protección, podría proteger contra malware ampliamente difundido, pero no es efectiva contra malware "recién salido del horno".
  • Detección heurística: Busca secciones de código maliciosas conocidas dentro de los archivos sospechosos, mediante la asignación de probabilidades por apariciones de código en muestras de malware ya confirmadas como tal. Es una técnica más avanzada que la de firmas digitales que permite detectar mutaciones y variaciones del malware.
  • Detección por comportamiento: Similar a la detección heurística, pero en vez de buscar secciones de código, busca comportamientos maliciosos conocidos. Es una detección reactiva que sólo funciona una vez que el malware ha iniciado su ejecución.
  • Ejecución controlada en sandbox: Ejecuta el software en una máquina virtual y compara el estado de la máquina virtual antes y después de la ejecución. Se comprueba entonces qué archivos o procesos se han visto alterados y, en función de ello, se determina si el archivo es malicioso.
  • Técnicas de minería de datos: es una de las técnicas más modernas. Utiliza algoritmos de minería de datos y de aprendizaje para clasificar el comportamiento del ejecutable sospechoso a través de algunas de sus características más que del propio archivo.


Pasar inadvertido frente a estas técnicas es razonablemente sencillo con las técnicas modernas de evasión de AV. Algunas de estas técnicas son las siguientes:


Técnicas que afectan al AV de la víctima: Algunas de las estrategias para evadir los AV de la víctima consisten en aprovechar vulnerabilidades de los mismos para manipularlos de forma silenciosa de modo que permitan la ejecución del malware. Hay diferentes técnicas como puede ser la desactivación del AV o que el malware se incluya en la lista de procesos permitidos por el AV y otras más radicales como atacar directamente el motor del AV, que por otra parte tiene el inconveniente de la dependencia con el sistema donde se va a ejecutar el malware.


Bloqueo del antivirus: Los SO modernos tienen un sistema de firmas para verificar el origen del software que se está ejecutando. De esta forma es posible verificar la autenticidad del software que se está ejecutando. Existe malware (por ejemplo, el adware Vonteera) que añade los certificados correspondientes a los antivirus más comunes (AVG, Avast, Bitdefender, Panda…) en la carpeta Untrusted Certificates, de forma que el SO rechaza la ejecución y actualización de los AV, desactivándolos de forma efectiva.


Temporización y Detección de entornos virtuales: El análisis a través de sandbox está cada vez más extendido, por lo que algunas muestras de malware simplemente esperan un número de minutos tras su activación para que el tiempo de ejecución de la sandbox expire y, como no ha hecho nada, se le considera seguro. Igualmente, algunas muestras incluyen la capacidad de detectar su ejecución en un entorno virtual y en ese caso no realizar ninguna acción. Se puede dar la vuelta a esta técnica, de forma que el malware piense que nuestra máquina es en realidad un entorno virtualizado o falseando las comprobaciones que hace el malware para que se ejecute en el entorno virtual mediante herramientas como Pafish.


Destruir el disco duro: Así, como suena. Algunas muestras de malware, como Rombertik intentan destruir el MBR junto con otros directorios y provocando que el ordenador de la víctima se reinicie constantemente si se percatan de la presencia de las herramientas de detección, evitando de esa forma que se la detecte (vale, el malware tampoco cumple su función, pero como víctima te has quedado sin disco duro). Rombertik es un malware que contiene múltiples de estas técnicas de evasión, como podéis ver en la imagen a continuación.


Programación de “malware”: Lo primero es inutilizar o disminuir la eficiencia de los “sistemas de defensa” (AV)


Cifrado de código: El nombre lo dice todo. Se cifra parte del código y de esa forma únicamente el malware que conoce la clave de cifrado será capaz de ejecutar su propio código, evitando de esa forma la detección por parte de los motores de AV.


Ofuscación del código: Es la técnica más habitual y habitualmente se encuentra junto con el cifrado del código. Consiste en hacer que el código no sea legible, previniendo de esta forma la ingeniería inversa del código y por supuesto la detección por parte de los motores de antivirus. Básicamente convierte un código M en otro M’ sin perder funcionalidad y manteniendo el comportamiento. Algunas muestras de malware van un paso más allá y ofuscan todo su código utilizando mecanismos llamados packers, de forma que sólo es accesible una parte del código y se desempaquetan en tiempo real. Esta técnica se combina con la detección de entornos virtuales para evitar desempaquetar el malware en un entorno de sandbox para dificultar aún más la detección.


Uno de los aspectos más valorados en el código fuente de un proyecto software es su facilidad de comprensión. Si es factible entender cómo funciona el código, entonces es más sencillo corregir errores y añadir nuevas funcionalidades. Además, es más fácil que otras personas más allá del autor puedan participar y contribuir al proyecto. Todos estos son, precisamente, aspectos clave en el desarrollo de proyectos de código abierto.


Sin embargo, existen algunas situaciones en los que la facilidad de comprensión no es un valor añadido sino todo lo contrario. Es decir, ¿qué pasa si no queremos que se sepa cómo funciona un programa? Si el lenguaje de programación es compilado, aquí ya hay una primera barrera: el binario no es tan sencillo de entender como el código fuente, aunque no es una barrera insalvable. Pero si es un lenguaje interpretado, el código fuente está a nuestra disposición. Entonces, ¿cómo lo hacemos para ocultar el comportamiento de nuestro código? Aquí es donde entran en acción las herramientas de ofuscación de código.


La ofuscación de código es el proceso que intenta modificar un programa para hacer más compleja su comprensión. La ofuscación perfecta es imposible, porque tarde o temprano hay que decirle al ordenador lo que tiene que hacer, pero pueden darse suficientes “rodeos” para confundir a quién esté analizando nuestro programa (ya sea un humano o una herramienta automática). Las técnicas que pueden usarse para ofuscar un programa son muy variadas:


  • Eliminar comentarios, espacios en blanco y saltos de línea (o a la inversa, introducirlos aleatoriamente para dificultar la lectura).
  • Modificar los nombres de variables y funciones para que no proporcionen información sobre su objetivo.
  • Complicar artificialmente el control de flujo del programa (p.ej. usar gotos en lugar de bucles o condicionales).
  • Alterar la distribución del código dentro del proyecto (partir funciones, trasladar código de un fichero a otro, copiarlo, etc.).
  • Utilizar macros para que el precompilador deba expandir parte del código del programa.
  • Convertir determinadas constantes del código en valores que deben calcularse durante la ejecución (p.ej. convertir un “5” en un bucle que suma 1 cinco veces).
  • Añadir código innecesario (p.ej. un condicional que sabemos que siempre evaluará a cierto, un parámetro de la función que sólo se usa en instrucciones innecesarias).
  • Hacer que parte de los datos del programa o el código fuente estén cifrados y deban descifrarse durante la ejecución.
  • Hacer que el código del programa se modifique a sí mismo antes de ejecutarse.


Precisamente, la ofuscación es el proceso contrario al conocido como ingeniería inversa, que analiza un cierto sistema para comprender su funcionamiento. La ingeniería inversa de software es un proceso complejo de por sí: en los sistemas legacy puede faltar documentación, partes del código fuente o incluso conocimiento de qué hace el sistema o por qué se hace de una manera determinada. ¿Por qué entonces la ofuscación intenta poner todavía más palos en las ruedas a este proceso?


  • El primer motivo para usar ofuscación de código es motivos de seguridad: no queremos que un atacante comprenda el funcionamiento del código para que no lo altere con malos propósitos. Por ejemplo, si un programa contiene un control de licencias, nos puede interesar que nadie lo modifique para saltarse dicho control. O bien nos puede interesar que un software cliente no envíe peticiones malintencionadas al servidor. Hay que tener en cuenta que esto sólo consigue “seguridad por oscuridad”: el sistema es seguro simplemente porque nadie sabe cómo funciona. Pero si alguien consigue entender su funcionamiento mediante el análisis, toda la seguridad se va al traste. Por tanto, usar ofuscación con este propósito sólo tiene sentido como medida adicional para poner las cosas más difíciles a un atacante, porque no es infalible en absoluto.
  • Un segundo motivo para usar ofuscación está muy relacionado con el primero (pero al revés): ocultar código malicioso (un virus, un troyano, un rootkit, una bomba lógica, una puerta trasera, …). Obviamente, los autores de este tipo de malware están interesados en impedir su detección y pueden usar estas técnicas para dificultar la tarea de antivirus o revisores humanos.
  • Otra razón para usar ofuscación es la protección de la propiedad intelectual. Quizás no quieres que tu competencia no sepa qué método usas para resolver tan rápido un cierto problema o que nadie se copie esa animación tan chula que has programado para tu web (o que, si la usa, al menos no sea sencillo quitarle tu nombre y la licencia que le hayas asignado).
  • Existen determinados procesos que producen ofuscación como efecto colateral. Un ejemplo es la “minificación”: la transformación del código fuente de un programa con el propósito de reducir el número de bytes que ocupa, eliminando todos los caracteres o espacios en blanco que no sean absolutamente necesarios. En lenguajes interpretados como JavaScript esto reduce el espacio de almacenamiento y el tiempo necesario para descargar un script por Internet. También hay quién dice que la optimización de código de un compilador consigue, en cierto modo, un cierto nivel de ofuscación al modificar el programa para mejorar su rendimiento.
  • Un último motivo para utilizar la ofuscación de código es, simplemente, pura diversión. Entender cómo funciona un programa ofuscado es como un rompecabezas, y un programa difícil de entender puede llegar a ser una obra de arte. Por ejemplo, el lenguaje de programación esotérico Brainfuck fue diseñado específicamente para hacer difícil la comprensión de sus programas. Y hay un concurso muy popular, el IOCCC (International Obfuscated C Code Contest), cuyo propósito es concebir un programa “útil” de la forma más incomprensible posible.



Referencias:


http://www.welivesecurity.com/la-es/2010/02/08/que-es-heuristica/

https://es.wikipedia.org/wiki/Firma_digital

http://www.academia.edu/1059656/Miner%C3%ADa_de_datos_conceptos_y_t%C3%A9cnicas

https://blog.malwarebytes.com/cybercrime/2015/11/vonteera-adware-uses-certificates-to-disable-anti-malware/

https://www.tripwire.com/state-of-security/security-data-protection/cyber-security/rombertik-a-master-of-evasive-malware-techniques/

https://es.wikipedia.org/wiki/Ofuscaci%C3%B3n

https://en.wikipedia.org/wiki/Minification_(programming)

https://en.wikipedia.org/wiki/Brainfuck



Fran Brizzolis 8/11/2016 · #14

#13 De nada @José Ramón López. Es un placer hacerlo y poder aportar conociemiento.

+1 +1
José Ramón López 8/11/2016 · #13

#12 @Fran Brizzolis, ayer ya me acosté, jejeje, hasta ahora no he visto el link. Me parece superinteresante verlo. Como son unos tres cuartos de hora de video apartaré un rato cuando pueda y lo veo. Ahora no puedo. Ya te comentaré que tal. Gracias por compartirlo.

+2 +2
Fran Brizzolis 8/11/2016 · #12

#9 he vuelto a poner el link @José Ramón López. Gracias por tu apoyo de verdad que estoy en ello.

+2 +2
Fran Brizzolis 8/11/2016 · #10

#9https://www.bebee.com/content/824885/810381 Mira este video que subi hace tiempo cusndo puedas

+1 +1
José Ramón López 8/11/2016 · #9

#8 Vale, sí es verdad. Aquí en España seguramente no te contratarán fácilmente para implementarles un sistema proactivo de seguridad y tal. Pero sí te llamarán para apagar fuegos, resolver marrones. Porque marrones los hay y precisamente con esta mentalidad latina o mediterranea o lo que sea que tenemos de no prevención, cada vez habrá más problemas de seguridad.

Esos pueden ser tus clientes. Incluso puedes anticiparte presentando tus servicios por si en el futuro te necesitan.

Bueno, no sé son ideas. Aunque tener ideas es la parte fácil. Implementarlas y llevarlas a cabo con éxito es otra. Si alguna vez en algo te puedo ayudar, cuenta conmigo. Saludos!!!

+2 +2
Fran Brizzolis 8/11/2016 · #8

#7 Así es @José Ramón López... Pero sabes lo que pasa?... Que en España no hay grandes empresas, el 80% son PYMES... Y de esas más de mitad son pequeñas empresas, y amigo ahí está el tema, que mientras no les pase nada serio, seguro que tienen a alguien que les formatee los PC y les reintale todo otra vez... No hay mentalidad de ciberseguridad... Y de hecho, en mi modesta opinión los grandes ataques de los malos en un futuro no muy lejano serán hacia organismos oficiales y grandes corporaciones, y como vengo diciendo, infrestructuras críticas, y por otro lado a menor escala todos los dispositivos móviles, así como el internet de las cosas IoT.

+2 +2
José Ramón López 8/11/2016 · #7

#6 Lo bueno de los sistemas CMS es que todos funcionan igual. Una vez dominas Wordpress, ya puedes implementar un plan de seguridad (plugins ya existentes de seguridad, copias de seguridad, etc...) en TODAS las web con Wordpress. Lo mismo con el resto de CMS.

No sé, yo veo trabajo, mucho trabajo en el ámbito de la seguridad. Y por lo que parece cada vez hará más falta mantenerse a salvo de ataques informáticos.

+2 +2