Seguridad en Java 

Qué es Java 

Barreras de seguridad 

Prohibido 

Líneas futuras 

Consejos 

Recursos 

Agujeros de seguridad en Java

Ofuscación de código

Ataques
Robo de información
Destrucción de información
Robo de recursos
Denegación de servicio
Enmascaramiento
Engaño
Línea Maginot

El problema

Resulta extremedamente sencillo obtener el código fuente (fichero .java) a partir del código compilado (fichero .class), siempre y cuando no se haya utilizado un ofuscador de código (más sobre ofuscadores muy pronto), mediante herramientas de decompilación como la proscrita mocha. En otras palabras, si no se toman las precauciones debidas, cualquier aplicación en Java puede ser víctima de ingeniería inversa y así obtener su código fuente. ¿Os dais cuenta de las implicaciones que conlleva? Cualquiera puede modificar nuestros programas, se pueden eliminar contadores de caducidad, controles de licencia, etc. Un caos para las casas comerciales. Nadie podría vender productos en Java, ya que cualquiera te lo puede fusilar.

La solución

La manera más extendida entre los desarrolladores de aplicaciones Java para poner coto a esta ingeniería inversa y evitar la violación de sus derechos de autor consiste en ofuscar el código, esto es, oscurecerlo de forma tal que resulte prácticamente imposible decompilarlo e incluso interpretarlo correctamente aun si se obtiene el código fuente por el procedimiento que fuera. Esta ofuscación se consigue en la práctica por medio de la inclusión de bucles irrelevantes, cálculos innecesarios, comprobaciones absurdas, nombres de funciones y de variables que no tienen nada que ver con su cometido, funciones larguísimas que no sirven para nada, interacciones inverosímiles entre variables y funciones, etc.

No conviene olvidar que los ofuscadores no tienen nada que ver con la seguridad en los programas, simplemente añaden grandes complicaciones al proceso de decompilación y posterior interpretación del código fuente de los programas. Nunca se debe confiar en ellos para implementar mecanismos de seguridad, fieles a la máxima "No existe seguridad a través de la oscuridad".

Una serie de consejos para ofuscar el código

  • Que todos los nombres de funciones y variables carezcan de sentido
  • Incluir ocasionalmente cálculos y bucles sin sentido
  • Esconder números pequeños en cadenas de texto
  • Crear métodos grandes, en vez de utilizar subrutinas
  • Distribuir los métodos entre las subclases

Por supuesto, no se debe comenzar a escribir el programa de esta manera. Primero, se debe escribir de forma convencional y luego se le irán aplicando las reglas anteriores hasta que haya quedado satisfactoriamente oscurecido.

Dónde conseguir ofuscadores

Dado que ofuscar óptimamente un programa resulta muy complicado, ya que hacerlo a mano puede introducir gran cantidad de errores y reducir drásticamente su eficiencia, lo más cabal suele ser adquirir uno de una casa comercial. En el mercado existen algunos como:

 

Copyright © 1997-1998 Gonzalo Álvarez Marañón, CSIC. Todos los derechos reservados.

Criptonomicón es un servicio ofrecido libremente desde el Instituto de Física Aplicada del CSIC. Para información sobre privacidad, por favor consulte la declaración de política sobre privacidad. Para sugerencias, comentarios o quejas, acuda al libro de visitas. Para contribuir al Criptonomicón, lea la página de contribuciones.