ES2942025T3 - Método para asegurar un código de software - Google Patents

Método para asegurar un código de software Download PDF

Info

Publication number
ES2942025T3
ES2942025T3 ES20722855T ES20722855T ES2942025T3 ES 2942025 T3 ES2942025 T3 ES 2942025T3 ES 20722855 T ES20722855 T ES 20722855T ES 20722855 T ES20722855 T ES 20722855T ES 2942025 T3 ES2942025 T3 ES 2942025T3
Authority
ES
Spain
Prior art keywords
rasp
software code
application
constant data
agent
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
ES20722855T
Other languages
English (en)
Inventor
Peter Garba
Roman Rohleder
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.)
Thales DIS CPL USA Inc
Original Assignee
Thales DIS CPL USA 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 Thales DIS CPL USA Inc filed Critical Thales DIS CPL USA Inc
Application granted granted Critical
Publication of ES2942025T3 publication Critical patent/ES2942025T3/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/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
    • G06F21/54Monitoring 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
    • 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
    • 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
    • G06F21/566Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/62Protecting access to data via a platform, e.g. using keys or access control rules
    • G06F21/6209Protecting access to data via a platform, e.g. using keys or access control rules to a single file or object, e.g. in a secure envelope, encrypted and accessed using a key, or with access control rules appended to the object itself
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/71Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information
    • G06F21/72Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information in cryptographic circuits
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/71Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information
    • G06F21/77Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information in smart cards
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/21Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/2107File encryption
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/21Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/2127Bluffing

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Mathematical Physics (AREA)
  • Virology (AREA)
  • Bioethics (AREA)
  • Storage Device Security (AREA)
  • Debugging And Monitoring (AREA)

Abstract

Método de aseguramiento de un código de software de una aplicación que incluye al menos un dato constante, generando un código de software seguro en un procesador mediante, para al menos un dato constante incluido en el código de software de la aplicación, denominado dato constante actual: fragmentando (S1) dicho dato actual datos constantes en varios fragmentos de datos válidos de longitud aleatoria, codificando y almacenando (S2) dichos fragmentos de datos válidos en ubicaciones aleatorias en el código del software de la aplicación, identificando (S3) todas las apariciones de los datos constantes actuales en el código del software de la aplicación y reemplazando cada uno de ellos con una llamada a un agente de autoprotección de aplicaciones en tiempo de ejecución (RASP) para leer los datos constantes actuales, estando configurado dicho agente RASP para ejecutarse en el entorno de tiempo de ejecución de la aplicación y ser capaz de controlar la ejecución de la aplicación y detectar y prevenir ataques en tiempo real,insertando (S4), en ubicaciones aleatorias de un gráfico de flujo de control del código de software de aplicación, instrucciones de verificación RASP. (Traducción automática con Google Translate, sin valor legal)

Description

