Você está na página 1de 3

Introduccin a la ingeniera inversa

PhD Roberto Gmez Crdenas


1. Introduccin De acuerdo a la BSA (Bussiness Software Alliance) el 36% del software que se utiliza en el mundo es ilegal. Las tasas de piratera disminuyeron en 37 pases pero aumentaron en 34 pases. Las perdidas por esta causa se incrementaron de 29 billones de dlares a 33 billones de dlares. La principal tcnica utilizada para romper la seguridad del material pirateado es la ingeniera inversa. La ingeniera inversa es una metodologa para analizar el diseo de un dispositivo o sistema. El objetivo del estudio varia ya que como toda metodologa o herramienta en el rea de seguridad es un arma de dos filos. Por un lado se puede utilizar para conocer como funciona un sistema y darle la vuelta a los sistemas de proteccin contra copias no autorizadas. Por otro lado es una buena herramienta para entender el funcionamiento de los nuevos virus y poder erradicarlos y/o disear una vacuna. Desde un punto de vista de sistemas computacionales la ingeniera inversa puede ser vista como el proceso de extraer el cdigo fuente de una aplicacin a partir del cdigo objeto. Hay que tomar en cuenta que el trmino cracking tambin se utiliza tambin cuando se burla al sistema de proteccin de algn software en especfico para obtener una copia funcional de un software supuestamente protegido. En las dos siguientes secciones se dan a conocer las principales herramientas utilizadas dentro del rea de ingeniera inversa. En la seccin 4 se dan a conocer algunas tcnicas de defensa. Al final se presentan nuestras conclusiones. 2. Las herramientas Para poder realizar un anlisis de ingeniera inversa es necesario contar con las herramientas adecuadas. Dependiendo del objetivo del anlisis ser la, o las, herramientas utilizadas. Entre las herramientas ms comunes podemos mencionar a los editores hexadecimales, los des-ensambladores, los descompresores, los depuradores, los analizadores de archivos, los dumpeadores de memoria y monitores de registro. Un editor hexadecimal, permite editar un archivo en su forma bruta, es decir permite editar los bits de un archivo. Para que el usuario no tenga que lidiar con unos y ceros en la aplicacin, el editor los agrupa en conjuntos de 4 bits y los convierte a hexadecimal. De esta forma el usuario solo ve nmeros hexadecimales en el editor. A travs de este tipo de herramientas es posible conocer el contenido de cualquier tipo de archivo, imgenes, ejecutables, office etc. Tambin es posible conocer el contenido de un disco. Las personas que se dedican a hacer forencia usan este tipo de editores para buscar informacin oculta. Es importante hacer notar que no solo es posible conocer el contenido de un archivo sino que es posible modificar est con los datos que se consideran relevantes. Usando esta herramienta es posible cambiar una instruccin por otra si conocemos el cdigo hexadecimal de la instruccin y donde se encuentra ubicada. Entre los editores hexadecimales ms conocidos podemos mencionar a Winhex, Hex, Ultraedit y Hacker's View. Como su nombre lo dice, los des-ensambladores permiten des-ensamblar un programa. Dado un archivo ejecutable con esta herramienta podemos conocer las instrucciones en ensamblando que lo componen y poder entender su funcionamiento. Su funcin es toda la contraria a la de un compilador. Como ejemplos de des-ensambladores podemos mencionar IDA, Sourcery, DeCadePro, W32Dasm, VBDE, LDasm. Una tcnica utilizada para proteger aplicaciones de ser copiadas, es comprimir/cifrar el cdigo de la aplicacin y descomprimir/descifrar el cdigo en el momento que se necesite ejecutar. Los descompresores son aplicaciones que permiten obtener el ejecutable original antes de que fuera procesado por el compresor/cifrador. O polo menos contar con una imagen descomprimida que pueda ser ejecutada o funcional. Ejemplo de este de aplicaciones son Armadillo Kille, CUP, EXELOCK, PeUNLOCK, Deshrink. Un depurador permite dar seguimiento a la ejecucin de una aplicacin y poder conocer que es lo que hace cada una de las instrucciones de la aplicacin. Tambin permite conocer los valores de las diferentes variables que la componen en todo momento. Con este tipo de herramientas es posible localizar instrucciones que lleven

