Académique Documents
Professionnel Documents
Culture Documents
Seguridad en Software
Seguridad en Software
An hoy el trmino Cracking tiene una amplia gama de significados. Para algunos el Cracking consiste en forzar bruscamente a un programa, generalmente de manera poco elegante, para que trabaje. Para otros el Cracking es hacer un programa inteligente (generalmente pequeo) o la modificacin de un programa, y una persona que despliega una inusual perspicacia en un lenguaje de programacin o en un sistema operativo. Por otra parte, cualquier manipulacin diestra sera tambin considerada como un acto de Cracking. Algunos Psiclogos, Socilogos, y otros profesionales que se relacionan con los aspectos del comportamiento, consideran el Cracking no ms que como una aficin a la computadora. A los que padecen la enfermedad se les considera como a seres socialmente ineptos e incapaces de formar parte de un grupo por otro medio, que el que proporciona la lejana y la abstraccin de la computacin. En el libro llamado El Diccionario del Hacker, los autores Guy Steele y otros, han perfilado por lo menos siete definiciones diferentes de un pirata o Cracker: 1. Una persona que disfruta aprendiendo sobre los detalles de los sistemas de la computadora y sobre cmo aumentar sus capacidades; como opuesto a la mayora de los usuarios de computadoras, quienes prefieren aprender slo lo mnimamente necesario. Uno que programa con entusiasmo, o que disfruta programando, ms que teorizando solamente acerca de la programacin. Una persona capaz de apreciar el valor pirata. Una persona que es buena programando rpidamente. Un experto en un programa particular o uno que frecuentemente trabaja usndolo o en l. Un experto de cualquier gnero. Un malvolo e inquisitivo entrometido que trata de descubrir informacin hurgando a su alrededor. Por ejemplo un pirata de la contrasea es uno que trata, posiblemente por medios engaosos o ilegales, de descubrir las contraseas de las computadoras de otra gente. Un pirata de la red es uno que trata de aprender acerca de la red de computadoras (posiblemente para mejorarla o posiblemente para interferirla).
2.
3. 4. 5. 6. 7.
Por lo tanto, para nuestros propsitos, la piratera tambin llamada Hacking, es cualquier actividad relacionada con la computadora que no ha sido sancionada o aceptada por el patrn o dueo de un sistema de red o software. Debemos distinguirlo, de cualquier modo, de la piratera de Software (Cracking) y del crimen computacional, donde el tpico principal es el derecho de propiedad de la informacin y el uso de sistemas de computacin para perpetrar lo que, en cualquier otra situacin, se mirara simplemente como un robo monetario fraude. Hasta cierto punto esta definicin es bastante amplia. No obstante, tal definicin nos provee con una rica carga de casos y sucesos que estn en el corazn mismo de los tpicos ticos en computacin.
Seguridad en Software
Definicin de un KEYFILE:
Siempre eh dicho que todo sistema de proteccin tiene su forma de desprotegerlo y precisamente de eso se encarga la ingeniera reversa o tambin llamada CRACKING, de analizar y encontrar en el cdigo desensamblado de un software la proteccin con la cual este verifica que no est registrado, existen cientos de tipos de protecciones algunas bsicas, otras no tanto pero al fin y al cabo todas son factibles de vulnerar, como en el siguiente ejemplo que analizaremos dos tipos de proteccin basado en KEYFILE.
Utilerias a usar:
1. W32dasm 2. OllyDbG v 1.10 3. Editor de Texto 4. Editor Hexadecimal 5. Calculadora Cientfica
Seguridad en Software
El cual nos ayudara a entender como los reverses hacen su trabajo. Al ejecutar el crackme lo primero que aparece es una NAg screen donde nos dice el nombre del creador y un string reference CLick OK to check for the Keyfie y un botn Aceptar ahora le damos click en Aceptar y vemos la siguiente pantalla:
Otro String Reference Hmmmmm, I cant find the file! como podemos ver cuando le damos click en el botn de Aceptar en la primera NAgScreen nos ejecuta otra NAgScreen en la cual nso dice que no encuentra el archivo, esto me hace pensar y preguntarme varias cosas, primeramente me doy cuenta que el Crackme verifica si existe un archivo, pero qu archivo es, con que extensin, en que formato y en donde lo busca? Esas preguntas las iremos resolviendo en el transcurso de este texto.
Seguridad en Software
Y como podemos ver nos dice en que lenguaje de programacin fue hecho y lo ms importante no est empacado ni protegido, cabe mencionar que esto es un error ya que facilitan el trabajo para los piratas informticos que quieren tener el software totalmente libre de uso sin pagar las regalas pertinentes. El siguiente paso es analizar el ejecutable en lo que yo llamo cdigo muerto que consiste simplemente desensamblar el (PE) con el W32Dasm una utilera realmente viejita pero sigue siendo de gran utilidad y vala para los reversers, una vez dicho estoy pasamos a desensamblar el (PE) y en el W32Dasm podremos ver lo siguiente:
Seguridad en Software
En esta ventana podemos ver las partes que conforman el (PE) ahora viene lo ms complicado analizaremos cada parte que conforma al (PE) En la imagen siguiente podemos ver la cabecera del ejecutable que en este caso contiene 5 secciones las cuales contienen toda la informacin que el ejecutable necesita para poder ser inicializado
Pero antes de explicarles en qu consisten las cabeceras, les explicare a grandes rasgos que es un Portable ejecutable.
Seguridad en Software
Desde la versin 3.1 de Windows introdujeron un nuevo tipo de formato para los archivos ejecutables el cual llamaron PE (Portable Executable). El cual tuvo su inicio en el formato COOF (Common Object File Format) que usa Unix para que se pudiera mantener su compatibilidad con MS-DOS y los sistemas operativos Windows, este nuevo tipo de archivo ejecutable continuo con la cabecera MZ del MS-DOS. Pero por que le pusieron el nombre de Portable Executable? Eso simple y sencillamente porque es portable y totalmente compatible con cualquier versin del sistema operativo windows. As como tambin es usado en procesadores diferentes a Intel X86, MIPS Alpha entre muchos otros, cabe mencionar tambin que los DLL y Drivers de dispositivos tambin se manejan en el formato PE. Pero como nos podemos dar cuenta de esa cabecera? Pues simplemente abrimos con un editor Hexadecimal un PE y podremos ver la cabecera:
Esto nos dice mucho acerca del ejecutable para conocer y comprender los conceptos bsicos de cmo se ejecutan y el por qu se ejecutan las aplicaciones hechas para el Sistema Operativo WINDOWS 32 Bits, como se cargan las libreras de funciones dinmicas llamados tambin DLL, y sus funciones importadas y exportadas del mismo.
Seguridad en Software
Archivos en General y el Formato PE Como hemos visto existen gran variedad de archivos donde los datos en un archivo comn y corriente no es ms que un conjunto de datos organizados de tal forma en registros donde cada registro podramos llamarlo como en la programacin estructurada, con esto decimos que es un espacio que ocupa en memoria para guardar datos de forma organizada.
Entonces, en los archivos con formato PE, tenemos un encabezado y un cuerpo.
Seguridad en Software
10
El encabezado de los archivos PE lo podemos dividir en 4 sub encabezados que son los siguientes:
Veamos la organizacin en la siguiente tabla: PE EXE (Windows 32Bit EXE, DLL, OCX, etc) Contiene informacin necesaria para ejecutar el DOS STUB. Conservado por compatibilidad El desplazamiento (OFFSET) 3Ch apunta al encabezado PE
Encabezado DOS
DOS STUB
Encabezado PE
Contiene info necesaria para correr el programa en Win32 Encabezados agregados por W32
Contiene info adicional necesaria para Encabezado opcional NT correr el programa en Win32 Tabla de Objetos o Secciones Objetos o secciones Informacin sobre objetos o secciones en el archivo Datos de las secciones
Seguridad en Software
11
A este antiguo encabezado EXE MZ se le han agregado algunos campos que informan al cargador del Sistema Operativo (SO) dnde est el encabezado PE con informacin relevante para W32. Encabezado MZ Extendido 001C Dword 0020 Dword 0024 Dword Tabla de relocalizacin con un nmero variable de reubicacin de elementos. Identifuicador OEM Informacin OEM.
0028 26Bytes Reservado. 003C Dword Desplazamiento del nuevo encabezado EXE desde el inicio del archivo o 0 si es un archivo MZ EXE
El ltimo campo de esta extensin, 'e_lfanew', indica la direccin donde est la signatura que identifica el formato del archivo. Si se trata de un archivo con un programa W32, este campo apunta a dos caracteres: "PE" (Portable Executable), el formato elegido por M$ para los archivos con programas W32. Si abrimos NOTEPAD.EXE con con HEX WORKSHOP y revisamos el campo e_lfanew en el desplazamiento 003Ch, veremos el nmero 8000h, que al revs es 0080h, el desplazamiento donde veremos los caracteres 'PE', que identifican el formato del archivo (Si trabajas con HEX WORKSHOP, no cierres todava este archivo). Si ahora abrimos con HEX WORKSHOP el archivo WINFILE.EXE, generalmente ubicado en el directorio C:\WINDOWS, veremos que el desplazamiento 003Ch apunta al desplazamiento 0400h, donde encontramos los caracteres 'NE', que es el formato de los archivos W16. Inmediatamente despus de la signatura hay dos bytes o una palabra (WORD) con ceros, despus de los cuales inicia el encabezado PE. En la actualidad, el formato NE est prcticamente extinguido. Lo pasar por alto y me concentrar en el formato PE. Entre el encabezado MZ DOS y la signatura PE, est la seccin "STUB" del archivo, la cual se incluye para el despliegue de un mensaje que indica que el programa slo puede correr en Windows.
Seguridad en Software
12
Tambin existen muchas secciones importantes que deberamos de conocer a cerca de los Portables Ejecutables como lo son: El tamao de la secciones Punto de Entrada (RVA Entry Point) Base de las secciones Base de la Imagen (ImageBase) Alineamientos Tamao de la imagen Directorio de datos SizeOfRawData PointerToRawData
Y muchas y muchas ms cosas que debemos de conocer a cerca de los PE, que en este texto no se trataran ya que el objetivo principal es el de mostrar la proteccin de KEYFILES.
Ahora explicaremos algunas de las secciones PE del crackme en cuestin: .data y .text : permiten especificar las secciones de memoria donde se ubicaran los cdigos de maquina correspondientes a las lneas de texto que siguen a la directiva. .reloc : En pocas palabras, los traslados de base son simplemente una lista de ubicaciones en un archivo ejecutable en un valor delta se necesita ser aadido a los contenidos actuales de la memoria. Las pginas de un archivo ejecutable se ponen en la memoria slo cuando son necesarios, y el formato de los Movimientos de base as lo refleja. Las reubicaciones de base residen en una seccin llamada. Reloc, pero la forma correcta de encontrarlos es a partir de la DataDirectory con la entrada IMAGE_DIRECTORY_ENTRY_BASERELOC.
Seguridad en Software
13
.rsrc : esta seccin contiene la informacin sobre los recursos compartidos que son las funciones importadas y exportadas que usa el ejecutable. Con esta explicacin creo que es suficiente, ahora si continuemos con la proteccin de KEYFILES. Una vez desensamblado el ejecutable vamos y damos click en el botn: para que nos muestre los String references que contiene y vemos la siguiente ventana:
Donde podemos ver los textos que muestra al llevar a cabo una accin y si ustedes son muy avivados podemos darnos cuenta de algo sper importante, recuerdan que habamos dicho en lneas anteriores que el crackme buscaba un archivo? Y no lo encontraba? Bueno pues ah nos podemos dar cuenta que archivo busca: Abex.l2c Ya vieron que fcil fue encontrar el nombre del archivo que busca para saber si esta registrado? Ok ahora creemos un archivo con ese nombre en el folder donde tenemos el crackme:
Lgicamente este lo creamos en primera instancia con el Block de notas, una vez hecho esto, ejecutamos el crackme y vemos que mensajes nos manda ahora:
Seguridad en Software
14
Ok perfecto como vemos ya no dice que no encuentra ninguna keyfile, ahora dice que el archivo encontrado cumple con el nombre mas no con el contenido, ya dimos el primer paso, lo siguiente es ahora abrirlo el ejecutable con el debugger llamado OllyDBG el cual nos mostrara en cdigo desensamblado la informacin:
Seguridad en Software
15
Ya lo tenemos abierto en el debugger, el siguiente paso es dar clic con botn derecho y seleccionar la opcin Serarch for All reference strings y aparece esto:
Donde sin ms palabras podemos ver lo mismo que en el W32dasm los strings references que contiene el ejecutable, ahora demos doble click sobre abex.l2c y veamos a donde nos lleva:
Aqu claramente podemos ver todo el cdigo que se encarga de decidir si es vlido o no el KEYFILE en la direccin de memoria: veamos el cdigo desensamblado para entenderle mejor 2 cabe sealar que resaltare las lneas ms importantes en color rojo con mis comentarios:
00401025 |. 68 B9204000 PUSH PoC-21.004020B ; |FileName = "abex.l2c" \\ aqu pone en memoria el nombre del archivo\ 0040102A |. E8 5E000000 CALL <JMP.&KERNEL32.CreateFileA> especficamente la de la libreara KERNEL32 llamada CreateFIleA \\ 0040102F |. A3 CA204000 00401034 |. 83F8 FF 00401037 |. 74 3C MOV DWORD PTR DS:[4020CA],EAX ; \CreateFileA \\ en este apartado usa una api de Windows
CMP EAX,-1 \\ compara el registro EXA con -1 \\ JE SHORT PoC-21.00401075 \\ si es igual salta a la direccin de memoria 401075 \\ ; /pFileSizeHigh = NULL PUSH DWORD PTR DS:[4020CA] CALL <JMP.&KERNEL32.GetFileSize> ; |hFile = NULL ; \GetFileSize \\ toma el tamao del archivo\\
Seguridad en Software
00401046 |. 83F8 12 00401049 |. 75 15 memoria 401060 \\ 0040104B |. 6A 00 0040104D |. 68 35204000 00401052 |. 68 40204000 00401057 |. 6A 00 CMP EAX,12 \\ compara el registro EAX con 12 \\
16
JNZ SHORT PoC-21.00401060 \\ hace un salto condicional JNZ (salta si no es cero) a la direccin de
PUSH 0
; /Style = MB_OK|MB_APPLMODAL ; |Title = "Well done!" \\ empuja el string a memoria \\ ; |Text = "Yep, keyfile found!" \\ empuja el string a memoria \\
00401059 |. E8 41000000 CALL <JMP.&USER32.MessageBoxA> ; \MessageBoxA \\ aqu hace uso de la librera USER32.DLL para mostrar pun mensaje por medio de la API MessageBoxA \\ 0040105E |. EB 28 00401060 |> 6A 00 00401062 |. 68 79204000 00401067 |. 68 7F204000 string a memoria \\ 0040106C |. 6A 00 JMP SHORT PoC-21.00401088 \\ y termina la ejecucin \\ PUSH 0 ; /Style = MB_OK|MB_APPLMODAL ; |Title = "Error" \\ empuja el string a memoria \\ ; |Text = "The found file is not a valid keyfile!" \\ empuja el
PUSH 0
; |hOwner = NULL
0040106E |. E8 2C000000 CALL <JMP.&USER32.MessageBoxA> ; \MessageBoxA \\ aqu hace uso de la librera USER32.DLL para mostrar pun mensaje por medio de la API MessageBoxA \\ 00401073 |. EB 13 00401075 |> 6A 00 JMP SHORT PoC-21.00401088 \\ y termina la ejecucin \\ PUSH 0 ; |/Style = MB_OK|MB_APPLMODAL
00401077 |. 68 54204000 PUSH PoC-21.00402054 ; ||Title = "Error" \\ empuja el string a memoria que ser el titulo de la ventana que contendr la siguiente lnea de string\\ 0040107C |. 68 5A204000 a memoria \\ 00401081 |. 6A 00 PUSH PoC-21.0040205 ; ||Text = "Hmmmmm, I can't find the file!" \\ empuja el string
PUSH 0
00401083 |. E8 17000000 CALL <JMP.&USER32.MessageBoxA> USER32.DLL para mostrar un mensaje por medio de la API MessageBoxA \\ 00401088 \> E8 0C000000 0040108D $- FF25 54304000 00401093 $- FF25 58304000 00401099 .- FF25 5C304000 0040109F $- FF25 64304000 CALL <JMP.&KERNEL32.ExitProcess>
JMP DWORD PTR DS:[<&KERNEL32.CreateFileA>] JMP DWORD PTR DS:[<&KERNEL32.GetFileSize>] JMP DWORD PTR DS:[<&KERNEL32.ExitProcess>] JMP DWORD PTR DS:[<&USER32.MessageBoxA>]
**********************************************************
Seguridad en Software
17
Ok con esto creo que tenemos todo claro para finalizar este anlisis hagamos una unin de lo que hace el CRackme: 1. 2. 3. 4. busca si existe el archivo: abex.l2c si lo encuentra verifica el contenido. Compara el contenido del KEYFILE con 12h de error usand Si el contenido no es lo que necesita manda un mensaje o las Apis del sistema operativo. 5. si es lo que necesita te registra y te manda el mensaje de chico bueno. Ese es el proceso que necesita para validarlo, pero nos encontramos con un problema cuando lo compara con 12h que canijos es esto? Bueno pues muy fcil lo resolveremos con la calculadora de WINDOWS, si estn leyendo bien amigos, CON LA CALCULADORA DE WINDOWS resolveremos este dilema del contenido que necesita el KEYFILE Para ser vlido. Vamos y abrimos la calculadora, la pasamos a formato cientfico y seleccionamos el formato Hexadecimal de la misma y ponemos lo siguiente:
Seguridad en Software
18
Una vez hecho esto simplemente seleccionamos el formato DEC para pasar ese mismo valor hexadecimal a valores decimales y veamos que nos dice:
NoS podemos dar cuenta que el valor 12h tiene un valor 18 en decimal, mmmm entonces lo que tenemos que hacer segn el cdigo que vemos del crackme es crear un archivo con el nombre de abex.l2c e incluirle dieciocho valores entonces se me ocurre poner: Chilitom3x ccat201 Guardamos el archivo y ..
Saludos: Rodolfo h-Baz aka Pr@fEsOr X2011 DiciembreCoatepec, Ver. Mxico informes@ccat.edu.mx www.ccat.edu.mx www.x25.org.mx