DESCRIPCIÓN
Método para asegurar un código de software
Campo de la invención
La presente invención se refiere al campo de la protección del software, y más particularmente de las técnicas contra el análisis estático y dinámico del código.
Antecedentes de la invención
Hoy en día, se proporcionan muchos servicios a los usuarios ejecutando aplicaciones de software. Tales aplicaciones pueden ejecutarse en diversos dispositivos, móviles o no, tales como ordenadores de escritorio, portátiles, terminales de punto de venta, teléfonos inteligentes, etc. Pueden ejecutarse localmente o implementarse a través de una red como una LAN o la Internet. Algunos dispositivos, tales como las tarjetas inteligentes o las tarjetas de crédito bancarias, pueden incluso especializarse para la ejecución de una o varias aplicaciones. Tales aplicaciones se ejecutan usualmente en entornos no seguros donde un atacante puede obtener cierto control o incluso el control total de la operación del sistema que ejecuta la aplicación. En consecuencia, la mayoría de estas aplicaciones necesitan implementar algunos mecanismos de seguridad para proteger los datos manejados por la aplicación para que no sean leídos o modificados por un atacante de este tipo.
Un atacante puede intentar comprender la operación de un software mediante la realización de un análisis estático del código compilado ejecutado por el sistema. Además, también puede usar un depurador para realizar algún análisis dinámico del código, lo que permite leer el contenido de la memoria del sistema mientras se ejecuta el código. Como resultado de ambos análisis, el atacante puede obtener conocimiento de la información sensible que maneja el software.
Se han desarrollado contramedidas contra tales tipos de análisis. Por ejemplo, la ofuscación del código se puede usar para hacer que el código sea casi imposible de leer para un ser humano, lo que hace que sea muy difícil encontrar información sensible en el código. Como otro ejemplo, se ha desarrollado la autoprotección de la aplicación en tiempo de ejecución (RASP), que puede proteger el código contra el análisis dinámico detectando el depurador usado por el atacante.
Un problema es que cada contramedida es efectiva solo contra un tipo de análisis y tiene un coste tanto en términos de tamaño de código como de tiempo de ejecución. Sumar diferentes contramedidas contra diferentes tipos de análisis puede ser muy costoso.
Como resultado, existe la necesidad de un método de protección que permita proteger un código tanto contra análisis estático como dinámico.
El documento US 2010/115287 A1 describe la ocultación de datos constantes dentro de una aplicación. Se accede a las constantes a través de una rutina especial. El documento EP 1 659 515 A1 describe la ejecución segura de procedimientos seguros por medio de la detección de manipulaciones que comprende un contador de ejecución. El documento US 8510571 B1 describe la detección de manipulación de software.
Resumen de la invención
Para este propósito y, según un primer aspecto, la presente invención se refiere por tanto a un método de aseguramiento de un código software de una aplicación que incluye al menos un dato constante,
generando dicho método un código de software seguro y que comprende, realizado por un procesador:
para al menos un dato constante incluido en el código de software de aplicación, llamado dato constante actual: - fragmentar dichos datos constantes actuales en varios segmentos de datos válidos de longitud aleatoria, - codificar y almacenar dichos segmentos de datos válidos en ubicaciones aleatorias en el código de software de aplicación,
- identificar todas las apariciones de los datos constantes actuales en el código de software de aplicación y reemplazar cada uno de ellos con una llamada a un agente de autoprotección de la aplicación en tiempo de ejecución (RASP) para leer los datos constantes actuales, estando configurado dicho agente RASP para ejecutarse en el entorno de tiempo de ejecución de la aplicación y pudiendo controlar la ejecución de la aplicación y detectar y prevenir ataques en tiempo real,
- insertar, en ubicaciones aleatorias de un gráfico de flujo de control del código de software de la aplicación, instrucciones de comprobación de autoprotección de la aplicación en tiempo de ejecución (RASP) que, cuando se ejecutan en el tiempo de ejecución:
• calculan valores de comprobación de RASP,
• notifican al agente de RASP con los valores de comprobación de RASP calculados,
de manera que, en tiempo de ejecución, en respuesta a cada llamada al agente de RASP para leer los datos constantes actuales:
•J el agente de RASP recupera todos los segmentos de datos,
•J cuando no se infringe ninguna comprobación de RASP, el agente de RASP decodifica y combina todos los segmentos de datos válidos y devuelve dichos datos constantes actuales,
•J y, cuando se infringe al menos una comprobación de RASP, el agente de RASP devuelve datos constantes ficticios.
Al hacerlo, los datos constantes válidos se ocultan en el código de software, bajo un formato codificado y fragmentado, y se realizan comprobaciones de seguridad antes de volver a calcular los datos actuales cada vez que se necesitan por cualquier operación del código de software, para asegurarse que el dispositivo de ejecución no está bajo ataque. El método según el primer aspecto puede comprender una etapa de codificación y almacenamiento de segmentos de datos ficticios en ubicaciones aleatorias en el código de software de la aplicación y, cuando se infringe al menos una verificación de RASP, el agente de RASP puede obtener los datos constantes ficticios decodificando y combinando segmentos de datos válidos y ficticios.
Al hacerlo, es más difícil para un atacante volver a calcular los datos constantes por sí mismo y las operaciones realizadas por el dispositivo de ejecución cuando se necesitan datos constantes que permanecen casi iguales independientemente de los resultados de las comprobaciones de RASP, lo que dificulta que un atacante pueda determinar si los valores que obtiene son datos constantes genuinos o un valor ficticio.
Según un segundo aspecto, la invención se refiere a un método de ejecución, por un procesador, de instrucciones de un código de software seguro de una aplicación, en donde dicho código de software seguro es una versión modificada de un código de software de dicha aplicación que comprende al menos unos datos constantes obtenidos realizando el método según el primer aspecto,
en donde el gráfico de flujo de control del código de software seguro comprende comprobaciones de autoprotección de la aplicación en tiempo de ejecución (RASP),
comprendiendo dicho método de ejecución:
• calcular valores de comprobación de RASP,
• notificar al agente de RASP con los valores de comprobación de RASP calculados,
• recuperar, decodificar y combinar, por el agente de RASP, todos los segmentos de datos para obtener y devolver unos datos constantes.
Según un tercer aspecto, esta invención se refiere a un producto de programa informático directamente cargable en la memoria de al menos un ordenador, que comprende instrucciones de código de software para realizar las etapas del método según el primer aspecto cuando dicho producto se ejecuta en el ordenador.
Según un cuarto aspecto, esta invención se refiere a un dispositivo de aseguramiento configurado para asegurar un código de software de una aplicación que incluye al menos un dato constante y que comprende un procesador, una memoria y una interfaz de entrada-salida configurada para realizar las etapas del método según el primer aspecto. Según un quinto aspecto, esta invención se refiere a un medio de almacenamiento legible por máquina no transitorio codificado con instrucciones de un código de software seguro para su ejecución por un procesador, en donde dicho código de software seguro es una versión modificada de un código de software de dicha aplicación que comprende al menos un dato constante obtenido realizando el método según el primer aspecto.
Un método, producto de programa informático, dispositivo de aseguramiento y medio de almacenamiento legible por máquina no transitorio de este tipo según el segundo, tercer, cuarto y quinto aspecto muestran las mismas ventajas que las del método según el primer aspecto.
Breve descripción de las figuras
La siguiente descripción y los dibujos adjuntos exponen en detalle ciertos aspectos ilustrativos y son indicativos de tan solo algunas de las diversas maneras en las que pueden emplearse los principios de las realizaciones. Otras ventajas y características novedosas resultarán evidentes a partir de la siguiente descripción detallada cuando se considere junto con los dibujos y se pretende que las realizaciones descritas incluyan todos tales aspectos y sus equivalentes.
•J La Figura 1 ilustra esquemáticamente un dispositivo de aseguramiento según una realización de la presente invención;
•J la Figura 2 ilustra esquemáticamente un dispositivo de ejecución según una realización de la presente invención;
•J la Figura 3 ilustra esquemáticamente un método de aseguramiento de un código de software según una realización de la presente invención;
•J la Figura 4 ilustra esquemáticamente un método de ejecución de instrucciones de un código de software seguro según una realización de la presente invención.
Descripción detallada de las realizaciones de la invención
En la descripción detallada a continuación, se hace referencia a los dibujos adjuntos que muestran, a modo de ilustración, realizaciones específicas en las que puede ponerse en práctica la invención. Estas realizaciones se describen con detalle suficiente para permitir que los expertos en la técnica pongan en práctica la invención. Debe entenderse que, aunque sean diferentes, las diversas realizaciones de la invención no son necesariamente mutuamente excluyentes. Por ejemplo, un rasgo, estructura o característica particular descrito en el presente documento en relación con una realización puede implementarse en otras realizaciones sin salirse del alcance de la invención. Además, debe entenderse que la ubicación o la disposición de elementos individuales en cada realización descrita puede modificarse sin salirse del alcance de la invención. La descripción detallada a continuación, por lo tanto, no debe tomarse en un sentido limitativo, y el alcance de la presente invención está definido únicamente por las reivindicaciones adjuntas, debidamente interpretadas, junto con el rango completo de equivalentes a los que tienen derecho las reivindicaciones.
La invención tiene como objetivo asegurar un código de software SC de aplicación que incluye al menos un dato constante. Un dato constante de este tipo a proteger puede ser, por ejemplo, una clave criptográfica o datos sensibles tales como un número de cuenta bancaria. Un dato constante de este tipo puede protegerse según la invención ocultando el valor de los datos constantes en el código y reemplazando cada aparición de los datos constantes en el código por instrucciones que realizan comprobaciones de seguridad antes de devolver el valor de los datos constantes.
La invención produce un código de software seguro SSC de manera que sería difícil para un atacante analizar el código de software seguro con un analizador de código o un depurador para obtener el valor de los datos constantes protegidos.
Un primer aspecto de la invención es un método para asegurar un código de software SC antes de su ejecución. Un método de aseguramiento de este tipo se realiza por un dispositivo 10 de aseguramiento que trata el código de software SC que comprende instrucciones de código informático y que produce el código de software seguro SSC. El código de software seguro SSC obtenido puede ejecutarse, a continuación, de forma segura mediante un dispositivo 20 de ejecución.
Un dispositivo 10 de aseguramiento de este tipo puede ser cualquier dispositivo electrónico que incluya un procesador. Por ejemplo, puede ser un ordenador personal PC en el que se instaló un entorno de desarrollo. La Figura 1 describe una realización ilustrativa de un dispositivo de aseguramiento de este tipo que comprende un primer procesador 11, una primera memoria RAM 12, una primera unidad 13 de comunicación, tal como un adaptador de red de Ethernet o Wifi, una primera pantalla 14, un primer medio 15 de almacenamiento masivo, tal como un disco duro, y un primer medio 16 de entrada de usuario. El código de software SC a asegurar puede almacenarse en el primer medio 15 de almacenamiento masivo del dispositivo de aseguramiento. El código de software seguro SSC, obtenido después de que el dispositivo 10 de aseguramiento aplica el método según el primer aspecto al código de software SC, también puede almacenarse en el primer almacenamiento 15 masivo.
La Figura 2 describe una realización ilustrativa del dispositivo 20 de ejecución. Por ejemplo, puede ser un ordenador personal PC, un dispositivo móvil, tal como un teléfono inteligente o una tableta, o un terminal público en un banco o un punto de venta. También puede ser un simple chip incluido en una tarjeta inteligente o una tarjeta de crédito. Puede comprender un segundo procesador 21, una segunda memoria RAM 22, una segunda unidad 23 de comunicación, tal como un adaptador de red de Ethernet o Wi-Fi, una segunda pantalla 24, un segundo medio 25 de almacenamiento masivo, tal como un disco duro, y un segundo medio 26 de entrada de usuario. El código de software seguro SSC, a ejecutar por el segundo procesador 21 del dispositivo 20 de ejecución, puede almacenarse en el segundo medio 25 de almacenamiento masivo del dispositivo de ejecución. El dispositivo 20 electrónico puede ser de cualquier tipo similar o diferente al del dispositivo de ejecución. Ambos dispositivos pueden compartir la misma arquitectura de hardware, tal como x86 o ARM, o tener arquitecturas diferentes.
Etapas del método de aseguramiento
Los siguientes párrafos describen las etapas del método según el primer aspecto de la invención, asegurando el código de software SC y produciendo el código de software seguro SSC, como se representa en la Figura 3. Estas etapas se realizan por el primer procesador 11 del dispositivo 10 de aseguramiento y están todas etiquetadas con la letra “ S” seguida del número de la etapa. Tales etapas se realizan para al menos un dato constante incluido en el código de software de aplicación, denominado dato constante actual. Si el código de software comprende varios datos constantes a proteger, estas etapas pueden repetirse para cada dato constante a proteger.
Cuando sea necesario, se hace referencia a las etapas realizadas por el dispositivo 20 de ejecución cuando se ejecuta el código de software seguro SSC, después de que se completa el método según el primer aspecto. Dichas etapas de ejecución están etiquetadas con la letra “ E” seguida del número de la etapa.
En una primera etapa de aseguramiento S1, el primer procesador fragmenta dichos datos constantes actuales en varios segmentos de datos válidos de longitud aleatoria.
A continuación, en una segunda etapa de aseguramiento S2, el primer procesador codifica y almacena dichos segmentos de datos válidos en ubicaciones aleatorias en el código de software de aplicación.
Al hacerlo, una copia de los datos constantes actuales a proteger se oculta en el código de software en un formato que dificulta que un atacante recupere los datos constantes actuales. Para volver a calcular los datos constantes, uno tiene que saber qué partes del código, correspondientes a los segmentos de datos válidos, deben combinarse y cómo decodificarlas.
El método según la invención puede usarse con cualquier tipo de datos constantes, incluidos en el código bajo cualquier formato. Si es necesario, los datos a proteger se pueden convertir a un formato preferido, tal como una cadena o una matriz de bytes, antes de realizar la primera etapa de aseguramiento S1.
En una tercera etapa de aseguramiento S3, el primer procesador identifica todas las ocurrencias de los datos constantes actuales en el código de software de la aplicación y reemplaza cada una de ellas con una llamada a un agente de autoprotección de la aplicación de tiempo de ejecución (RASP) para leer los datos constantes actuales.
Cuando la aplicación se ejecuta por el dispositivo de ejecución, el agente de RASP está configurado para ejecutarse en el entorno de tiempo de ejecución de la aplicación y puede controlar la ejecución de la aplicación y de detectar y prevenir ataques en tiempo real. Al tener acceso a todo el entorno de tiempo de ejecución de la aplicación, de hecho, el motor de RASP puede determinar si se está ejecutando un depurador, si el dispositivo de ejecución ha sido manipulado, para verificar la identidad del dispositivo de ejecución...
Para realizar una detección de este tipo de un posible ataque, se insertan instrucciones de comprobación de RASP, durante una cuarta etapa de aseguramiento S4, por el primer procesador, en ubicaciones aleatorias del gráfico de flujo de control del código de software de aplicación.
Cuando la aplicación se ejecuta por el dispositivo de ejecución, durante una primera etapa de ejecución E1, estas instrucciones de comprobación de RASP calculan valores de comprobación de RASP, indicativos del resultado de una comprobación tal como: ¿se está usando un depurador? ¿Cuál es el ID del dispositivo de ejecución? ¿El dispositivo de ejecución ha sido manipulado o liberado? A continuación, durante una segunda etapa de ejecución e2, estos valores de comprobación de RASP se notifican al agente de RASP, lo que le permite determinar si el dispositivo de ejecución está en un estado seguro o si está siendo atacado.
Las llamadas al agente de RASP insertadas en el código en lugar de cada aparición de los datos constantes actuales son de manera que, en tiempo de ejecución, durante una tercera etapa de ejecución E3, en respuesta a cada llamada al agente de RASP para leer los datos constantes actuales:
•J el agente de RASP recupera todos los segmentos de datos,
•J cuando no se infringe ninguna comprobación de RASP, el agente de RASP decodifica y combina todos los segmentos de datos válidos y devuelve dichos datos constantes actuales,
•J y, cuando se infringe al menos una comprobación de RASP, el agente de RASP devuelve datos constantes ficticios.
Durante la segunda etapa de aseguramiento S2, el primer procesador también puede codificar y almacenar segmentos de datos ficticios en ubicaciones aleatorias en el código de software de aplicación. Al hacerlo, los segmentos de datos válidos correspondientes a datos constantes válidos se entrelazan en el código de software seguro con segmentos de datos ficticios, lo que dificulta que un atacante determine qué segmentos de datos se combinarán para recuperar los datos constantes. En un caso de este tipo, durante la tercera etapa de ejecución E3, cuando se infringe al menos una comprobación de RASP, el agente de RASP obtiene los datos constantes ficticios que devolverá el agente de RASP decodificando y combinando segmentos de datos ficticios y válidos.
Ejecución de código de software seguro
Después de que el dispositivo de aseguramiento haya realizado las etapas descritas en este punto anteriormente, produciendo un código de software seguro, un código de software seguro de este tipo puede ejecutarse de forma segura por el segundo procesador 21 del dispositivo 20 de ejecución:
•J durante una primera etapa de ejecución E1, el segundo procesador 21 calcula valores de comprobación de RASP.
•J durante una segunda etapa de ejecución E2, el segundo procesador 21 notifica al agente de RASP los valores de comprobación de RASP calculados.
•J durante una tercera etapa de ejecución E3, el agente de RSAP ejecutado por el segundo procesador 21 recupera, decodifica y combina todos los segmentos de datos para obtener y devolver unos datos constantes.
Otros aspectos
En un segundo aspecto, la invención también se refiere al método de ejecución de las instrucciones del código de software seguro, según son ejecutadas por el segundo procesador 21 del dispositivo 20 de ejecución. A continuación, dicho código de software seguro es una versión modificada del código de software de dicha aplicación que comprende al menos un dato constante sobre el que se ha aplicado el método según el primer aspecto en este punto descrito anteriormente. El método de ejecución de las instrucciones del código de software seguro comprende las etapas de ejecución E1 a E3 descritas en este punto anteriormente:
• calcular valores de comprobación de RASP,
• notificar al agente de RASP con los valores de comprobación de RASP calculados,
• recuperar, decodificar y combinar, por el agente de RASP, todos los segmentos de datos para obtener y devolver unos datos constantes.
Según un tercer aspecto, la invención también se refiere a un producto de programa informático directamente cargable en la memoria de al menos un ordenador, que comprende instrucciones de código de software para realizar las etapas del método según el primer aspecto cuando dicho producto se ejecuta en el ordenador.
En un cuarto aspecto, la invención también se refiere a un medio de almacenamiento legible por máquina no transitorio codificado con las instrucciones del código de software seguro obtenido después de que el primer procesador 11 del dispositivo 10 de aseguramiento haya realizado al menos las etapas S1 a S4 del método según el primer aspecto descrito en este punto anteriormente. A continuación, dicho código de software seguro es una versión modificada del código de software no seguro en el que se ha aplicado dicho método según el primer aspecto.
Como resultado, los métodos propuestos permiten proteger los datos constantes en el código de software tanto contra el análisis estático como contra el análisis dinámico.

