Fran 🐝 Brizzolis

hace 7 años · 6 min. de lectura · +100 ·

Blogging
>
Blog de Fran 🐝
>
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)


866ed647.jpg


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.


1625e958.png


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


""
Comentarios

Fran 🐝 Brizzolis

hace 6 años #10

#19
Asi es pero al dia de hoy y en PC nuevos con particion GPT y EFI... El soporte de linux es casi nulo, y de hecho que yo sepa no funcionan ni si quiera herramientas tan usadas como Hiren's, y otras muchas.

Fran 🐝 Brizzolis

hace 7 años #9

#15
Gracias Viktor (no se si es correcto con k) .... Un privilegio poder aportar algo de conocimiento. Feliz (con M de muy) para ti y los tuyos

Fran 🐝 Brizzolis

hace 7 años #8

#13
De nada Jos\u00e9 Ram\u00f3n L\u00f3pez. Es un placer hacerlo y poder aportar conociemiento.

Fran 🐝 Brizzolis

hace 7 años #7

#9
he vuelto a poner el link Jos\u00e9 Ram\u00f3n L\u00f3pez. Gracias por tu apoyo de verdad que estoy en ello.

Fran 🐝 Brizzolis

hace 7 años #6

https://www.bebee.com/content/824885/810381

Fran 🐝 Brizzolis

hace 7 años #5

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

Fran 🐝 Brizzolis

hace 7 años #4

#7
Así es Jos\u00e9 Ram\u00f3n L\u00f3pez... 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.

Fran 🐝 Brizzolis

hace 7 años #3

#5
Estoy en ello... Mi problema es la falta de experiencia.... Pero como asesor auditor podria ser mas factible....

Fran 🐝 Brizzolis

hace 7 años #2

Bah solo un poco.... Aprender me ayuda a desconectar de otras cosas. Gracias por compartir. Para mi es un privilegio aportaros mi fragmento de un grano de arena

Fran 🐝 Brizzolis

hace 7 años #1

Es un tema muy amplio, pero inmenso... Os lo aseguro... Al fin y al cabo los virus, no dejan ser programas, pero para el mal... Es un toma y daca constante entre la "fuerza" y el "lado oscuro". Gracias Jos\u00e9 Ram\u00f3n L\u00f3pez

Artículos de Fran 🐝 Brizzolis

Ver blog
hace 5 años · 1 min. de lectura

¡Hola abejas!... · ¿No pensaríais que os ibais a librar de mi verdad? · Bueno ya se acaba 2018, y ...

hace 5 años · 3 min. de lectura

Los mecanismos conocidos como "skimmers de tarjetas" han sido una amenaza importante para la segurid ...

hace 5 años · 3 min. de lectura

La seguridad de la información está cada día entrando, poco a poco en la pequeña y mediana empresa. ...

Puede que te interesen estos puestos de trabajo

  • Rheinmetall AG

    Ingeniero de Sistemas de Defensa I+D

    Encontrado en: Jobgoal ES C2 - hace 2 días


    Rheinmetall AG Madrid, España

    Ingeniero de Sistemas de Defensa I+D (m/f/d) · Rheinmetall / Ingeniero de Sistemas de Defensa I+D (m/f/d) · Modalidad de contratación: Tiempo Completo · Desde Rheinmetall Expal, nos encontramos en búsqueda de un Ingeniero técnico para el área de Sistemas para nuestra sede de Ma ...


  • Cronoshare Badia del Vallès (Barcelona), España

    El sistema operativo me da error y el disco duro al parecer no funciona, alomejor también tiene algunos virus¿Qué le ocurre a tu ordenador o dispositivo? · Quitar virus o malware, error de sistema o pantalla azul, instalar nuevo hardware, instalar nuevo software (programas) · ¿Qu ...

  • beBee Professionals

    Desarrollador/a de Sistemas Embebidos

    Encontrado en: beBee Professionals - hace 1 día

    Aplicar directamente

    beBee Professionals Murcia, España Desarrolladores Freelance

    beBee Professionals está buscando un/a Desarrollador/a de Sistemas Embebidos para unirse a su equipo de Murcia. Estamos buscando a alguien con una pasión por la tecnología y una mentalidad innovadora para diseñar, desarrollar y mantener sistemas embebidos. · Como Desarrollador/a ...