Los ataques a intérpretes de códigos de bytes ocultan actividad de inyección maliciosa

Los ataques a intérpretes de códigos de bytes ocultan actividad de inyección maliciosa

Los atacantes pueden ocultar sus intentos de ejecutar código malicioso insertando comandos en el código de máquina almacenado en la memoria mediante intérpretes de software utilizados por muchos lenguajes de programación, como VBScript y Python, como demostrará un grupo de investigadores japoneses durante la conferencia Black Hat USA de la próxima semana.

Los intérpretes toman código de software legible por humanos y traducen cada línea a código de bytes, es decir, instrucciones de programación granulares entendidas por la máquina subyacente, a menudo virtual. El equipo de investigación logró insertar instrucciones maliciosas en el código de bytes almacenado en la memoria antes de la ejecución y, dado que la mayoría del software de seguridad no analiza el código de bytes, sus modificaciones escaparon a la detección.

Esta técnica podría permitir a los piratas informáticos ocultar sus actividades maliciosas a la mayoría del software de seguridad de terminales. Investigadores de NTT Security Holdings Corp. y la Universidad de Tokio demostrarán esta capacidad en Black Hat usando el intérprete de VBScriptexplica Toshinori Usui, investigador de NTT Security. Los investigadores ya han confirmado que la técnica también funciona para insertar código malicioso en los procesos en memoria de los intérpretes de Python y Lua.

«El malware a menudo disfraza su comportamiento inyectando código malicioso en procesos benignos, pero los ataques de inyección existentes tienen comportamientos característicos… que son fácilmente detectados por los productos de seguridad», explica Usui. “Al intérprete no le importa que un proceso remoto lo sobrescriba, por lo que podemos reemplazar fácilmente el código de bytes generado por nuestro código malicioso; esa es la funcionalidad que explotamos. »

Los ataques de código de bytes no son necesariamente nuevos, pero son relativamente nuevos. En 2018, un grupo de investigadores de la Universidad de California en Irvine publicó un artículo, «Los ataques de corrupción de códigos de bytes son reales y cómo defenderse de ellos» Introducción a los ataques y defensas de código de bytes. El año pasado, los administradores del Índice de paquetes Python (PyPI) eliminaron un paquete malicioso, conocido como fshec2, que evadió la detección inicial porque todo su código malicioso fue compilado en código de bytesPython compila su código de bytes en archivos PYC, que pueden ser ejecutados por el intérprete de Python.

«Este puede ser el primer ataque a la cadena de suministro que aprovecha el hecho de que los archivos de código de bytes (PYC) de Python se pueden ejecutar directamente, y se produce en medio de un aumento en los envíos maliciosos al índice de paquetes de Python», dijo Karlo Zanki, ingeniero inverso. en ReverseLabs, dijo en un análisis del incidente de junio de 2023“Si es así, esto representa otro riesgo para la cadena de suministro en el futuro, ya que es probable que la mayoría de las herramientas de seguridad pasen por alto este tipo de ataque, que solo escanean archivos de código fuente Python (PY). »

Más allá del malware precompilado

Después de un compromiso inicial, los atacantes tienen algunas opciones para extender su control sobre un sistema objetivo: pueden realizar un reconocimiento, intentar comprometer aún más el sistema utilizando malware o ejecutar herramientas que ya existen en el sistema; la estrategia conocida como «vivir de la tierra».

La variante de las técnicas de ataque de código de bytes de los investigadores de NTT esencialmente cae en la última categoría. En lugar de utilizar archivos de códigos de bytes precompilados, su ataque, llamado Bytecode Jiu-Jitsu, implica insertar códigos de bytes maliciosos en el espacio de memoria de un intérprete en ejecución. Dado que la mayoría de las herramientas de seguridad no analizan el código de bytes en la memoria, el ataque puede ocultar comandos maliciosos de la inspección.

Este enfoque permite al atacante omitir otros pasos obviamente más maliciosos, como llamar a API sospechosas para crear subprocesos, asignar memoria ejecutable y modificar punteros de instrucciones, dice Usui.

«Mientras que el código nativo contiene instrucciones ejecutadas directamente por el procesador, el código de bytes son solo datos enviados al procesador e interpretados y ejecutados por el intérprete», explica. “Por lo tanto, a diferencia del código nativo, el código de bytes no requiere privilegios de ejecución, [and our technique] No es necesario preparar una región de memoria con privilegios de ejecución.»

Mejores defensas para los artistas

Los desarrolladores de intérpretes, los desarrolladores de herramientas de seguridad y los arquitectos de sistemas operativos pueden influir en el problema. Aunque los ataques dirigidos a bytcode no explotan las vulnerabilidades de los intérpretes, sino más bien la forma en que ejecutan el código, ciertas modificaciones de seguridad, como las sumas de verificación de punteros, podrían mitigar el riesgo, según el estudio.

Los investigadores de NTT Security observaron que las defensas de suma de verificación probablemente no serían efectivas contra sus técnicas y recomiendan que los desarrolladores apliquen protecciones contra escritura para ayudar a eliminar el riesgo. «La contramedida definitiva es restringir la escritura de memoria al intérprete», explica Usui.

El objetivo de presentar una nueva técnica de ataque es mostrar a los investigadores y defensores de la seguridad lo que podría ser posible, no informar a los atacantes sobre sus tácticas, enfatiza. «Nuestro objetivo no es abusar de las tácticas defensivas, sino ser, en última instancia, una llamada de atención para los investigadores de seguridad de todo el mundo», afirma.