ES2664020T3 - Un método de protección dinámica de los datos durante la ejecución de un código de Software en lenguaje intermedio en un aparato digital - Google Patents
Un método de protección dinámica de los datos durante la ejecución de un código de Software en lenguaje intermedio en un aparato digital Download PDFInfo
- Publication number
- ES2664020T3 ES2664020T3 ES07787678.7T ES07787678T ES2664020T3 ES 2664020 T3 ES2664020 T3 ES 2664020T3 ES 07787678 T ES07787678 T ES 07787678T ES 2664020 T3 ES2664020 T3 ES 2664020T3
- Authority
- ES
- Spain
- Prior art keywords
- data
- checksum
- stack frame
- area
- execution
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring 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
- G06F21/54—Monitoring 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 by adding security routines or objects to programs
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4482—Procedural
- G06F9/4484—Executing subprograms
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Detection And Correction Of Errors (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
Un método para proteger los datos de una aplicación compilada en código intermedio planificado para ser ejecutado en un aparato digital equipado con una máquina virtual que gestiona la ejecución del código a través de una pila de ejecución que define al menos un marco de pila (10) correspondiente a un método convocado durante la ejecución del código, caracterizado porque comprende la aplicación de un modo de ejecución seguro del código, que incluye: - la determinación de al menos una suma de comprobación (gck) global asociada con un área de cada marco de pila y, calculándose dicha suma de comprobación (gck) global asociada utilizando el valor de todos los atos del área asociada, - cada vez que un dato (a) del código es manipulado, el cálculo de una suma de comprobación (LCK(a)) asociada con dicho dato, basada por un lado, en la suma de comprobación global asociada con el área correspondiente al dato manipulado y, por otro lado, en al menos una parte de los otros datos que constituyen dicha área.
Description
Un método de protección dinámica de los datos durante la ejecución de un código de software en lenguaje intermedio en un aparato digital
La presente invención se refiere a software y entornos de ejecución cargados en un aparato digital y, en particular, un método de protección dinámica de datos, en particular en vista de los ataques debidos a un fallo, durante la ejecución de una aplicación compilada en lenguaje intermedio en un aparato digital equipado con una máquina de ejecución virtual.
10 La invención se aplica a cualquier tipo de aparato digital, portátil o no, como un ordenador, pero también cualquier aparato equipado con un microcontrolador que comprende un procesador y dispositivos de almacenamiento, como una tarjeta inteligente.
15 El deseo de crear aplicaciones inter-operables ha dado como resultado el desarrollo de lenguajes de programación intermedios. El objetivo principal de dichos lenguajes es, pues, hacer su software independiente del hardware en el que se deben ejecutar. Por consiguiente, el software está previsto para ser ejecutado en forma de un código independiente intermedio de la arquitectura subyacente.
2 O Los programadores son asi universalmente liberados de las limitaciones relacionadas con un hardware especifico. Los lenguajes intermedios como el código de bytes de Java, obtenido después de la compilación del lenguaje fuente de Java, han sufrido, por tanto, un desarrollo considerable. El lenguaje intermedio MSIL (acrónimo de "Lenguaje Intermedio de Microsoft") también puede ser citado: se despliega en el marco del entorno .Net o DotNet (marca registrada), obtenido tras la compilación de varios lenguajes de origen posibles, tales como C++ o C #.
25 El código intermedio corresponde por lo tanto de forma convencional a una forma compilada del software. Dicho software, compilado en Java, o en otros lenguajes intermedios, tales como .Net, no puede ser ejecutado como tal por el procesador del aparato en el que se desea ejecutar un programa compilado en forma de código intermedio. Es necesario introducir una capa de software que tenga por función principal de interpretar el código intermedio en las
3 O instrucciones que pueden ser ejecutadas por el procesador del aparato huésped. Dicha capa de software se conoce como una "máquina virtual". Por ejemplo, la máquina virtual JAVA permite que el software de Java se ejecute en una plataforma determinada en la que es implementada.
El software de Java se distribuye de forma convencional en la forma de un conjunto de módulos que consisten en
35 archivos .class, que corresponde a una forma compilada del software. Cada archivo compilado corresponde a una estructura de datos de tipo class y comprende, en la medida de lo posible, la información para dicha clase: es decir, la descripción de los elementos de la clase (sus constantes, sus campos, sus métodos), la descripción de los elementos utilizados por la clase y definidos en otras clases (campos y métodos), el código de los métodos de la clase en la forma de instrucciones que puede ser interpretada (bytecode) por el intérprete de la máquina virtual Java.
De manera simplificada, un archivo .class tiene por ejemplo la siguiente estructura:
Archivo de clase { Lista de campo; 11 Descripción de los campos de 45 la clase
Lista de Métodos; 11 Métodos de dicha clase
(incluyendo su bytecode, es decir, que las instrucciones que
pueden ser interpretados por el intérprete de la máquina
virtual)
50 }
Por lo tanto, a modo de ejemplo, en el marco de una aplicación de monedero electrónico Java, una clase conocida
como "Monedero" se puede definir, con su campo "equilibrio" y su método "decrementBalanceO". El archivo .class
puede tener la siguiente estnuctura:
Monedero clase pública {
balance int privado = O;
anular público decrementBalance O {
este.balance = este. balance -1;
60 }
Por lo tanto, de acuerdo con dicho ejemplo, la ejecución del método de la clase "Monedero" consiste en eliminar el valor 1 en la instancia en curso del campo de equilibrio.
La ejecución del correspondiente software de Java se realiza por medio de la máquina virtual Java instalada en el
aparato digital.
Dicha máquina virtual transforma la información del archivo de clase en las estructuras de almacenamiento de datos de trabajo que son especificas de la máquina virtual y que permiten a dicha máquina virtual interpretar y ejecutar el 5 software. Dichas estructuras de datos se organizan convencionalmente en la forma de pilas, en las que los datos se almacenan uno encima del otro en el orden en el que llegan.
La máquina virtual tiene un conjunto de instrucciones especificas, estando codificada cada instrucción en uno o más octetos. El conjunto de instrucciones de la máquina virtual comprende por ejemplo un cierto número de instrucciones 10 convencionales, tales como la aritmética, operaciones lógicas y saltos.
Actualmente, la ejecución de una aplicación por parte de la máquina virtual no está asegurada por completo, en particular en relación con los ataques en general y, en particular, con los ataques debidos a un fallo. Así, el valor sensible en el ejemplo antes mencionado, que se muestra en el campo "balance", puede ser modificado después de
15 la inyección de un fallo durante la manipulación de dicho valor para la interpretación del método para la actualización de dicho campo por la máquina virtual, que resulta en establecer un valor final en la pila de ejecución para el campo de equilibrio diferente al esperado normalmente. Por ejemplo, el campo de equilibrio puede ser forzado a su valor máximo.
2 O Una manera conocida de combatir dicho tipo de ataques debido a un fallo consiste en añadir un dispositivo de protección a nivel de la aplicación, en forma de un código de control redundante insertado dentro mismo del código de la aplicación que ha de ser ejecutado por la máquina virtual.
Por ejemplo, con el fin de proteger el código precedente, es posible utilizar en Java, como una suma de
25 comprobación, el valor complementado del campo de equilibrio, comprobado -equilibrio, que envía el complemento a 1 del valor de equilibrio binario, y actualiza dicho valor de suma de comprobación al mismo tiempo con la actualización del valor de equilibrio durante la ejecución del método por la máquina virtual. La comparación del resultado de los dos cálculos de actualización realizada al mismo tiempo, por un lado, para el campo de equilibrio y, por el otro, el completado -campo de equilibrio, permite por tanto la integridad de los datos a verificar que se
3 O utilizaron para establecer los cálculos. El código Java modificado en consecuencia por lo tanto, tiene la siguiente estructura:
Mondero clase pública {
balance int privado = O;
35 balChecsum int privado = -balance; 11 = OxFFFFFFFF anular público decrementBalance O { este.balance = este. balance -1; este.balChecsum = este.balChecsum + 1;
} 40
La desventaja de dicho método para asegurar la ejecución del código Java es que consume gran cantidad de recursos y tiempo de cálculo. lo que es desfavorable en entornos restrictivos tales como el de las tarjetas inteligentes.
45 Además. dicha solución implica que los desarrolladores de código estén familiarizados y sean conscientes, en el momento del desarrollo, de la manera de proteger las partes sensibles del código. Por lo tanto, en realidad resulta restrictivo para los desarrolladores añadir códigos con el fin de proteger su aplicación.
5 O El documento WO 01/88705 describe un método de verificación de los tipos de datos que integran la pila. La verificación realizada de manera dinámica durante la ejecución de un programa. Este método verifica la consistencia del tipo para los datos que son gestionados durante la ejecución del programa.
El documento WO 2005/101725 muestra un método de verificación de un programa mientras éste es ejecutado. El
55 programa contiene una secuencia de instrucciones datos estáticos ejecutables. El método se basa en la comprobación de un hash correspondiente al programa y en una pluralidad de datos basados en las firmas de las instrucciones.
La invención pretende resolver uno o más de dichos inconvenientes.
El objeto de la invención es por lo tanto un método para proteger los datos de una aplicación compilados en código intermedio previsto para ser ejecutado en un aparato digital equipado con una máquina virtual que gestiona la ejecución del código a través de una pila de ejecución que define al menos un marco de pila correspondiente a un método convocado durante la ejecución del código.
Según la invención, el método incluye la aplicación de un modo de ejecución segura del código, que comprende:
la determinación de al menos una suma de comprobación global asociada con cada marco de pila y,
cada vez que se manipula un dato del código, el cálculo de una suma de comprobación asociado con dicho
dato, basado por un lado, en la suma de comprobación global asociada con el marco de pila correspondiente al
dato manipulado y, por otro, en al menos una parte de los otros datos que constituyen dicho marco de pila.
De acuerdo con una realización particular, el método comprende la división de cada marco de pila en una pluralidad de áreas y la determinación de una pluralidad de sumas de comprobación globales (gckO, gck1 , gck2, gck3) asociadas respectivamente con cada área del marco de pila.
10 De acuerdo con dicha realización particular, la suma de comprobación local asociada con el dato manipulado comprende la determinación de antemano de la suma de comprobación global asociada con el área del marco de pila en la que se almacena el dato manipulado.
Ventajosamente, el cálculo de la suma de comprobación local asociada con dato manipulado se realiza por una 15 parte, sobre la base de la suma de comprobación global asociada con el área del marco de pila en la que el dato manipulado se almacena y, por otra parte, en otros datos de dicha área del marco de pila.
Preferiblemente, cada marco de pila se divide en dos áreas, que corresponden respectivamente a un área variable local del método convocado y un área de pila de operandos de dicho método.
De acuerdo con una realización , el método se implementa en forma de software.
De acuerdo con otra realización, el método se implementa en forma de hardware.
25 La invención también se refiere a una máquina virtual para ejecutar una aplicación compilada en código intermedio en un aparato digital, caracterizado porque es probable que se almacene en un dispositivo de almacenamiento no volátil del aparato y es probable que implemente el método según la invención.
La invención también se refiere a un aparato digital que comprende un dispositivo de almacenamiento no volátil 3 O almacenado en la memoria de la máquina virtual de acuerdo con la invención.
Otras características y ventajas de la invención especiales se harán evídentes durante la lectura de la descripción realizada a modo de ejemplo no limitativo y en relación con las siguientes figuras, en las que:
35 la figura 1 ilustra la estructura de almacenamiento de un marco de pila, a nivel del cual actúa el mecanismo de protección de acuerdo con la presente invención; las figuras 2a y 2b ilustran un primer ejemplo de realización de la invención; las figuras 3a a 3d ilustran un segundo ejemplo de realización de la invención; las figuras 4 a 6 ilustran las mejoras de la invención, y
4 O la figura 7 ilustra un ejemplo de implementación de hardware del método de acuerdo con la presente invención.
Por tanto, la invención tiene por objeto proteger la ejecución de una aplicación compilado en código intermedio en un aparato digital equipado con una máquina de ejecución virtual para la interpretación del código de la aplicación.
45 El mecanismo de protección según la presente invención actúa , tal como se verá más adelante con mayor detalle, a nivel del marco de pila, mostrando un bloque de almacenamiento reservado, en la pila de ejecución de la máquina virtual, durante la ejecución de un método del código.
La Figura 1 ilustra la estructura de dicho marco de pila 10, que contiene típicamente los parámetros del método
5 O convocado, es decir, sus variables locales 11 , su pila de operandos 13, junto con los datos del sistema 12, comprendiendo en particular, la dirección de retorno que permite encontrar el marco de pila precedente. De hecho, es común que un primer método, con el cual está asociado un primer marco de pila, requiere para su ejecución en sí convocar un segundo método, con el que se asocia un segundo marco de pila. En este caso, cuando el primer método es convocado, en un momento dado del progreso de su ejecución, se convoca el segundo método, que
55 implica trabajar en el marco de pila asociado con dicho segundo método. Cuando las acciones realizadas en el marco de pila asociada con el segundo método son finalizadas, los datos del sistema y, más concretamente, la dirección de retorno, del marco de pila asociado con el segundo método se utilizan para encontrar el marco de pila precedente asociado con el primer método.
6 O El principio general de la invención por lo tanto consiste en la adición de un mecanismo de seguridad a nivel de cada marco de pila de la máquina virtual, con el objetivo de ser capaz de garantizar en todo momento la integridad de los datos mantenidos en el marco de pila asociado durante la ejecución de un método.
Para esto, con cada marco de pila de la máquina virtual tal como se ilustra en la figura 1, se asocia primero una 65 suma de comprobación global gck. El valor de suma de comprobación global de gck se calcula utilizando todos los datos del marco de pila, es decir, todos los elementos que constituyen la pila de operandos 13 y todas las variables
locales 11 .
Entonces, cada vez que un dato de un marco de pila, es decir, un elemento de la pila de operandos 13 o variables locales 11, es desapilado para cualquier operación, se puede así calcular dinámicamente una suma de
5 comprobación local asociada, utilizando por un lado, la suma de comprobación global asociada con el marco de pila en cuestión, calculado de antemano y mantenido en el marco de pila y, por el otro lado, los otros datos del marco de pila en cuestión.
Será conveniente, cada vez que se manipula un dato de un marco de pila por parte de la máquina virtual de la 10 ejecución, actualizar en consecuencia la suma de comprobación global asociado con el marco de pila.
Los principios generales explicados anteriormente en los que se basa la invención serán ahora descritos en mayor detalle. Para esto, se proporcionan primero las definiciones que serán útiles en lo sucesivo para la descripción de las funciones de cálculo de las sumas de comprobación globales, asociadas con cada marco de pila, y las sumas de
15 comprobación locales, susceptibles de ser asociadas con cada dato de un marco de pila basado en la suma de comprobación global asociada.
De hecho, para el propósito de la invención, es necesario definir dos tipos de funciones, uno de los cuales está previsto para actuar globalmente en un marco de pila, mientras que el otro permite que los cálculos ejecutados por la
2 O máquina virtual en uno o más datos sean monitoreados a nivel local, en particular, basado en la suma de comprobación global asociada con el marco de pila correspondiente a los datos en cuestión. Mediante el uso de una combinación de funciones tal, se verá que es, por tanto, posible garantizar la integridad de los datos manipulados por la máquina virtual en cualquier momento de la ejecución del código.
25 Cualquier V el espacio de los valores en los registros s largos. Por ejemplo, para los registros largos de 32 bits, se obtiene lo siguiente:
V= [-2147483648, 2147483647]
3 O La función de cálculo de suma de comprobación GCK global asociada con un marco de pila se define de la siguiente manera: GCK: V x V x ... x V ---------> V
( SO, SI , oO., Sn-1) 1------> GCK(SO, ... , Sn-1)
SO, S1 , ... , Sn-1, siendo todos los datos que constituyen un marco de pila dado.
La función de cálculo de suma de comprobación LCK local asociada con el dato SO se define de la siguiente manera:
LCK: V ----------~ V so I -------> LCK (SO)
La función GCK debe tener el siguiente atributo:
Ya sea la función GCK y LCK tal como se ha definido anteriormente, consideraremos cualquier función F como, para cualquier conjunto de datos (SO, ... , Sn-1):
GCK(SO, Sl , _, Sn-1) -F(LCK(SO), _ , LCK(Sn-1))
A modo de ejemplo, mediante el uso del operador -complemento aplicado a la suma de todos de los elementos de un marco de pila dado, se define lo siguiente:
GCK: V x V x ... x V ----------> V
(S O, SI, Sn -1) I-------> -(S O + ... + Sn-1 )
LCK: V ------------> V 50 SO 1---------> -SO
o la función f definida por:
___ _ O> V
F: V x V x ... x V
(XO, Xl, Xn-1 ) 1---> Sum(Xi, i=O, ... ,n-l) + n-1
Por lo tanto :
GCK ( S O • S 1, ... I Sn -1 ) -(SO + ... + Sn-1) = -SO +
+ -Sn -l + n-1 = F (-SO, -Sn-) F (LCK (SO) I
LCK(Sn-1» .
5 A partir de ahí, si el valor gck de la suma de comprobación global asociada con un marco de pila (gck = GCK(SO, S1 , ..., Sn-1» es conocido, resulta entonces sencillo calcular el LCK(Si) de la suma de comprobación local asociado con un dato Si del marco de pila accedido por la máquina virtual, basado en el valor gck asociado con el marco de pila en cuestión y el dato Sj restante del marco de pila G;fi), mediante el uso de la siguiente operación:
LCK(Si) = -Si = GCK(SO, S1, ••• I Sn-l) (-SO + ... +
-Si-1 + -Si+l + _ + -Sn -l + n-l)
De acuerdo con el ejemplo, con el fin de determinar la suma de comprobación local asociada con un dato Si del marco de pila , la suma complementada de los otros datos que constituyen el marco de pila resulta así retirada del valor gck de suma de comprobación global.
15 Esto muestra que la de suma de comprobación local LCK(Si) asociado con el dato Si, se puede calcular sin usar explícitamente el valor del dato Si, sino sólo poniendo en juego la suma de comprobación global gck asociado con el marco de la pila correspondiente al dato Si y los otros datos del marco de pila.
2 O Dicho atributo es particularmente ventajoso en vista de reforzar la seguridad de la ejecución de aplicaciones dentro del contexto de la invención. De hecho, incluso si un atacante es capaz de modificar el valor de un dato de un marco de pila en el momento en el que este último es leído por la máquina virtual, la suma de comprobación local asociada que no es calculada utilizando el valor del dato en cuestión, será posible detectar que el dato en cuestión ha sido modificado mediante la comparación con el valor procedente de la suma de comprobación.
25 Las figuras 2a y 2b permiten que este asunto pueda ser ilustrado con mayor precisión. Vamos a suponer que el contenido de un marco de pila 10 sea descrito por el apilamiento de células de la figura 2a, comprendiendo respectivamente, d, e, b y unos datos.
3 O La suma de comprobación global gck asociado con dicho marco de pila se puede calcular como la suma complementada con los elementos del marco de pila, utilizando el ejemplo de la función GCK antes proporcionada basado en el operador -complemento aplicado a la suma de todos los elementos del marco de pila:
gck = -(a + b + e + d)
Supongamos ahora que el dato a se desapila desde la parte superior del marco de pila 10 como se ilustra en la
35 figura 2b, y que en el momento de dicha operación, su valor se modifica de manera fraudulenta como a' mediante medios externos.
Mediante la aplicación de los atributos vinculados al operador, se ha obtenido lo siguiente:
gck = -a + -b + -c + -d + 3
4 O Como ya se ha explicado, la suma de control local LCK(a) asociada con el dato a manipulado en curso puede por tanto ser calculado basado en la suma de comprobación gck global y los datos restantes en el marco de pila, de manera que se obtiene lo siguíente:
LCK(a) = gck --(b + e + d) -1 = -a
La suma de comprobación local LCK(a) puede, por ejemplo, calcularse si el sistema solicita una verificación del dato
45 a manipulado. En este caso, el valor del dato manipulado se comparará con el valor del dato derivado de la suma de comprobación local -a asociada. Como el dato a, en el ejemplo, se ha modificado en una a' tras un ataque externo, la comparación con el valor obtenido de -a indica por tanto al sistema que ha ocurrido un error, permitiendo entonces que reaccione.
5 O Dicha etapa de verificación de la integridad se puede implementar opcionalmente. Asi, se puede contemplar aplazarla, para realizarla en momentos predeterminados o incluso aleatorios.
La máquina virtual es capaz también de garantizar la integridad de los datos en sí durante un cálculo. Dicho mecanismo se ilustra más específicamente en el ejemplo de las figuras 3a a 3d.
Vamos a suponer un marco de pila 10, constituido por el apilamiento de los datos b, a, e y d, como se ilustra en la figura 3a. La suma de comprobación global asociada con el marco de pila se calcula de la siguiente manera:
2 O
gck :: -(a + b + e + d)
Vamos a suponer que la ejecución del método implica el cálculo d + c. El primer argumento de la adición constituido por el dato d es, por tanto, inicialmente desapilado y, utilizando los principios antes mencionados, se puede calcular su suma de comprobación LCK(d) local basado en la suma de comprobación gck global asociada con el marco de pila que corresponde a los datos restantes en el marco de pila:
LCK(d) = gck --(b + a + e) -1 e -d
Entonces, la suma de comprobación gck global asociado con el marco de pila es actualizada antes de continuar la operación de cálculo, con el fin de reflejar el nuevo estado del marco de pila, habiendo sido desapilado el dato d. Para ello, el valor de la suma de comprobación local asociada con el dato d de referencia es eliminado del valor en curso de la suma de comprobación global:
gek = gek -(-d) -1 = -(a + b + e)
Por consiguiente, la operación de cálculo se continúa y, como se ilustra en la figura 3c, el segundo argumento de la adición constituido por el dato c ahora es desapilado. Todavía con el propósito de verificar la integridad de los datos utilizados en el cálculo en curso, la suma de comprobación LCK(c) local asociado con el dato c es calculada dinámicamente sobre la base de la suma de comprobación gck global previamente actualizada, a la que se le elimina la suma complementada de los datos restantes en el marco de pila:
LCI{(c) :: gck --(b + al -1 :: -e
De la misma forma que antes, la suma de comprobación global asociada con el marco de pila debe actualizarse para reflejar el nuevo estado del marco de pila, en el que el dato c ha sido desapilado. Por consiguiente, el valor de la suma de comprobación local asociada con el dato c es eliminado del valor en curso de la suma de comprobación global:
gck = gck -(-e) -: = -(a + b)
En dicha etapa, los siguientes cuatro datos son, por lo tanto, manipulados por la máquina virtual: c, -c, d Y -d, lo que por tanto permite comprobar que los datos puestos en juego en el cálculo no se han modificado en el momento en que son leidos, de la misma manera como se ha explicado en referencia con el ejemplo de las figuras 2a y 2b.
Por consiguiente, se realiza la operación de adición (c+d). La integridad de dicha operación se puede verificar utilizando las sumas de comprobación LCK(c) y LCK(d) locales, asociadas respectivamente con los datos c y d. En efecto, la operación de comprobación -(c+d) correspondiente se escribe: -c + -d + 1, de acuerdo con los atributos aritméticos del operador -complemento. Asi, ventajosamente la suma de comprobación LCK(c+d) local asociada con el resultado de la operación (c+d) puede ser calculado, sin tener que usar los valores de los datos c y d directamente, sino sólo usando las sumas de comprobación LCK(c) y LCK(d) locales previamente calculadas y asociadas con los datos que intervienen en la operación. Además, como ya se ha visto, las sumas de comprobación LCK(c) y LCK(d) locales han sido ellas mismas calculadas sobre la base de la suma de comprobación gck global, sin tener que utilizar los valores de los datos c y d.
Por último, como se ilustra en la figura 3d, una vez que el cálculo se ha realizado, el resultado (c + d) se coloca en el marco de pila 10. Por consiguiente, la suma de comprobación global asociado con el marco de la pila todavia ha de ser actualizada, mediante el uso de la suma de comprobación local asociada con el resultado:
gck gck+(-(e + d}+l} = -( a + b) + -(e + d) + 1
(a ... b + e + d)
En los ejemplos mencionados anteriormente, se utilizó el operador -complemento para el cálculo de las sumas de comprobación locales. La invención puede, sin embargo, generalizarse utilizando la siguiente generalización del operador -:
Cualquier O del conjunto V, con las siguientes operaciones convencionales aritméticas y lógicas (+,-,*,/,&,1).
O la P del conjunto V con todas las operaciones simbolizadas de la siguiente manera (+, , O,' ,0,0).
Un operador de suma de comprobación Chk se define de la siguiente manera:
Chk: 0--------------> P, de tal manera que para cualquier operación op en el conjunto (+,-,*,1,&,1), hay una operación cap correspondiente en el conjunto (+, , O,',0,0) tal que:
Chk( a op b) = Chk(a) cop Chk(b)
Por consiguiente, el operador -previamente descrito del complemento a 1 es un caso especifico de la función Chk:
2 O
3 O
4 O
5 O
- -
- ; (V, (+,-,*,/,&, 1)) -----------7 (V, (+[2S]0+00 ))
a 1--------------------7 -a
con
- -
- (a + b ) = -a + -b = -a + -b + 1
Matemáticamente, el operador Chk puede definirse como un morfismo grupo del espacio O hacia el espacio P, respetando todas las operaciones en P.
El principio de la invención, por tanto, consiste en asociar con cada marco de pila de la máquina de ejecución virtual una suma de comprobación global, cada vez que se accede a un dato, calcular una suma de comprobación local asociada con dicho dato mediante el uso de la suma de comprobación global asociada con el marco de pila en cuestión.
En los ejemplos de formas de realización proporcionadas anteriormente, el cálculo de la suma de comprobación global asociada con un marco de pila consiste en calcular la suma complementada de todos los elementos del marco de pila. Además, en modo seguro, cada vez que se accede a un dato del marco de pila, se calcula su suma de comprobación, mediante el uso de la suma de comprobación global a la que se resta la suma complementada de los otros elementos del marco de pila. También, si la longitud del marco de pila es sustancial, dichos cálculos pueden demostrar ser desfavorables en términos de actuaciones (ralentización de la ejecución del código en modo seguro) en entornos restringidos en los recursos de cálculo.
También, en el objetivo de reducir el número de operaciones necesarias para el cálculo de una suma de comprobación local basada en una suma de comprobación global o para el cálculo de la actualización de la suma de comprobación global, una mejora de la invención consiste en utilizar una pluralidad de sumas de comprobación globales asociados con el mismo marco de pila.
Según una primera variante ilustrada en la figura 4, se utilizan dos sumas de comprobación distintivas gckop y gckv globales para cada marco de pila 10, asociadas respectivamente con la pila de operandos 13 del marco de pila y con las variables locales 11 del marco de pila. Esto permite que los cálculos necesarios para la obtención de una suma de comprobación se vean consecuentemente reducidos. De hecho, si por ejemplo, un dato está manipulado desde la pila de operandos 13, se puede obtener su suma de comprobación local asociada de la suma de comprobación gckop global asociada y la suma de los únicos otros elementos de la pila de operandos y no de todo el marco de pila.
Según otra variante presentada en la figura 5, el marco de pila se divide en una pluralidad de áreas, con cada uno de las cuales se asocia una suma de comprobación global. Las áreas que dividen el marco de pila son preferentemente de igual longitud, pero la división en áreas de extensiones desiguales puede, sin embargo, preverse. De acuerdo con el ejemplo de la figura 5, el área de las variables locales 11 se divide en dos áreas, cada una de cuatro elementos, con las sumas de comprobación gckO y gck1 globales asociadas; asimismo el área de la pila de operandos se divide en dos zonas cada una de cuatro elementos, con respectivamente con las sumas de comprobación gck2 y gck3 globales asociadas.
De acuerdo con dicha forma de realización, cada vez que un dato de la pila es manipulado (leído o añadido), es primero necesario determinar a qué área del marco de pila se refiere, con el fin de utilizar la suma de comprobación global asociada con dicha zona para deducir la suma de comprobación local asociada con el dato manipulado.
Cada suma de comprobación global asociada con un área del marco de pila es, de hecho, identificada por un índice (O a 3 de acuerdo con el ejemplo de la figura 5). Además, con el fin de determinar la suma de comprobación global a usar, es necesario determinar el indice que permite identificar la suma de comprobación global correcta. La determinación del índice se puede realizar de la siguiente manera:
index = (j SP -base)/n
En donde jSP representa el puntero sobre el elemento en curso del marco de pila, la base representa el puntero en la base del marco de pila y n representa el número de elementos de un área de longitud fijada del marco de pila.
En referencia al ejemplo de la figura 6 en el que se presume que el elemento es desapilado del marco de pila mostrado, dividido a modo de ejemplo en dos áreas de longitud n = 4, se obtiene el índice = 1, lo que significa que es necesario utilizar la suma de comprobación gck1 global para el área en cuestión.
El cálculo de la suma de comprobación local asociada con el dato a es, por tanto, realizado como se ha explicado anteriormente, mediante el uso de la suma de comprobación gck1 global determinada previamente y teniendo ventajosamente en cuenta solamente los datos del área afectada, en comparación con todos los datos del marco de pila.
3 O
4 O
5 O
El cálculo de una suma de comprobación local cumple la siguiente fórmula:
jSP
LCK(a) gc k (Ü1.dexl I;Si
j-611SC t JI ' J"de::r:
Simbolizando Si los elementos del marco de pila.
Los cálculos de las sumas de comprobación locales y globales como han sido descritas pueden realizarse en una forma de software. Sin embargo, se ha visto que cuando los marcos de pila correspondientes a los métodos convocados durante la ejecución del código son de una longitud considerable, dichos cálculos pueden llegar a ser excesivamente largos. La variante antes mencionada, consistente en dividir el marco de pila en una pluralidad de zonas a cada una de los cuales se asociada una suma de comprobación global, permite ventajosamente la reducción del tiempo de cálculo.
Otra solución se basa en una implementación de hardware del cálculo de las sumas de comprobación de acuerdo con la invención. Un ejemplo de implementación de hardware se describe en la figura 7. De acuerdo con dicho ejemplo de implementación, un área de almacenamiento 20, que consiste en un conjunto de registros r1 a rn, está conectado a un circuito lógico 30, que permite que una suma de comprobación sea calculada en base al contenido de los registros n del área de almacenamiento 20 cada vez que uno de dichos registros es actualizado. Por tanto, el resultado del cálculo realizado por el circuito lógico 30 se coloca automáticamente en un registro de comprobación 40 como una suma de comprobación.
El circuito lógico 30 es, por ejemplo, conectado con el fin de ejecutar la suma de todos los registros seleccionados. La determinación automática de una suma de comprobación a través de la lógica cableada permite asi que se incremente significativamente la rapidez de los cálculos en relación con una implementación puramente de software cuando el número n es alto.
El conjunto de registros r1 a rn se utiliza, por tanto, como un dispositivo de almacenamiento permitiendo que los datos correspondientes de un marco de pila que son asignados en el área de almacenamiento 20 sean apilados y desapilados. Un conjunto F de indicadores F1 a Fn está previsto además, en el que cada indicador F1 a Fn está asociado respectivamente con un registro r1 a rn, permitiendo una actualización del marco de pila a ser indicado. Por ejemplo, cuando un dato es colocado en la pila, el bit del indicador correspondiente se coloca a 1 y cuando un dato desapilado, el bit del indicador correspondiente se coloca a O. Así, en cada cambio detectado en el conjunto de indicadores F, se recalcula la suma de comprobación a través del circuito lógico 30 basado en el contenido de la totalidad de los registros ri a rn de los que el bit del indicador correspondiente se coloca a 1.
El conjunto de hardware 20, 30, 40, 50 coopera con un dispositivo de interfaz 60 conectado a una unidad de procesamiento del componente en el que se ejecuta el código. Por tanto, se pueden realizar las operaciones de adición y eliminación de datos en un marco de pila, comprobadas a través de la configuración de hardware descrita.
Por lo tanto, el conjunto de datos de un marco de pila asignados en un área de almacenamiento 20, cuando un dato debe ser eliminado, la suma de comprobación en curso, conocida como CHK1, asociada con el marco de pila se lee primero en el registro 40. Entonces, una señal de "leer" indica al dispositivo de interfaz 60 que un dato es eliminado, éstos últimos comandan la actualización de los registros 20 y los indicadores 50 en la base de datos de las direcciones ADR y las señales de datos DAT recibidas por la unidad de procesamiento y un valor de suma de comprobación actualizado, conocido como CHK2, es calculado automáticamente y colocado en el registro de comprobación 40. Así, sobre la base de las sumas de comprobación CHK1 y CHK2 calculadas automáticamente, el sistema puede determinar la suma de comprobación local asociada con el dato eliminado con el fin de verificar su integridad.
De la misma manera, cuando un dato debe ser añadido a la pila, la suma de comprobación en curso, conocida como CHK1 , asociada con el marco de pila es primeramente leía del registro 40. Una señal de "escribir" indica, por tanto, al dispositivo de interfaz 60 que se ha añadido un dato, comandado así la actualización de los registros 20 y los indicadores 50 en la base de datos de la dirección ADR y las señales de datos DAT recibidas por la unidad de procesamiento. Una vez que el dato se ha cargado en el registro correspondiente del área de almacenamiento 20, la suma de comprobación se calcula de nuevo de forma automática y el valor actualizado CHK2 se coloca en el registro de comprobación 40. Así, sobre la base de las sumas de comprobación CHK1 y CHK2 calculadas automáticamente, el sistema puede determinar la suma de comprobación local asociada con el dato añadido con el fin de verificar su integridad.
Claims (7)
- REIVINDICACIONES1. Un método para proteger los datos de una aplicación compilada en código intermedio planificado para ser ejecutado en un aparato digital equipado con una máquina virtual que gestiona la ejecución del código a través de5 una pila de ejecución que define al menos un marco de pila (10) correspondiente a un método convocado durante la ejecución del código, caracterizado porque comprende la aplicación de un modo de ejecución seguro del código, que incluye:
- -
- la determinación de al menos una suma de comprobación (gck) global asociada con un área de cada marco 10 de pila y, calculándose dicha suma de comprobación (gck) global asociada utilizando el valor de todos los atos del área asociada,
- -
- cada vez que un dato (a) del código es manipulado, el cálculo de una suma de comprobación (LCK(a)) asociada con dicho dato, basada por un lado, en la suma de comprobación global asociada con el área 15 correspondiente al dato manipulado y, por otro lado, en al menos una parte de los otros datos que constituyen dicha área.
- 2. Un método de acuerdo con la reivindicación 1, caracterizado porque comprende la división de cada marco depila (10) en una pluralidad de áreas y la determinación de una pluralidad de sumas de comprobación (gckO gck1 , 2 O gck2, gck3) globales asociadas respectivamente con cada área del marco de la pila.
- 3. Un método de acuerdo con la reivindicación 2, caracterizado porque el cálculo de la suma de comprobación local asociada con el dato manipulado comprende la determinación previa de la suma de comprobación global asociada con el área del marco de pila en el que se almacena el dato manipulado.
- 4. Un método de acuerdo con la reivindicación 3, caracterizado porque el cálculo de la suma de comprobación local asociada con el dato manipulado se realiza por un lado, en base a la suma de comprobación global asociada con el área del marco de pila donde se almacena el dato manipulado y, por otro lado, en base a otros datos de dicha área del marco de pila.
- 5. Un método de acuerdo con una cualquiera de las reivindicaciones 2 a 4, caracterizado porque cada marco de pila (10) está dividido en dos áreas, correspondientes respectivamente a un área variable local (11) del método convocado y un área de pila de operandos (13) de dicho método.35 6. Un método de acuerdo con una cualquiera de las reivindicaciones precedentes, caracterizado porque es implementado en forma de software.
- 7. Un método de acuerdo con una cualquiera de las reivindicaciones 1 a 5, caracterizado porque es implementado en forma de hardware.
- 8. Un aparato digital que comprende una memoria no volátil, comprendiendo dicha memoria una máquina virtual para la ejecución de una aplicación compilada en un código intermedio, caracterizado porque dicha máquina virtual está adaptada para implementar el método de acuerdo con una cualquiera de las reivindicaciones precedentes.45 9. Un aparato de acuerdo con la reivindicación 8, caracterizado porque dicho dispositivo es una tarjeta inteligente.
- -
- "
rgckFig.la , LCK(a)/- a
- (
- b
- b
- e
- e
- d
- d
Fig.2a Fig.2b.. d·,LCK(d)/"~~- d
- I---
- -c--t
- a
- b
- (
- e
- a
- b
Fig.3a Fig.3b/"c ;LCK( )e'\~- !------l c+d
- a
- b
Fig.3c Fig.3dFig.4Fig.5-"1,I~p.I,rgck31-l>-gck2~IgcklI- -
- 1<:
1 1LgckO¡:¡,60 3050 20Fig.7
Applications Claiming Priority (3)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| EP06291183 | 2006-07-20 | ||
| EP06291183A EP1881404A1 (fr) | 2006-07-20 | 2006-07-20 | Procédé de protection dynamique des données lors de l'exécution d'un code logiciel en langage intermédiaire dans un appareil numérique |
| PCT/EP2007/057417 WO2008009697A1 (en) | 2006-07-20 | 2007-07-18 | A method of dynamic protection of data during the execution of a software code in intermediate language in a digital apparatus |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| ES2664020T3 true ES2664020T3 (es) | 2018-04-18 |
Family
ID=37685306
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| ES07787678.7T Active ES2664020T3 (es) | 2006-07-20 | 2007-07-18 | Un método de protección dinámica de los datos durante la ejecución de un código de Software en lenguaje intermedio en un aparato digital |
Country Status (4)
| Country | Link |
|---|---|
| US (1) | US8646092B2 (es) |
| EP (2) | EP1881404A1 (es) |
| ES (1) | ES2664020T3 (es) |
| WO (1) | WO2008009697A1 (es) |
Families Citing this family (8)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| EP2196940A1 (fr) * | 2008-12-12 | 2010-06-16 | Gemalto SA | Procédé de sécurisation de l'utilisation parcellaire d'une donnée numérique |
| DE102011009008A1 (de) * | 2011-01-20 | 2012-07-26 | Rohde & Schwarz Gmbh & Co. Kg | Authentifizierung von verschlüsselten Datenblöcken |
| US9846717B2 (en) * | 2012-10-23 | 2017-12-19 | Galois, Inc. | Software security via control flow integrity checking |
| CN103106356B (zh) * | 2013-02-01 | 2016-03-16 | 北京深思数盾科技有限公司 | 一种在安全环境中生成代码提高软件保护强度的方法 |
| FR3068152B1 (fr) * | 2017-06-27 | 2019-08-02 | Idemia Identity And Security | Procede de protection d'un dispositif electronique executant un programme contre des attaques par injection de faute |
| FR3068151B1 (fr) * | 2017-06-27 | 2022-01-28 | Safran Identity & Security | Procede de protection d'un dispositif electronique executant un programme contre des attaques par injection de faute |
| CN109960511B (zh) * | 2019-03-22 | 2022-09-09 | 北京智游网安科技有限公司 | 基于虚拟化技术的动态库下发方法、存储介质及智能终端 |
| EP3920065A1 (en) * | 2020-06-02 | 2021-12-08 | Thales Dis France Sa | Stack protection |
Family Cites Families (43)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US4524416A (en) * | 1980-04-15 | 1985-06-18 | Honeywell Information Systems Inc. | Stack mechanism with the ability to dynamically alter the size of a stack in a data processing system |
| US4697233A (en) * | 1984-04-02 | 1987-09-29 | Unisys Corporation | Partial duplication of pipelined stack with data integrity checking |
| US4866599A (en) * | 1985-06-27 | 1989-09-12 | Bull Hn Information Systems Inc. | Call instruction, return instruction and trap procedure for ring crossing architecture |
| US5644709A (en) * | 1994-04-21 | 1997-07-01 | Wisconsin Alumni Research Foundation | Method for detecting computer memory access errors |
| US5471487A (en) * | 1994-04-26 | 1995-11-28 | Unisys Corporation | Stack read/write counter through checking |
| US5748964A (en) * | 1994-12-20 | 1998-05-05 | Sun Microsystems, Inc. | Bytecode program interpreter apparatus and method with pre-verification of data type restrictions |
| US5805920A (en) * | 1995-11-13 | 1998-09-08 | Tandem Computers Incorporated | Direct bulk data transfers |
| BR9713267A (pt) * | 1996-10-25 | 2004-06-15 | Schlumberger Systems & Service | Cartão de circuito integrado para uso com um terminal, processo para uso com o mesmo, microcontrolador e processo para sua programação |
| US6397242B1 (en) * | 1998-05-15 | 2002-05-28 | Vmware, Inc. | Virtualization system including a virtual machine monitor for a computer with a segmented architecture |
| GB9825102D0 (en) * | 1998-11-16 | 1999-01-13 | Insignia Solutions Plc | Computer system |
| DE19933130A1 (de) * | 1999-07-19 | 2001-01-25 | Giesecke & Devrient Gmbh | Operandenstapelspeicher und Verfahren zum Betreiben eines Operandenstapelspeichers |
| US7430670B1 (en) * | 1999-07-29 | 2008-09-30 | Intertrust Technologies Corp. | Software self-defense systems and methods |
| US7577834B1 (en) * | 2000-05-09 | 2009-08-18 | Sun Microsystems, Inc. | Message authentication using message gates in a distributed computing environment |
| FR2809200B1 (fr) * | 2000-05-17 | 2003-01-24 | Bull Cp8 | Procede de securisation d'un langage du type a donnees typees, notamment dans un systeme embarque et systeme embarque de mise en oeuvre du procede |
| GB0012352D0 (en) * | 2000-05-22 | 2000-07-12 | Northern Telecom Ltd | Reliable hardware support for the use of formal languages in high assurance systems |
| US6979266B2 (en) * | 2001-03-30 | 2005-12-27 | Igt | Method and apparatus for downloading peripheral code |
| US6742081B2 (en) * | 2001-04-30 | 2004-05-25 | Sun Microsystems, Inc. | Data storage array employing block checksums and dynamic striping |
| US7003702B2 (en) * | 2002-03-18 | 2006-02-21 | Emc Corporation | End-to-end checksumming for read operations |
| US7086088B2 (en) * | 2002-05-15 | 2006-08-01 | Nokia, Inc. | Preventing stack buffer overflow attacks |
| US7451324B2 (en) * | 2002-05-31 | 2008-11-11 | Advanced Micro Devices, Inc. | Secure execution mode exceptions |
| US7502791B2 (en) * | 2002-11-26 | 2009-03-10 | Norsync Technology A/S | Database constraint enforcer |
| US7392404B2 (en) * | 2002-12-20 | 2008-06-24 | Gemalto, Inc. | Enhancing data integrity and security in a processor-based system |
| US7660985B2 (en) * | 2003-04-30 | 2010-02-09 | At&T Corp. | Program security through stack segregation |
| US8332652B2 (en) * | 2003-10-01 | 2012-12-11 | International Business Machines Corporation | Computing device that securely runs authorized software |
| US7272748B1 (en) * | 2004-03-17 | 2007-09-18 | Symantec Corporation | Method and apparatus to detect and recover from a stack frame corruption |
| FR2867929B1 (fr) * | 2004-03-19 | 2007-03-02 | Gemplus Card Int | Procede d'authentification dynamique de programmes par un objet portable electronique |
| EP1870814B1 (en) * | 2006-06-19 | 2014-08-13 | Texas Instruments France | Method and apparatus for secure demand paging for processor devices |
| US7284107B2 (en) * | 2004-04-30 | 2007-10-16 | Microsoft Corporation | Special-use heaps |
| US20050283770A1 (en) * | 2004-06-18 | 2005-12-22 | Karp Alan H | Detecting memory address bounds violations |
| US20120310892A1 (en) * | 2004-12-21 | 2012-12-06 | Dam Tru Q | System and method for virtual cluster file server |
| US7409719B2 (en) * | 2004-12-21 | 2008-08-05 | Microsoft Corporation | Computer security management, such as in a virtual machine or hardened operating system |
| US7793347B2 (en) * | 2005-02-07 | 2010-09-07 | Rozas Guillermo J | Method and system for validating a computer system |
| US7685601B2 (en) * | 2005-02-28 | 2010-03-23 | Sony Computer Entertainment Inc. | Methods and apparatus for segmented stack management in a processor system |
| US7953980B2 (en) * | 2005-06-30 | 2011-05-31 | Intel Corporation | Signed manifest for run-time verification of software program identity and integrity |
| US7945953B1 (en) * | 2005-07-06 | 2011-05-17 | Symantec Corporation | Method to identify buffer overflows and RLIBC attacks |
| US20090144561A1 (en) * | 2005-07-11 | 2009-06-04 | Davidson Jack W | Method and System for Software Protection Using Binary Encoding |
| JP2007034858A (ja) * | 2005-07-29 | 2007-02-08 | Kyocera Mita Corp | データバックアップ方法及びメモリ装置 |
| US7533322B2 (en) * | 2005-11-03 | 2009-05-12 | Gm Global Technology Operations, Inc. | Method and system for performing function-specific memory checks within a vehicle-based control system |
| US7779389B2 (en) * | 2005-12-30 | 2010-08-17 | Sap Ag | System and method for dynamic VM settings |
| GB0601849D0 (en) * | 2006-01-30 | 2006-03-08 | Ttp Communications Ltd | Method of maintaining software integrity |
| US7581089B1 (en) * | 2006-04-20 | 2009-08-25 | The United States Of America As Represented By The Director Of The National Security Agency | Method of protecting a computer stack |
| US8104021B2 (en) * | 2006-06-09 | 2012-01-24 | Microsoft Corporation | Verifiable integrity guarantees for machine code programs |
| US7826841B2 (en) * | 2008-02-11 | 2010-11-02 | Wei Lu | Open wireless architecture virtualization system for wireless mobile terminal device |
-
2006
- 2006-07-20 EP EP06291183A patent/EP1881404A1/fr not_active Withdrawn
-
2007
- 2007-07-18 WO PCT/EP2007/057417 patent/WO2008009697A1/en not_active Ceased
- 2007-07-18 US US12/374,234 patent/US8646092B2/en active Active
- 2007-07-18 ES ES07787678.7T patent/ES2664020T3/es active Active
- 2007-07-18 EP EP07787678.7A patent/EP2047366B1/en active Active
Also Published As
| Publication number | Publication date |
|---|---|
| US8646092B2 (en) | 2014-02-04 |
| EP1881404A1 (fr) | 2008-01-23 |
| WO2008009697A1 (en) | 2008-01-24 |
| EP2047366B1 (en) | 2017-10-25 |
| EP2047366A1 (en) | 2009-04-15 |
| US20090328231A1 (en) | 2009-12-31 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| ES2664020T3 (es) | Un método de protección dinámica de los datos durante la ejecución de un código de Software en lenguaje intermedio en un aparato digital | |
| US11163702B2 (en) | Apparatus and method for handling page protection faults in a computing system | |
| Akritidis et al. | Preventing memory error exploits with WIT | |
| CN105556466B (zh) | 代码堆栈管理方法 | |
| US20090249289A1 (en) | Detecting memory errors using write integrity testing | |
| JP7432523B2 (ja) | 動的メモリ保護 | |
| CN111400702A (zh) | 一种虚拟化的操作系统内核保护方法 | |
| JP6013626B2 (ja) | 不揮発性メモリ書込み機構 | |
| US10761970B2 (en) | Computerized method and systems for performing deferred safety check operations | |
| Tang et al. | Exploring control flow guard in windows 10 | |
| TW201339971A (zh) | 虛擬機器控制結構陰影化技術 | |
| CN112334884B (zh) | 用于控制对有界指针的使用的装置和方法 | |
| Hohmuth et al. | Applying source-code verification to a microkernel: the VFiasco project | |
| US20090172346A1 (en) | Transitioning between software component partitions using a page table pointer target list | |
| CN118312227A (zh) | 基于eBPF的ELF文件可靠性校验方法、装置、存储介质及电子设备 | |
| US20180046454A1 (en) | Securing secret information in source code verification and at runtime | |
| CN103366814A (zh) | 一种Flash数据安全保护电路和方法 | |
| Dai et al. | Verifying Rust Implementation of Page Tables in a Software Enclave Hypervisor | |
| US8417508B2 (en) | Multiprocessor development environment | |
| Liber | The Good, Bad, and Compromisable Aspects of Linux eBPF | |
| CN105242978B (zh) | 多线程条件下cpu高速缓存行失效的处理方法及装置 | |
| US11074200B2 (en) | Use-after-free exploit prevention architecture | |
| US20240012728A1 (en) | Systems, methods, and media for verifying software | |
| JP6827244B1 (ja) | 監査装置、監査方法、監査プログラムおよび監査システム | |
| Wang et al. | The Study and Realization of a Binary-Based Address Sanitizer Based on Code Injection |