ES2916701T3 - Autenticación de punteros de código para el control de flujo de hardware - Google Patents

Autenticación de punteros de código para el control de flujo de hardware Download PDF

Info

Publication number
ES2916701T3
ES2916701T3 ES20188975T ES20188975T ES2916701T3 ES 2916701 T3 ES2916701 T3 ES 2916701T3 ES 20188975 T ES20188975 T ES 20188975T ES 20188975 T ES20188975 T ES 20188975T ES 2916701 T3 ES2916701 T3 ES 2916701T3
Authority
ES
Spain
Prior art keywords
code
pointer
code pointer
tagged
program
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
ES20188975T
Other languages
English (en)
Inventor
Can Acar
Arvind Krishnaswamy
Robert Turner
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Qualcomm Inc
Original Assignee
Qualcomm Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Qualcomm Inc filed Critical Qualcomm Inc
Application granted granted Critical
Publication of ES2916701T3 publication Critical patent/ES2916701T3/es
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/554Detecting local intrusion or implementing counter-measures involving event detection and direct action

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Virology (AREA)
  • Storage Device Security (AREA)
  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)
  • Measuring Pulse, Heart Rate, Blood Pressure Or Blood Flow (AREA)

Abstract

Un procedimiento para aplicar el control de flujo de un programa de software en un procesador o procesadores de un sistema informático, comprendiendo el procedimiento: analizar (205) el código de programa del programa de software para identificar un puntero de código en el código de programa; generar (210) una etiqueta de autenticación, en el que generar (210) la etiqueta de autenticación comprende aplicar (415) un algoritmo criptográfico al puntero de código, en el que las entradas al algoritmo criptográfico incluyen el puntero de código, una clave secreta asociada con un procesador que ejecuta el programa de software, e información de contexto asociada con un entorno de ejecución asociado con el código del programa; y modificar (215) el puntero de código en el código del programa con la etiqueta de autenticación para generar un puntero de código etiquetado, en el que el puntero de código etiquetado se genera aplicando una máscara a la etiqueta de autenticación y al puntero de código.

Description