a cabo ciertas acciones, por ejemplo solicitar un nmero de licencia (en el caso de un atacante) o conocer donde lleva a cabo ciertas acciones dainas un virus. Este tipo de herramientas tambin son utilizadas por desarrolladores de cdigo para encontrar errores de codificacin, Podemos mencionar a Debug, Soft-Ice, TR, dbg, como ejemplos de estas herramientas. Los analizadores de archivos proporcionan informacin sobre un archivo, como el tipo de este. En el caso de ejecutables pueden dar a conocer el tipo de plataforma para la cual fue compilada la aplicacin. Si se conoce el tipo de plataforma se podr elegir el des-ensamblador y depurador adecuado. El comando file de Linux es un ejemplo de este tipo de utileras, as como File Inspector XL, EXEScan, GETTyp. FILE Info, Multi Ripper y Language 2000. Los dumpeadores de memoria permiten vaciar el contenido de una regin de la memoria RAM. Lo cual puede ser interesante ya que muchas aplicaciones almacenan informacin al arranque de la aplicacin para consultarla peridicamente. Al conocer el contenido de la memoria es posible que se conozcan contraseas utilizadas por la aplicacin. Como ejemplos podemos mencionar a AMDUump, LordPE DEeluex, ProcDump, Pupe Los monitores de registro son utilizados en aplicaciones que corren sobre Windows. Varias aplicaciones almacenan informacin en los registros de Windows y este tipo de herramienta permite conocer el contenido de los registros. 3. Tcnicas de ingeniera inversa. Lo primero que uno tiene que hacer para poder llevar a cabo un anlisis de ingeniera inversa es conocer las protecciones que la aplicacin presenta, para poder darles la vuelta. Existen varias tcnicas para hacer esto. La primera tcnica, a la retro, consiste en depurar el programa hacia atrs. Se lanza la aplicacin y en cuanto sistema de proteccin se active se detiene la ejecucin. A partir de este momento se examina al cdigo hacia atrs, buscando las instrucciones relacionadas con el mensaje de proteccin. Una vez localizado el mensaje, se procede a investigar las condiciones e instrucciones que lo generaron, para poder cambiarlas o darles la vuelta. Todas estas acciones se harn con la ayuda de las herramientas descritas en la seccin anterior. Otra opcin consiste en poner un punto de ruptura (breakpoint) en una funcin, o funciones, que se crea que son usadas dentro del sistema de proteccin. Una vez que

la ejecucin llega a este punto, se contina depurando hasta llegar al punto buscado. Esto es muy utilizado cuando se busca la funcin que despliega un banner, o una pantalla nag, o cuando se conoce el sistema de proteccin que esta usando el sistema analizado. Si el procedimiento de proteccin muestra un mensaje de error, est se copia. La aplicacin se des-ensambla y se busca la cadena de caracteres en la lista de instrucciones que hace referencias a cadenas. Una vez localizadas las direcciones de las instrucciones, se examina el cdigo que hay alrededor y se busca por un salto que aleje al flujo de informacin de una referencia a dicha cadena. En muchas ocasiones es necesario examinar las llamadas previas al salto, ya que estas pueden contener las instrucciones de verificacin. Si se conoce la cadena de caracteres, y esta no se puede localizar por la tcnica anterior, se puede utilizar un editor hexadecimal o un dumpeador de memoria. Se busca la cadena y si se encuentra en memoria se introduce una instruccin para interrumpir al programa antes de realizar cualquier accin sobre esta. Por ltimo, si se sospecha que una determinada secuencia de instrucciones en ensamblador est siendo usada por el sistema de proteccin, se puede utilizar un editor hexadecimal para buscar la secuencia de cdigosbytes y actuar en consecuencia. Por ejemplo si la operacin en cuestin es una comparacin de fechas, esta instruccin se puede cambiar por una comparacin entre dos nmeros iguales, lo cual siempre dar verdad y evitar que el sistema de alerta se active. 4. Posibles defensas. Existen diferentes tipos de mecanismos de defensa para dificultar el trabajo de las personas que llevan a cabo un anlisis de ingeniera inversa. Entre las ms comunes podemos mencionar a los sistemas de proteccin por tiempo, sistemas de proteccin mediante hardware externo (mochilas o dongles), sistemas de defensa basado en empaquetadores y en la comprobacin de la integridad de los datos (CRC). Existen dos formas de implementar un sistema de proteccin por lmite de tiempo. En el primero el software comprueba si han transcurrido n das desde la instalacin del mismo. En caso positivo procede a la salida inmediata o a su des-instalacin o puede mostrar mensaje informando al usuario. En el segundo de los casos se comprueba si se ha llegado a una fecha lmite. En ambos casos el software no funcionar si se vuelve a instalar. Sin embargo un atacante tiene analizar la aplicacin

