Lectores como tú ayudan a apoyar a MUO. Cuando realiza una compra utilizando enlaces en nuestro sitio, podemos ganar una comisión de afiliado. Leer más.

Los ataques de inyección son una de las formas más comunes en que los piratas informáticos atacan los sistemas porque les permite ejecutar fácilmente muchos comandos y códigos. La inyección de comandos del sistema operativo es uno de esos ataques de inyección que debe tener en cuenta. Esto explota una vulnerabilidad que los administradores de sistemas, bases de datos y aplicaciones web deben tomar muy en serio.

Entonces, ¿qué es un ataque de inyección de comandos del sistema operativo?

Definición de inyección de comandos del sistema operativo

La inyección de comandos del sistema operativo permite que un atacante malicioso ejecute cualquier comando que desee mediante la explotación de un sistema operativo, programa, aplicación, base de datos o complemento vulnerable. Ocurre cuando las aplicaciones no validan ni desinfectan correctamente los parámetros que usan al llamar a funciones de shell como

instagram viewer
sistema() o ejecutivo() para ejecutar comandos del sistema.

Para comprender mejor la detección y explotación de la inyección de comandos del sistema operativo, es útil examinar este problema en tres categorías principales.

1. Inyección de comando directo

Considere esto desde la perspectiva del atacante. El atacante cibernético descubre que una aplicación está ejecutando un comando específico del sistema; ingresan el comando malicioso como parte de los argumentos esperados. Luego, la aplicación ejecuta el comando original seguido del malicioso.

El atacante emplea una variedad de enfoques para encontrar dicha vulnerabilidad. El método más sencillo para combatir esto es mantener el sistema operativo actualizado en todo momento; puede hacerlo en colaboración con un equipo de TI competente. Debe evitar todas las aplicaciones y programas que puedan causar vulnerabilidades en el sistema porque el atacante puede insertar código directamente y el daño es impredecible.

2. Inyección de comando indirecto

En el caso de la inyección indirecta de comandos, el atacante no ingresa directamente un código o comando en el sistema. Para ello, utilizan una aplicación o programa vulnerable en el sistema. La vulnerabilidad crea un puente entre el atacante y el sistema operativo. Aprovechando esta comunicación, el atacante tiene como objetivo ejecutar códigos y comandos maliciosos en el objetivo.

El atacante ejecuta una serie de pruebas para identificar esta vulnerabilidad y descubre que el software utiliza datos de una fuente externa, como un archivo o una variable de entorno, para llamar a un comando del sistema. Luego, el atacante modifica el contenido de la fuente externa, por lo que ahora contiene un comando malicioso. Esto luego se ejecuta junto con las instrucciones de la aplicación original.

La principal diferencia entre la inyección de comandos directa e indirecta es que el atacante utiliza una aplicación para comunicarse con el sistema operativo. Pero no hay una diferencia real entre el daño que pueden causar las dos formas de inyección, por lo que ambas deben abordarse. Es por eso que debe asegurarse de que los programas en su red sean confiables y necesarios. No guardes aplicaciones en las que no confíes en tu dispositivo.

3. Inyección de comando ciego

Otro tipo de inyección de comandos del sistema operativo es la inyección de comandos ciegos. Esto significa que la aplicación no devuelve ningún resultado del comando en la respuesta HTTP. El atacante utiliza diferentes técnicas, como el retardo de tiempo y el enrutamiento de salida, para aprovechar esta vulnerabilidad.

Imagine que está buscando un sitio web y el valor "/?search=id" en la URL cambia con cada búsqueda. El valor de identificación aquí puede ser una página de usuario, la dirección de una foto de producto o cualquier página del sitio. El atacante puede obtener diferentes resultados cambiando el valor de id. Es difícil hacerlo manualmente, pero hay herramientas como Burp Suite para esto. Más tarde, el atacante descubre una rareza en una página: es posible que se devuelva un valor de identificación que, aunque no muestre ningún resultado, el la respuesta del sitio web fue 200, lo que indica que todo está bien. En tal caso, el atacante podría utilizar una inyección de comando a ciegas.

