OFUSCACION DE LOS RASTROS DE EJECUCION DE UN CODIGO DE PROGRAMA DE ORDENADOR.
Un método implementado por ordenador de generación de código de programa de ordenador protegido contra la manipulación,
el método que comprende:
- obtener una representación (101) de un código de programa de ordenador, el código de programa de ordenador que se adapta para hacer que un sistema de procesamiento de datos realice una pluralidad de tareas de cálculo en un primer orden de ejecución, cada tarea de cálculo que se representa en la representación del código de programa de ordenador por al menos una sentencia de programa;
- obtener (103) una pluralidad de órdenes de ejecución alternativos de las tareas de cálculo;
- generar (105) una representación ejecutable del código de programa adaptado a hacer que un sistema de procesamiento de datos seleccione un orden de ejecución aleatorizado a partir de la pluralidad de órdenes de ejecución alternativos y ejecutar las tareas de cálculo en el orden de ejecución aleatorizado seleccionado
caracterizado por generar una representación ejecutable del código de programa además comprende incluir las instrucciones ejecutables por ordenador (310) en la representación ejecutable del código de programa adaptado a hacer que un sistema de procesamiento de datos realice las siguientes tareas, cuando la imagen del código de programa se ejecuta por el sistema de procesamiento de datos:
a) realizar una inicial de las tareas de cálculo;
b) seleccionar una tarea de cálculo consecutiva a partir de un conjunto de sucesoras alternativas de la tarea de cálculo realizada en base a una representación de un conjunto de restricciones de precedencia impuestas en el orden de ejecución de las tareas de cálculo;
c) realizar la tarea de cálculo seleccionada;
d) repetir los pasos b) y c) hasta que han sido realizadas todas las tareas de cálculo
Tipo: Patente Europea. Resumen de patente/invención. Número de Solicitud: E07388048.
Solicitante: TELEFONAKTIEBOLAGET LM ERICSSON (PUBL).
Nacionalidad solicitante: Suecia.
Dirección: KORSBARSVAGEN 8,223 55 LUND.
Inventor/es: JOHANSSON, BJORN, EKER,JOHAN, VON PLATEN,CARL.
Fecha de Publicación: .
Fecha Solicitud PCT: 29 de Junio de 2007.
Fecha Concesión Europea: 27 de Enero de 2010.
Clasificación Internacional de Patentes:
- G06F21/00N3E
Clasificación PCT:
- G06F21/22
Países PCT: Austria, Bélgica, Suiza, Alemania, Dinamarca, España, Francia, Reino Unido, Grecia, Italia, Liechtensein, Luxemburgo, Países Bajos, Suecia, Mónaco, Portugal, Irlanda, Eslovenia, Finlandia, Rumania, Chipre, Lituania, Letonia, Ex República Yugoslava de Macedonia, Albania.
Fragmento de la descripción:
Ofuscación de los rastros de ejecución de un código de programa de ordenador.
Campo técnico
La invención se refiere a la protección contra la manipulación del código de un programa de ordenador, en particular ofuscando el rastro de ejecución de un código de programa de ordenador.
Antecedentes
La manipulación de programas informáticos es un ataque que tiene el propósito de alterar la forma en que funciona una parte del programa informático de tal manera que conlleva beneficios ilegítimos al atacante. Los objetivos de la manipulación podrían ser eludir/desactivar la protección de copia o los mecanismos de seguridad, para extraer material secreto o protegido por derechos de autor, o introducir código maligno tal como virus de ordenador.
En muchas situaciones, los beneficios ilegítimos pueden implicar desventajas financieras sustanciales para los productores de programas informáticos. Consecuentemente, se puede esperar tanto de los atacantes como de los vendedores de programas informáticos que hagan esfuerzos para romper y mejorar respectivamente los mecanismos de protección contra la manipulación de los programas informáticos. En el contexto de los teléfonos móviles, la protección del bloqueo SIM y otros componentes sensibles del soporte lógico, por ejemplo la Gestión Digital de Derechos (DRM), son de particular interés. Adicionalmente, la protección contra la manipulación de otras entidades de soporte lógico y/o para otros propósitos y/o en conexión con otros usos también puede ser beneficiosa.
Para modificar un componente del programa informático, un atacante típicamente tiene que adquirir al menos un conocimiento parcial de cómo funciona el componente del programa informático. La manipulación de los programas informáticos de esta manera se puede retardar si no prevenir haciendo más difícil la ingeniería inversa. Las transformaciones, que hacen más complicados de analizar los programas informáticos son útiles para este fin; a tales transformaciones se refieren generalmente como la ofuscación.
Las técnicas para el soporte lógico de ingeniería inversa se pueden dividir a groso modo en dos grupos de técnicas: Análisis de código estático (o "fuera de línea") y análisis de código dinámico (o "en vivo"). Cuando se realiza análisis dinámico, se observa cómo se ejecuta el programa informático. En contraste, el análisis estático se limita normalmente a un examen/análisis de alguna representación del código de programa, sin ejecutarlo normalmente. Una técnica empleada en análisis dinámico es la comparación de los rastros de ejecución.
Un rastro de ejecución de un programa típicamente incluye una secuencia de direcciones de memoria desde la cual se leen las instrucciones ejecutables durante la ejecución de un programa. Los rastros de ejecución de esta manera se pueden recoger ejecutando el programa, por ejemplo, usando un soporte de componentes físicos específicos (denominados almacenadores de rastro) o mediante una grabación de las direcciones basada en soporte lógico. Usando un rastro de ejecución y el código ejecutable del programa, se puede recrear de esta manera la secuencia real de las instrucciones.
Proporcionando dos conjuntos de estímulos y comparando las diferencias en los rastros de ejecución resultantes, un atacante puede obtener conocimiento del componente del soporte lógico. En particular, la comparación de los rastros de ejecución puede identificar los puntos de decisión críticos del programa. En el contexto del bloqueo SIM y las soluciones DRM de los dispositivos móviles, las pruebas para firmas correctas o sumas de comprobación son ejemplos de puntos de decisión críticos. Por ejemplo, un atacante puede comparar los rastros de ejecución del programa informático ejecutado por dos dispositivos móviles distintos, por ejemplo un dispositivo bloqueado de operador y un dispositivo que no está bloqueado por el operador, a fin de obtener información sobre qué partes del programa son relevantes para la funcionalidad de bloqueo SIM.
Los intentos previos de hacer ingeniería inversa por medio del más difícil análisis dinámico incluyen intentos de limitar las oportunidades de un atacante para observar como se está ejecutando el programa. No obstante, tales contra medidas generalmente han sido específicas a una plataforma particular y/o una herramienta de ingeniería inversa específica, tal como un programa de depuración específico.
Un ejemplo de tales contra medidas incluye el cifrado del el código ejecutable y el uso de componentes físicos específicos que combinan el descifrado y la ejecución del código. Incluso aunque las técnicas de descifrado basadas en componentes físicos implementados adecuadamente pueden ofrecer buena protección, esta protección se logra al precio de componentes físicos específicos adicionales.
Otro planteamiento, conocido como técnicas anti depuración, tiene el propósito de complicar el proceso de observar la ejecución del programa en un programa de depuración particular. En algunas plataformas, el código de ejecución puede consultar los sistemas operativos para un posible programa de depuración que se añade al proceso y por ejemplo terminar si este es el caso. Otra opción es interferir con las técnicas usadas por el programa de depuración, por ejemplo saboteando con el establecimiento de puntos de ruptura. No obstante, las técnicas anti depuración son específicas a un programa de depuración específico y no proporcionan una técnica de protección contra la manipulación de propósito general. Adicionalmente, los simuladores de conjunto de instrucciones y los programas de depuración soportados en componentes físicos se usan normalmente cuando se depuran sistemas integrados, reduciendo de esta manera la utilidad práctica de las técnicas anti depuración. Adicionalmente, los rastros de ejecución se pueden recoger aún usando almacenadores de rastros que se implementan por completo en los componentes físicos.
La ofuscación es una técnica usada para complicar el código. La ofuscación hace más difícil de comprender el código cuando se descompila, pero típicamente no tiene efecto en la funcionalidad del código. La ofuscación de programas se puede usar para proteger los programas haciéndolo más difíciles de hacer ingeniería inversa.
Talleres 2005. LNCS 3823, páginas 916-925, 2005, propone un esquema de tal ofuscación. No obstante, este método se informó que es vulnerable al análisis dinámico.
La WO 01/69355 expone un método para integrar una marca de agua en un programa informático insertando rutinas adicionales en el programa a lo largo de un número de flujos de control adicionales establecidos aleatoriamente.
La patente US 6.668.325 y el artículo "Marca de agua, Inviolabilidad, y Ofuscación - Herramientas para la protección de los Programas Informáticos" por Christian S. Collberg y Clark Thomborson, Transacciones del IEEE en ingeniería de Programas Informáticos, 28:6 (Junio de 2002), describe una pluralidad de transformaciones de ofuscación. En tal transformación se introduce sentencias si redundantes. La condición de la sentencia si se denomina predicado opaco el cual tiene alguna propiedad que se conoce cuando el programa se encubre pero es difícil identificar por medio del análisis estático del código. Los predicados opacos que siempre evalúan por ejemplo VERDADERO se pueden usar en tal sentencia si. Consecuentemente, en el tiempo de ofuscación se conoce que solamente se ejecutará una de las ramas de la sentencia sí. De esta manera, durante la ofuscación el código que va a ser ejecutado se puede insertar en esa rama, mientras que la otra rama que nunca se ejecuta puede incluir algún código "ficticio" arbitrario. El documento de la técnica previa anterior además describe el uso de predicados opacos cuyo resultado puede ser tanto VERDADERO como FALSO para la selección de uno de dos casos alternativos de una tarea de cálculo dada. No obstante, incluso aunque esta técnica hace más difícil el análisis estático del código, no aumenta de manera eficiente la dificultad de un análisis dinámico que intenta identificar los puntos de decisión críticos.
Por consiguiente, se mantiene un problema general para proporcionar métodos eficientes de código de programa de ofuscación a fin de hacer más difícil obtener información útil a partir de un análisis del rastro de ejecución del programa, por ejemplo para identificar los puntos de decisión interesantes y/u otros puntos críticos.
Compendio
El anterior y otros problemas...
Reivindicaciones:
1. Un método implementado por ordenador de generación de código de programa de ordenador protegido contra la manipulación, el método que comprende:
- obtener una representación (101) de un código de programa de ordenador, el código de programa de ordenador que se adapta para hacer que un sistema de procesamiento de datos realice una pluralidad de tareas de cálculo en un primer orden de ejecución, cada tarea de cálculo que se representa en la representación del código de programa de ordenador por al menos una sentencia de programa;
- obtener (103) una pluralidad de órdenes de ejecución alternativos de las tareas de cálculo;
- generar (105) una representación ejecutable del código de programa adaptado a hacer que un sistema de procesamiento de datos seleccione un orden de ejecución aleatorizado a partir de la pluralidad de órdenes de ejecución alternativos y ejecutar las tareas de cálculo en el orden de ejecución aleatorizado seleccionado
caracterizado por generar una representación ejecutable del código de programa además comprende incluir las instrucciones ejecutables por ordenador (310) en la representación ejecutable del código de programa adaptado a hacer que un sistema de procesamiento de datos realice las siguientes tareas, cuando la imagen del código de programa se ejecuta por el sistema de procesamiento de datos:
a) realizar una inicial de las tareas de cálculo;
b) seleccionar una tarea de cálculo consecutiva a partir de un conjunto de sucesoras alternativas de la tarea de cálculo realizada en base a una representación de un conjunto de restricciones de precedencia impuestas en el orden de ejecución de las tareas de cálculo;
c) realizar la tarea de cálculo seleccionada;
d) repetir los pasos b) y c) hasta que han sido realizadas todas las tareas de cálculo.
2. Un método de acuerdo con la reivindicación 1, en donde cada uno de los órdenes de ejecución alternativos se adaptan para hacer que el sistema de procesamiento de datos produzca la misma salida de programa que el primer orden de ejecución, cuando dicho código de programa se ejecuta por dicho sistema de procesamiento de datos.
3. Un método de acuerdo con la reivindicación 1 o 2, que además comprende representar los órdenes de ejecución alternativos como un grafo de precedencia (200).
4. Un método de acuerdo con alguna de las reivindicaciones 1 hasta 3, que comprende:
- recibir una representación de entrada indicativa de una pluralidad de sentencias de programa en un orden secuencial predeterminado;
- agrupar las sentencias de programa para obtener la pluralidad de tareas de cálculo
- identificar la pluralidad de órdenes de ejecución alternativos.
5. Un método de acuerdo con cualquiera de las reivindicaciones 1 hasta 4, en donde la representación de un conjunto de restricciones de precedencia incluye una representación de un grafo de precedencia (200); y en donde generar una representación ejecutable del código de programa además comprende incluir las instrucciones ejecutables por ordenador en la representación ejecutable del programa de ordenador adaptado a hacer que un sistema de procesamiento de datos mantenga un estado de ejecución, el estado de ejecución que se define por al menos una del subconjunto de tareas de cálculo que permanecen para ser ejecutadas y el subconjunto de tareas de cálculo que permanecen para ser ejecutadas y cuyas predecesoras en el grafo de precedencia han sido todas ejecutadas.
6. Un método de acuerdo con la reivindicación 5, en donde una representación del estado de ejecución incluye además un elemento datos semilla para inicializar una función para generar una secuencia aleatorizada de elementos de datos.
7. Un método de acuerdo con la reivindicación 6, que comprende generar las representaciones ejecutables respectivas del código de programa para las instalaciones distintas del código de programa, cada representación ejecutable del código de programa que incluye un elemento de datos semilla respectivo indicativo de la instalación correspondiente.
8. Un método de acuerdo con cualquiera de las reivindicaciones 1 hasta 7, que además comprende insertar las instrucciones ejecutables dentro de cada una de las tareas de cálculo para realizar el paso de seleccionar la tarea de cálculo consecutiva.
9. Un método de acuerdo con cualquiera de las reivindicaciones 1 hasta 8, que además comprende generar las instrucciones ejecutables de múltiples casos de la tarea de cálculo; y en donde seleccionar la tarea de cálculo incluye seleccionar uno de los múltiples casos de las tareas de cálculo.
10. Un método de acuerdo con la reivindicación 9, que además comprende realizar una o más transformaciones de ofuscación en al menos uno de los múltiples casos.
11. Un método de acuerdo con cualquiera de las reivindicaciones 1 hasta 10, en donde generar una representación ejecutable del código de programa comprende generar una representación ejecutable del código de programa que incluye el código de programa para hacer que un sistema de procesamiento de datos seleccione el mismo orden de ejecución aleatorizado a partir de la pluralidad de órdenes de ejecución alternativos durante cada ejecución de la representación ejecutable generada del código de programa.
12. Un método de acuerdo con cualquiera de las reivindicaciones 1 hasta 11, que comprende generar una pluralidad de representaciones ejecutables del código de programa, cada una incluyendo el código de programa para hacer que un sistema de procesamiento de datos seleccione un orden de ejecución aleatorizado distinto.
13. Un método de acuerdo con cualquiera de las reivindicaciones 1 hasta 12, en donde la representación de entrada del código de programa incluye al menos un módulo de código fuente de entrada (101).
14. Un método de acuerdo con cualquiera de las reivindicaciones 1 hasta 13, que comprende al menos un módulo de código fuente transformado (109).
15. Un sistema de procesamiento de datos configurado para realizar los pasos del método de acuerdo con cualquiera de las reivindicaciones 1 hasta 14.
16. Un producto de programa de ordenador que comprende medios de código de programa ejecutable por ordenador adaptado para hacer que un sistema de procesamiento de datos realice el método de acuerdo a cualquiera de las reivindicaciones 1 hasta 14, cuando los medios de código de programa se ejecutan por el sistema de procesamiento de datos.
17. Un producto de programa de ordenador de acuerdo con la reivindicación 16, que comprende un medio de lectura por ordenador que ha almacenado inmediatamente después los medios de código de programa.
18. Un producto de programa de ordenador de acuerdo con la reivindicación 16 o 17, en donde el producto de programa de ordenador comprende un compilador de soporte lógico que comprende la funcionalidad adaptada para hacer que el sistema de procesamiento de datos realice el método de acuerdo con cualquiera de las reivindicaciones 1 hasta 13 como uno de un número de aprobaciones de compilación realizados por el compilador de soporte lógico.
Patentes similares o relacionadas:
Ejecución controlada de un programa por un soporte portátil de datos, del 19 de Julio de 2013, de GIESECKE & DEVRIENT GMBH: Un procedimiento para la ejecucion controlada de un programa por un soporte portatil de datos quecomprende una memoria de programas, un nixie° […]
Herramienta informática de gestión de documentos numéricos, del 24 de Abril de 2013, de INRIA INSTITUT NATIONAL DE RECHERCHE EN INFORMATIQUE ET EN AUTOMATIQUE: Dispositivo informático de gestión de documentos, que comprende una memoria para almacenar contenidos de documentos, que tienen referencias de temporalidad, […]
Método de implementación de un procesador para garantizar la integridad de un software, del 18 de Julio de 2012, de NAGRAVISION S.A.: Método de implementación de un procesador para garantizar la integridad de un software en una memoria deprograma, dicho software comprendiendo una […]
PROYECCIÓN DE FIABILIDAD DESDE UN ENTORNO DE CONFIANZA A UN ENTORNO SIN CONFIANZA, del 13 de Marzo de 2012, de MICROSOFT CORPORATION: Un sistema adaptado para ejecutar sistemas operativos plurales en un único procesador, comprendiendo el sistema: un entorno operativo sin confianza que comprende […]
INICIO DE SESIÓN EN APLICACIONES DE SOPORTE LÓGICO QUE TIENEN CARACTERÍSTICAS DE SUGURIDAD, del 5 de Marzo de 2012, de MICROSOFT CORPORATION: Un procedimiento de inicio de sesión en una aplicación de soporte lógico, en el que la aplicación de soporte lógico tiene una o más características de seguridad, que […]
UNIDAD DE CONTROL, del 1 de Julio de 2008, de GIESECKE & DEVRIENT GMBH SECARTIS AG: Unidad de mando , dotada de un microprocesador, con una memoria programable, con una caja y con, como mínimo, una línea de datos que sale […]
PROCEDIMIENTO DE UTILIZACION DE PROGRAMAS INFORMATICOS Y SISTEMA INFORMATICO PARA SU APLICACION, del 1 de Mayo de 2008, de GEMPLUS: Procedimiento asegurado de utilización de un programa informático en un microordenador que consiste en introducir un soporte de memorización electrónico amovible […]
PROTECCION DE SISTEMAS DE ORDENADORES, del 1 de Mayo de 2008, de QINETIQ LIMITED: Un sistema de ordenadores para recibir datos que entran desde una fuente externa , estando dispuesto el sistema de ordenadores para proporcionar […]