Published 17 years ago
(updated 13 years ago)
Mecanismo de Protección o Amenaza
Resumen
La ofuscación de código dinámica es una nueva forma de enmascarar el código, a lo largo de este artículo veremos las ventajas y riesgos que implican el descubrimiento de esta nueva técnica, así como algunos de las métodos que existen tanto para ofuscar el código, como para lograr la desofuscación del mismo, además de las principales formas y lugares donde esta técnica puede ser aplicada.La ofuscación de código dinámica es una técnica que transforma el código en garabatos incomprensibles, esta técnica puede ser utilizada con dos propósitos principales, el primero como una herramienta de protección de derechos de autor del código de los programas, y el segundo como una amenaza a los mecanismos actuales de seguridad en la red.
La mayoría de las empresas tratan de evitar que su código fuente pueda ser obtenido por alguien más, es por esto que hacen uso de herramientas que les permitan evitar que alguien lo pueda obtener.
Sin embargo la ofuscación también sirve como un mecanismo de para generar muchas versiones del mismo código, logrando de esta manera sobrepasar los mecanismos usuales de análisis de los sistemas de seguridad, como los antivirus.
La amenaza oculta
En la actualidad, a pesar de que los antivirus son cada día más potentes y hacen uso de técnicas mucho más complejas para lograr evitar las amenazas, nace una nueva técnica que logra poner en dificultad a estos sistemas actuales de defensa, esta nueva técnica es llamada ofuscación de código dinámica, y se basa en la transformación o enmascaramiento del código para evitar que se pueda determinar la forma que tenía originalmente.
La ofuscación de código dinámica empezó a funcionar con javascript un poco después de que fuera liberado este lenguaje en 1995, se hizo por la principal razón de proteger el código que tanto trabajo les costaba desarrollar a los programadores, y que cualquier usuario podía ver usando un explorador con esas características.

Figura 1. Existen muchas herramientas que ayudan a la fácil ofuscación de código, las cuales permiten proteger los códigos dinámicos o de scripting, aunque también se puede utilizar con fines malignos
Mecanismo de protección
El código fuente de un programa es muy valioso, siendo una creación intelectual, es susceptible de ser utilizado sin haber tenido que pasar por un proceso creativo nuevamente, es decir, una vez que se desarrollo el código puede volver a ser utilizado sin haber tenido que emplear tiempo en su desarrollo, es por esto que las empresas y desarrolladores protegen tan celosamente su código.
Una manera de entre muchas que existen en la actualidad para proteger su código, en otras palabras su propiedad intelectual, es la ofuscación, que se ofrece como una manera de poder ejecutar el código por otras personas, sin que estas puedan llegar a entender cómo funciona en realidad.
La ofuscación de código ha sido propuesta por un gran número de investigadores como un medio para dificultar la realización de ingeniería inversa sobre el código. Pero las transformaciones típicas de ofuscación se basan en razonamientos estáticos sobre ciertas propiedades de los programas, lo cual da como resultado que la ofuscación del código pueda ser fácilmente desentrañada mediante una combinación de análisis estáticos y dinámicos.
Conceptualmente se pueden distinguir dos tipos de ofuscación de código: la ofuscación superficial y la ofuscación profunda. La primera siendo solamente un reacomodo de la sintaxis del programa, ya sea cambiando nombres de variables o algún otro método similar, y la segunda que intenta cambiar la estructura actual del programa, cambiando su control de flujo o modo de referenciar sus datos, esta última teniendo menos efecto en el proceso de estar oculto a la ingeniería inversa, ya que no se ocupa de disfrazar la sintaxis del código.
Técnicas de ofuscación
Una de las técnicas de ofuscación es la llamada “aplanamiento de control de flujo básico”, la cual intenta esconder la lógica de flujo del programa para que simule que todos los bloques básicos tienen el mismo antecesor y el mismo predecesor.
El control de flujo actual es guiado mediante un despachador de variables, el cual en tiempo de ejecución asigna a cada bloque básico un valor variable, que indica cual es el siguiente bloque básico que debe ser ejecutado a continuación. Entonces un bloque switch utiliza el despachador de variable para saltar de manera indirecta, a través de una tabla de saltos hacia el sucesor de control de flujo que debe ser.
Existen varias mejoras en esta técnica de ofuscación, siendo una de ellas el flujo de datos interprocedimental, las variables que asignaba el despachador se encontraban disponibles dentro de la función misma, debido a lo cual aunque el comportamiento del control de flujo del código ofuscado no sea obvio, puede ser reconstruido mediante un análisis de constantes asignadas por el despachador de variables.
La ofuscación del código puedes ser más difícil de reconstruir si además de lo anterior agregamos el paso de variables entre los procedimientos, la idea es utilizar un arreglo global para pasar los valores asignados por el despachador de variables, así cada vez que se llame a la función se pasará el valor al arreglo de variables global, logrando de esta manera que los valores asignados cada vez que se llama la función no sean constantes, sino que al examinar el código ofuscado no sea evidente el proceso que se realizó en la llamada a la función.