Una técnica como el retardo de tiempo es especialmente útil. Dado que la página que se abre estará en blanco, no recibirá ninguna respuesta, pero es posible que aún pueda recopilar información sobre lo que está almacenado en una base de datos basada en retrasos de tiempo que solo cargan la página si un cierto carácter es presente. Esto requiere demasiado tiempo para ser un proceso manual, pero muchas herramientas pueden automatizar el ataque.

Un ejemplo de escenario de ataque

Repasemos todo lo anterior a través de un ejemplo. Imagina que tienes una aplicación de compras que le permite al usuario ver si los productos están en stock. Usemos una URL como la siguiente para acceder a toda esta información:

example_unsafe_store.com/stockStatus? ID de producto = 245 y ID de tienda =

Imagine pasar los ID del producto y de la tienda como argumentos a un comando de shell, como "stockstat.pl 245 38", ya que la aplicación tendría que consultar los registros antiguos. Si el desarrollador no toma ninguna medida contra las inyecciones de comandos, un atacante puede enviar una entrada para ejecutar el comando deseado:

& eco este_un_comando_dañino &

Si esta entrada va en el parámetro productID, el comando ejecutado por la aplicación será:

stockstat.pl & eco este_un_comando_dañino & 38

El comando echo es un método útil para detectar inyecciones de comandos y asegurarse de que la cadena dada aparezca en la salida. El caracter "&" es un separador de comandos de shell, entonces lo que se ejecuta son tres comandos separados, uno tras otro. Como resultado, la salida devuelta al usuario será:

Error -productID no encontrado
este_un_comando_dañino
38: dominio extraviado

Aquí, el archivo "stockstat.pl" ejecutó el comando sin los argumentos que esperaba y, por lo tanto, devolvió un mensaje de error. Luego, el comando de eco inyectado por el atacante se ejecutó y el atacante vio la expresión que ingresó en la pantalla. El argumento original, "38", se ejecutó como un comando que causaba errores.

Cómo protegerse contra las inyecciones de comandos del sistema operativo

Aunque la inyección de comandos es un vector de ataque poderoso y dañino, existen algunos trucos para evitarlo. La razón de ser de los ataques de inyección de comandos del sistema operativo es ejecutar determinados comandos del sistema operativo mediante una aplicación. Tienes que evitar que esto suceda. Hay algunas cuestiones a considerar:

  1. Debe evitar que cualquier persona con acceso a la aplicación pueda ejecutar el código.
  2. Debe evitar que cualquier persona con acceso a la aplicación realice solicitudes al servidor con expresiones sintácticas.
  3. Debe encriptar las frases que cualquier persona con acceso hace solicitudes.

Repasemos cada elemento uno por uno. Una buena solución al primer problema es usar el método de lista blanca para evitar que cualquiera que llegue a la capa de aplicación ejecute ciertos códigos o solicitudes. Cualquier persona que no identifique no podrá ejecutar el código.

La solución al segundo es no aceptar algunas expresiones de texto utilizadas en los comandos. El usuario sólo puede introducir valores numéricos. Aplique esto junto con el método de la lista blanca y tendrá un sistema mucho más seguro.

El tercer elemento trata sobre el cifrado de parámetros sintácticos, como el carácter ingresado y los espacios. Como resultado, el método de lista blanca, la verificación sintáctica de las entradas y el cifrado de las entradas deberían protegerlo de la inyección de comandos del sistema operativo.

Los ataques de inyección evolucionan todos los días

Hay muchos métodos de inyección con diferentes técnicas de ataque, como el comando OS, SQL, SSI y XPath. No es fácil tratar de prevenir cada uno de ellos. Tenga en cuenta que todos estos ataques evolucionan todos los días y aprovechan pequeñas vulnerabilidades que los desarrolladores pasaron por alto. Por eso es vital que siempre se mantenga actualizado y siga de cerca los desarrollos actuales en el mundo de la ciberseguridad.