¿Cómo funciona la inyección de código?

¿Cómo funciona la inyección de código?

La inyección de código, a menudo denominada ejecución remota de código (RCE), es un ataque perpetrado por la capacidad de un atacante de inyectar y ejecutar código malicioso en una aplicación; un ataque de inyección. Este código extranjero es capaz de violar la seguridad de los datos, comprometer la integridad de la base de datos o las propiedades privadas. En muchos casos, puede eludir el control de autenticación y, por lo general, estos ataques están asociados con aplicaciones que dependen de la entrada del usuario para su ejecución.

Generalmente, las aplicaciones son más vulnerables si el código se ejecuta sin pasar primero por la validación. A continuación se muestra un caso simple de un código vulnerable.

inyección-ejemplo1

En el ejemplo anterior, la página de información de PHP es vulnerable y se mostrará si la URL https://example.com/?code=phpinfo(); se ejecuta

Debido al hecho de que la interacción del usuario con las aplicaciones es cada vez más una necesidad en el mundo en línea actual, la inyección de código ha crecido y se ha convertido en una amenaza real para muchos recursos en línea.

Tipos de inyecciones de código

Existen principalmente cuatro tipos de inyecciones de código: inyección de SQL, inyección de script, inyección de shell y evaluación dinámica. Todos estos tienen el mismo principio de funcionamiento, es decir, las aplicaciones introducen y ejecutan el código, pero los dos en los que me centraré son la inyección de SQL y la inyección de script.

Cómo funcionan las inyecciones de SQL

En el caso de la inyección SQL, el ataque tiene como objetivo corromper una consulta de base de datos legítima para producir datos falsificados. El atacante primero tiene que ubicar una entrada dentro de la aplicación web de destino que se incluye dentro de una consulta SQL.

Este método solo es efectivo si la aplicación web tiene entradas de usuario incluidas dentro de una instrucción SQL. Luego se puede insertar una carga útil (una declaración SQL maliciosa) y ejecutarla en el servidor de la base de datos.

El siguiente pseudocódigo del lado del servidor es un ejemplo simple de autenticación que puede resultar vulnerable a las inyecciones de SQL.

inyección-ejemplo2

En el código anterior, el atacante podría insertar una carga útil que cambiaría la declaración SQL ejecutada por el servidor de la base de datos. Un ejemplo establecería el campo de contraseña en:

Esto hace que se ejecute automáticamente la siguiente instrucción en el servidor de la base de datos:

SELECT id FROM users WHERE username=’username’ AND password=’password’ OR 1=1

Qué puede hacer la inyección SQL

Este es el tipo más común de inyección de código. Teniendo en cuenta el hecho de que SQL es el lenguaje utilizado para manipular los datos almacenados en los sistemas de gestión de bases de datos relacionales (RDBMS), un ataque con el poder de dar y ejecutar sentencias SQL se puede utilizar para acceder, modificar e incluso eliminar datos.

Puede darle al atacante la capacidad de eludir la autenticación, tener una divulgación completa de los datos almacenados en la base de datos, comprometer la integridad de los datos y causar problemas de repudio, alterando los saldos y anulando transacciones.

Cómo prevenir las inyecciones de SQL

Hay algunos pasos para hacer que sus aplicaciones sean menos vulnerables, pero antes de cualquiera de estos pasos, es mejor asumir que todos los datos enviados por el usuario son malos y no confiar en nadie. Entonces podrías considerar lo siguiente:

  • Deshabilitar el uso de SQL dinámico – esto significa que no construya consultas de base de datos con la entrada del usuario. Si es necesario, desinfecte, valide y escape los valores antes de realizar una consulta con los datos de entrada del usuario.
  • Hacer uso de un cortafuegos – Un firewall de aplicaciones web (basado en software o aplicaciones) ayudará a filtrar los datos maliciosos.
  • Compra un mejor software – Esto simplemente significa que los codificadores serán responsables de verificar y corregir fallas.
  • Cifrar o cifrar contraseñas y todos los demás datos confidenciales que tenga, esto debe incluir cadenas de conexión.
  • Evite conectarse a su base de datos con cuentas con privilegios de administrador a menos que sea absolutamente necesario.

Inyección de secuencias de comandos

Esta vulnerabilidad de seguridad es una amenaza que permite a un atacante inyectar código malicioso directamente a través de los formularios web de sitios web basados ​​en datos a través de elementos de la interfaz de usuario. Este ataque a menudo se conoce como Cross-Site Scripting o XSS. los <script>, <meta>, <html>, <body>, <embed>, <frame>, <frameset>, <img> Las etiquetas son las más específicas para las inyecciones de secuencias de comandos.

Cómo prevenir las inyecciones de secuencias de comandos

Los pasos para evitar inyecciones de secuencias de comandos dependen del código de programación que esté utilizando. En general, querrá:

  • valide y desinfecte la entrada del usuario (cualquier forma de campos de entrada) eliminando o escapando contenido potencialmente malicioso
  • limpiar cadenas de consulta en URL
  • valide y desinfecte todas las formas de datos, matrices y objetos antes de ejecutarlos en el servidor

Conclusión

En pocas palabras, es mejor prevenir que curar. Con las nuevas actualizaciones en tecnología, hay más amenazas a las que estarán expuestos nuestros sistemas. Para estar al tanto de todo, es importante tener los últimos parches y actualizaciones y estar atento a las mejores prácticas. Esto hace que sea más difícil ser víctima de estos ataques maliciosos.

Experto Geek - Tu Guía en Tendencias Tecnológicas