Figura 2. Análisis de un código ofuscado en Javascript. Se puede notar que son pocas las cadenas de texto legibles por humanos. Determinar la semántica de un código (el que realiza) es sumamente complicado, por este motivo la mayoría de las herramientas de protección bloquean en su totalidad programas de Javascript
Otra mejora que se puede agregar a la técnica de ofuscación mencionada es la adición de bloques básicos al de flujo de control del programa, algunos de los cuales nunca van a ser ejecutados, pero lo cual es muy difícil de determinar mediante análisis estáticos, debido a que las llamadas se generan de manera dinámica durante la ejecución del programa.
Entonces se agregan funciones de cargas hacia esos bloques inalcanzables a través de punteros, lo cual tiene el efecto de confundir a los análisis estáticos sobre el posible valor que asignó el despachador de variables.
Técnicas de desofuscación
Así como existen varias técnicas y mejoras para la ofuscación del código, también existen técnicas para lograr desofuscar el código, o mejor dicho, técnicas de ingeniería inversa sobre el código ofuscado algunas de las cuales se describen a continuación.
• Clonación. Muchas de las técnicas de ofuscación se basan en la creación de rutas de ejecución falsas para engañar a los programas de análisis estáticos, debido a que esas rutas nunca van a ser tomadas en el momento de ejecución del programa, mas sin embargo, causan información engañosa que se propagará a lo largo del análisis y reducirá la precisión de la información obtenida, lo cual hará más difícil de entender la lógica del programa analizado.
Esa información defectuosa tiene la característica de introducir imprecisiones donde los caminos de ejecución se cruzan.
Una forma de resolver este problema o desofuscar el código es mediante la clonación de porciones de código, de tal manera que las rutas de ejecución falsas no se unan con la ruta de ejecución original.
Esta transformación tiene que ser aplicada con sumo cuidado, debido a que si no se hace de esta manera, puede incrementar el tamaño del código, y más aun que lograr desofuscar el código, empeore el problema de desofuscación, sin embargo como la meta de la desofuscación del código es la de remover código ofuscado, la clonación implica que se tenga un conocimiento previo de la ruta de ejecución actual, lo cual podría lograrse mediante la clonación selectiva en ciertos puntos donde las rutas de ejecución se unen.
• Análisis de factibilidad de ruta estática. Este es un análisis estático basado en cadenas, que evalúa la factibilidad de una ruta de ser ejecutada.
En este análisis primeramente se debe crear una cadena que corresponda con la ruta de ejecución, la construcción de esta cadena se puede realizar de varias maneras, pero la meta, es que tome en cuenta los efectos de las operaciones aritméticas sobre los valores de las variables de los bloques de código, y que nos represente la propagación de constantes a través de una ruta de ejecución del programa, y después se evalué si esa ruta de ejecución es factible o no.
Algunas de las formas de crear las cadenas anteriormente descritas son las siguientes:
• Asignación
• Aritmética
• Indirección
• Bifurcaciones
• Combinación de análisis estáticos y dinámicos. Los análisis estáticos convencionales son inherentemente conservadores, por lo tanto al aplicar técnicas de desofuscación meramente estáticas al código ofuscado, el conjunto de resultados son en realidad un superconjunto de ese código ofuscado, inversamente a lo que resulta si se aplican técnicas de desofuscación dinámica, que no pueden tomar todos los posibles valores de entrada, por lo cual este análisis solamente nos regresa un subconjunto del código ofuscado.
La naturaleza dual de estos dos tipos de análisis sugieren que se debe intentar realizar un análisis que abarque estas dos aproximaciones de solución para desofuscar un código, lo cual se puede realizar de dos maneras, primero realizando un análisis dinámico y después uno estático para agregar partes al control de flujo del programa, o se puede realizar de manera contraria, empezando primero con el análisis estático y después el dinámico, lo que nos servirá para reducir partes del control de flujo del programa.
De cualquier manera, cuando se realiza una combinación de estos dos tipos de análisis no se puede garantizar la precisión, sin embargo si lo vemos desde el punto de vista de la ingeniería inversa, al unir estos dos tipos, nos podemos sobreponer a las limitaciones que nos causan el hecho de realizar un análisis estático o uno simplemente dinámico.
La Web 2.0 y Ajax
La Web 2.0 ofrece soluciones para compartir casi cualquier contenido digital pero también presenta desventajas. En algunos casos, el usuario pierde el control de sus creaciones en favor de las empresas que prestan el servicio. Aunque O’Reilly sostenga que la persona controla sus propios datos, esto sólo sería cierto en algunos casos, pero no en todos.
Un consumidor tiene la libertad de decidir qué contenidos publicar en una Web, pero una vez que están dentro del servicio, en muchos portales se pierde parte del control sobre la información aportada, además, surge el peligro potencial de que algunos de los usuarios suban código potencialmente peligroso.
Ajax surge como una nueva forma de lograr tener aplicaciones a través de la Web, que a diferencia de las paginas estáticas, permite a los usuarios participar, interactuar y compartir de una manera más plena la información con los sitios Web, lo anterior abre un mundo de posibilidades de interacción con los usuarios de estos sitios, pero además trae consigo el correspondiente aumento de riesgos en la seguridad, tanto para los usuarios como para los mismos sitios.
El principal riesgo de seguridad que nos trae esta nueva tecnología es el que el usuario no siempre está consciente del código que puede estarse ejecutando en su máquina, ya que Ajax nos proporciona una manera de interactuar de forma asíncrona con los sitios, lo cual puede ser muy útil, ya que evita tener que estar recargando constantemente el código de las páginas.
Así mismo, esta característica que nos permite la comunicación asíncrona, también presenta el mayor riesgo, ya que en una página se pueden tener objetos incrustados, que a primera vista parezcan inofensivos, y no tengan mayor propósito destructivo, pero que posteriormente se encarguen de descargar o incrustar mas código, que al ser ofuscado logre burlar a los mecanismos actuales de análisis de seguridad.
Es por esto que la Web 2.0 como tal, tiene que mejorar sus actuales mecanismos de seguridad, pensando especialmente que los beneficios que nos pueda brindar su versatilidad tiene asociados nuevos riesgos y novedosas formas de lograr vulnerar la seguridad.
Conclusión
La ofuscación de código dinámica es una nueva técnica que tiene varias ventajas y desventajas, dependiendo del punto de vista y uso que se le de a la misma. Pues si es aplicada como un mecanismo de seguridad, puede ser muy prometedora, ya que aunque sea una técnica que puede ser vulnerada mediante el uso de algunos análisis estáticos y dinámicos, proporciona un nivel un poco más elevado de seguridad. En cambio si es utilizada como una arma para lograr burlar los actuales mecanismos de defensa puede ser muy peligrosa, pues aunque se podría detectar su peligrosidad mediante algunos de los análisis mencionados en este artículo, consumiría mucho tiempo y lo más probable es que mientras se realizara este tipo de análisis, se descuidara algun otro aspecto de la seguridad.
En cuanto a la web 2.0 como la llamo O’Reilly, existe un riesgo potencial debido principalmente a las características que la hacen tan útil, pero a la vez tan peligrosa, debido a que esa manera de compartir contenidos a través de la web podría traer consigo la diseminación de código ofuscado dañino y que sería difícilmente detectable por su capacidad de transformarse de una infinidad de maneras, y el hecho de que el motor de generación no se encontraría en el mismo código sino en otra ubicación, lo cual imposibilitaría realizar un análisis de ese motor para lograr averiguar la forma en que el código ofuscado es generado.
Referencias
[ Sharath, U. “Deobfuscation Reverse Engineering Obfuscated Code.” Proceedings of the 12th
Working Conference on Reverse Engineering (WCRE’05), 2005. ]
[ Amit, V. “Cobra: Fine-grained Malware Analysis using Stealth Localized-executions”.
Proceedings of the 2006 IEEE Symposium on Security and Privacy (S&P’06), 2006. ]
[ Karen, H. “New attacks tricks antivirus software”. Innovative technology for computer
professionals. Volume 40, Number 5, May 2007. ]
[ Arboit, G. “A method for watermarking java programs via opaque predicates”. Procedings of
5th. International Conference on Electronic Commerce Research (ICECR-5), 2002. ]
[ Collberg, C.; Thomborson, C.; Low, D. A taxonomy of obfuscating transformations, 1997. ]
[ de Roo, Arjan; van den Oord, Leon. Stealthy obfuscation techniques: misleading the pirates. ]
[ Ernst, Michael D. “Static and dynamic analysis: Synergy and duality”. In WODA 2003: ICSE
Workshop on Dynamic Analysis, Portland, OR, May 2003. ]
[ Arnaud, G. “Automated Metamorphic Testing”. Proceedings of the 27th Annual International
Computer Software and Applications Conference (COMPSAC’03), 2003 IEEE. ]
[ Karl, L. “Towards a Metamorphic Testing Methodology for Service-Oriented Software
Applications”. Proceedings of the Fifth International Conference on Quality Software
(QSIC’05), 2005. ]
Resumen
La ofuscación de código dinámica es una nueva forma de enmascarar el código, a lo largo de este artículo veremos las ventajas y riesgos que implican el descubrimiento de esta nueva técnica, así como algunos de las métodos que existen tanto para ofuscar el código, como para lograr la desofuscación del mismo, además de las principales formas y lugares donde esta técnica puede ser aplicada.La ofuscación de código dinámica es una técnica que transforma el código en garabatos incomprensibles, esta técnica puede ser utilizada con dos propósitos principales, el primero como una herramienta de protección de derechos de autor del código de los programas, y el segundo como una amenaza a los mecanismos actuales de seguridad en la red.
La mayoría de las empresas tratan de evitar que su código fuente pueda ser obtenido por alguien más, es por esto que hacen uso de herramientas que les permitan evitar que alguien lo pueda obtener.
Sin embargo la ofuscación también sirve como un mecanismo de para generar muchas versiones del mismo código, logrando de esta manera sobrepasar los mecanismos usuales de análisis de los sistemas de seguridad, como los antivirus.
La amenaza oculta
En la actualidad, a pesar de que los antivirus son cada día más potentes y hacen uso de técnicas mucho más complejas para lograr evitar las amenazas, nace una nueva técnica que logra poner en dificultad a estos sistemas actuales de defensa, esta nueva técnica es llamada ofuscación de código dinámica, y se basa en la transformación o enmascaramiento del código para evitar que se pueda determinar la forma que tenía originalmente.
La ofuscación de código dinámica empezó a funcionar con javascript un poco después de que fuera liberado este lenguaje en 1995, se hizo por la principal razón de proteger el código que tanto trabajo les costaba desarrollar a los programadores, y que cualquier usuario podía ver usando un explorador con esas características.

