ALEGSA.com.ar

Definición de inyección de código

Significado de inyección de código: La inyección de código es la inserción de códigos en un proceso de ejecución para alterar su comportamiento. Es una técnica que puede emplearse ...
31-07-2023

 


Definición de inyección de código

 

La inyección de código es la inserción de códigos en un proceso de ejecución para alterar su comportamiento. Es una técnica que puede emplearse para el bien o para el mal.

En el contexto de Windows también es denominada inyección DLL, porque el código que se inserta a menudo tiene la forma de un archivo DLL (biblioteca de vínculos dinámicos).

Wikipedia en inglés, en cambio, directamente trata a la inyección de código como maligno diciendo:

"La inyección de código es la explotación de un error de la computadora causado por el procesamiento de datos no válidos. El atacante usa la inyección para introducir (o "inyectar") código en un programa informático vulnerable y cambiar el curso de ejecución. El resultado de una inyección de código exitosa puede ser desastroso, por ejemplo, al permitir que los gusanos informáticos se propaguen."

La realidad es que la inyección de códigos no necesariamente es maligna.

En el año 2008, el 5,66% de todas las vulnerabilidades informadas fueron clasificadas como Inyección de Código, el año más alto registrado. En 2015, esto había disminuido a 0,77%.

La inyección de código puede ser utilizada de manera malintencionada por los ciberdelincuentes para explotar vulnerabilidades en programas y sistemas informáticos con el fin de obtener acceso no autorizado, robar información confidencial o causar daños graves. Estos ataques suelen aprovecharse de errores en la validación de datos por parte de los programas y sistemas, permitiendo al atacante manipular la ejecución del código.

Es importante destacar que la inyección de código no se limita únicamente a sistemas operativos Windows, también es un problema que afecta a otras plataformas como Linux o macOS. Además, el impacto de este tipo de ataques puede variar dependiendo del objetivo que se persiga y de las medidas de seguridad implementadas en el sistema atacado.

Para combatir la inyección de código, es fundamental adoptar buenas prácticas de seguridad como la validación adecuada de todas las entradas de usuario, el uso de parámetros parametrizados en consultas a bases de datos, el uso de lenguajes de programación seguros y la implementación de cortafuegos y sistemas de detección de intrusos.

A pesar de los esfuerzos por parte de la industria de la ciberseguridad y los avances tecnológicos en este campo, los ataques de inyección de código siguen siendo una amenaza persistente. Por lo tanto, es responsabilidad de los desarrolladores de software y administradores de sistemas estar constantemente actualizados sobre las últimas técnicas utilizadas por los atacantes y tomar las medidas necesarias para evitar y mitigar los riesgos asociados a la inyección de código.


Inyeccion de código


Ejemplos concretos de uso de inyección de código



La inyección de código puede usarse para el bien como para el mal, a continuación ejemplos concretos de su uso:

• Los antivirus suelen inyectar código en los navegadores web para supervisar el tráfico web y así poder bloquear el tráfico peligroso.

• Los programas malignos suelen inyectar código en los navegadores web para controlar qué visita el usuario, robar datos (contraseñas, números de tarjetas de crédito...), hacer redirecciones maliciosas, cambiar la configuración del navegador, evitar que puedas ingresar a sitios de seguridad o descargar programas antivirus, etc.

• Programas que cambian el diseño y el comportamiento de Windows (agregan animaciones, diferentes formas y gráficos a las ventanas, etc.) emplean la inyección de código. Por ejemplo, el programa WindowBlinds de Stardock.

• Ciertos programas hacen inyección DLL para agregar sus opciones a los menús contextuales de otras aplicaciones.

• Múltiples herramientas para hacer trampas en los juegos para PC suelen emplear técnicas de inyección de código para modificar el comportamiento del juego y así obtener ventajas.



La inyección de código no siempre es mala, pero puede ser inestable



La inyección de código es empleada por múltiples aplicaciones de Windows, como vimos en los ejemplos anteriores. Por supuesto que puede venir con ciertos peligros.

Es usual que la inyección de código cause errores inesperados en las aplicaciones y el sistema operativo. Por ejemplo, Windows evita actualmente que su navegador Edge pueda ser inyectado, para evitar que aplicaciones maliciosas lo alteren. Microsoft incluso proporciona instrucciones para verificar si las DLL de terceros se cargan en Microsoft Outlook, ya que causan múltiples fallos de Outlook.