DESCRIPCIÓN
Autenticación de punteros de código para el control de flujo de hardware
Antecedentes
Los errores de implementación de software, tales como una validación de entrada faltante o incorrecta, pueden dar lugar a accesos a búfer fuera de límites y corrupción de memoria. Estos errores de implementación pueden dar lugar a que el software se vuelva inestable o que finalmente se bloquee en condiciones normales. Sin embargo, cuando una entrada se manipula por una intención de una parte maliciosa de atacar el sistema informático, el atacante puede explotar estos fallos de desbordamiento y corrupción de memoria para cambiar el comportamiento esperado del código de software y ejecutar un código o funcionalidad determinado por el atacante.
Un atacante típicamente obtiene el control de ejecución sobrescribiendo una estructura de datos en memoria, tal como una dirección de retorno, un puntero de función o un puntero de tabla virtual. No siempre es posible encontrar y corregir todos los fallos de corrupción de memoria explotables en códigos base grandes y heredados. En consecuencia, muchos sistemas informáticos contienen características defensivas generales, denominadas "mecanismos de mitigación de exploits", que son eficaces contra técnicas bien conocidas que los atacantes usan para explotar estos fallos para obtener el control de y/o dañar los sistemas informáticos seleccionados.
Algunos ejemplos de mecanismos de mitigación de exploits que se incluyen habitualmente en los sistemas informáticos incluyen: Prevención de ejecución de datos (DEP), protección de pila (SP) y aleatorización de la disposición del espacio de direcciones (ASLR). En la técnica de DEP, todas las secciones de código se marcan como de solo lectura y todas las regiones grabables son no ejecutables. Típicamente, la propiedad de solo lectura de las secciones de código y la propiedad de no ejecutable de las secciones grabables se aplica por la unidad de gestión de memoria (MMU) del procesador. Esta técnica puede evitar que un atacante coloque su propio código en un área de datos y dirija el flujo de ejecución a ese código. En el enfoque de SP, el compilador implementa funciones para detectar desbordamientos de búfer en la pila. Los desbordamientos de búfer basados en pila pueden ser fáciles de explotar, ya que a menudo hay una dirección de retorno o un registro de enlace guardado en la pila justo después de una matriz local. Un atacante puede provocar que la matriz local se desborde y sobrescriba la dirección de retorno/registro de enlace y redirigir el flujo de ejecución del software. Muchas implementaciones de protección de pila convencionales insertan un valor de protección en la pila en el prólogo de la función y comprueban las modificaciones de ese valor antes de regresar de esa función. Si se ha producido un desbordamiento de búfer, el valor de protección se habrá sobrescrito junto con la dirección de retorno, porque el valor de protección se localiza en la pila entre el búfer y la dirección de retorno. El valor de protección debe ser un valor aleatorio y/o impredecible para que el enfoque de SP sea seguro. En el enfoque de ASLR, la disposición de memoria de una aplicación se puede aleatorizar en cada ejecución. Por ejemplo, la dirección de base para el código, los datos estáticos, la pila y el almacenamiento dinámico se puede determinar aleatoriamente. Este enfoque dificulta la explotación ya que los atacantes necesitan predecir la localización del código/datos/punteros que necesitan dirigir/manipular para un ataque exitoso. El documento US2003182572 muestra un procedimiento de protección contra ataques de corrupción de punteros.
Breve explicación
Un procedimiento de ejemplo para aplicar el control de flujo de un programa de software en un procesador de acuerdo con la divulgación incluye analizar el código de programa del programa de software para identificar un puntero de código en el código del programa, generar una etiqueta de autenticación basada en el puntero de código, y modificar el puntero de código en el código de programa con la etiqueta de autenticación para generar un puntero de código etiquetado.
Las implementaciones de dicho procedimiento pueden incluir una o más de las características siguientes. Modificar el puntero de código en el código de programa con la etiqueta de autenticación para generar el puntero de código etiquetado incluye además generar el puntero de código etiquetado aplicando una máscara a la etiqueta de autenticación y al puntero de código. Generar el puntero de código etiquetado aplicando la máscara a la etiqueta de autenticación y al puntero de código incluye además seleccionar un primer conjunto de bits de la etiqueta de autenticación usando la máscara, y sustituir un segundo conjunto de bits del puntero de código correspondiente al primer conjunto de bits por el primer conjunto de bits para generar el puntero de código etiquetado. Identificar una pluralidad de punteros de código en el código de programa e identificar los bits de etiqueta comunes a la pluralidad de punteros de código en el código de programa para determinar la máscara. Autenticar el puntero de código etiquetado, realizar la gestión de errores en respuesta a que la etiqueta de autenticación se ha alterado y ejecutar una instrucción de programa en una dirección asociada con el puntero de código en respuesta a que la etiqueta de autenticación no se ha alterado. Autenticar el puntero de código etiquetado incluye determinar un valor del puntero de código recuperado a partir del puntero de código etiquetado usando la máscara. Extraer un valor de la etiqueta de autenticación incrustada a partir del puntero de código etiquetado usando la máscara. Generar una etiqueta de autenticación recuperada en base, al menos en parte, al puntero de código recuperado y al valor de contexto. Extraer un valor de la etiqueta enmascarada a partir de la etiqueta de autenticación recuperada usando la máscara. Comparar el valor de la etiqueta enmascarada con el valor de la etiqueta de autenticación incrustada para determinar si el puntero de código etiquetado se ha alterado.
Un aparato de ejemplo para aplicar el control de flujo de un programa de software en un procesador de acuerdo con la divulgación incluye medios para analizar el código de programa del programa de software para identificar un puntero de código en el código del programa, medios para generar una etiqueta de autenticación basada en el puntero de código; y medios para modificar el puntero de código en el código de programa con la etiqueta de autenticación para generar un puntero de código etiquetado.
Las implementaciones de dicho aparato pueden incluir una o más de las características siguientes. Los medios para modificar el puntero de código en el código de programa con la etiqueta de autenticación para generar el puntero de código etiquetado incluyen medios para generar el puntero de código etiquetado aplicando una máscara a la etiqueta de autenticación y al puntero de código. Los medios para generar el puntero de código etiquetado aplicando la máscara a la etiqueta de autenticación y al puntero de código incluyen además medios para seleccionar un primer conjunto de bits de la etiqueta de autenticación usando la máscara y medios para sustituir un segundo conjunto de bits del puntero de código correspondiente al primer conjunto de bits por el primer conjunto de bits para generar el puntero de código etiquetado. Medios para identificar una pluralidad de punteros de código en el código de programa y medios para identificar los bits de etiqueta comunes a la pluralidad de punteros de código en el código de programa para determinar la máscara. Medios para autenticar el puntero de código etiquetado, medios para realizar la gestión de errores en respuesta a que la etiqueta de autenticación se ha alterado y medios para ejecutar una instrucción de programa en una dirección asociada con el puntero de código en respuesta a que la etiqueta de autenticación no se ha alterado. Medios para determinar un valor del puntero de código recuperado a partir del puntero de código etiquetado usando la máscara.
Un aparato ilustrativo para aplicar el control de flujo de un programa de software en un procesador de acuerdo con la divulgación incluye un procesador configurado para analizar el código de programa del programa de software para identificar un puntero de código en el código de programa, generar una etiqueta de autenticación basada en el puntero de código, y modificar el puntero de código en el código de programa con la etiqueta de autenticación para generar un puntero de código etiquetado.
Las implementaciones de dicho aparato pueden incluir una o más de las características siguientes. El procesador que está configurado para modificar el puntero de código en el código de programa con la etiqueta de autenticación para generar el puntero de código etiquetado también está configurado para generar el puntero de código etiquetado aplicando una máscara a la etiqueta de autenticación y al puntero de código. El procesador que está configurado para generar el puntero de código etiquetado aplicando la máscara a la etiqueta de autenticación y al puntero de código también está configurado para seleccionar un primer conjunto de bits de la etiqueta de autenticación usando la máscara, y sustituir un segundo conjunto de bits del puntero de código correspondiente al primer conjunto de bits por el primer conjunto de bits para generar el puntero de código etiquetado. El procesador también está configurado para identificar una pluralidad de punteros de código en el código de programa e identificar los bits de etiqueta comunes a la pluralidad de punteros de código en el código de programa para determinar la máscara. El procesador también está configurado para autenticar el puntero de código etiquetado, realizar la gestión de errores en respuesta a que la etiqueta de autenticación se ha alterado y ejecutar una instrucción de programa en una dirección asociada con el puntero de código en respuesta a que la etiqueta de autenticación no se ha alterado. El procesador que está configurado para autenticar el puntero de código etiquetado también está configurado para determinar un valor del puntero de código recuperado a partir del puntero de código etiquetado usando la máscara. El procesador también está configurado para extraer un valor de la etiqueta de autenticación incrustada a partir del puntero de código etiquetado usando la máscara.
Un medio legible por ordenador no transitorio, que tiene almacenadas en el mismo instrucciones legibles por ordenador para aplicar el control de flujo de un programa de software en un procesador, de acuerdo con la divulgación incluye instrucciones configuradas para provocar que un ordenador analice el código de programa del programa de software para identificar un puntero de código en el código de programa, generar una etiqueta de autenticación basada en el puntero de código, y modificar el puntero de código en el código de programa con la etiqueta de autenticación para generar un puntero de código etiquetado.
Las instrucciones configuradas para provocar que el ordenador modifique el puntero de código en el código de programa con la etiqueta de autenticación para generar el puntero de código etiquetado comprenden además instrucciones configuradas para provocar que el ordenador genere el puntero de código etiquetado aplicando una máscara a la etiqueta de autenticación y al puntero de código. Las instrucciones configuradas para provocar que el ordenador genere el puntero de código etiquetado aplicando la máscara a la etiqueta de autenticación y al puntero de código comprenden además instrucciones configuradas para provocar que el ordenador seleccione un primer conjunto de bits de la etiqueta de autenticación usando la máscara, y sustituya un segundo conjunto de bits del puntero de código correspondiente al primer conjunto de bits por el primer conjunto de bits para generar el puntero de código etiquetado. Instrucciones configuradas para provocar que el ordenador identifique una pluralidad de punteros de código en el código de programa e identifique los bits de etiqueta comunes a la pluralidad de punteros de código en el código de programa para determinar la máscara. Instrucciones configuradas para provocar que el ordenador autentique el puntero de código etiquetado, realice la gestión de errores en respuesta a que la etiqueta de autenticación se ha alterado y ejecute una instrucción de programa en una dirección asociada con el puntero de código en respuesta a que la etiqueta de autenticación no se ha alterado. Las instrucciones configuradas para provocar que el ordenador autentique el puntero de código etiquetado comprenden además instrucciones configuradas para provocar que el ordenador determine un valor del puntero de código recuperado a partir del puntero de código etiquetado usando la máscara. Instrucciones configuradas para provocar que el ordenador extraiga un valor de la etiqueta de autenticación incrustada del puntero de código etiquetado usando la máscara. La invención se define en las reivindicaciones adjuntas.
Breve descripción de los dibujos
La FIG. 1 es un diagrama de bloques funcional de un sistema informático de ejemplo en el que se pueden implementar las técnicas de autenticación de punteros de código analizadas en el presente documento.
La FIG. 2 es un diagrama de flujo de un proceso de ejemplo para la autenticación de punteros de código.
La FIG. 3 es un diagrama de flujo de un proceso de ejemplo para autenticar un puntero de código que se ha protegido de acuerdo con el proceso de autenticación de punteros de código ilustrado en la FIG. 2.
La FIG. 4 es un diagrama de flujo de un proceso de ejemplo para generar una etiqueta de autenticación.
La FIG. 5 es un diagrama de flujo de un proceso de ejemplo para modificar un puntero de código con una etiqueta de autenticación para generar un puntero de código etiquetado.
La FIG. 6 es un diagrama de flujo de un proceso de ejemplo para autenticar un puntero de código que se ha protegido de acuerdo con el proceso de autenticación de punteros de código ilustrado en la FIG. 2.
La FIG. 7 es un diagrama de flujo de un proceso de ejemplo para generar una máscara.
La FIG. 8 es un diagrama que ilustra un ejemplo del proceso para etiquetar un puntero de código ilustrado en la FIG. 4.
La FIG. 9 es un diagrama que ilustra un ejemplo del proceso para autenticar un puntero de código etiquetado ilustrado en la FIG. 5.
Descripción detallada
Se proporcionan técnicas para implementar la autenticación de punteros de código en hardware para evitar que código malicioso o mal escrito modifique los punteros de código en el código de software a ejecutar por un procesador de un sistema informático. Las técnicas divulgadas en el presente documento se pueden usar para etiquetar punteros de código en código de software. Las etiquetas se pueden usar para autenticar un puntero de código como un puntero válido a código ejecutable antes de que el procesador ejecute una instrucción de salto o bifurcación a una dirección asociada con el puntero de código. Si la autenticación de un puntero de código etiquetado falla, el procesador se puede configurar para realizar un procedimiento de gestión de errores que se puede usar para detener la ejecución del código de programa, evitando de este modo la ejecución de cualquier código malicioso al que pueda apuntar un puntero de código que se ha modificado o corrompido.
Los punteros de código se pueden etiquetar de forma que sea difícil para un atacante falsificar una etiqueta válida. Se pueden crear etiquetas de autenticación que representen los únicos lugares en el código que se pueden alcanzar a través de un salto o bifurcación indirecto en el flujo lógico del código de software. En algunas implementaciones, las etiquetas pueden ser etiquetas de autenticación criptográfica que se encriptan usando una clave secreta conocida solo por el procesador, lo que dificulta las alteraciones de la etiqueta.
Las técnicas divulgadas en el presente documento pueden ayudar a evitar que los punteros de código que se han sobrescrito a través de un fallo de corrupción de memoria se usen inadvertidamente como un objetivo de un salto o llamada indirecto.
Hardware de ejemplo
La FIG. 1 es un diagrama de bloques de un sistema informático 100 que se puede usar para implementar las diversas técnicas divulgadas en el presente documento. El sistema informático 100 se puede usar para implementar, al menos en parte, el proceso ilustrado en las FIGS. 2-9.
El sistema informático 100 comprende un procesador de propósito general 110, una interfaz inalámbrica 125, una interfaz de red 165 y una memoria no transitoria 160 conectados entre sí por un bus 115. La interfaz inalámbrica 125 puede incluir un receptor, un transmisor, un transceptor y/u otros elementos inalámbricos que permiten al sistema informático 100 enviar y/o recibir datos usando los protocolos de comunicaciones inalámbricas asociados con uno o más sistemas de red inalámbrica de área amplia (WWAN), redes inalámbricas de área local (WLAN) y/u otros tipos de protocolos de comunicación inalámbrica que se pueden usar para enviar y/o recibir datos. La interfaz inalámbrica 125 se conecta por una línea 132 a una antena 134 para enviar y recibir comunicaciones a/desde otros dispositivos inalámbricos configurados para comunicarse usando protocolos de comunicación inalámbrica. El sistema informático 100 puede incluir uno o más transceptores configurados para recibir y/o enviar comunicaciones usando otros protocolos inalámbricos además de o en lugar de los transceptores ilustrados en la FIG. 1.
La interfaz de red 165 se puede configurar para conectar el sistema informático 100 a una o más conexiones de red cableadas. La interfaz de red 165 se puede configurar para permitir que el sistema informático 100 transmita y reciba datos por medio de una o más conexiones de datos cableadas.
El procesador 110 puede ser un dispositivo inteligente, por ejemplo, una unidad central de procesamiento (CPU) de ordenador personal tal como las fabricadas por Intel® Corporation o AMD®, un microcontrolador, un circuito integrado específico de la aplicación (ASIC), etc. La memoria 160 es un dispositivo de almacenamiento no transitorio que puede incluir memoria de acceso aleatorio (RAM), memoria de solo lectura (ROM) o una combinación de la mismas. La memoria 160 puede almacenar código de software ejecutable por procesador y legible por procesador que contiene instrucciones para controlar el procesador 110 para realizar las funciones descritas en el presente documento (aunque la descripción puede indicar que el software realiza la(s) función(es)). El software se puede cargar en la memoria 160 descargándolo por medio de una conexión de red, cargándolo desde un disco, etc. Además, el software puede no ser directamente ejecutable, por ejemplo, requiriendo su compilación antes de la ejecución.
El software en la memoria 160 se configura para permitir que el procesador 110 realice diversas acciones, incluyendo implementar las diversas técnicas para proteger las técnicas de autenticación de punteros de código que se analizan en el presente documento.
El procesador 110 puede incluir uno o más registros que se pueden usar para almacenar datos de configuración para las técnicas de autenticación de punteros de código divulgadas en el presente documento. Por ejemplo, el procesador 110 incluye un registro de máscara 110-A, un registro de valor 110-B, un registro de indicadores 110-C y un registro de contexto 110-C. El registro de máscara 110-A se puede usar para almacenar bits de máscara para la máscara actual que se usa para etiquetar punteros de código y para autenticar un puntero de código etiquetado. Un ejemplo de dichos datos de máscara (máscara 810) se ilustra en las FIGS. 8 y 9, un proceso de ejemplo para generar dicha máscara se ilustra en la FIG. 7. El registro de valor 110-B se puede usar para almacenar un valor para el valor actual usado cuando se elimina la etiqueta de un puntero de código etiquetado para autenticar ese puntero y recuperar el valor original del puntero de código. Un ejemplo de dichos datos de valor (valor 805) se ilustra en las FIGS. 8 y 9, un proceso de ejemplo para generar los datos de valor se ilustra en la FIG. 7. El registro de indicadores 110-C se puede configurar para contener indicadores que se pueden usar para habilitar y/o deshabilitar la autenticación de punteros de código y/o las técnicas de protección de punteros de pila divulgadas en el presente documento. El registro de contexto 110-C se puede usar para contener el valor del contexto actual asociado con el código de programa que está ejecutado el procesador 110 y que se usa para generar las etiquetas de autenticación asociadas con los punteros de código para el código de programa. Un ejemplo de dichos datos de contexto (valor de contexto 825) se ilustra en las FIGS. 8 y 9. Otros procesos, tales como los ilustrados en las FIGS. 2-6 pueden acceder a y/o modificar los valores almacenados en los registros 110-A, 110-B, 110-C y 110-D. El número de registros incluidos en otras implementaciones puede variar.
El procesador 110 puede proporcionar medios para analizar el código de programa del programa de software para identificar un puntero de código en el código de programa, medios para generar una etiqueta de autenticación basada en el puntero de código; y medios para modificar el puntero de código en el código de programa con la etiqueta de autenticación para generar un puntero de código etiquetado. El procesador 110 también puede proporcionar medios para generar el puntero de código etiquetado aplicando una máscara a la etiqueta de autenticación y al puntero de código. El procesador 110 también puede proporcionar medios para generar el puntero de código etiquetado aplicando la máscara a la etiqueta de autenticación y al puntero de código proporcionando medios para seleccionar un primer conjunto de bits de la etiqueta de autenticación usando la máscara y medios para sustituir un segundo conjunto de bits del puntero de código correspondiente al primer conjunto de bits por el primer conjunto de bits para generar el puntero de código etiquetado. El procesador 110 también puede proporcionar medios para identificar una pluralidad de punteros de código en el código de programa y medios para identificar los bits de etiqueta comunes a la pluralidad de punteros de código en el código de programa para determinar la máscara. El procesador 110 también puede proporcionar medios para autenticar el puntero de código etiquetado, medios para realizar la gestión de errores en respuesta a que la etiqueta de autenticación se ha alterado y medios para ejecutar una instrucción de programa en una dirección asociada con el puntero de código en respuesta a que la etiqueta de autenticación no se ha alterado. El procesador 110 también puede proporcionar medios para determinar un valor del puntero de código recuperado a partir del puntero de código etiquetado usando la máscara.
Implementaciones de ejemplo
La FIG. 2 es un diagrama de flujo de un proceso para aplicar el control de flujo de un programa de software en un procesador que se puede usar para implementar las técnicas de autenticación de punteros de código divulgadas en el presente documento. El proceso ilustrado en la FIG. 2 se puede implementar usando el sistema informático 100 ilustrado en la FIG. 1. El sistema informático de ejemplo 100 ilustrado en la FIG. 1 proporciona un ejemplo de un sistema informático en el que se puede implementar el proceso ilustrado en la FIG. 2, y el proceso ilustrado en la FIG.
2 se puede implementar por procesadores de un sistema informático que tiene una arquitectura diferente a la del ejemplo ilustrado en la FIG. 1.
El código de programa de un programa de software se puede analizar para identificar un puntero de código en el código de programa (etapa 205). El código del programa que se va a analizar puede ser código fuente o puede ser código binario. El puntero de código puede representar una dirección a una instrucción del código de programa que se puede alcanzar desde un punto de salto o punto de bifurcación del flujo de ejecución del código de programa. Una parte maliciosa puede intentar obtener el control del flujo del código de programa modificando el puntero del código con una dirección asociada por una instrucción diferente a aquella con la que se asociaba originalmente el puntero de código. El proceso ilustrado en la FIG. 1 comienza con la identificación de un puntero de código en el código del programa como una técnica para mitigar los exploits de corrupción de memoria, tal como las que se analizan anteriormente.
El proceso de ejemplo ilustrado en la FIG. 1 incluye identificar un puntero de código en el código de programa para el que se va a aplicar el control de flujo. Mientras que el ejemplo ilustrado en la FIG. 1 analiza la identificación de un puntero de código, el proceso ilustrado en la FIG. 1 se puede adaptar para identificar más de un puntero de código incluido en el código de programa. El procesador 110 se puede configurar para identificar el puntero de código o los punteros de código en el código del programa antes de que el procesador 110 ejecute el código de programa. Por ejemplo, el procesador 110 se puede configurar para identificar los punteros de código en el código de programa en el momento en que el procesador 110 carga el código de programa y cuando se realiza el enlace dinámico o estático.
Se puede generar una etiqueta de autenticación para el puntero de código (etapa 210). La etiqueta de autenticación se puede generar usando un proceso que dificultará que una parte maliciosa modifique un puntero de código para que apunte a una dirección diferente sin detectarse. En algunas implementaciones, al menos una parte del puntero de código se puede encriptar usando una clave secreta que mantiene el procesador 110, y la etiqueta de autenticación para el puntero de código se puede generar usando la parte encriptada del puntero de código. Los procesos de ejemplo para generar una etiqueta de autenticación para un puntero de código se ilustran en las FIGS. 5 y 7.
El puntero de código en el código de programa se puede modificar con la etiqueta de autenticación para generar un puntero de código etiquetado (etapa 215). El puntero de código se puede sustituir total o parcialmente por la etiqueta de autenticación generada en la etapa 210. Dependiendo de la configuración del sistema informático 100, puede no ser posible adjuntar datos adicionales a punteros de código sin realizar cambios significativos en la arquitectura del sistema informático 100. En consecuencia, las técnicas divulgadas en el presente documento modifican el puntero de código con la etiqueta de autenticación y verifican que el puntero de código etiquetado no se ha modificado antes de ejecutar una instrucción en una dirección asociada con el puntero de código etiquetado. Este enfoque no requiere cambios significativos en la arquitectura del sistema informático 100, porque el puntero de código etiquetado encaja dentro del espacio de memoria asignado al puntero de código sin etiquetar. Además, modificar el puntero de código por sí mismo puede dificultar que el código malicioso redirija el flujo de programa a una dirección válida. El código malicioso necesitaría poder generar una etiqueta de autenticación válida para la dirección objetivo deseada y modificar un puntero de código para generar un puntero de código etiquetado válido a esa dirección para redirigir el flujo de ejecución del programa a esa dirección.
La FIG. 3 es un diagrama de flujo de un proceso de ejemplo para autenticar un puntero de código que se ha protegido. El proceso ilustrado en la FIG. 3 se puede usar para autenticar un puntero de código que se ha modificado usando el proceso ilustrado en la FIG. 2. Además, el proceso ilustrado en la FIG. 2 se puede modificar para incluir las etapas del proceso ilustrado en la FIG. 3. El proceso ilustrado en la FIG. 3 se puede implementar usando el sistema informático 100 ilustrado en la FIG. 1. El sistema informático de ejemplo 100 ilustrado en la FIG. 1 proporciona un ejemplo de un sistema informático en el que se puede implementar el proceso ilustrado en la FIG. 3, y el proceso ilustrado en la FIG.
3 se puede implementar por procesadores de un sistema informático que tiene una arquitectura diferente a la del ejemplo ilustrado en la FIG. 1.
Un puntero de código etiquetado se puede autenticar (etapa 310). En algún punto durante la ejecución del código de programa que incluye punteros de código etiquetados, el procesador puede encontrar un puntero de código etiquetado y autenticar el puntero de código etiquetado para determinar si el puntero de código etiquetado se ha alterado. Por ejemplo, el puntero de código etiquetado se puede haber alterado por código malicioso o mal escrito. Por ejemplo, el puntero de código etiquetado se puede haber modificado por una actividad maliciosa que explota una corrupción de memoria o un fallo de desbordamiento de memoria que permite a un atacante modificar el valor de la dirección de memoria asociada con un puntero de código. En algunas implementaciones, el procesador 110 se puede configurar para determinar que un puntero de código etiquetado se ha alterado regenerando la etiqueta de autenticación asociada con el puntero de código y comparando la etiqueta de autenticación regenerada con la etiqueta de autenticación extraída del puntero de código etiquetado para determinar si las dos etiquetas coinciden. Si las etiquetas coinciden, el puntero de código etiquetado no se ha alterado y, si las etiquetas no coinciden, el puntero de código etiquetado se ha alterado. Un proceso de ejemplo para autenticar un puntero de código etiquetado se ilustra en la FIG. 6. El proceso ilustrado en la FIG. 6 se puede usar para autenticar un puntero de código que se ha protegido usando la técnica de modificación ilustrada en la FIG. 3.
Volviendo ahora a la FIG. 3, la gestión de errores se puede realizar en respuesta a la alteración de la etiqueta de autenticación (etapa 315). El procesador 110 se puede configurar para realizar diversos tipos de procedimientos de gestión de errores que se pueden usar para detener la ejecución del código de programa en el que se ha alterado el puntero de código etiquetado. Por ejemplo, el procesador 110 se puede configurar para establecer un indicador que indique que se ha alterado el puntero de código etiquetado. El procesador 110 se puede configurar para ejecutar instrucciones en el código de programa que reconocen que el indicador se ha establecido y están configuradas para responder a la condición de error. Por ejemplo, el código de programa puede incluir instrucciones que terminan la ejecución del código de programa de una forma controlada y limpian cualquier dato asociado con el código de programa que se está ejecutando en la memoria. El código de programa también puede incluir instrucciones que advierten a un usuario del dispositivo informático en el que se está ejecutando el código de programa que se ha producido un error y que el código de programa se está cerrando. También se pueden incluir otras instrucciones en el código del programa que provocan que el procesador 110 escriba información en un registro proporcionando información sobre el error que se produjo. El código de programa también puede incluir instrucciones que pueden provocar que el procesador 110 envíe el registro a un servidor remoto, tal como un servidor del proveedor de contenidos asociado con un proveedor de contenidos que creó o distribuyó el código de programa. El procesador 110 también se puede configurar para realizar la gestión de errores analizada anteriormente en respuesta a que se establece el indicador de error, en lugar de que el encaminamiento de la gestión de errores se incluya en el código de programa que ejecuta el procesador 110. El procesador 110 también se puede configurar para no recuperar el puntero de código original a partir del puntero de código etiquetado en respuesta a determinar que el puntero de código etiquetado se ha modificado o alterado. Como resultado, el puntero de código etiquetado no hace referencia a una dirección válida y se puede generar una excepción. El procesador 110 se puede configurar para gestionar dicha excepción de forma similar a cualquier referencia a una dirección no válida en el código de programa que está ejecutando el procesador 110. Por ejemplo, el procesador 110 se puede configurar para realizar rutinas de gestión de errores estándar en respuesta a identificar una dirección no válida, tal como detener fácilmente la ejecución del código de programa, escribir la información de errores en un registro, enviar la información del registro a un creador o proveedor de contenidos, notificar a un usuario del dispositivo informático en el que se está ejecutando el código de programa que el código de programa se debe cerrar debido a un error y/u otras etapas. Estos enfoques para el procesamiento de errores pueden evitar que el flujo del código de programa se redirija por código malicioso o código mal escrito.
Una instrucción de programa en una dirección asociada con el puntero de código que responde a una etiqueta de autenticación que no se ha alterado se puede ejecutar (etapa 320). El procesador 110 se puede configurar para ejecutar una instrucción de programa en la dirección asociada con el puntero de código etiquetado en respuesta a la autenticación del puntero de código etiquetado. Si el puntero de código etiquetado se autenticó con éxito, entonces no es probable que el puntero de código se haya alterado por código malicioso o un exploit de memoria, y el flujo de ejecución del programa puede continuar con la instrucción localizada en la dirección de memoria asociada con el puntero de código.
La FIG. 4 es un diagrama de flujo de un proceso de ejemplo para generar una etiqueta de autenticación. El proceso ilustrado en la FIG. 4 se puede usar para implementar la etapa 210 del proceso ilustrado en la FIG. 2. El proceso ilustrado en la FIG. 4 se puede implementar usando el sistema informático 100 ilustrado en la FIG. 1. El sistema informático de ejemplo 100 ilustrado en la FIG. 1 proporciona un ejemplo de un sistema informático en el que se puede implementar el proceso ilustrado en la FIG. 4, y el proceso ilustrado en la FIG. 4 se puede implementar por procesadores de un sistema informático que tiene una arquitectura diferente a la del ejemplo ilustrado en la FIG. 1. El proceso ilustrado en la FIG. 4 se analizará con referencia al diagrama de la FIG. 8, que proporciona un ejemplo del proceso para generar una etiqueta de autenticación para un puntero de código y para modificar el puntero de código para generar un puntero de código etiquetado.
Se puede acceder a una clave secreta asociada con el procesador 110 (etapa 405). La clave secreta se puede usar para generar la etiqueta de autenticación que se puede usar para modificar un puntero de código. La clave se debe mantener en secreto y almacenarse en una localización de memoria sustancialmente inaccesible a la que el procesador 110 pueda acceder, pero a la que no puedan acceder los procesos que esté ejecutando el procesador 110 para mantener las claves seguras frente a aquellos que deseen ejecutar código malicioso en el sistema informático 100. En algunas implementaciones, puede haber más de una clave asociada con el procesador 110 del sistema informático 100. Por ejemplo, muchos procesadores ARM y procesadores HEXAGON tienen múltiples niveles de ejecución (privilegios) asociados con ellos, tales como: modos de ejecución de supervisor, núcleo (kernel) y usuario. Cada uno de estos niveles de privilegios puede contener uno o más entornos de ejecución. Por ejemplo, cada proceso de modo de usuario funciona dentro de un entorno de ejecución en el nivel de privilegios de "usuario", y estos procesos se administran por el núcleo del sistema operativo (OS). En algunas implementaciones, un OS invitado se puede implementar en el sistema informático 100. Un OS invitado se puede hacer funcionar dentro de un entorno de ejecución en el nivel de privilegios de núcleo y administrarse por un hipervisor o un supervisor de máquina virtual (VMM). En entornos que tienen múltiples niveles de privilegios, se puede definir un conjunto de parámetros de protección para cada nivel de privilegios asociado con el procesador 110 del sistema informático 100. Estos parámetros de protección pueden incluir claves usadas para etiquetar punteros de código y para verificar punteros de código etiquetados, una máscara y un valor usados para etiquetar los punteros de código, indicadores de procesador para habilitar y/o deshabilitar la verificación de punteros de código y/u otras características de seguridad tales como la protección de pila basada en hardware. Los parámetros asociados con un contexto de ejecución se ocultan de otros contextos de ejecución que funcionan en el mismo nivel de privilegios o en un nivel inferior. El procesador 110 se puede configurar para incluir registros para almacenar los parámetros de protección asociados con cada nivel de privilegios. El procesador 110 también se puede configurar para exponer instrucciones para leer y establecer parámetros de protección, de modo que el código que se ejecuta en un nivel de privilegios particular pueda leer y establecer los registros de configuración para el siguiente nivel de privilegios inferior. En algunas implementaciones, el procesador 110 se configura de modo que se permite al supervisor o hipervisor administrar las claves asociadas con su nivel de privilegios actual así como las asociadas con el siguiente nivel de privilegios inferior (si lo hubiera). El procesador 110 se puede configurar de modo que los niveles de privilegios superiores sean responsables de generar y/o cambiar las claves al crear y/o cambiar el contexto de procesamiento del siguiente nivel de privilegios inferior. En la etapa 405, la clave asociada con el nivel de privilegios apropiado se asocia con el entorno de ejecución. Si no se admiten múltiples entornos de ejecución y/o niveles de privilegios o si no se proporciona una seguridad diferente para cada nivel de privilegios, se puede acceder a una clave asociada con el procesador desde un registro del procesador 110.
Se puede acceder a la información de contexto asociada con el código de programa (etapa 410). La información de contexto se puede asociar con un entorno de ejecución particular y puede comprender un valor único y secreto que se asocia con el entorno de ejecución particular. En algunas implementaciones, es posible que no se use la información de contexto. Sin embargo, la información de contexto proporciona un nivel adicional de seguridad. Por ejemplo, si un atacante pudiera leer los punteros de código etiquetados de la memoria explotando una vulnerabilidad de fuga de información del código de programa, el atacante todavía podría controlar potencialmente el flujo del código de programa para llamar a cualquiera de los puntos de entrada autenticados asociados con los punteros de código etiquetados. El atacante estaría restringido a usar las direcciones que se incluyeron en los punteros de código etiquetados en el exploit, pero los punteros de código etiquetados se podrían sustituir mutuamente para alterar el flujo del programa. Pero la adición del contexto limita aún más la capacidad de un atacante agrupando los punteros de código por contexto. El contexto se introduce como un argumento adicional a la función de autenticación, y solo los punteros que tienen el mismo contexto se pueden sustituir mutuamente. En consecuencia, las técnicas divulgadas en el presente documento que incluyen el contexto se pueden usar para aplicar la integridad del flujo de control (CFI) del código de programa siempre que los punteros del código se etiqueten con un contexto apropiado en el momento de carga.
El procesador 110 se puede configurar de modo que los entornos de ejecución que funcionan en el mismo nivel de ejecución no puedan acceder a la información de contexto asociada con los otros entornos de ejecución que funcionan en el mismo nivel o en un nivel superior. El procesador 110 se puede configurar de modo que un entorno de ejecución que funciona en un nivel de privilegios superior pueda acceder, modificar y/o generar la información de contexto asociada con los entornos de ejecución que funcionan en un nivel de privilegios inferior. En algunas implementaciones, el procesador 110 se puede configurar de modo que un entorno de ejecución que funciona en un nivel de privilegios superior pueda acceder, modificar y/o generar la información de contexto asociada con los entornos de ejecución que funcionan solo en un nivel por debajo del nivel de privilegios actual.
Se puede aplicar un algoritmo criptográfico al puntero de código para generar la etiqueta de autenticación (etapa 415). El algoritmo criptográfico puede ser un código de autenticación de mensajes (MAC). La implementación de ejemplo ilustrada en la FIG. 8 usa un algoritmo de MAC 830 para generar la etiqueta de autenticación 835. Las entradas al algoritmo de MAC 830 son la clave 820 obtenida en la etapa 405, la información de contexto 825 obtenida en la etapa 410 y el puntero de código 815 que se va a etiquetar. La información de contexto 825 y el puntero de código 815 se pueden encriptar usando el algoritmo de MAC 830 y la clave 820. La información de contexto 815 puede comprender un valor único que se puede usar al generar la etiqueta de autenticación para proporcionar una capa adicional de seguridad. Una parte maliciosa que intente realizar modificaciones no autorizadas en un puntero de código en un intento de tomar el control del flujo de ejecución del código de programa no tendría conocimiento de la información de contexto asociada con el entorno de ejecución en el que se está ejecutando el código de programa y no podría replicar fácilmente la etiqueta de autenticación 835. Por ejemplo, si la parte maliciosa pudo explotar un fallo de memoria que permitió el acceso a un puntero de código etiquetado, el puntero de código etiquetado solo se podría sustituir por otros punteros de código etiquetados asociados con el mismo contexto.
La FIG. 5 es un diagrama de flujo de un proceso de ejemplo para modificar un puntero de código con una etiqueta de autenticación para generar un puntero de código etiquetado. El proceso ilustrado en la FIG. 5 se puede usar para implementar la etapa 215 del proceso ilustrado en la FIG. 2. El proceso ilustrado en la FIG. 5 se puede implementar usando el sistema informático 100 ilustrado en la FIG. 1. El sistema informático de ejemplo 100 ilustrado en la FIG. 1 proporciona un ejemplo de un sistema informático en el que se puede implementar el proceso ilustrado en la FIG. 5, y el proceso ilustrado en la FIG. 5 se puede implementar por procesadores de un sistema informático que tiene una arquitectura diferente a la del ejemplo ilustrado en la FIG. 1. El proceso ilustrado en la FIG. 5 se analizará con referencia al diagrama de la FIG. 8, que proporciona un ejemplo del proceso para generar una etiqueta de autenticación para un puntero de código y para modificar el puntero de código para generar un puntero de código etiquetado.
Los bits de la etiqueta de autenticación asociada con el puntero de código se pueden seleccionar usando una máscara (etapa 505). En el ejemplo ilustrado en la FIG. 8, la máscara 810 se puede aplicar al puntero de código 815 y la etiqueta de autenticación 835 para generar el puntero de código etiquetado 840. El proceso ilustrado en la FIG. 7 ilustra una técnica que se puede usar para generar la máscara 810. Además, como se analiza anteriormente, la máscara se puede asociar con un entorno de ejecución particular y/o con un nivel de privilegios particular implementado por el procesador 110. En el ejemplo ilustrado en la FIG. 8, la máscara se configura para seleccionar 19 bits: 16 bits superiores y los 3 bits menos significativos. La máscara se usa para seleccionar los bits correspondientes del puntero de código 815.
Los bits en el puntero de código se pueden sustituir por los bits seleccionados de la etiqueta de autenticación para generar el puntero de código etiquetado (etapa 510). En el ejemplo ilustrado en la FIG. 8, los bits en el puntero de código 815 correspondientes a los seleccionados de la etiqueta de autenticación se sustituyen por los bits de la etiqueta de autenticación para generar el puntero de código etiquetado 840. Por ejemplo, el valor del puntero de código etiquetado 840 se puede derivar usando la siguiente expresión:
(puntero & -máscara) | (etiqueta & máscara)
donde el valor de "puntero" representa el valor del puntero de código 815, el valor de "-máscara" representa el valor inverso de la máscara 810, el valor de "etiqueta" representa la etiqueta de autenticación 835 y el valor de "-máscara" representa el valor de la máscara 810.
El puntero de código etiquetado se puede almacenar en la localización de memoria asociada con el puntero de código (etapa 515). El puntero de código etiquetado 840 se puede escribir en la localización de memoria 160 o en la otra localización de memoria en la que se almacenaba originalmente el puntero de código 815. El procesador 110 se puede configurar para descodificar y autenticar el puntero de código etiquetado 840 antes de ejecutar una instrucción en una dirección asociada con el puntero de código etiquetado 840. Una parte maliciosa que intente modificar el puntero de código etiquetado 840 no podría generar un valor válido para el puntero de código sin conocer el algoritmo usado para generar la etiqueta de autenticación 835, el valor de la máscara 810 (también denominado en el presente documento máscara 810) usada para seleccionar qué bits del puntero de código 815 se deben sustituir por bits de la etiqueta de autenticación 835, y/o la información de contexto 825 y la clave 820 usadas para generar la etiqueta de autenticación 835.
De forma alternativa, el proceso ilustrado en la FIG. 5 para generar un puntero de código etiquetado se puede modificar de modo que los bits de la etiqueta de autenticación 835 se puedan seleccionar como se analiza anteriormente en la etapa 505, pero la etapa 510 se puede modificar de modo que los bits del puntero de código se seleccionen del puntero de código usando el valor inverso de la máscara 810. Los bits seleccionados de la etiqueta de autenticación 835 y los bits seleccionados del puntero de código 815 se pueden combinar entonces para crear el puntero de código etiquetado 840.
La FIG. 6 es un diagrama de flujo de un proceso de ejemplo para autenticar un puntero de código etiquetado que se ha protegido de acuerdo con el proceso de autenticación de punteros de código ilustrado en la FIG.4. El proceso ilustrado en la FIG. 6 se puede usar para implementar la etapa 310 del proceso ilustrado en la FIG.3. El proceso ilustrado en la FIG. 6 se puede implementar usando el sistema informático 100 ilustrado en la FIG.1. El sistema informático de ejemplo 100 ilustrado en la FIG. 1 proporciona un ejemplo de un sistema informático en el que se puede implementar el proceso ilustrado en la FIG. 6, y el proceso ilustrado en la FIG. 6 se puede implementar por procesadores de un sistema informático que tiene una arquitectura diferente a la del ejemplo ilustrado en la FIG. 1. El proceso ilustrado en la FIG. 6 se analizará con referencia al diagrama de las FIGS. 8 y 9, que proporciona un ejemplo del proceso para recuperar una etiqueta de autenticación de un puntero de código etiquetado y para determinar si el puntero de código etiquetado se ha alterado.
Un valor del puntero de código recuperado del puntero de código etiquetado se puede determinar usando la máscara (etapa 605). El puntero de código recuperado 905 se puede determinar a partir del puntero de código etiquetado 840 usando la máscara 810 que se usó en la etapa 505 del proceso ilustrado en la f Ig . 5 para generar la etiqueta de autenticación 835 que se usó para modificar el puntero de código y crear el puntero de código etiquetado 840. Como se analiza anteriormente, la máscara se puede asociar con el procesador 110, y el procesador 110 puede tener acceso a diferentes máscaras para diferentes entornos de ejecución y/o niveles de privilegios. El procesador 110 se puede configurar para seleccionar la máscara 810 apropiada para el entorno de ejecución y/o el nivel de privilegios asociado con el código de programa que se está ejecutando si el procesador 110 ha implementado múltiples entornos de ejecución y/o niveles de privilegios. La máscara se usa para seleccionar los bits del puntero de código etiquetado 840 que se sustituyeron por bits de la etiqueta de autenticación 835. Los bits seleccionados del puntero de código etiquetado 840 se sustituyen por el valor 805, que es el valor original de estos bits, para producir el puntero de código recuperado 905. Un proceso para determinar el valor 805 y para generar los bits de máscara se ilustra en la FIG. 7, y se analizará en detalle a continuación.
Como ejemplo, el valor del puntero de código recuperado 905 se puede derivar usando la siguiente expresión:
(valor & máscara) | (puntero de código etiquetado & -máscara)
donde el "valor" representa el conjunto común de bits representado por el valor 805, el valor de "máscara" representa el valor de la máscara 810, el valor de "puntero de código etiquetado" representa el puntero de código etiquetado 840 y el valor de "-máscara" representa el valor inverso de la máscara 810.
Una etiqueta de autenticación recuperada se puede generar en base, al menos en parte, al puntero de código recuperado, el valor de contexto y una clave (etapa 610). En el ejemplo ilustrado en la FIG. 9, la etiqueta de autenticación recuperada 915 se genera aplicando el algoritmo de MAC 830 al puntero de código recuperado 905. El algoritmo de MAC 830 recibe la clave 820, el puntero de código recuperado 905 y el valor de contexto 825 como entradas. El proceso para generar la etiqueta de autenticación recuperada 915 es similar al ilustrado en las FIGS. 4 y 8 donde se generó el puntero de código etiquetado 840. El puntero de código recuperado 905 además de la clave 820 y la información de contexto 825, que se usaron originalmente para generar el puntero de código etiquetado 840, se proporcionan como entradas a la lógica de MAC 830. La lógica de MAC 830 genera la etiqueta de autenticación recuperada 915.
El valor de una etiqueta de autenticación incrustada se puede extraer del puntero de código etiquetado usando la máscara (etapa 615). La etiqueta de autenticación incrustada 910 se puede extraer del puntero de código usando la máscara 810 que se usó para extraer el puntero de código recuperado 905 del puntero de código etiquetado 840.
Como ejemplo, el valor de la etiqueta de autenticación incrustada 910 se puede derivar usando la siguiente expresión:
puntero de código recuperado & máscara
donde el "puntero de código recuperado" representa el valor del puntero de código recuperado 905, y el valor de "máscara" representa el valor de la máscara 810.
Un valor de la etiqueta enmascarada se puede extraer de la etiqueta de autenticación recuperada 915 (etapa 620). Como se puede ver en el ejemplo de las FIGS. 8 y 9, el conjunto de bits seleccionado del puntero de código recuperado 905 para crear la etiqueta de autenticación incrustada 910 no incluye todos los bits incluidos originalmente en la etiqueta de autenticación 835. Sin embargo, la etiqueta de autenticación recuperada 915 se puede comparar con la etiqueta de autenticación incrustada 910 después de aplicar la máscara 810 a la etiqueta de autenticación recuperada 915. La máscara 810 se puede aplicar a la etiqueta de autenticación recuperada 915 para generar la etiqueta enmascarada 920. Este proceso es similar al proceso analizado anteriormente para determinar la etiqueta de autenticación incrustada 910 a partir del puntero de código etiquetado 840.
Como ejemplo, el valor de la etiqueta enmascarada 920 se puede derivar usando la siguiente expresión:
etiqueta recuperada & máscara
donde la "etiqueta recuperada" representa el valor del puntero de código recuperado 905, y el valor de "máscara" representa el valor de la máscara 810.
Comparación de la etiqueta de autenticación recuperada con la etiqueta de autenticación incrustada (etapa 625). La etapa 625 también se representa por el bloque 925 de la FIG. 9. La etiqueta enmascarada 920 se puede comparar entonces con la etiqueta de autenticación incrustada 910 para generar el resultado 930. Si la etiqueta enmascarada 920 coincide con la etiqueta de autenticación incrustada 910, entonces el puntero de código etiquetado 840 se ha autenticado con éxito, y el resultado 930 puede incluir una indicación de que la autenticación fue exitosa. No es probable que el valor del puntero de código etiquetado 840 se haya alterado ya que el puntero de código etiquetado 840 se generó y se colocó en memoria. Si la etiqueta enmascarada 920 no coincide con la etiqueta de autenticación incrustada 910, entonces el puntero de código etiquetado 840 no se ha autenticado con éxito, y el resultado 930 puede incluir una indicación de que la autenticación no fue exitosa. El valor del puntero de código etiquetado 840 se ha alterado o corrompido desde que el puntero de código etiquetado 840 se ha generado y almacenado en memoria. El procesador 110 se puede configurar para ejecutar procedimientos de gestión de errores en el caso de que la autenticación falle para evitar que código de programa malicioso asuma el control del flujo del código de programa que está ejecutando el procesador 110.
La FIG. 7 es un diagrama de flujo de un proceso de ejemplo para generar una máscara que se puede usar con las técnicas de autenticación de punteros de código analizadas en el presente documento. El proceso ilustrado en la FIG.
7 se puede implementar usando el sistema informático 100 ilustrado en la FIG. 1. El sistema informático de ejemplo 100 ilustrado en la FIG. 1 proporciona un ejemplo de un sistema informático en el que se puede implementar el proceso ilustrado en la FIG. 6, y el proceso ilustrado en la FIG. 7 se puede implementar por procesadores de un sistema informático que tiene una arquitectura diferente a la del ejemplo ilustrado en la FIG. 1. El proceso ilustrado en la FIG.
7 se puede realizar antes de ejecutar los procesos ilustrados en las FIGS. 2-6, 8 y 9. Por ejemplo, el proceso ilustrado en la FIG. 7 se puede ejecutar en el momento en que el procesador 110 está realizando un enlace estático o dinámico del código de programa. El procesador 110 también se puede configurar para realizar el proceso ilustrado en la FIG.
7 en otros momentos antes de realizar los procesos ilustrados en las FIGS. 2-6, 8 y 9.
Se puede comparar una pluralidad de punteros de código identificados en el código de programa (etapa 705). El procesador 110 se puede configurar para comparar una pluralidad de punteros de código en el código de programa para determinar un conjunto común de bits en las direcciones asociadas con los punteros de código. Los bits que son comunes para los punteros de código en un conjunto de código de programa se pueden sustituir por un valor de etiqueta de autenticación sin comprometer los punteros de código y sin requerir espacio de memoria adicional para almacenar las etiquetas de autenticación. Este enfoque puede ayudar a minimizar el número de cambios que puede ser necesario hacer en la arquitectura del procesador 110 para admitir las técnicas de autenticación de punteros de código divulgadas en el presente documento.
Se puede identificar un conjunto común de bits en las direcciones asociadas con los punteros de código (etapa 710). El conjunto común de bits se puede usar como la base para el valor 805 que se ilustra en los ejemplos ilustrados en las FIGs .8 y 9 y se usa en el proceso ilustrado en la FIG. 6 para autenticar un puntero de código etiquetado 840. En el ejemplo ilustrado en las FIGs . 8 y 9, los punteros de código tenían en común 16 bits superiores y 3 bits menos significativos. El procesador 110 se puede configurar para almacenar el valor 805 derivado del conjunto común de bits en las direcciones asociadas con el puntero de código en un registro u otra memoria accesible para el procesador 110 a la que se puede acceder posteriormente cuando el procesador 110 necesita autenticar un puntero de código asociado con el código de programa. El procesador 110 se puede configurar para colocar el valor 805 en un registro u otra localización de memoria que sea inaccesible desde el código de programa que se está ejecutando en otros contextos de ejecución y/o por el código de programa que se está ejecutando en el mismo nivel de privilegios y/o en un nivel de privilegios inferior.
El espacio de direcciones que está disponible para el código de programa puede ser limitado, y la cantidad de memoria que es direccionable por punteros de código es típicamente mucho mayor que la cantidad de memoria que es direccionable por los punteros de código. En algunos sistemas, tales como algunos sistemas de 64 bits, el intervalo de posibles direccionables que se pueden representar por un puntero de código está aún más restringido. El procesador 110 también se puede configurar de modo que los enlazadores estáticos y dinámicos se configuren para alinear segmentos de código de programa en la memoria de modo que el código se empaquete conjuntamente en tiempo de ejecución. Esto puede dar como resultado que los punteros de código tengan más bits en común, aumentando de este modo el número de bits que se pueden usar para almacenar la información de la etiqueta de autenticación en los punteros de código etiquetados.
Se puede generar una máscara en base a los bits comunes identificados en las direcciones asociadas con los punteros de código (etapa 715). Por ejemplo, la máscara 810 en los ejemplos ilustrados en las FIGS. 8 y 9 se generó en base al valor 805 derivado de comparar los punteros de código en el código del programa para identificar los bits comunes del puntero de código. La etapa de comparación no se ilustra en las FIGS. 8 y 9 y se habría realizado antes de los procesos de etiquetado y autenticación ilustrados en estas figuras. Los bits en la máscara 810 se pueden establecer en un valor binario de 1 si los bits correspondientes en cada uno de los punteros de código compartían el mismo valor y los bits en la máscara 810 se pueden establecer en un valor binario de 0 si todos los bits correspondientes en cada uno de los punteros de código no compartían el mismo valor. El procesador 110 se puede configurar para almacenar la máscara 810 en un registro u otra localización de memoria que sea inaccesible desde el código de programa que se está ejecutando en otros contextos de ejecución y/o por el código de programa que se está ejecutando en el mismo nivel de privilegios y/o en un nivel de privilegios inferior.
Las metodologías descritas en el presente documento se pueden implementar por diversos medios, dependiendo de la aplicación. Por ejemplo, estas metodologías se pueden implementar en hardware, firmware, software o en cualquier combinación de los mismos. Para una implementación en hardware, las unidades de procesamiento se pueden implementar en uno o más circuitos integrados específicos de la aplicación (ASIC), procesadores de señales digitales (DSP), dispositivos de procesamiento de señales digitales (DSPD), dispositivos lógicos programables (PLD), matrices de puertas programables por campo (FPGA), procesadores, controladores, microcontroladores, microprocesadores, dispositivos electrónicos, otras unidades electrónicas diseñadas para desempeñar las funciones descritas en el presente documento, o en una combinación de los mismos.
Para una implementación en firmware y/o software, las metodologías se pueden implementar con módulos (por ejemplo, procedimientos, funciones y así sucesivamente) que realizan las funciones descritas en el presente documento. Cualquier medio legible por máquina que incorpore instrucciones de forma tangible se puede usar para implementar las metodologías descritas en el presente documento. Por ejemplo, se pueden almacenar códigos de software en una memoria y ejecutarse por una unidad de procesador. La memoria se puede implementar dentro de la unidad de procesador o ser externa a la unidad de procesador. Como se usa en el presente documento, el término "memoria" se refiere a cualquier tipo de memoria a largo plazo, a corto plazo, volátil, no volátil u otra memoria, y no se debe limitar a ningún tipo de memoria o número de memorias particulares, ni al tipo de medio. Los medios tangibles incluyen uno o más artículos físicos de medios legibles por máquina, tales como memoria de acceso aleatorio, almacenamiento magnético, medios de almacenamiento óptico, y así sucesivamente.
Si se implementa en firmware y/o en software, las funciones se pueden almacenar como una o más instrucciones o código en un medio legible por ordenador. Los ejemplos incluyen medios legibles por ordenador codificados con una estructura de datos y medios legibles por ordenador codificados con un programa informático. Los medios legibles por ordenador incluyen medios de almacenamiento informático físicos. Un medio de almacenamiento puede ser cualquier medio disponible al que se pueda acceder por un ordenador. A modo de ejemplo, y no de limitación, dichos medios legibles por ordenador pueden comprender RAM, ROM, EEPROM, CD-ROM u otro almacenamiento en disco óptico, almacenamiento en disco magnético u otros dispositivos de almacenamiento magnético, o cualquier otro medio que se pueda usar para almacenar código de programa deseado en forma de instrucciones o estructuras de datos y al que se pueda acceder por un ordenador; el término disco, como se usa en el presente documento, incluye disco compacto (CD), disco láser, disco óptico, disco versátil digital (DVD), disco flexible y disco Blu-ray, donde unos discos reproducen normalmente los datos magnéticamente, mientras que otros discos reproducen datos ópticamente con láseres. Las combinaciones de lo anterior también se deben incluir dentro del alcance de los medios legibles por ordenador. Dichos medios también proporcionan ejemplos de medios no transitorios, que pueden ser legibles por máquina, y en los que los ordenadores son un ejemplo de una máquina que puede leer dichos medios no transitorios.
Los principios genéricos analizados en el presente documento se pueden aplicar a otras implementaciones sin apartarse del alcance de la divulgación o las reivindicaciones.

