¿Cómo explotan los desarrolladores contrarrestar la integridad de flujo de control (CFI) que se usa para prevenir los ataques de desbordamiento de búfer basados en ROP?

3
  

¿Cómo explotan los desarrolladores la integridad de control-flujo (CFI) utilizada para evitar los ataques de desbordamiento de búfer basados en ROP?

Originalmente, la programación orientada al retorno (ROP) se inventó para contrarrestar la protección de no ejecución (NX) de la pila, saltando desde diferentes ubicaciones de memoria (ejecutable) para ejecutar código (gadgets).

Sin embargo, la integridad de control-flujo (CFI) está destinada a evitar la ejecución basada en ROP mediante la comprobación dinámica de la validez de los destinos de los saltos, es decir, ya no es posible saltar a ubicaciones arbitrarias en código ejecutable (solo al principio de funciones etc.)

¿De qué manera los desarrolladores de vulnerabilidades contrarrestan CFI para explotar programas protegidos con NX utilizando desbordamientos de búfer?     

pregunta user111854 04.11.2018 - 12:26
fuente

1 respuesta

3

Hay muchos tipos de CFI. Sin embargo, el CFI que soporta la protección de los bordes hacia adelante y hacia atrás, es determinista y también es muy complejo (el único ejemplo concreto que conozco es la versión comercial de PaX RAP). La mayoría de los CFI son de grano grueso, lo que significa que una función puede devolver no solo a esa función, sino a varias funciones con la misma firma de función (es decir, el mismo tipo de retorno y el mismo argumentos). Los bordes delanteros provienen de saltos y llamadas, mientras que los bordes posteriores provienen de retornos. La gran mayoría de CFI solo admite uno u otro (como el CFG de Microsoft o el CFI de Clang), lo que limita enormemente sus capacidades.

Otro problema con CFI es que a menudo es probabilístico, usando algún valor secreto. Cualquier infoleaks que exponga ese valor secreto podría usarse para romper el CFI. El CFI determinista no sufre de esto, pero el CFI más determinista es muy de grano grueso. En resumen:

  • La mayoría de los CFI no son tanto hacia delante como hacia atrás, lo que limita gravemente sus capacidades.

  • La mayoría de los CFI son probabilísticos, lo que los hace vulnerables a infoleaks que pueden romperlos.

  • La mayoría de los CFI son generales, lo que le permite regresar a grupos de funciones con la misma firma.

Puede aprender mucho más acerca de las implementaciones reales de CFI si revisa kCFI y PaX RAP, las únicas dos que conozco que ofrecen una protección total de los bordes hacia adelante y hacia atrás. Desafortunadamente, dado que CFI es un tema tan complejo y no hay una implementación one o incluso una técnica para CFI, no hay forma de responder exactamente cómo un atacante puede evitarlo sin especificar la implementación.

    
respondido por el forest 04.11.2018 - 12:31
fuente

Lea otras preguntas en las etiquetas