Un empleado de Microsoft expresó: La inyección de DLL nunca es segura. Estás hablando de lanzar un código en un proceso que nunca fue diseñado, construido o probado por el autor del proceso, y de cooptar o crear un hilo para ejecutar ese código. Corre el riesgo de crear problemas de tiempo, sincronización o recursos que no estaban allí antes o exacerbar los problemas que ya estaban.



Detectar DLL inyectadas



Para detectar archivos DLL que han sido inyectados puedes emplear el programa de Microsoft Process Explorer, una poderosa herramienta que nos permite saber qué archivos o directorios abre un programa en particular. Process Explorer muestra información sobre qué manejadores y procesos DLL se han abierto o cargado.

Ejecutar el programa como administrador (clic derecho sobre el archivo ejecutable y clic en Ejecutar como Administrador), ir al menú View - Lower Panel View - clic en DLL (o simplemente presionar Ctrl + D)

Seleccionar un proceso determinado en el panel superior y buscar en el panel inferior para ver las DLL que se cargan. La columna "Nombre de la compañía" proporciona una forma útil de filtrar esta lista.

Por ejemplo, es usual ver una variedad de archivos DLL creados por "Microsoft Corporation" aquí, ya que son parte de Windows. También es normal ver archivos DLL hechos por la misma compañía que el proceso en cuestión: "Google Inc." en el caso de la imagen de abajo estamos viendo el proceso de Chrome. También podemos encontrar algunos archivos DLL creados por "AVAST Software" en Chrome. Esto indica que el software antivirus Avast en nuestro sistema está inyectando código como la "biblioteca de filtros de Avast Script Blocking" en Chrome.

Process Explorer para detectar los archivos y carpetas empleados por determinados procesos
Process Explorer para detectar los archivos y carpetas empleados por determinados procesos


No hay demasiado que podamos hacer si encontramos inyección de código en nuestro sistema. Si se trata de un virus deberemos ejecutar el antivirus. Si un programa en particular está fallando, puede deberse a la inyección de código de otro, deberemos desinstalar ambos.



Funcionamiento de la inyección de código



La inyección de código no modifica la aplicación subyacente en el disco duro. En cambio, espera que se ejecute esa aplicación e inyecta código adicional en ese proceso en ejecución para cambiar la forma en que funciona.

Windows incluye una variedad de interfaces de programación de aplicaciones (API) que se pueden usar para la inyección de código. Un proceso puede adjuntarse a un proceso de destino, asignar memoria, escribir un archivo DLL u otro código en esa memoria y luego indicar al proceso de destino que ejecute el código. Windows no evita que los procesos en su computadora se interfieran entre sí de esta manera.

La información técnica sobre cómo hacer inyección de código está mayormente en inglés, puede consultar estas dos:

- Iyección básica DLL

- Inyección de código

En algunos casos, alguien puede cambiar el código subyacente en el disco, por ejemplo, al reemplazar un archivo DLL que viene con un juego para PC con uno modificado para permitir el fraude o la piratería. Esto técnicamente no es "inyección de código". El código no se está inyectando en un proceso en ejecución, pero el programa en cambio se engaña para que cargue una DLL diferente con el mismo nombre.



Inyección de código SQL



Tenemos un artículo al respecto, ver: Inyección SQL



Uso de vulnerabilidades para la inyección



Las vulnerabilidades de inyección de código (o defectos de inyección) ocurren cuando una aplicación envía datos no confiables a un intérprete. Las vulnerabilidades de inyección se encuentran con mayor frecuencia en consultas SQL, LDAP, XPath o NoSQL; cComandos del sistema operativo; analizadores XML, encabezados SMTP, argumentos de programas, etc.

Las vulnerabilidades de inyección tienden a ser más fáciles de descubrir al examinar el código fuente que a través de prueba y error. Los escáneres y los fuzzers pueden ayudar a encontrar vulnerabilidades de inyección.



Usos malintencionados de la inyección de código



Las técnicas de inyección de código son populares en la piratería para obtener información, mejora de privilegios o acceso no autorizado a un sistema.

La inyección de código puede emplearse malévolamente para muchos propósitos, que incluyen:

• Modificar arbitrariamente valores en una base de datos a través de la inyección SQL. Esto puede comprometer la base de datos completas. Sin ir más lejos, este propio sitio web www.alegsa.com.ar, recibe constantemente ataques para inyección SQL, claro que tenemos protegido el código.

La solución típica a la inyección SQL en programación es filtrar cualquier dato antes de emplearlo en una consulta SQL, por ejemplo: si esperas de entrada un entero, verificar que lo sea y acotado a los números que corresponden. Leer: Validación de datos.