para comprobar donde se almacena la fecha de instalacin o donde se encuentra el contador de los das que han pasado y modificar estos valores. Otra opcin de proteccin es utiliza un dispositivo hardware externo, que se conecta a la computadora cada vez que se utiliza la aplicacin a protegida. Este dispositivo se conoce como dongle o mochila. Una mochila no es ms que una caja que contiene un circuito que puede variar en complejidad segn el tipo de mochila. Algunas mochilas cuentan con memoria donde se almacenan datos usados por la propia mochila. El software a proteger se comunica con la mochila a travs de rutinas que proporciona el fabricante. La proteccin depende de la habilidad del programador de implementar la proteccin. Es importante cifrar la llamada a la mochila, mandar llamar a la mochila en varios lugares del programa y en diferentes intervalos de tiempo durante la ejecucin de la aplicacin. Con el objetivo de ocultar el funcionamiento del sistema de proteccin del software, algunos autores software empaquetan sus programas para reducir el tamao de los archivos del programa y complicar el trabajo de ingeniera inversa, ya que no se puede obtener un desensamblado exacto del archivo El programa original esta envuelto dentro del cdigo del empaquetador, el cual esconde el cdigo original Cuando se lanza el programa, se esta ejecutando en primer lugar el cdigo empaquetador., el cual desempaqueta aplicacin original en memoria y despus se ejecuta. Es posible usar un cifrador en lugar de un empaquetador. Tambin es posible utilizas CRCs (Cdigo Redundancia Cclica) para la proteccin de software. Los CRCs son usados para la deteccin de errores en la transmisin de datos en comunicaciones. El dispositivo calcula el CRC en base a un polinomio y enva informacin junto con su CRC. En el otro extremo de la recepcin se usa el mismo polinomio para calcular el CRC de lo recibido y compara resultado. Si son iguales se ha transmitido con xito, en caso contrario algn dato fue cambiado. Es posible usar huellas digitales en lugar de CRCs.

Conclusiones Se han presentado las diferentes herramientas y tcnicas utilizadas para llevar a cabo un anlisis de ingeniera inversa. Las opciones son variadas y no existe un mtodo nico para llevar a cabo este tipo de anlisis. Existen varios tutoriales para ahondar en esta rea y tambin se cuenta con los famosos crackmes. Estos son programas o aplicaciones diseadas especialmente para practicar eludir diferentes tipos de proteccin. Cada crackme contiene un tipo de proteccin y el reto es romperlo. Es importante conocer las tcnicas usadas por los especialistas en crackeo de aplicaciones para poder tomar las medidas adecuadas y proteger nuestro software. Referencias [1] Cracking sin secretos, Ataque y defensa de software, J. Zemnek, Ed. Alfaomega, 2005 [2] Hacker Disassembling Uncovered, K. Kaspersky, Ed. Alist, 2003 [3] Reversing, Secrets of Reverse Engineering, Eldad Eilam, Ed. Wiley Publishing, 2005 [4] Seguridad en software, Profesor X, Revista Conthackto, No 2, noviembre/diciembre 2005 [5] Digital Rigthts Management, Spyware and Security, E.W. Felten and J. A. Halderman, IEEE Security & Privacy, Vol.4 No. 1, January/February 2006 [6] Electronic Frontier Foundations Sony BMG Settlement FAQ http://www.ef.org/IP/DRM/SonyBMG/settlement_faq.php [7] Armouring the ELF: Binary encryption on the UNIX platform, grugp, scut, Phrack Magazine http://www.phrack.org

Você também pode gostar