Ofuscación (software)

Ajustar Compartir Imprimir Citar
Creación deliberada de código difícil de entender

En el desarrollo de software, la ofuscación es el acto de crear un 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 crear un rompecabezas o un desafío recreativo para alguien que lea el código fuente. código. Esto se puede hacer manualmente o utilizando una herramienta automatizada, siendo esta última la técnica preferida en la industria.

Resumen

La arquitectura y las características de algunos lenguajes pueden hacerlos más fáciles de ofuscar que otros. C, C++ y el lenguaje de programación Perl son algunos ejemplos de lenguajes fáciles de ofuscar. Haskell también es bastante confuso a pesar de tener una estructura bastante diferente.

Las propiedades que hacen que un lenguaje sea confuso no son inmediatamente obvias.

Ofuscación recreativa

Escribir y leer código fuente ofuscado puede ser un desafío para la mente. Varios concursos de programación premian el código ofuscado con mayor creatividad, como el Concurso internacional de código C ofuscado y el Concurso Perl ofuscado.

Los tipos de ofuscaciones incluyen sustitución simple de palabras clave, uso o no uso de espacios en blanco para crear efectos artísticos y programas autogenerados o muy comprimidos.

Según Nick Montfort, las técnicas pueden incluir:

  1. nombrando la obfuscación, que incluye el nombre de variables de una manera sin sentido o engañosa;
  2. data/code/comment confusion, which includes making some actual code look like comments or confusing syntax with data;
  3. doble codificación, que puede estar mostrando código en forma de poesía o formas interesantes.

Los programas Perl ofuscados cortos se pueden usar en las firmas de los programadores de Perl. Estos son JAPH ("Solo otro hacker de Perl").

Ejemplos

Desventajas de la ofuscación

Descompiladores

Un descompilador puede aplicar ingeniería inversa al código fuente de un ejecutable o una biblioteca. La descompilación a veces se denomina ataque man-at-the-end, 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 funciones y nombres de variables aleatorios, tipos de variables incorrectos y use una lógica diferente a la del código fuente original (debido a las optimizaciones del compilador).

Ofuscación criptográfica

Los criptógrafos han explorado la idea de ofuscar el código para que la ingeniería inversa del código sea criptográficamente difícil. Esto se formaliza en las muchas propuestas de ofuscación de indistinguibilidad, una primitiva criptográfica que, si es posible construir de forma segura, permitiría construir muchos otros tipos de criptografía, incluidos tipos completamente nuevos que nadie sabe cómo hacer. (Una noción más fuerte, la ofuscación de caja negra, se demostró imposible en 2001 cuando los investigadores construyeron programas que no pueden ofuscarse en esta noción).

Notificar a los usuarios sobre código ofuscado

Algunos software antivirus, como AVG AntiVirus, también alertarán a sus usuarios cuando lleguen a un sitio web con código 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 del archivo o aumentar la seguridad. Es posible que el usuario promedio no espere 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 tal característica puede 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.

Software de ofuscación

Existe una variedad de herramientas para realizar o ayudar con la ofuscación de código. Estos 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 comerciales de ofuscación funcionan transformando el código fuente del programa o el código de bytes independiente de la plataforma como se usa en Java y.NET, también hay algunas que funcionan directamente en archivos binarios compilados.

Licencias de ofuscación y copyleft

Ha habido un debate sobre si es ilegal eludir las licencias de software copyleft al publicar el código fuente en forma ofuscada, como en los casos en los que el autor está menos dispuesto a hacer que el código fuente esté disponible. El problema se aborda en la Licencia pública general de GNU al exigir el "formulario preferido para realizar modificaciones" estar disponible. El sitio web de GNU indica "El 'código fuente' ofuscado no es código fuente real y no cuenta como código fuente."