• Instalar programas malignos o ejecutar código malicioso en un servidor, inyectando código de script del servidor (como PHP o ASP).

• Subir en los privilegios a los permisos de raíz mediante la explotación de las vulnerabilidades de inyección de Shell en un binario raíz de setuid en UNIX o sistema local mediante la explotación de un servicio en Windows.

• Atacar a los usuarios de la web con HTML / Script Injection (Cross-site Scripting o XSS). Para más información leer: XSS.


Resumen: inyección de código



La inyección de código es agregar o insertar código en un proceso para cambiar su comportamiento. Puede ser utilizado para bien o para mal. A veces se llama inyección DLL en Windows, ya que los archivos DLL a menudo se usan para ingresar el código. No todas las inyecciones de código son malignas y su frecuencia ha disminuido en los últimos años.




¿Cuáles son los riesgos de la inyección de código malintencionada?



La inyección de código malintencionada puede tener consecuencias graves, ya que permite a los hackers manipular el comportamiento de un proceso de ejecución para realizar distintos ataques, como robo de datos, inserción de malware o la manipulación de funciones críticas del sistema. Es importante contar con medidas de seguridad sólidas para prevenir y detectar estos ataques.


¿Cuál es la diferencia entre inyección de código y inyección SQL?



La inyección de código es un término genérico que engloba diferentes tipos de ataques, mientras que la inyección SQL es un tipo específico de inyección de código que se enfoca en aprovechar vulnerabilidades en las consultas SQL de una aplicación web para manipular bases de datos. La inyección SQL es comúnmente utilizada para robar información o alterar datos dentro de una base de datos.


¿Se puede prevenir la inyección de código en un proceso de ejecución?



Sí, es posible prevenir la inyección de código implementando buenas prácticas de seguridad, como la validación y sanitización de inputs, el uso de parámetros en las consultas SQL, la implementación de firewalls de aplicación y la educación continua del personal en materia de seguridad. Además, es recomendable realizar pruebas de seguridad de manera regular para identificar y corregir posibles vulnerabilidades.


¿Cómo se puede detectar la inyección de código en una aplicación?



Detectar la inyección de código puede ser un desafío, pero existen herramientas y técnicas que pueden ayudar. La monitorización de logs y la implementación de sistemas de detección de intrusiones son útiles para identificar patrones anómalos en el comportamiento de una aplicación. Además, realizar pruebas de penetración de forma regular puede ayudar a descubrir posibles vulnerabilidades y áreas de mejora en materia de seguridad.


¿Hay alguna relación entre la inyección de código y las vulnerabilidades de software?



Sí, la inyección de código es una de las vulnerabilidades más comunes en aplicaciones web y de software en general. A menudo ocurre debido a la falta de validación y sanitización de inputs en un proceso de ejecución. Los desarrolladores deben tener en cuenta este riesgo y aplicar las buenas prácticas de seguridad necesarias para prevenir la inyección de código.


¿Cuáles son las oportunidades de la inyección de código con fines legítimos?



Aunque la inyección de código se asocia principalmente con actividades maliciosas, también puede ser utilizada con fines legítimos. Por ejemplo, los desarrolladores pueden emplear técnicas de inyección de código para realizar análisis de seguridad, identificar vulnerabilidades o mejorar la eficiencia de una aplicación. Sin embargo, es importante utilizar estas técnicas con responsabilidad y asegurarse de tener el consentimiento adecuado cuando se apliquen en un entorno de producción.





Terminología relacionada



XSS (ataque a los usuarios de la web con HTML/Script Injection)

Inyección SQL

Validación de datos

DLL

Vulnerabilidad (informática)

Fuentes bibliográficas:
- Code Injection on Windows
- Code Injection
- http://web.nvd.nist.gov/view/vuln/statistics


Autor: Leandro Alegsa
Actualizado: 31-07-2023

¿Cómo citar este artículo?

Alegsa, Leandro. (2023). Definición de inyección de código. Recuperado de https://www.alegsa.com.ar/Dic/inyeccion_de_codigo.php

Diccionario informático



 


articulos
Asistente IA
Escribe tu consulta sobre informática y tecnologías al asistente de Inteligencia Artificial
¡te responderá en segundos!




* ACLARACIÓN: el asistente ha sido entrenado para responder tus dudas con muy buenos resultados, pero puede equivocarse, esta tecnología aún está en desarrollo. Te sugiero dejar tu email para que te contactemos para corregir la respuesta de la IA: leemos todas las consultas y respuestas.


Usa nuestro buscador para definiciones, informática y tecnologías