Claims (1)

  1. REIVINDICACIONES
    Un método de aseguramiento de un código de software de una aplicación que incluye al menos un dato constante,
    generando dicho método un código de software seguro y que comprende realizado por un procesador (11):
    para al menos un dato constante incluido en el código de software de aplicación, llamado dato constante actual:
    - fragmentar (S1) dichos datos constantes actuales en varios segmentos de datos válidos de longitud aleatoria,
    - codificar y almacenar (S2) dichos segmentos de datos válidos en ubicaciones aleatorias en el código de software de aplicación,
    - identificar (S3) todas las apariciones de los datos constantes actuales en el código de software de aplicación y reemplazar cada uno de ellos con una llamada a un agente de autoprotección de la aplicación en tiempo de ejecución (RASP) para leer los datos constantes actuales, estando configurado dicho agente RASP para ejecutarse en el entorno de tiempo de ejecución de la aplicación y pudiendo controlar la ejecución de la aplicación y detectar y prevenir ataques en tiempo real,
    - insertar (S4), en ubicaciones aleatorias de un gráfico de flujo de control del código de software de la aplicación, instrucciones de comprobación de autoprotección de la aplicación en tiempo de ejecución (RASP) que cuando se ejecutan en el tiempo de ejecución:
    • calculan los valores de comprobación de RASP,
    • notifican al agente de RASP con los valores de comprobación de RASP calculados,
    de modo que, en tiempo de ejecución, en respuesta a cada llamada al agente de RASP para leer los datos constantes actuales:
    y el agente RASP recupera todos los segmentos de datos,
    y cuando no se infringe ninguna comprobación de RASP, el agente de RASP decodifica y combina todos los segmentos de datos válidos y devuelve dichos datos constantes actuales,
    y y cuando se infringe al menos una comprobación de RASP, el agente de RASP devuelve datos constantes ficticios.
    El método de la reivindicación 1, que comprende una etapa de codificar y almacenar (S2) segmentos de datos ficticios en ubicaciones aleatorias en el código de software de aplicación, y en donde cuando se infringe al menos una comprobación de RASP, el agente de RASP obtiene los datos constantes ficticios decodificando y combinando segmentos de datos válidos y ficticios.
    Un método de ejecución, por un procesador (20), de instrucciones de un código de software seguro de una aplicación,
    en donde dicho código de software seguro es una versión modificada de un código de software de dicha aplicación que comprende al menos un dato constante obtenido realizando el método de la reivindicación 1 o 2,
    en donde el gráfico de flujo de control del código de software seguro comprende comprobaciones de autoprotección de la aplicación en tiempo de ejecución (RASP),
    comprendiendo dicho método de ejecución:
    • calcular (E1) valores de comprobación de RASP,
    • notificar (E2) al agente de RASP con los valores de comprobación de RASP calculados, • recuperar, decodificar y combinar (E3), por el agente de RASP, todos los segmentos de datos para obtener y devolver unos datos constantes.
    Un producto de programa informático directamente cargable en la memoria de al menos un ordenador, que comprende instrucciones de código de software para realizar las etapas de la reivindicación 1 cuando dicho producto se ejecuta en el ordenador.
    Un dispositivo de aseguramiento (10) configurado para asegurar un código de software de una aplicación que incluye al menos un dato constante y que comprende un procesador (11), una memoria (12, 15) y una interfaz (16) de entrada-salida configurado para realizar las etapas de la reivindicación 1.
    6. Un medio de almacenamiento legible por máquina no transitorio codificado con instrucciones de un código de software seguro para su ejecución por un procesador (20), en donde:
    dicho código de software seguro es una versión modificada de un código de software de dicha aplicación que comprende al menos un dato constante obtenido realizando el método de la reivindicación 1 o 2.