Claims (24)

REIVINDICACIONES
1. Un procedimiento para aplicar el control de flujo de un programa de software en un procesador o procesadores de un sistema informático, comprendiendo el procedimiento:
analizar (205) el código de programa del programa de software para identificar un puntero de código en el código de programa;
generar (210) una etiqueta de autenticación,
en el que generar (210) la etiqueta de autenticación comprende aplicar (415) un algoritmo criptográfico al puntero de código, en el que las entradas al algoritmo criptográfico incluyen el puntero de código, una clave secreta asociada con un procesador que ejecuta el programa de software, e información de contexto asociada con un entorno de ejecución asociado con el código del programa; y
modificar (215) el puntero de código en el código del programa con la etiqueta de autenticación para generar un puntero de código etiquetado,
en el que el puntero de código etiquetado se genera aplicando una máscara a la etiqueta de autenticación y al puntero de código.
2. El procedimiento de la reivindicación 1, en el que el algoritmo criptográfico es un código de autenticación de mensajes (MAC).
3. El procedimiento de la reivindicación 1 o la reivindicación 2, en el que generar el puntero de código etiquetado aplicando la máscara a la etiqueta de autenticación y al puntero de código comprende además:
seleccionar (505) un primer conjunto de bits de la etiqueta de autenticación usando la máscara; y
sustituir un segundo conjunto de bits del puntero de código correspondiente al primer conjunto de bits por el primer conjunto de bits para generar el puntero de código etiquetado.
4. El procedimiento de una cualquiera de las reivindicaciones precedentes, que comprende además:
autenticar (310), opcionalmente cuando el procesador encuentra un puntero de código etiquetado, el puntero de código etiquetado en algún punto durante la ejecución del código de programa, opcionalmente para determinar si el puntero de código etiquetado se ha alterado;
realizar (315) la gestión de errores en respuesta a la alteración de la etiqueta de autenticación; y
ejecutar (320) una instrucción de programa en la dirección asociada con el puntero de código en respuesta a que la etiqueta de autenticación no se ha alterado.
5. El procedimiento de la reivindicación 4, en el que el autenticar el puntero de código etiquetado comprende:
determinar (605) un valor del puntero de código recuperado del puntero de código etiquetado usando una máscara; y
extraer (615) un valor de la etiqueta de autenticación incrustada del puntero de código etiquetado usando la máscara.
6. El procedimiento de cualquier reivindicación precedente,
en el que la información de contexto asociada con el entorno de ejecución comprende un valor secreto, opcionalmente único, asociado con el entorno de contexto; y/o
en el que el entorno de contexto es uno de una pluralidad de entornos de ejecución contenidos por un nivel de privilegios dado.
7. El procedimiento de cualquier reivindicación precedente, en el que el procesador o uno de los procesadores del sistema informático proporciona al menos medios para generar la etiqueta de autenticación y modificar el puntero de código son realizados por el procesador o uno de los procesadores del sistema informático.
8. El procedimiento de cualquier reivindicación precedente, que comprende además:
identificar una pluralidad de punteros en el código del programa;
identificar (710) bits de etiqueta comunes a la pluralidad de punteros de código en el código de programa; y generar (715) la máscara en base a los bits comunes.
9. El procedimiento de una cualquiera de las reivindicaciones precedentes, en el que la información de contexto y el puntero de código se encriptan usando el algoritmo de MAC y la clave secreta.
10. El procedimiento de una cualquiera de las reivindicaciones precedentes, en el que el puntero de código en el código de programa se identifica antes de que el procesador ejecute el código de programa.
11. El procedimiento de cualquiera de las reivindicaciones precedentes, en el que el puntero de código en el código de programa se identifica en el momento en que el código de programa es cargado (por el procesador) y cuando se realiza el enlace dinámico o estático.
12. El procedimiento de cualquiera de las reivindicaciones precedentes, en el que el código de programa comprende código binario.
13. Un sistema para aplicar el control de flujo de un programa de software, que comprende:
medios para analizar el código de programa del programa de software para identificar un puntero de código en el código de programa;
medios para generar una etiqueta de autenticación,
en el que los medios para generar la etiqueta de autenticación comprenden medios para aplicar un algoritmo criptográfico al puntero de código,
en el que las entradas al algoritmo criptográfico incluyen el puntero de código, una clave secreta asociada con un procesador que ejecuta el programa de software, e información de contexto asociada con un entorno de ejecución asociado con el código del programa; y
medios para modificar el puntero de código en el código del programa con la etiqueta de autenticación para generar un puntero de código etiquetado, comprendiendo los medios para modificar el puntero de código en el código de programa con la etiqueta de autenticación para generar el puntero de código etiquetado medios para generar el puntero de código etiquetado aplicando una máscara a la etiqueta de autenticación y al puntero de código.
14. El sistema de la reivindicación 13, en el que el algoritmo criptográfico es un código de autenticación de mensajes (MAC).
15. El sistema de una cualquiera de la reivindicación 13 o la reivindicación 14, en el que el medio para generar el puntero de código de etiqueta aplicando la máscara a la etiqueta y el puntero de código comprende además:
medios para seleccionar un primer conjunto de bits de la etiqueta de autenticación usando la máscara; y medios para sustituir un segundo conjunto de bits del puntero de código correspondiente al primer conjunto de bits por el primer conjunto de bits para generar el puntero de código etiquetado
16. El sistema de una cualquiera de las reivindicaciones 13 a 15, que comprende además:
medios para autenticar el puntero de código etiquetado, opcionalmente cuando el puntero de código etiquetado se encuentra en algún punto durante la ejecución del código de programa, opcionalmente para determinar si el puntero de código etiquetado se ha alterado;
medios para realizar la gestión de errores en respuesta a la alteración de la etiqueta de autenticación; y medios para ejecutar una instrucción de programa en la dirección asociada con el puntero de código en respuesta a que la etiqueta de autenticación no se ha alterado.
17. El sistema de la reivindicación 16, en el que los medios para autenticar el código etiquetado comprenden:
medios para determinar un valor de puntero de código recuperado a partir del puntero de código etiquetado usando una máscara; y
medios para extraer un valor de etiqueta de autenticación incrustada a partir del puntero de código etiquetado usando la máscara.
18. El sistema de cualquiera de las reivindicaciones 13 a 17,
en el que la información de contexto asociada con el entorno de ejecución comprende un valor secreto opcionalmente único, asociado con el entorno de contexto; y/o
en el que el entorno de contexto es uno de una pluralidad de entornos de ejecución contenidos por un nivel de privilegios dado.
19. El sistema de cualquiera de las reivindicaciones 13 a 18, en el que al menos los medios para generar la etiqueta de autenticación y los medios para modificar el puntero de código comprenden un procesador.
20. El sistema de cualquiera de las reivindicaciones 13 a 19, que comprende además:
medios para identificar una pluralidad de punteros de código en el código de programa;
medios para identificar (710) bits de etiqueta comunes a la pluralidad de punteros de código en el código de programa; y
medios para generar (715) la máscara en base a los bits comunes.
21. El sistema de cualquiera de las reivindicaciones 13 a 20, en el que la información de contexto y el puntero de código se encriptan usando el algoritmo de MAC y la clave secreta.
22. El sistema de cualquiera de las reivindicaciones 13 a 21, en el que el puntero de código en el código de programa se identifica antes de que el procesador ejecute el código de programa.
23. El sistema de cualquiera de las reivindicaciones 13 a 22, en el que el puntero de código en el código de programa se identifica en el momento en que se carga el código de programa y cuando se realiza el enlace dinámico o estático.
24. El sistema de cualquiera de las reivindicaciones 13 a 23, en el que el código de programa comprende código binario.
ES20188975T 2014-10-17 2015-09-24 Autenticación de punteros de código para el control de flujo de hardware Active ES2916701T3 (es)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US14/517,572 US9514305B2 (en) 2014-10-17 2014-10-17 Code pointer authentication for hardware flow control