Figura 1. Existen muchas herramientas que ayudan a la fácil ofuscación de código, las cuales permiten proteger los códigos dinámicos o de scripting, aunque también se puede utilizar con fines malignos
Mecanismo de protección
El código fuente de un programa es muy valioso, siendo una creación intelectual, es susceptible de ser utilizado sin haber tenido que pasar por un proceso creativo nuevamente, es decir, una vez que se desarrollo el código puede volver a ser utilizado sin haber tenido que emplear tiempo en su desarrollo, es por esto que las empresas y desarrolladores protegen tan celosamente su código.
Una manera de entre muchas que existen en la actualidad para proteger su código, en otras palabras su propiedad intelectual, es la ofuscación, que se ofrece como una manera de poder ejecutar el código por otras personas, sin que estas puedan llegar a entender cómo funciona en realidad.
La ofuscación de código ha sido propuesta por un gran número de investigadores como un medio para dificultar la realización de ingeniería inversa sobre el código. Pero las transformaciones típicas de ofuscación se basan en razonamientos estáticos sobre ciertas propiedades de los programas, lo cual da como resultado que la ofuscación del código pueda ser fácilmente desentrañada mediante una combinación de análisis estáticos y dinámicos.
Conceptualmente se pueden distinguir dos tipos de ofuscación de código: la ofuscación superficial y la ofuscación profunda. La primera siendo solamente un reacomodo de la sintaxis del programa, ya sea cambiando nombres de variables o algún otro método similar, y la segunda que intenta cambiar la estructura actual del programa, cambiando su control de flujo o modo de referenciar sus datos, esta última teniendo menos efecto en el proceso de estar oculto a la ingeniería inversa, ya que no se ocupa de disfrazar la sintaxis del código.
Técnicas de ofuscación
Una de las técnicas de ofuscación es la llamada “aplanamiento de control de flujo básico”, la cual intenta esconder la lógica de flujo del programa para que simule que todos los bloques básicos tienen el mismo antecesor y el mismo predecesor.
El control de flujo actual es guiado mediante un despachador de variables, el cual en tiempo de ejecución asigna a cada bloque básico un valor variable, que indica cual es el siguiente bloque básico que debe ser ejecutado a continuación. Entonces un bloque switch utiliza el despachador de variable para saltar de manera indirecta, a través de una tabla de saltos hacia el sucesor de control de flujo que debe ser.
Existen varias mejoras en esta técnica de ofuscación, siendo una de ellas el flujo de datos interprocedimental, las variables que asignaba el despachador se encontraban disponibles dentro de la función misma, debido a lo cual aunque el comportamiento del control de flujo del código ofuscado no sea obvio, puede ser reconstruido mediante un análisis de constantes asignadas por el despachador de variables.
La ofuscación del código puedes ser más difícil de reconstruir si además de lo anterior agregamos el paso de variables entre los procedimientos, la idea es utilizar un arreglo global para pasar los valores asignados por el despachador de variables, así cada vez que se llame a la función se pasará el valor al arreglo de variables global, logrando de esta manera que los valores asignados cada vez que se llama la función no sean constantes, sino que al examinar el código ofuscado no sea evidente el proceso que se realizó en la llamada a la función.

