En el desarrollo de software , la ofuscación es el acto de crear código fuente o de máquina que es difícil de entender para los humanos o las computadoras. Al igual que la ofuscación en el lenguaje natural , puede usar expresiones innecesariamente indirectas para componer declaraciones. Los programadores pueden ofuscar deliberadamente el código para ocultar su propósito ( seguridad a través de la oscuridad ) o su lógica o valores implícitos incrustados en él, principalmente, para evitar la manipulación, disuadir la ingeniería inversa o incluso para crear un rompecabezas o un desafío recreativo para alguien que lea el código fuente. Esto se puede hacer manualmente o utilizando una herramienta automatizada, siendo esta última la técnica preferida en la industria. [1]
Descripción general
La arquitectura y las características de algunos lenguajes pueden hacer que sean más fáciles de ofuscar que otros. [2] [3] C , [4] C++ , [5] [6] y el lenguaje de programación Perl [7] son algunos ejemplos de lenguajes fáciles de ofuscar. Haskell también es bastante ofuscable [8] a pesar de ser bastante diferentes en estructura.
Las propiedades que hacen que un lenguaje sea ofuscable no son inmediatamente obvias.
Técnicas
Esta sección necesita una ampliación que incluya más explicaciones sobre técnicas de ofuscación en general. Puedes ayudar agregándole más cosas. ( Marzo de 2023 )
Los tipos de ofuscación incluyen la simple sustitución de palabras clave, el uso o no uso de espacios en blanco para crear efectos artísticos y programas autogenerados o muy comprimidos.
ofuscación de nombres, que incluye nombrar variables de una manera sin sentido o engañosa;
confusión de datos/código/comentarios, que incluye hacer que algún código real parezca comentarios o confundir la sintaxis con los datos;
codificación doble, que puede mostrar código en forma de poesía o formas interesantes. [9]
Herramientas automatizadas
Existe una variedad de herramientas para realizar o ayudar con la ofuscación de código. Estas incluyen herramientas de investigación experimental creadas por académicos, herramientas para aficionados, productos comerciales escritos por profesionales y software de código abierto . También existen herramientas de desofuscación que intentan realizar la transformación inversa.
Aunque la mayoría de las soluciones de ofuscación comerciales funcionan transformando el código fuente del programa o el código de bytes independiente de la plataforma, como el utilizado en Java y .NET , también hay algunas que funcionan directamente en binarios compilados.
Los criptógrafos han explorado la idea de ofuscar el código de modo que la ingeniería inversa del código sea criptográficamente difícil. Esto se formaliza en las numerosas propuestas de ofuscación de indistinguibilidad , un primitivo criptográfico que, si fuera posible construir de forma segura, permitiría construir muchos otros tipos de criptografía, incluidos tipos completamente nuevos que nadie sabe cómo hacer. (Se sabe que una noción más fuerte, la ofuscación de caja negra , es imposible en general). [17] [18]
Desventajas de la ofuscación
Si bien la ofuscación puede dificultar y llevar mucho tiempo la lectura, la escritura y la ingeniería inversa de un programa, no necesariamente lo hará imposible. [19]
Agrega tiempo y complejidad al proceso de compilación para los desarrolladores.
Esto puede hacer que la depuración de problemas después de que el software haya sido ofuscado sea extremadamente difícil.
Una vez que el código ya no se mantiene, los aficionados pueden querer mantener el programa, agregar modificaciones o comprenderlo mejor. La ofuscación dificulta que los usuarios finales hagan cosas útiles con el código.
Ciertos tipos de ofuscación (es decir, código que no es solo un binario local y descarga mini binarios de un servidor web según sea necesario) pueden degradar el rendimiento y/o requerir Internet.
Notificar a los usuarios sobre código ofuscado
Algunos programas antivirus, como AVG AntiVirus [20], también alertan a sus usuarios cuando llegan a un sitio web con código que se ha ofuscado manualmente, ya que uno de los propósitos de la ofuscación puede ser ocultar código malicioso. Sin embargo, algunos desarrolladores pueden emplear la ofuscación de código con el fin de reducir el tamaño de archivo o aumentar la seguridad. El usuario promedio puede no esperar que su software antivirus proporcione alertas sobre un fragmento de código que de otro modo sería inofensivo, especialmente de corporaciones confiables, por lo que dicha característica puede en realidad disuadir a los usuarios de usar software legítimo.
Mozilla y Google no permiten extensiones de navegador que contengan código ofuscado en su tienda de complementos. [21] [22]
Ofuscación y licencias copyleft
Se ha debatido si es ilegal eludir las licencias de software copyleft mediante la publicación del código fuente en forma ofuscada, como en los casos en los que el autor no está dispuesto a ponerlo a disposición. La cuestión se aborda en la Licencia Pública General de GNU al exigir que se ponga a disposición la "forma preferida para realizar modificaciones". [23] El sitio web de GNU afirma que "el 'código fuente' ofuscado no es código fuente real y no cuenta como código fuente". [24]
Descompiladores
Un descompilador puede realizar ingeniería inversa del código fuente de un ejecutable o una biblioteca. La descompilación a veces se denomina ataque man-in-the-end (mite), basado en el ataque criptográfico tradicional conocido como " man-in-the-middle ". Pone el código fuente en manos del usuario, aunque este código fuente suele ser difícil de leer. Es probable que el código fuente tenga nombres de funciones y variables aleatorios, tipos de variables incorrectos y utilice una lógica diferente a la del código fuente original (debido a las optimizaciones del compilador).
Ofuscación del modelo
La ofuscación de modelos es una técnica para ocultar la estructura interna de un modelo de aprendizaje automático . [25] La ofuscación convierte un modelo en una caja negra. Es contraria a la IA explicable . Los modelos de ofuscación también se pueden aplicar a los datos de entrenamiento antes de introducirlos en el modelo para añadir ruido aleatorio. Esto oculta información sensible sobre las propiedades de muestras individuales y grupos de muestras. [26]
^ "¿Qué es la ofuscación (obfu)? - Definición de WhatIs.com". SearchSoftwareQuality . Archivado desde el original el 2 de febrero de 2019 . Consultado el 1 de febrero de 2019 .
^ Binstock, Andrew (6 de marzo de 2003). «Ofuscación: cómo ocultar el código a miradas indiscretas». Archivado desde el original el 20 de abril de 2008. Consultado el 25 de noviembre de 2013 .
^ Atwood, Jeff (15 de mayo de 2005). «Jeff Atwood, 15 de mayo de 2005». Codinghorror.com. Archivado desde el original el 9 de enero de 2010. Consultado el 25 de noviembre de 2013 .
^ "Ofuscación". Kenter.demon.nl. Archivado desde el original el 4 de marzo de 2016. Consultado el 25 de noviembre de 2013 .
^ "Tutoriales de C++: código ofuscado: una introducción sencilla". DreamInCode.net. Archivado desde el original el 28 de junio de 2008. Consultado el 25 de noviembre de 2013 .{{cite web}}: CS1 maint: URL no apta ( enlace )
^ "Tutoriales de C: código ofuscado en C". 7 de julio de 2011. Archivado desde el original el 27 de diciembre de 2013. Consultado el 25 de noviembre de 2013 .
^ A fecha de 2013-11-25 18:22 GMT. "Pe(a)rls in line noise" (Perlas en el ruido de la línea). Perlmonks.org. Archivado desde el original el 16 de enero de 2009. Consultado el 25 de noviembre de 2013 .{{cite web}}: CS1 maint: nombres numéricos: lista de autores ( enlace )
^ "Ofuscación – Wiki Haskell". 16 de febrero de 2006. Archivado desde el original el 30 de agosto de 2017. Consultado el 3 de marzo de 2020 .
^ Montfort, Nick. «Código ofuscado» (PDF) . Archivado desde el original (PDF) el 24 de abril de 2019. Consultado el 24 de noviembre de 2017 .
^ Ben Kurtovic. "Ofuscando el "Hola mundo!"". benkurtovic.com . Archivado desde el original el 14 de septiembre de 2017 . Consultado el 18 de octubre de 2017 .
^ "Python ofuscado". wiki.c2.com . Archivado desde el original el 14 de febrero de 2017. Consultado el 18 de octubre de 2017 .
^ "El primer contenido anual ofuscado de Python". code.activestate.com . Archivado desde el original el 25 de mayo de 2023 . Consultado el 18 de octubre de 2017 .
^ domas (3 de noviembre de 2022), xoreaxeaxeax/movfuscator, archivado del original el 12 de noviembre de 2022 , consultado el 5 de noviembre de 2022
^ Break Me00 The MoVfuscator Convertir mov en una pesadilla de RE aplastante para el alma Christopher Domas, archivado del original el 21 de octubre de 2022 , recuperado el 5 de noviembre de 2022
^ Williams, Al (21 de marzo de 2021). "Una instrucción para gobernarlos a todos: el compilador de C emite solo MOV". Hackaday . Consultado el 23 de octubre de 2023 .
^ "JAPH – Just Another Perl Hacker" (Japàs, otro hacker de Perl). pm.org . Perl Mongers. Archivado desde el original el 16 de mayo de 2013. Consultado el 27 de febrero de 2015 .
^ "Un avance en criptografía podría hacer que el software sea inhackeable". Wired . ISSN 1059-1028. Archivado desde el original el 14 de abril de 2022 . Consultado el 14 de marzo de 2021 .
^ Jain, Aayush; Lin, Huijia ; Sahai, Amit (2020). «Ofuscación de indistinguibilidad a partir de suposiciones bien fundadas». Archivo de criptografía ePrint . arXiv : 2008.09317 . Archivado desde el original el 3 de marzo de 2022. Consultado el 14 de marzo de 2021 .
^ ""¿Podemos ofuscar programas?" por Boaz Barak". Math.ias.edu. Archivado desde el original el 23 de marzo de 2016 . Consultado el 25 de noviembre de 2013 .
^ "Sitio web bloqueado y la única forma de solucionarlo es deshabilitando el protocolo HTTPS... | AVG". support.avg.com . 21 de julio de 2020. Archivado desde el original el 4 de febrero de 2022 . Consultado el 4 de febrero de 2022 .
^ a las 05:01, Thomas Claburn en San Francisco el 2 de octubre de 2018. "Google toma medidas contra el código encubierto en Chrome Web Store". www.theregister.co.uk . Archivado desde el original el 12 de noviembre de 2019 . Consultado el 12 de noviembre de 2019 .{{cite web}}: CS1 maint: nombres numéricos: lista de autores ( enlace )
^ Cimpanu, Catalin. «Mozilla anuncia la prohibición de extensiones de Firefox que contengan código ofuscado». ZDNet . Archivado desde el original el 5 de marzo de 2020. Consultado el 12 de noviembre de 2019 .
^ "Razonamiento detrás del lenguaje "forma preferida de la obra para realizar modificaciones en ella" en la GPL". Lwn.net. Archivado desde el original el 2 de diciembre de 2013. Consultado el 25 de noviembre de 2013 .
^ "¿Qué es el software libre?". gnu.org. Archivado desde el original el 14 de octubre de 2013. Consultado el 18 de diciembre de 2014 .
^ Zhou, Mingyi; Gao, Xiang; Wu, Jing; Grundy, John C.; Chen, Xiao; Chen, Chunyang; Li, Li (2023). "Modelo de ofuscación para proteger las redes neuronales implementadas".{{cite journal}}: Requiere citar revista |journal=( ayuda )
^ Zhang, Tianwei; He, Zecheng; Lee, Ruby B. (12 de julio de 2018). "Aprendizaje automático que preserva la privacidad mediante la ofuscación de datos". arXiv : 1807.01860 [cs.CR].
Lectura adicional
Seyyedhamzeh, Javad, ABCME: Un nuevo motor metamórfico, 17ª Conferencia Nacional de Computación, Universidad Tecnológica Sharif, Teherán, Irán, 2012.
B. Barak, O. Goldreich, R. Impagliazzo, S. Rudich, A. Sahai, S. Vadhan y K. Yang. "Sobre la (im)posibilidad de ofuscar programas". 21.ª Conferencia Anual Internacional de Criptología , Santa Bárbara, California, EE. UU. Springer Verlag LNCS Volumen 2139, 2001.
Mateas, Michael; Nick Montfort. "A Box, Darkly: Ofuscation, Weird Languages, and Code Aesthetics" (PDF) . Actas de la 6.ª Conferencia sobre cultura y artes digitales, Universidad de Tecnologías de la Información de Copenhague, 1-3 de diciembre de 2005. pp. 144-153. Archivado (PDF) desde el original el 23 de junio de 2008. Consultado el 28 de junio de 2008 .
Enlaces externos
Concurso internacional de código C ofuscado
Protección del código Java mediante la ofuscación de código, ACM Crossroads, edición de primavera de 1998
¿Podemos ofuscar programas?
Yury Lifshits. Notas de la conferencia sobre ofuscación de programas (primavera de 2005)