Publications (1)

Publication Number Publication Date
ES2916701T3 true ES2916701T3 (es) 2022-07-05

Family

ID=54325676

Family Applications (2)

Application Number Title Priority Date Filing Date
ES20188975T Active ES2916701T3 (es) 2014-10-17 2015-09-24 Autenticación de punteros de código para el control de flujo de hardware
ES15781198T Active ES2835793T3 (es) 2014-10-17 2015-09-24 Autenticación de punteros de código para el control de flujo de hardware

Family Applications After (1)

Application Number Title Priority Date Filing Date
ES15781198T Active ES2835793T3 (es) 2014-10-17 2015-09-24 Autenticación de punteros de código para el control de flujo de hardware

Country Status (11)

Country Link
US (1) US9514305B2 (es)
EP (4) EP4089556A1 (es)
JP (1) JP6266843B2 (es)
CN (1) CN106796634B (es)
DK (1) DK3779745T3 (es)
ES (2) ES2916701T3 (es)
HU (1) HUE059007T2 (es)
PL (1) PL3779745T3 (es)
PT (1) PT3779745T (es)
SI (1) SI3779745T1 (es)
WO (1) WO2016060817A1 (es)

Families Citing this family (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10002044B2 (en) 2014-08-19 2018-06-19 Samsung Electronics Co., Ltd. Memory devices and modules
US9928094B2 (en) * 2014-11-25 2018-03-27 Microsoft Technology Licensing, Llc Hardware accelerated virtual context switching
US9569613B2 (en) * 2014-12-23 2017-02-14 Intel Corporation Techniques for enforcing control flow integrity using binary translation
US9916091B2 (en) * 2015-07-13 2018-03-13 Samsung Electronics Co., Ltd. Memory system architecture
US10019343B2 (en) * 2016-02-25 2018-07-10 Red Hat Israel, Ltd. Kernel tracing in a protected kernel environment
US10248424B2 (en) * 2016-10-01 2019-04-02 Intel Corporation Control flow integrity
US10740452B2 (en) * 2017-09-15 2020-08-11 Arm Limited Call path dependent authentication
US11055402B2 (en) * 2017-09-29 2021-07-06 Qualcomm Incorporated Dynamically generated code process sandboxing using authenticated pointers
GB2572158B (en) * 2018-03-20 2020-11-25 Advanced Risc Mach Ltd Random tag setting instruction
US11860996B1 (en) * 2018-04-06 2024-01-02 Apple Inc. Security concepts for web frameworks
GB2576506B (en) * 2018-08-20 2021-06-30 Advanced Risc Mach Ltd An apparatus and method for controlling use of bounded pointers
US11144631B2 (en) * 2018-09-11 2021-10-12 Apple Inc. Dynamic switching between pointer authentication regimes
US11741196B2 (en) 2018-11-15 2023-08-29 The Research Foundation For The State University Of New York Detecting and preventing exploits of software vulnerability using instruction tags
CN113508380A (zh) 2019-01-25 2021-10-15 华为技术有限公司 用于终端实体认证的方法
US10579806B1 (en) * 2019-08-27 2020-03-03 Zeus Sw Defender, Llc Systems and methods for dynamic reencryption of code pointers
WO2021148134A1 (en) * 2020-01-24 2021-07-29 Huawei Technologies Co., Ltd. Apparatus and method for software security
US11797713B2 (en) 2020-12-16 2023-10-24 International Business Machines Corporation Systems and methods for dynamic control of a secure mode of operation in a processor
US20210117341A1 (en) * 2020-12-26 2021-04-22 Intel Corporation Cache line slot level encryption based on context information
US11989280B2 (en) * 2021-09-17 2024-05-21 Microsoft Technology Licensing, Llc Pointer authentication failure detection
CN116860589A (zh) * 2022-03-28 2023-10-10 象帝先计算技术(重庆)有限公司 一种寄存器验证方法、装置、电子设备及计算机存储介质
GB2620368A (en) * 2022-06-28 2024-01-10 Advanced Risc Mach Ltd Methods and apparatus for branch instruction security

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06348475A (ja) * 1993-06-14 1994-12-22 Nec Corp ポインタ解析システム
US5590329A (en) * 1994-02-04 1996-12-31 Lucent Technologies Inc. Method and apparatus for detecting memory access errors
US7853803B2 (en) * 2001-09-28 2010-12-14 Verizon Corporate Services Group Inc. System and method for thwarting buffer overflow attacks using encrypted process pointers
US7752459B2 (en) 2001-12-06 2010-07-06 Novell, Inc. Pointguard: method and system for protecting programs against pointer corruption attacks
WO2006052703A2 (en) 2004-11-04 2006-05-18 Board Of Trustees Of Michigan State University Secure bit
EP1870829B1 (en) 2006-06-23 2014-12-03 Microsoft Corporation Securing software by enforcing data flow integrity
CN101304409B (zh) * 2008-06-28 2011-04-13 成都市华为赛门铁克科技有限公司 恶意代码检测方法及系统
US20140096117A1 (en) * 2012-01-13 2014-04-03 Panasonic Corporation Data dependence analysis support device, data dependence analysis support program, and data dependence analysis support method
US9165138B2 (en) 2012-07-11 2015-10-20 Leviathan Security Group, Inc. Mitigation of function pointer overwrite attacks
US9177147B2 (en) 2012-09-28 2015-11-03 Intel Corporation Protection against return oriented programming attacks
US8819455B2 (en) 2012-10-05 2014-08-26 Intel Corporation Parallelized counter tree walk for low overhead memory replay protection

Also Published As

Publication number Publication date
JP2017536612A (ja) 2017-12-07
EP3779745A1 (en) 2021-02-17
EP3779745B1 (en) 2022-05-11
EP4242892A3 (en) 2023-10-11
PT3779745T (pt) 2022-06-15
EP4242892A2 (en) 2023-09-13
CN106796634A (zh) 2017-05-31
EP3207485A1 (en) 2017-08-23
WO2016060817A1 (en) 2016-04-21
DK3779745T3 (da) 2022-06-13
HUE059007T2 (hu) 2022-09-28
US20160110545A1 (en) 2016-04-21
ES2835793T3 (es) 2021-06-23
EP4089556A1 (en) 2022-11-16
CN106796634B (zh) 2018-07-20
EP3207485B1 (en) 2020-09-02
JP6266843B2 (ja) 2018-01-24
PL3779745T3 (pl) 2022-07-11
US9514305B2 (en) 2016-12-06
SI3779745T1 (sl) 2022-07-29

Similar Documents

Publication Publication Date Title
ES2916701T3 (es) Autenticación de punteros de código para el control de flujo de hardware
CN111052115B (zh) 取决于调用路径的认证的数据处理装置和方法
US10516533B2 (en) Password triggered trusted encryption key deletion
ES2907777T3 (es) Dispositivo de almacenamiento seguro
US9390264B2 (en) Hardware-based stack control information protection
US9830162B2 (en) Technologies for indirect branch target security
US7853803B2 (en) System and method for thwarting buffer overflow attacks using encrypted process pointers
ES2925891T3 (es) Filtrado de eventos para aplicaciones de seguridad de máquina virtual
Duflot et al. Using CPU system management mode to circumvent operating system security functions
US20110191848A1 (en) Preventing malicious just-in-time spraying attacks
CN107003936B (zh) 具有非可读页的存储器保护
US10114948B2 (en) Hypervisor-based buffer overflow detection and prevention
Shi et al. InfoShield: A security architecture for protecting information usage in memory
Piromsopa et al. Survey of protections from buffer-overflow attacks
EP3440586B1 (en) Method for write-protecting boot code if boot sequence integrity check fails
ES2960375T3 (es) Sistema y método para detectar y para alertar de aprovechamientos en sistemas informatizados
Davi et al. Building secure defenses against code-reuse attacks
Su et al. Secbus: Operating system controlled hierarchical page-based memory bus protection
Kisore A qualitative framework for evaluating buffer overflow protection mechanisms
KR102258408B1 (ko) 반환 명령어 난독화 방법 및 난독화된 반환 명령어 실행방법
US20160299854A1 (en) Techniques for preventing physical attacks on contents of memory
Bento Control-flow integrity for the Linux kernel: A security evaluation
Trikalinou et al. A survey on protection methodologies against control flow hijacking attacks
Crane et al. The Continuing Arms Race: Code-Reuse Attacks and Defenses
Li Understanding and Exploiting Design Flaws of AMD Secure Encrypted Virtualization