ES20722855T 2019-04-10 2020-04-08 Método para asegurar un código de software Active ES2942025T3 (es)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
EP19168527.0A EP3722980A1 (en) 2019-04-10 2019-04-10 Method to secure a software code
PCT/US2020/027201 WO2020210306A1 (en) 2019-04-10 2020-04-08 Method to secure a software code

Publications (1)

Publication Number Publication Date
ES2942025T3 true ES2942025T3 (es) 2023-05-29

Family

ID=66105119

Family Applications (1)

Application Number Title Priority Date Filing Date
ES20722855T Active ES2942025T3 (es) 2019-04-10 2020-04-08 Método para asegurar un código de software

Country Status (4)

Country Link
US (1) US20220156365A1 (es)
EP (2) EP3722980A1 (es)
ES (1) ES2942025T3 (es)
WO (1) WO2020210306A1 (es)

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8510571B1 (en) * 2003-03-24 2013-08-13 Hoi Chang System and method for inserting security mechanisms into a software program
US7383583B2 (en) * 2004-03-05 2008-06-03 Microsoft Corporation Static and run-time anti-disassembly and anti-debugging
US7516902B2 (en) * 2004-11-19 2009-04-14 Proton World International N.V. Protection of a microcontroller
US8874928B2 (en) * 2008-10-31 2014-10-28 Apple Inc. System and method for obfuscating constants in a computer program
US8386803B2 (en) * 2009-11-18 2013-02-26 Apple Inc. System and method for data obfuscation based on discrete logarithm properties
US10599820B2 (en) * 2014-04-23 2020-03-24 Nxp B.V. Control flow flattening for code obfuscation where the next block calculation needs run-time information
EP3012762A1 (en) * 2014-10-24 2016-04-27 Thomson Licensing Control flow graph flattening device and method

