stringtranslate.com

diapositiva NOP

En seguridad informática , un deslizamiento NOP , un trineo NOP o una rampa NOP es una secuencia de instrucciones NOP (sin operación) destinadas a "deslizar" el flujo de ejecución de instrucciones de la CPU hacia su destino final deseado cada vez que el programa se bifurca a una dirección de memoria en cualquier lugar. la diapositiva.

La técnica tiene un uso común en exploits de software , donde se utiliza para dirigir la ejecución del programa cuando no se conoce con precisión el destino de una instrucción de bifurcación . Otras aplicaciones notables incluyen estrategias de programación defensiva , como la programación compatible con 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 esta razón, las diapositivas NOP prácticas a menudo se componen 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 sólo de manera intrascendente, lo que las hace mucho más difíciles de identificar. .

Un trineo NOP es la técnica más antigua y conocida para explotar los desbordamientos del búfer de pila . [2] Resuelve el problema de encontrar la dirección exacta del buffer aumentando efectivamente el tamaño del área objetivo. Para hacer esto, se corrompen secciones mucho más grandes de la pila con la instrucción de máquina no operativa . Al final de los datos proporcionados por el atacante, después de las instrucciones de no operación, el atacante coloca una instrucción para realizar un salto relativo a la parte superior del búfer donde se encuentra el código shell . Esta colección de no operaciones se conoce como "trineo NOP" porque si la dirección de retorno se sobrescribe con cualquier dirección dentro de la región no operativa del búfer, la ejecución se "deslizará" hacia abajo por las no operaciones hasta que sea redirigido al código malicioso real mediante el salto al final. Esta técnica requiere que el atacante adivine en qué parte de la pila está el trineo NOP en lugar del código shell 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 operativas en un intento de detectar el código shell en uso. Es importante tener en cuenta que un trineo NOP no necesariamente contiene solo instrucciones tradicionales de máquina no operativa; cualquier instrucción que no corrompa el estado de la máquina hasta el punto en que el código shell no se ejecute se puede utilizar en lugar de la no operación asistida por hardware. Como resultado, se ha convertido en una práctica común para los creadores de exploits componer el trineo no operativo con instrucciones elegidas al azar que no tendrán ningún efecto real en la ejecución del código shell. [4]

Si bien 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 depender de cierta cantidad de suerte para adivinar las compensaciones en la pila que se encuentran dentro de la región del trineo NOP. [5] Una suposición incorrecta generalmente provocará que el programa objetivo falle y podría alertar al administrador del sistema sobre las actividades del atacante. Otro problema es que el trineo NOP requiere una cantidad mucho mayor de memoria para contener un trineo NOP lo suficientemente grande como para ser de alguna utilidad. Esto puede ser un problema cuando el tamaño asignado del buffer afectado es demasiado pequeño y la profundidad actual de la pila es poco profunda (es decir, no hay mucho espacio desde el final del marco de la pila actual hasta el inicio de la pila). A pesar de sus problemas, el trineo NOP 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 usar 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 es determinista, se pueden usar instrucciones multibyte en una diapositiva NOP sin tener en cuenta los resultados de la ejecución no alineada. Si se filtra la entrada que proporciona el vector de ataque en el que se introducirán la diapositiva NOP y la carga útil (por ejemplo, aceptar 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 ) con frecuencia pueden ser irrelevantes para el estado del programa, no se pueden usar en una diapositiva NOP dirigida a una computadora en la que la extensión no es compatible.

Detecció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]

Ver también

Referencias

  1. ^ corelanc0d3r (31 de diciembre de 2011). "Tutorial de escritura de exploits, parte 11: Heap Spraying desmitificado". Equipo Corelan. Archivado desde el original el 25 de abril de 2015 . Consultado el 15 de enero de 2014 .{{cite web}}: CS1 maint: numeric names: authors list (link)
  2. ^ Vangelis (8 de diciembre de 2004). "Explotación de desbordamiento basada en pila: introducción a la técnica de desbordamiento clásica y avanzada". Wowhacker a través de Neworder. Archivado desde el original (texto) el 18 de agosto de 2007. {{cite journal}}: Citar diario requiere |journal=( ayuda )
  3. ^ Balaban, Murat. "Desmitificados los desbordamientos de búfer" (texto) . Enderunix.org. {{cite journal}}: Citar diario requiere |journal=( ayuda )
  4. ^ Akritidis, P.; Markatos, Evangelos P.; Policronakis, M.; Anagnostakis, Kostas D. (2005). "STRIDE: Detección de trineos polimórficos mediante análisis de secuencia de instrucciones" (PDF) . Actas de la 20ª Conferencia Internacional de Seguridad de la Información IFIP (IFIP/SEC 2005) . Conferencia Internacional de Seguridad de la Información IFIP. Archivado desde el original (PDF) el 1 de septiembre de 2012 . Consultado el 4 de marzo de 2012 .
  5. ^ Klein, Christian (septiembre de 2004). "Desbordamiento de búfer" (PDF) . Archivado desde el original (PDF) el 28 de septiembre de 2007. {{cite journal}}: Citar diario requiere |journal=( ayuda )
  6. ^ Akritidis, P.; Markatos, EP; Policronakis, M.; Anagnostakis, K. (2005). "STRIDE: Detección de trineos polimórficos mediante análisis de secuencia de instrucciones". Seguridad y privacidad en la era de la informática ubicua . Avances del IFIP en tecnologías de la información y las comunicaciones. vol. 181, págs. 375–391. doi :10.1007/0-387-25660-1_25. ISBN 978-0-387-25658-0. {{cite book}}: |journal=ignorado ( ayuda )

enlaces externos