¿Cómo funciona la vulnerabilidad de ejecución de código binario en un sistema operativo moderno?

3

En un sistema operativo moderno creo que:

  • la sección .text donde se almacenan las instrucciones de CPU ensambladas binarias no se puede modificar
  • la sección .data / .bss está marcada como no ejecutable por lo que la información allí solo se tratará como datos, nunca será ejecutada por la CPU

Entonces, ¿cómo es posible que un exploit que contiene una carga útil de instrucciones ensambladas en formato binario se ejecute?

    
pregunta emberfang 13.05.2014 - 10:41
fuente

2 respuestas

1

La ejecución de las instrucciones Binary Assembled funciona al explotar la vulnerabilidad en el Programa de Aplicación. Por ejemplo, al insertar un código malicioso en un PDF, si hay una falla en el Software PDF, se puede ejecutar el Código de la Sección de Datos.

Ahora me dirijo a tu pregunta. Por lo que sé después de 8086 , Intel comenzó a emplear 4 niveles de protección. El nivel interno es para procesos de nivel de kernel y el nivel más externo es para Procesos de nivel de usuario . Hay pilas separadas para ambos procesos, pero el espacio de la memoria es compartido. Un proceso de nivel de usuario (persona que llama) no puede realizar directamente una tarea privilegiada, necesita llamar a un código de confianza que hace el trabajo para la persona que llama. Pero para que el proceso de nivel de usuario llame al código de confianza, diga para escribir un elemento de datos X, debería tener el permiso para hacerlo (indirectamente).

Hay algunas vulnerabilidades comúnmente denominadas como Caballos de Troya que permiten que el proceso de Nivel de usuario use un Código de confianza para hacer cosas que en realidad no está permitido hacer.

Entonces, si el programa de la aplicación en sí tiene vulnerabilidades, si se combina con tales explotaciones puede obtener el código deseado en ejecución.

    
respondido por el techno 14.05.2014 - 05:42
fuente
0

Básicamente tienes razón en tu conocimiento acerca de los binarios. Pero son demasiado abstractos para ser de alguna utilidad. Supongo que está hablando de todos los binarios, no solo del kernel o de las aplicaciones de nivel de SO ...

En resumen, la sección .bss (donde la entrada proporcionada por el usuario reside en la memoria), almacena las variables que se cargan en los registros de procesos críticos (variables del procesador local) durante el tiempo de ejecución. La manipulación de cualquiera de estas variables almacenadas, preferiblemente a través de un desbordamiento basado en la pila (donde la entrada del usuario desborda la memoria y las escrituras sobre una de las variables críticas ...) posiblemente conduciría a la ejecución de bytes proporcionados por el usuario ( destinado a ser introducido) como instrucciones del procesador.

Entonces, si tiene cuidado con su entrada, podría hacer que la computadora haga lo que quiera (eso no era parte del trabajo del programa). Si tiene cuidado con la información proporcionada por el usuario, frenaría el intento de un atacante de explotar su computadora.

    
respondido por el Mukesh Sai Kumar 21.06.2016 - 16:40
fuente

Lea otras preguntas en las etiquetas