Figura 2. Análisis de un código ofuscado en Javascript. Se puede notar que son pocas las cadenas de texto legibles por humanos. Determinar la semántica de un código (el que realiza) es sumamente complicado, por este motivo la mayoría de las herramientas de protección bloquean en su totalidad programas de Javascript
Otra mejora que se puede agregar a la técnica de ofuscación mencionada es la adición de bloques básicos al de flujo de control del programa, algunos de los cuales nunca van a ser ejecutados, pero lo cual es muy difícil de determinar mediante análisis estáticos, debido a que las llamadas se generan de manera dinámica durante la ejecución del programa.
Entonces se agregan funciones de cargas hacia esos bloques inalcanzables a través de punteros, lo cual tiene el efecto de confundir a los análisis estáticos sobre el posible valor que asignó el despachador de variables.
Técnicas de desofuscación
Así como existen varias técnicas y mejoras para la ofuscación del código, también existen técnicas para lograr desofuscar el código, o mejor dicho, técnicas de ingeniería inversa sobre el código ofuscado algunas de las cuales se describen a continuación.
• Clonación. Muchas de las técnicas de ofuscación se basan en la creación de rutas de ejecución falsas para engañar a los programas de análisis estáticos, debido a que esas rutas nunca van a ser tomadas en el momento de ejecución del programa, mas sin embargo, causan información engañosa que se propagará a lo largo del análisis y reducirá la precisión de la información obtenida, lo cual hará más difícil de entender la lógica del programa analizado.
Esa información defectuosa tiene la característica de introducir imprecisiones donde los caminos de ejecución se cruzan.
Una forma de resolver este problema o desofuscar el código es mediante la clonación de porciones de código, de tal manera que las rutas de ejecución falsas no se unan con la ruta de ejecución original.
Esta transformación tiene que ser aplicada con sumo cuidado, debido a que si no se hace de esta manera, puede incrementar el tamaño del código, y más aun que lograr desofuscar el código, empeore el problema de desofuscación, sin embargo como la meta de la desofuscación del código es la de remover código ofuscado, la clonación implica que se tenga un conocimiento previo de la ruta de ejecución actual, lo cual podría lograrse mediante la clonación selectiva en ciertos puntos donde las rutas de ejecución se unen.
• Análisis de factibilidad de ruta estática. Este es un análisis estático basado en cadenas, que evalúa la factibilidad de una ruta de ser ejecutada.
En este análisis primeramente se debe crear una cadena que corresponda con la ruta de ejecución, la construcción de esta cadena se puede realizar de varias maneras, pero la meta, es que tome en cuenta los efectos de las operaciones aritméticas sobre los valores de las variables de los bloques de código, y que nos represente la propagación de constantes a través de una ruta de ejecución del programa, y después se evalué si esa ruta de ejecución es factible o no.
Algunas de las formas de crear las cadenas anteriormente descritas son las siguientes:
• Asignación
• Aritmética
• Indirección
• Bifurcaciones
• Combinación de análisis estáticos y dinámicos. Los análisis estáticos convencionales son inherentemente conservadores, por lo tanto al aplicar técnicas de desofuscación meramente estáticas al código ofuscado, el conjunto de resultados son en realidad un superconjunto de ese código ofuscado, inversamente a lo que resulta si se aplican técnicas de desofuscación dinámica, que no pueden tomar todos los posibles valores de entrada, por lo cual este análisis solamente nos regresa un subconjunto del código ofuscado.
La naturaleza dual de estos dos tipos de análisis sugieren que se debe intentar realizar un análisis que abarque estas dos aproximaciones de solución para desofuscar un código, lo cual se puede realizar de dos maneras, primero realizando un análisis dinámico y después uno estático para agregar partes al control de flujo del programa, o se puede realizar de manera contraria, empezando primero con el análisis estático y después el dinámico, lo que nos servirá para reducir partes del control de flujo del programa.
De cualquier manera, cuando se realiza una combinación de estos dos tipos de análisis no se puede garantizar la precisión, sin embargo si lo vemos desde el punto de vista de la ingeniería inversa, al unir estos dos tipos, nos podemos sobreponer a las limitaciones que nos causan el hecho de realizar un análisis estático o uno simplemente dinámico.
La Web 2.0 y Ajax
La Web 2.0 ofrece soluciones para compartir casi cualquier contenido digital pero también presenta desventajas. En algunos casos, el usuario pierde el control de sus creaciones en favor de las empresas que prestan el servicio. Aunque O’Reilly sostenga que la persona controla sus propios datos, esto sólo sería cierto en algunos casos, pero no en todos.
Un consumidor tiene la libertad de decidir qué contenidos publicar en una Web, pero una vez que están dentro del servicio, en muchos portales se pierde parte del control sobre la información aportada, además, surge el peligro potencial de que algunos de los usuarios suban código potencialmente peligroso.
Ajax surge como una nueva forma de lograr tener aplicaciones a través de la Web, que a diferencia de las paginas estáticas, permite a los usuarios participar, interactuar y compartir de una manera más plena la información con los sitios Web, lo anterior abre un mundo de posibilidades de interacción con los usuarios de estos sitios, pero además trae consigo el correspondiente aumento de riesgos en la seguridad, tanto para los usuarios como para los mismos sitios.
El principal riesgo de seguridad que nos trae esta nueva tecnología es el que el usuario no siempre está consciente del código que puede estarse ejecutando en su máquina, ya que Ajax nos proporciona una manera de interactuar de forma asíncrona con los sitios, lo cual puede ser muy útil, ya que evita tener que estar recargando constantemente el código de las páginas.
Así mismo, esta característica que nos permite la comunicación asíncrona, también presenta el mayor riesgo, ya que en una página se pueden tener objetos incrustados, que a primera vista parezcan inofensivos, y no tengan mayor propósito destructivo, pero que posteriormente se encarguen de descargar o incrustar mas código, que al ser ofuscado logre burlar a los mecanismos actuales de análisis de seguridad.
Es por esto que la Web 2.0 como tal, tiene que mejorar sus actuales mecanismos de seguridad, pensando especialmente que los beneficios que nos pueda brindar su versatilidad tiene asociados nuevos riesgos y novedosas formas de lograr vulnerar la seguridad.
Conclusión
La ofuscación de código dinámica es una nueva técnica que tiene varias ventajas y desventajas, dependiendo del punto de vista y uso que se le de a la misma. Pues si es aplicada como un mecanismo de seguridad, puede ser muy prometedora, ya que aunque sea una técnica que puede ser vulnerada mediante el uso de algunos análisis estáticos y dinámicos, proporciona un nivel un poco más elevado de seguridad. En cambio si es utilizada como una arma para lograr burlar los actuales mecanismos de defensa puede ser muy peligrosa, pues aunque se podría detectar su peligrosidad mediante algunos de los análisis mencionados en este artículo, consumiría mucho tiempo y lo más probable es que mientras se realizara este tipo de análisis, se descuidara algun otro aspecto de la seguridad.
En cuanto a la web 2.0 como la llamo O’Reilly, existe un riesgo potencial debido principalmente a las características que la hacen tan útil, pero a la vez tan peligrosa, debido a que esa manera de compartir contenidos a través de la web podría traer consigo la diseminación de código ofuscado dañino y que sería difícilmente detectable por su capacidad de transformarse de una infinidad de maneras, y el hecho de que el motor de generación no se encontraría en el mismo código sino en otra ubicación, lo cual imposibilitaría realizar un análisis de ese motor para lograr averiguar la forma en que el código ofuscado es generado.
Referencias
[ Sharath, U. “Deobfuscation Reverse Engineering Obfuscated Code.” Proceedings of the 12th
Working Conference on Reverse Engineering (WCRE’05), 2005. ]
[ Amit, V. “Cobra: Fine-grained Malware Analysis using Stealth Localized-executions”.
Proceedings of the 2006 IEEE Symposium on Security and Privacy (S&P’06), 2006. ]
[ Karen, H. “New attacks tricks antivirus software”. Innovative technology for computer
professionals. Volume 40, Number 5, May 2007. ]
[ Arboit, G. “A method for watermarking java programs via opaque predicates”. Procedings of
5th. International Conference on Electronic Commerce Research (ICECR-5), 2002. ]
[ Collberg, C.; Thomborson, C.; Low, D. A taxonomy of obfuscating transformations, 1997. ]
[ de Roo, Arjan; van den Oord, Leon. Stealthy obfuscation techniques: misleading the pirates. ]
[ Ernst, Michael D. “Static and dynamic analysis: Synergy and duality”. In WODA 2003: ICSE
Workshop on Dynamic Analysis, Portland, OR, May 2003. ]
[ Arnaud, G. “Automated Metamorphic Testing”. Proceedings of the 27th Annual International
Computer Software and Applications Conference (COMPSAC’03), 2003 IEEE. ]
[ Karl, L. “Towards a Metamorphic Testing Methodology for Service-Oriented Software
Applications”. Proceedings of the Fifth International Conference on Quality Software
(QSIC’05), 2005. ]
- Log in to post comments