Also Published As

Publication number Publication date
EP3722980A1 (en) 2020-10-14
EP3953845A1 (en) 2022-02-16
WO2020210306A1 (en) 2020-10-15
EP3953845B1 (en) 2023-03-08
US20220156365A1 (en) 2022-05-19

Similar Documents

Publication Publication Date Title
US11507671B1 (en) Detection and healing of vulnerabilities in computer code
ES2835793T3 (es) Autenticación de punteros de código para el control de flujo de hardware
ES2873979T3 (es) Método para asegurar un código de software
US8893275B2 (en) JCVM bytecode execution protection against fault attacks
US20110191848A1 (en) Preventing malicious just-in-time spraying attacks
KR101216995B1 (ko) 인덱스 테이블 기반 코드 암호화 및 복호화 장치 및 그 방법
TWI449392B (zh) 軟體執行的隨機化
BR112012031052B1 (pt) método implementado por processador voltado para assegurar a integridade do software
US9256756B2 (en) Method of encryption and decryption for shared library in open operating system
US20160171213A1 (en) Apparatus and method for controlling instruction execution to prevent illegal accesses to a computer
US9003184B2 (en) Computing device and method for protecting software of the computing device
TW201523256A (zh) 確保機板上匯流排交易安全的系統和方法
Cyr et al. Low-cost and secure firmware obfuscation method for protecting electronic systems from cloning
US20090125728A1 (en) Security method of system by encoding instructions
ES2942025T3 (es) Método para asegurar un código de software
US11256786B2 (en) Method to secure a software code
CN112100686B (zh) 一种基于arm指针验证的内核代码指针完整性保护方法
US20230017231A1 (en) Securely executing software based on cryptographically verified instructions
US11677541B2 (en) Method and device for secure code execution from external memory
US20220292182A1 (en) Method for the execution of a binary code of a computer program by a microprocessor
EP2966587A1 (en) Method of protecting software program by corrupting memory chunks, and device for implementing said method
Giunta et al. A redundancy-based attack detection technique for java card bytecode
US20210157925A1 (en) Selective runtime activation of anti-rop defense
KR20150055992A (ko) 프로그램 보호 장치
Chen et al. Impact of Dynamic Binary Translators on Security