La inyección de código en memoria es una técnica usada por muchos programas maliciosos (malware) para pasar desapercibidos. En pocas palabras, consiste en ocultar código malicioso dentro de la memoria de un programa legítimo.
Este artículo detalla qué es la inyección de memoria, cómo la usan los malware para evitar los antivirus, presenta ejemplos concretos y, por último, las principales contramedidas que puedes adoptar para protegerte. Todo en un lenguaje claro y accesible para todos.
¿Qué es la inyección de código?
La inyección de código en memoria consiste en que un programa (en este caso, malicioso) se infiltre en la memoria de otro proceso (programa) que ya se está ejecutando. Concretamente, el malware inserta su propio código en el espacio de memoria de un software legítimo y lo ejecuta como si fuera parte del programa anfitrión. Es decir, en lugar de funcionar como un programa separado (lo que sería más fácil de detectar), el código malicioso se integra en un proceso existente.
Esta técnica se puede comparar con un intruso que se cuela discretamente en un vehículo oficial para pasar un punto de control: el software malicioso “viaja” dentro de un programa de confianza, lo que lo hace mucho menos visible. La inyección de memoria es una forma de “inyección de código” especialmente orientada a la memoria RAM del ordenador. Puede aprovechar funciones previstas inicialmente con buenas intenciones (por ejemplo, algunas herramientas de desarrollo o diagnóstico también usan la inyección de código para ampliar o depurar aplicaciones), pero los actores maliciosos la desvían para ejecutar código sin autorización y sin que el usuario lo sepa.
Es uno de los métodos que usan los malware para infiltrarse en el sistema y escapar de la detección antivirus. Más detalles: Técnicas de Bypass y Evasión de Antivirus más Comunes
¿Por qué los malware usan esta técnica para ocultarse?
El principal interés de la inyección de memoria para un malware es eludir los mecanismos de seguridad y permanecer invisible. Como el código malicioso se ejecuta dentro de un proceso legítimo, hereda sus derechos y su confianza en el sistema. Por ejemplo, si un virus inyecta su código en un proceso del sistema conocido (como explorer.exe o svchost.exe en Windows), el antivirus lo considera inicialmente como el proceso habitual aprobado y puede que no detecte la presencia del parásito en su interior. En resumen, el malware se disfraza de componente del programa anfitrión.
Lee también: 19 Formas de Eludir las Restricciones de Software y Ejecutar un Shell
Esta invisibilidad funciona a varios niveles: las reglas clásicas de los antivirus (basadas en la detección de archivos sospechosos o procesos desconocidos) se ven frustradas, ya que no aparece nada sospechoso en la superficie. El código malicioso no crea necesariamente un nuevo archivo en el disco duro, lo que le permite evitar el análisis antivirus tradicional mediante firmas. De hecho, se habla de malware sin archivos (“fileless malware“) cuando el ataque reside únicamente en la memoria. Algunos virus modernos no escriben ningún archivo malicioso en el disco: inyectan todo directamente en la memoria, lo que los hace muy furtivos.
Además, el proceso del sistema está controlado por el software malicioso y puede emitir conexiones salientes. Aquí también, si las reglas del cortafuegos permiten el proceso del sistema, la conexión no se bloqueará.
Asimismo, al usar un proceso legítimo como “anfitrión”, el malware también aprovecha sus privilegios. Si el proceso objetivo tiene derechos elevados (administrador, acceso a la red, etc.), el código inyectado también se beneficia de ellos, facilitando la ejecución de acciones maliciosas en el corazón del sistema. Por ejemplo, un troyano oculto en el proceso de un navegador web podrá leer o modificar lo que se muestra en la pantalla, ya que el navegador mismo tiene ese derecho. Todos estos factores contribuyen a burlar la vigilancia de las herramientas de seguridad. Un antivirus clásico que supervisa los programas maliciosos autónomos puede pasar por alto un código dañino si este se ejecuta oculto en un programa de confianza.
Incluso hay casos en que se utilizan herramientas del sistema oficiales como vehículo. Por ejemplo, PowerShell (el intérprete de comandos de Windows, legítimo y firmado por Microsoft) se utiliza con frecuencia: un pirata informático puede utilizarlo para cargar código en la memoria (Cómo los Scripts maliciosos de PowerShell evaden la Detección). Dado que PowerShell es un componente de confianza del sistema, el antivirus generalmente no bloqueará este tipo de inyección de código malicioso, y no se verá nada anormal en los registros de eventos de Windows. Este artificio permite a los malware pasar desapercibidos a las protecciones tradicionales.
Ejemplo de inyección de código en procesos del sistema
Esta técnica existe desde hace una década y sigue estando vigente con malware más reciente como Purple Fox o Netwalker.
Aquí tienes algunos ejemplos de su uso.
Zeus (Zbot) (2007)
Este famoso troyano bancario (que apareció alrededor de 2007) tenía como objetivo robar información financiera. Integraba un módulo de inyección en el navegador web de la víctima. Concretamente, Zeus inyectaba scripts maliciosos directamente en las páginas web mostradas por el navegador para robar credenciales bancarias, todo ello sin despertar las sospechas del usuario.
Esta técnica de “man-in-the-browser” (literalmente “en el navegador”) permitió a Zeus eludir las protecciones y alterar las páginas seguras para atrapar a las víctimas.
TDSS y ZAcess (2010)
El software malicioso TDSS también usaba a menudo la inyección de código para implantarse en el sistema.
A continuación, el malware utiliza el proceso del sistema spoolsv.exe (el proceso del servicio del spooler de impresión) para ejecutar un software malicioso.
Zaccess hace exactamente lo mismo: el dropper inicia explorer.exe y toma el control:

