mayo 19, 2024

¿Qué es una inyección de comandos del sistema operativo?

Los ataques de inyección son una de las formas más comunes en que los piratas informáticos atacan los sistemas porque les permiten 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 a un atacante ejecutar cualquier comando deseado 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 sistema() o ejecutar() 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 el punto de vista del atacante. El atacante 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 tu 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 podría insertar el código directamente y el daño es impredecible.

2. Inyección indirecta de comandos

programación de código de pc

En el caso de la entrada de comandos indirectos, 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 para que ahora contenga un comando malicioso. 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 es necesario abordar ambas. 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. Inyectar comandos a ciegas

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 varias técnicas, como el retraso de salida y el enrutamiento, 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 de su sitio. El atacante puede obtener diferentes resultados cambiando el valor de id. Es difícil hacerlo manualmente, pero existen herramientas como Burp Suite para eso. A continuación, el atacante descubre una peculiaridad en una página: se puede devolver un valor de identificación que, aunque no mostró ningún resultado, la respuesta del sitio web fue 200, lo que indica que todo está bien. En ese caso, el atacante podría usar la inyección de comando ciego.

Una técnica como un retraso de tiempo es especialmente útil. Debido a que la página que se abre estará en blanco, no obtendrá ninguna respuesta, pero aún podrá obtener información sobre lo que está almacenado en una base de datos en función de los retrasos de tiempo que solo cargan la página si un determinado carácter está presente. Esto lleva demasiado tiempo para ser un proceso manual, pero muchas herramientas pueden automatizar el ataque.

Un ejemplo de un escenario de ataque

ejemplo de ataque de programación de código

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. Usamos una URL como la siguiente para acceder a toda esta información:

 example_unsafe_store.com/stockStatus?productID=245&storeID=

Imagine pasar ID de productos y tiendas como argumentos a un comando de shell, como “stockstat.pl 245 38”, ya que la aplicación necesitaría consultar registros antiguos. Si el desarrollador no toma ninguna medida contra las inyecciones de comandos, un atacante puede emitir una entrada para ejecutar el comando deseado:

 & echo this_a_harmful_command &

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

 stockstat.pl & echo this_a_harmful_command & 38

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

 Error -productID not found
this_a_harmful_command
38: command not found

En este caso, el archivo “stockstat.pl” ejecutó el comando sin los argumentos esperados y luego devolvió un mensaje de error. Luego, se ejecutó el comando de eco ingresado por el atacante y el atacante vio la expresión que ingresó en la pantalla. El argumento original, “38”, se ejecutaba como un comando que provocaba errores.

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

Si bien la inyección de comandos es un vector de ataque poderoso y dañino, existen algunos trucos para evitarlo. La razón detrás de los ataques de inyección de comandos del sistema operativo es ejecutar ciertos comandos del sistema operativo utilizando una aplicación. Tienes que evitar que esto suceda. Hay algunas cuestiones a considerar:

  1. Debe evitar que cualquier persona con acceso a su aplicación ejecute su código.
  2. Debe evitar que cualquier persona con acceso a la aplicación realice solicitudes al servidor con expresiones de sintaxis.
  3. Debe cifrar las oraciones solicitadas por cualquier persona con acceso.

Examinemos cada elemento uno por uno. Una buena solución para el primer problema es usar el método de la lista blanca para bloquear a cualquier persona hasta la capa de la aplicación para que no pueda ejecutar ciertos códigos o solicitudes. Cualquier persona que no identifiques no podrá ejecutar tu código.

La solución al segundo es no permitir algunas expresiones de texto utilizadas en los comandos. El usuario solo puede ingresar valores numéricos. Aplícalo junto con el método de la lista blanca y tendrás un sistema mucho más seguro.

El tercer elemento se refiere al cifrado de parámetros sintácticos como el carácter y los espacios ingresados. Como resultado, la inclusión de métodos en la lista blanca, la verificación de la sintaxis de entrada y el cifrado de entrada deberían protegerlo de la inyección de comandos del sistema operativo.

Los ataques de inyección evolucionan cada día.

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 explotan pequeñas vulnerabilidades que los desarrolladores han pasado por alto. Por eso es fundamental estar siempre al día y seguir de cerca los desarrollos actuales en el mundo de la ciberseguridad.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *