En seguridad informática , una diapositiva NOP , trineo NOP o rampa NOP es una secuencia de instrucciones NOP (sin operación) destinadas a "deslizar" el flujo de ejecución de instrucciones de la CPU a su destino final deseado siempre que el programa se bifurque a una dirección de memoria en cualquier parte de la diapositiva.
La técnica se utiliza habitualmente en exploits de software , donde se utiliza para dirigir la ejecución de un programa cuando no se conoce con precisión el objetivo de una instrucción de bifurcación . Otras aplicaciones notables incluyen estrategias de programación defensiva, como la programación con compatibilidad electromagnética (EMC).
Si bien una diapositiva NOP funcionará si consta de una lista de instrucciones NOP canónicas, la presencia de dicho código es sospechosa y fácil de detectar automáticamente. Por este motivo, las diapositivas NOP prácticas suelen estar compuestas de instrucciones NOP no canónicas (como mover un registro hacia sí mismo o agregar cero [1] ), o de instrucciones que afectan el estado del programa de manera intrascendente, lo que las hace mucho más difíciles de identificar.
Un NOP-sled es la técnica más antigua y más conocida para explotar desbordamientos de búfer de pila . [2] Resuelve el problema de encontrar la dirección exacta del búfer aumentando efectivamente el tamaño del área objetivo. Para hacer esto, secciones mucho más grandes de la pila se corrompen con la instrucción de máquina no-op . Al final de los datos proporcionados por el atacante, después de las instrucciones no-op, el atacante coloca una instrucción para realizar un salto relativo a la parte superior del búfer donde se encuentra el shellcode . Esta colección de no-ops se conoce como el "NOP-sled" porque si la dirección de retorno se sobrescribe con cualquier dirección dentro de la región no-op del búfer, la ejecución se "deslizará" hacia abajo por las no-ops hasta que se redirija al código malicioso real por el salto al final. Esta técnica requiere que el atacante adivine dónde está el NOP-sled en la pila en lugar del shellcode comparativamente pequeño. [3]
Debido a la popularidad de esta técnica, muchos proveedores de sistemas de prevención de intrusiones buscarán este patrón de instrucciones de máquina no operativa en un intento de detectar el código shell en uso. Es importante señalar que un sled NOP no necesariamente contiene solo instrucciones de máquina no operativas tradicionales; cualquier instrucción que no corrompa el estado de la máquina hasta un punto en el que el código shell no se ejecute se puede utilizar en lugar del no-op asistido por hardware. Como resultado, se ha convertido en una práctica común para los escritores de exploits componer el sled no-op con instrucciones elegidas al azar que no tendrán un efecto real en la ejecución del código shell. [4]
Aunque este método mejora enormemente las posibilidades de que un ataque tenga éxito, no está exento de problemas. Los exploits que utilizan esta técnica aún deben confiar en cierta cantidad de suerte para adivinar los desplazamientos en la pila que se encuentran dentro de la región NOP-sled. [5] Una suposición incorrecta generalmente provocará el bloqueo del programa de destino y podría alertar al administrador del sistema sobre las actividades del atacante. Otro problema es que el NOP-sled requiere una cantidad de memoria mucho mayor para albergar un NOP-sled lo suficientemente grande como para que sea de alguna utilidad. Esto puede ser un problema cuando el tamaño asignado del búfer afectado es demasiado pequeño y la profundidad actual de la pila es baja (es decir, no hay mucho espacio desde el final del marco de la pila actual hasta el comienzo de la pila). A pesar de sus problemas, el NOP-sled es a menudo el único método que funcionará para una plataforma, entorno o situación determinada y, como tal, sigue siendo una técnica importante.
La entropía de una diapositiva NOP depende de las restricciones que se le imponen. Si se puede determinar que ciertos registros no están en uso (es decir, se establecerán en un valor conocido antes de su próximo uso), se pueden utilizar instrucciones que los manipulen arbitrariamente en la diapositiva NOP. Además, si la alineación tanto de la diapositiva NOP como del puntero de instrucción son deterministas, se pueden utilizar instrucciones multibyte en una diapositiva NOP sin tener en cuenta los resultados de la ejecución no alineada. Si la entrada que proporciona el vector de ataque en el que se van a introducir la diapositiva NOP y la carga útil se filtra (por ejemplo, aceptando solo caracteres imprimibles), el campo de posibles instrucciones para su inclusión es limitado. Si bien las instrucciones que forman parte de una extensión de arquitectura (como SSE ) pueden ser con frecuencia irrelevantes para el estado del programa, no se pueden utilizar en una diapositiva NOP destinada a una computadora en la que no se admite la extensión.
Existen muchas técnicas para detectar la presencia de diapositivas NOP en la memoria. Por ejemplo, en 2005, investigadores griegos descubrieron que se pueden detectar fácilmente comprobando si una imagen de memoria contiene una secuencia larga de bytes de modo que cada desplazamiento inicial dentro de la secuencia sea válido y lleve la ejecución al mismo lugar. [6]
{{cite web}}
: CS1 maint: numeric names: authors list (link){{cite journal}}
: Requiere citar revista |journal=
( ayuda ){{cite journal}}
: Requiere citar revista |journal=
( ayuda ){{cite journal}}
: Requiere citar revista |journal=
( ayuda ){{cite book}}
: |journal=
ignorado ( ayuda )