Lo que hay que entender es que la conexión la establece winlogon.exe, el proceso del sistema controlado por el software malicioso. Por lo tanto, la conexión saliente no la establece un proceso externo. Si hay una regla demasiado restrictiva en el firewall, no se bloqueará.
Malware a través de un PDF malicioso
Aquí tienes otro ejemplo con un PDF malicioso que usaba una vulnerabilidad de software en Acrobat Reader.
A continuación, se ve que el proceso de Acrobat Reader intenta ejecutar un archivo DLL.

Spambot a través de svchost.exe
La captura siguiente muestra claramente el proceso que inicia una instancia de svchost.exe que realiza las conexiones SMTP del Spambot. Finalmente, esta técnica también la pueden usar puertas traseras como Backdoor.Win32.HareBot.

Troyano e inyección DLL en la práctica
Algunos vídeos que muestran troyanos usando inyecciones de DLL. El objetivo es entender bien en la práctica cómo sucede esto en Windows.
¿Qué contramedidas existen contra la inyección de código en memoria?
Microsoft ha incluido nuevas protecciones en Windows 11 y Windows para limitar las inyecciones de código.
Los sistemas modernos integran mecanismos de seguridad contra los ataques de memoria.
Por ejemplo, la función DEP (Prevención de ejecución de datos) impide la ejecución de código desde zonas de memoria que solo deberían contener datos, bloqueando así algunas inyecciones.
Del mismo modo, ASLR (aleatorización del diseño del espacio de direcciones) desordena las ubicaciones de memoria usadas por los programas, haciendo más difícil para un atacante adivinar dónde insertar su código.
Además, los softwares de seguridad modernos integran mecanismos de detección del comportamiento capaces de identificar actividades anormales en la memoria. Un antivirus actualizado reconocerá mejor las técnicas de inyección recientemente descubiertas y podrá detener los comportamientos sospechosos (por ejemplo, un programa que intenta escribir en la memoria de otro).
Los antivirus de nueva generación y las herramientas EDR (Endpoint Detection & Response) van más allá de un antivirus tradicional. Supervisan en tiempo real los procesos y su comportamiento.
Por ejemplo, algunas soluciones incluyen una protección específica contra la inyección de memoria, que bloquea cualquier intento de que un código no autorizado se agregue a un proceso legítimo.
Estas herramientas también pueden neutralizar documentos maliciosos (macros, scripts) antes de que tengan la posibilidad de cargar código en la memoria. Para el público en general, esto se traduce en conjuntos de seguridad más eficientes, capaces de detectar ataques “sin archivos” basándose en los signos de infección en lugar de solo en la presencia de un archivo sospechoso.
Por último, la mejor defensa sigue siendo tu prudencia. Las técnicas de inyección de memoria, por sofisticadas que sean, a menudo requieren una acción inicial. Por ejemplo, hacer clic en un archivo adjunto infectado, ejecutar un programa sospechoso, etc. Sé cauteloso con los correos electrónicos o enlaces inesperados (phishing) y no ejecutes archivos cuya procedencia no sea segura. Al limitar las oportunidades para que el malware se introduzca, reduces el riesgo de que tenga la oportunidad de explotar la inyección de memoria posteriormente.