Un exploit que proporciona un entorno de ejecución completamente completo permite al atacante ejecutar cualquier algoritmo que desee. No estarán limitados por el número de instrucciones disponibles.
Un sistema de reglas de manipulación de datos (script, programa, conjunto de instrucciones, etc.) se considera completamente completo si se puede usar para simular una Máquina de Turing . La equivalencia de Turing establece que dos construcciones completas de Turing son idénticas en sus capacidades. En otras palabras, si alguien puede ejecutar código completo en una computadora vulnerable, puede computar cualquier cosa , con la excepción de las limitaciones de recursos. La tesis de Church-Turing de que una máquina de Turing puede calcular cualquier valor que también pueda calcularse un algoritmo Del artículo de Wikipedia:
Para mostrar que algo está Turing completo, es suficiente para mostrar que se puede usar para simular algunos sistemas completos de Turing. Por ejemplo, un lenguaje imperativo es Turing completo si tiene bifurcaciones condicionales (por ejemplo, declaraciones "if" y "goto", o una instrucción "bifurcación cero"; vea una computadora del conjunto de instrucciones) y la capacidad de cambiar una cantidad arbitraria de memoria (por ejemplo, la capacidad de mantener un número arbitrario de variables). Dado que este es casi siempre el caso, la mayoría, si no todos los idiomas imperativos, se completan con Turing si se ignoran las limitaciones de la memoria finita.
Esto es particularmente relevante en el caso de ROP , una técnica de explotación en la que el código existente se ejecuta fuera de -orden. Un programa vulnerable lo suficientemente complejo puede hacer ROP completo, lo que significa que el atacante no está limitado solo a ciertos tipos de computación.
Entonces, ¿por qué importa algo tan abstracto como computación , en lugar de solo las capacidades del programa explotado? Imagínese si tuviera acceso a un shell, ejecutándose como root. Obviamente, la raíz puede hacer prácticamente todo, pero ¿qué sucede si las únicas cosas que puede hacer en el shell son ejecutar echo
, id
y cd
? No hay declaraciones if
, no mv
, no sed
... Usted estaría bastante limitado en lo que puede hacer. Ese escenario no se completaría completamente porque no tiene suficientes comandos para completarla. Una cadena de ROP completa es un concepto similar, pero en lugar de utilizar comandos de shell, utiliza código de máquina. Si solo puede ejecutar algunas instrucciones, no puede hacer mucho.