Académique Documents
Professionnel Documents
Culture Documents
Jos Enrique Alvarez Estrada jeae@prodigy.net.mx ICQ 31463788 Yahoo! Messenger: leonardo_da_vinci_mx www.geocities.com/leonardo_da_vinci_mx/ Nadie pone en duda la importancia de la ingeniera como disciplina del conocimiento humano. Pero pocas personas saben que esta disciplina posee una contraparte: la llamada ingeniera inversa. El objetivo de la ingeniera, es desarrollar la solucin a un problema a partir de la nada. En cambio, la ingeniera inversa propone solucionar ese mismo problema, pero a partir de alguna tecnologa existente, cuyo funcionamiento no se conoce (al menos no totalmente), pero que se sabe tiene el potencial de resolverlo total o parcialmente. Si bien no existe una licenciatura en ingeniera inversa, es un hecho que muchos ingenieros dedican su vida profesional a esta disciplina. Pero, curiosamente, muy poco o nada se habla de ella en las currculas universitarias, y no se les ensea a los nuevos ingenieros. De hecho, en muchos crculos el hablar de ingeniera inversa todava es un tab, y si bien se sabe y se acepta que la mayor parte de las empresas la utilizan, nadie quiere reconocerlo abiertamente. El objetivo de este artculo es divulgar la importancia de esta disciplina, equipararla con el criptoanlisis y tratar de sacarla del oscurantismo en el cul se encuentra, dndole el nivel y la relevancia que realmente tiene, demostrando que desde el punto de vista de los ingenieros que aspiran dedicarse a desarrollar su profesin, la ingeniera inversa puede ser tan interesante, o ms, que la ingeniera tradicional.
despus de la II Guerra Mundial ha practicado a cuanto producto extranjero de calidad ha cado en sus manos. De hecho, es bien conocida la ancdota de que durante las dcadas de los sesenta y setenta, se prohiba a los japoneses que asistan a ferias indsutriales en Estados Unidos y Europa, llevar consigo cmaras fotogrficas y videogrficas, para evitar que un ao despus de su visita liberaran tecnologas equivalentes, pero con un mayor grado de perfeccin y un costo mucho menor. Sin embargo, los ingenieros japoneses reemplazaron sus cmaras fotogrficas por papel y lpiz, elaborando croquis y dibujos detallados de lo que vean. A pesar de todas estas prohibiciones y restricciones, es obvio que la ingeniera inversa es una prctica comn en las industrias que desarrollan tecnologa. Si no, cmo se puede explicar que, con meses de diferencia, un software incluya filtros de importacin y de exportacin para los formatos de archivo que su competencia usa? O bien existe un acuerdo entre ambos competidores para el intercambio de informacin reservada sobre sus formatos (situacin poco creble, y que sin duda trascendera a los medios de comunicacin), o se emplean tcnicas de ingeniera inversa para decodificar la forma en que la competencia almacena la informacin.
Ingeniera inversa de software, que es realmente la que nos interesa en el contexto de este artculo.
Dentro de la ingeniera inversa de software, podemos subclasificar en tres categoras: la ingeniera inversa de cdigo fuente, la ingeniera inversa de cdigo objeto y la ingeniera inversa de archivos.
La ingeniera inversa de archivos es, desde el punto de vista legal, una de las ms toleradas, puesto que finalmente lo nico que se pretende con ella es comprender la manera en que la informacin que un usuario posee est siendo almacenada en un sistema. Resulta muy importante tambin en el contexto de los legacy systems, donde archivos creados con software muy antiguo pueden ser migrados a nuevos sistemas (por ejemplo, sistemas monolticos que se migran a arquitecturas cliente/servidor): la nica forma de obtener informacin del archivo es a travs de tcnicas de ingeniera inversa, si no se posee la documentacin correspondiente.
llamados algoritmos de fuerza bruta. Estos algoritmos prueban todas las posibles combinaciones de la clave de encriptacin, hasta obtener un mensaje desencriptado que tenga sentido. En el caso de la ingeniera inversa, esto involucra modificar la informacin que se encuentra almacena en un archivo, y desplegarla para ver la forma en que los datos originales cambiaron. En ambos casos, se aplica cuando no se posee inicialmente el mensaje encriptado, o la posibilidad de acceder al software para crear nuevos archivos. Entre los ataques con mensaje totalmente descifrado, y los ataques de fuerza bruta, existen innumerables tcnicas intermedias (y si no existen, se pueden desarrollar) que permitan la decodificacin y la ingeniera inversa del archivo a partir de mensajes parcialmente descifrados, o bien de acceso parcial al programa que crea los archivos.
transformacin al mensaje entrante o mensaje desencriptado (Md), con una clave (C). Me = F(Md, C) 11001100 = xor(01100110, 10101010) Un criptoanalista, empleando tcnicas de fuerza bruta, simplemente probara todos los smbolos posibles del alfabeto como claves, hasta encontrar un posible mensaje que resulte coherente. Dependiendo del tamao de la clave C, esto puede dar pie a una explosin combinatoria que requiera de un enorme poder de cmputo, a veces tan grande que simplemente no puede resolverse en un tiempo razonable (problemas computacionalmente insolubles). Sin embargo, para el ejemplo que acabamos de plantear (una clave de 8 bits), resulta bastante factible el probar todas las combinaciones, que slo son 256. Aumentando el tamao de clave a 40 a 128 bits, como hacen los algoritmos de encriptacin usados en Internet, las cosas resultan mucho ms difciles.
Puede observarse, por simple inspeccin, que la asignacin del valor 0 a la variable j se lleva a cabo mediante un XOR de A consigo mismo (lo cul siempre produce cero), y que el registro B est actuando como un contador que se inicializa en 1. Posteriormente, se incrementa el valor de B en 10 (como en la lnea j := j + 10), luego se incrementa B en 1 (el incremento de la variable contadora), se compara con 11 (la condicin de salida de la sentencia FOR) y en caso de que no coincida (el resultado no fue cero) se salta a la lnea 4. Por tanto, para lguien que pretenda obtener la forma en que el compilador trabaja (creando lo que se denomina un desensamblador), esta informacin es sumamente valiosa. Pongamos otro ejemplo: analizamos la manera en que se lleva a cabo la ingeniera inversa de archivos, cuando se posee el programa que genera dichos archivos. La tcnicas usada fundamentalmente es la inspeccin. En primer lugar, se usa la opcin que proporciona dicho programa para construir un archivo nuevo, y el archivo es guardado tal cual, sin agregarle ninguna
informacin. Esto nos proporciona un parmetro inicial, respecto al formato que el archivo tiene: todas aquellas partes del archivo invariantes, o todas aquellas partes del archivo configuradas con valores por default. Como segundo paso, se procede a cambiar los valores por defecto que posee el programa en su configuracin. Por ejemplo, el tamao X,Y de un archivo grfico, la orientacin y el tamao de papel si se trata de un archivo de procesador de texto, etc. Con esto, podemos separar los elementos invariantes del archivo de los elementos de configuracin, y lo que obtendremos finalmente es una representacin bastante aproximada de la estructura de encabezado del mismo. A partir de este punto, comenzamos con un proceso de agregacin de nuevas opciones: si se trata de un procesador de texto, agregamos palabras, y vemos la manera en que dichas palabras estn siendo codificadas en el archivo, despus integramos estas palabras en prrafos, y as sucesivamente; si se trata de un programa de manipulacin de bitmaps, agregamos pixeles (preferiblemente en las esquinas superior izquierda e inferior derecha, para indicar el inicio y el final de la imagen) y vemos la manera en que stos son codificados. En el caso de archivos grficos que representan imgenes bidimensionales, algo que se debe determinar con claridad es si se trata de archivos que codifican la imagen con un formato true color (es decir, que cada pixel codifica la verdadera intensidad de cada color), o si utilizan una tabla de localizacin de color CLUT (Color Look Up Table), en donde cada pixel es un ndice a los elementos de color de dicha tabla. En ambos casos, debemos determinar tambin el modelo de color que se est usando: si se trata de un modelo de sntesis aditiva como RGB, o de un modelo de sntesis substractiva como CYMK, aunque normalmente esto es un parmetro de configuracin del programa, y por tanto no resulta difcil de percibir. Algo que no resulta tan fcil es determinar la alineacin de los pixeles: si stos aparecen rengln por rengln o columna por columna. Si ya pudimos determinar esto, lo siguiente es saber si el formato grfico usa algn tipo de algoritmo de compresin para los pixeles que integran la imagen (o para las letras, si se trata de un procesador de texto, o para las muestras, en el caso de audio digitalizado). Para aquellos formatos que usan compresin RLE (RunLength Encoding), esto es relativamente fcil: basta con ir incrementando el nmero de pixeles consecutivos de un mismo color, e ir observando la forma en la cul se comportan los bytes en el archivo. Generalmente, conforme se aumenten los pixeles consecutivos del mismo color, se observar el incremento de un ndice, y la permanencia en el mismo valor del elemento siguiente, donde el primero codifica el nmero de pixeles repetidos, y el segundo su intensidad de color. Este esquema normalmente recurre a un valor o byte centinela, que se emplea para diferenciar aquellos pixeles normales de los valores que almacenan el nmero de repeticiones RLE. Generalmente, se emplean dos tcnicas al respecto: una de ellas es reservar un smbolo del alfabeto como centinela, y otra es que el propio valor del pixel indique si se trata de un centinela o no, dividindolo en dos rangos (i.e. 015 indica valor directo, 16 en adelante indica centinela). Para conocer la longitud mxima que puede tener una corrida de bits repetidos codificados con RLE, se va incrementando el nmero de bits, en espera de aquel en el cul el centinela ya no alcance a guardar todos los elementos, y se requiera de dos corridas RLE consecutivas.
La clave aditiva, como la usada por Julio Csar, y otros sistemas de criptografa sencillos (los llamados sistemas de encriptacin por substitucin), son susceptibles de analizarse basndose en la estadstica. De hecho, la criptografa fue una de las grandes motivaciones para el desarrollo de la ciencia de la estadstica (que inicialmente trataba problemas de estado, incluyendo el envo de mensajes seguros y la decodificacin de los mensajes enemigos), y a la vez es uno de los logros cumbre de la misma. Por ejemplo, en el caso del criptoanlisis, si se tiene la certeza de que el mensaje enviado es texto, puede recurrirse a tcnicas de substitucin por frecuencia de ocurrencia de los caracteres: en todos los idiomas hay caracteres que se ocupan con ms frecuencia que otros, y los criptoanalistas han desarrollado histogramas (diagramas de frecuencia) que indican la ocurrencia promedio de cada carcter para una lengua dada. A partir de esta informacin, se puede intentar un ataque estadstico que, sin conocer siquiera la funcin o la clave de encriptacin, nos devuelva el mensaje desencriptado. Es un hecho conocido que el ingls (igual que en muchos otros lenguajes humanos) es un idioma muy poco aleatorio. En el trasncurso de cualquier texto en ingls substancialmente largo, las letras aparecen con una frecuencia muy predecible. La Tabla 1 es una medicin de las frecuencias relativas de las letras en textos en ingls. Letra a b c d e f g h i j k l m Frecuencia (%) 8.167 1.492 2.782 4.253 12.702 2.228 2.015 6.094 6.966 0.153 0.772 4.025 2.406 Letra n o p q r s t u v w x y z Frecuencia (%) 6.749 7.507 1.929 0.095 5.987 6.327 9.056 2.758 0.978 2.360 0.150 1.974 0.074
Se observa que la "e" es la letra con mayor frecuencia de ocurrencia (12.7%). Existe tambin informacin estadstica de la frecuencia de bigramas, o sea, grupos de dos letras, y trigramas (grupos de tres letras). Si el criptoanalista sospecha que el mensaje est escrito con un cifrado monoalfabtico, donde cada letra del texto est representada por un smbolo distinto), y si se posee una gran cantidad de texto cifrado, se pueden computar las frecuencias de las letras en el mensaje encriptado, y substituirlas de acuerdo a la tabla. Si se trata de una clave aditiva (clave Cesrea), con slo identificar la "e" ya se encontr toda la clave. Virtualmente, todos los criptosistemas propuestos en el siglo XIX probaron ser susceptibles a ataques estadsticos, cada vez ms sofisticados.
Empleo de tcnicas de IA
La ingeniera inversa y el criptoanlisis son, sin duda, problemas apasionantes, que llaman la atencin de los aficionados a las matemticas y a la ingeniera. Sin embargo, es una labor
intelectual altamente desgastante y muy demandante de tiempo, lo cual involucra la necesidad de crear herramientas que la apoyen. El problema de estas herramientas es que, si emplean nicamente ataques por fuerza bruta, se enfrentan a difciles barreras de computabilidad, debido a la explosin combinacional que ya se mencion, e impidiendo que una computadora (sea del tamao que sea) resuelva el problema en un tiempo razonable. Por ello, los cientficos en computacin buscan formas de darle la vuelta al problema. Casi todas ellas se basan en conocimientos previos que se tienen de casos similares que han sido solucionados, o bien del reconocimiento de patrones de smbolos que se repiten recurrentemente en el proyecto que se est tratando de resolver. En ambos casos, las tcnicas desarrolladas por la Inteligencia Artificial (IA), una disciplina de las ciencias de la computacin, resultan extremadamente tiles. Podemos sealar, entre estas tcnicas: bsquedas en espacios de soluciones, reconocimiento de patrones, visin por computadora, redes neuronales artificiales, sistemas expertos, sistemas con capacidad de aprendizaje, etc. El empleo correcto de estas tcnicas permite la automatizacin de una buena parte de las labores de ingeniera inversa y de criptoanlisis.
Conclusiones
Conforme pasa el tiempo, y hay mayor cantidad de legacy systems en el mercado en espera de ser actualizados, mayor es la importancia de la ingeniera inversa de software. As mismo, conforme las transacciones en Internet se hacen ms populares, e involucran cantidades crecientes de dinero, poner a prueba los algoritmos de encriptamiento existentes mediante nuevas tcnicas de criptoanlisis, es la nica manera de asegurar su confiabilidad.