HackIt! 2007 : nivel 6: solución

Posted on March 30th, 2008 in Devel, HackIt, Seguridad by admin (249 lecturas)

Reverse Engineering. Cracking. Un poco de conocimientoso sobre ambos temas serán imprescindibles para
pasar este nivel (os he dejado muchos días para que fuerais sacándolo por vuestra cuenta, ¿qué tal os ha ido?) Vamos a por ello. Tras descargarnos el fichero .zip que indica la página, lo descomprimimos e intentamos ejecutar (txipi nos dijo que no había virus ni código maligno en los ejecutables, por eso nos atrevemos a ejecutar un binario a pelo…). La salida es bastante pobre, por decir algo:


sh-3.2$ ./program
sh-3.2$

Así que toca depurar con GDB.


$ gdb ./program
warning: no loadable sections found in added symbol-file /tmp/program
(no debugging symbols found)

Vaya, si no hay tabla de símbolos, la depuración puede ser un infierno. Así que comprobemos primero que el ejecutable
no haya sido comprimido con UPX o similares (UPX es el compresor más conocido de ficheros ELF en Linux):


$ upx -l ./program
Ultimate Packer for eXecutables
Copyright (C) 1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006,2007
UPX 3.00 Markus Oberhumer, Laszlo Molnar & John Reiser Apr 27th 2007
.
File size Ratio Format Name
-------------------- ------ ----------- -----------
532432 -> 52404 9.84% linux/elf386 ./program

¡Tachán! Efectivamente el ejecutable está comprimido con UPX. Descompresión al canto:


$ sh-3.2$ upx -d ./program
Ultimate Packer for eXecutables
Copyright (C) 1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006,2007
UPX 3.00 Markus Oberhumer, Laszlo Molnar & John Reiser Apr 27th 2007
.
File size Ratio Format Name
-------------------- ------ ----------- -----------
532432 <- 52404 9.84% linux/elf386 program
Unpacked 1 file.

Y ahora volvemos a pasarlo por GDB, a ver qué nos dice:


sh-3.2$ gdb ./program
GNU gdb 6.6-debian
Copyright (C) 2006 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i486-linux-gnu"...
Using host libthread_db library "/lib/libthread_db.so.1".
(gdb)

Mejor :-) Bien, vamos a poner un punto de ruptura en main():


(gdb) break main
Breakpoint 1 at 0x8048455
(gdb)

Ejecutemos hasta el punto de ruptura y pidamos un desensamblado de la zona:

(gdb) run
Starting program: /tmp/program
Breakpoint 1, 0x08048455 in main ()
(gdb) disassemble
Dump of assembler code for function main:
0x08048444 : lea 0×4(%esp),%ecx
0×08048448 : and $0xfffffff0,%esp
0×0804844b : pushl 0xfffffffc(%ecx)
0×0804844e : push %ebp
0×0804844f : mov %esp,%ebp
0×08048451 : push %edi
0×08048452 : push %esi
0×08048453 : push %ebx
0×08048454 : push %ecx
0×08048455 : sub $0×78,%esp
0×08048458 : movl $0×0,0xffffffec(%ebp)
0×0804845f : lea 0xffffffd0(%ebp),%eax
0×08048462 : mov %eax,(%esp)
0×08048465 : call 0×804837c
0×0804846a : movl $0×0,0xffffffe8(%ebp)
0×08048471 : jmp 0×8048477
0×08048473 : addl $0×1,0xffffffe8(%ebp)
0×08048477 : cmpl $0×98967e,0xffffffe8(%ebp)
0×0804847e : jle 0×8048473
0×08048480 : lea 0xffffffc0(%ebp),%eax
0×08048483 : mov %eax,(%esp)
0×08048486 : call 0×804837c

Bien, se ve la zona de paso de variables a la pila (guardar el contexto) y primera llamada call (por el nombre de la función, times, parece que hace algún tipo de comprobación) y en función del resultado, en main+45 saltamos a main+51. Ahí nueva comparación… saltamos (hacia atrás) a main+47. Parece un bucle, ciclando hasta que se cumpla cierta condición. Posteriormente, se hace una nueva llamada a “times”, haciendo alguna nueva comprobación:


0x08048486 : call 0×804837c
0×0804848b : mov 0xffffffc0(%ebp),%edx
0×0804848e : mov 0xffffffd0(%ebp),%eax
0×08048491 : mov %edx,%ecx
0×08048493 : sub %eax,%ecx
0×08048495 : mov %ecx,%eax
0×08048497 : mov %eax,0xffffffe8(%ebp)
0×0804849a : cmpl $0xa,0xffffffe8(%ebp)
0×0804849e : jle 0×8048586
0×080484a4 : movl $0×80c89a8,(%esp)
0×080484ab : call

En main+90 hay alguna condición que tras comprobarla hace que el programa termine (salta a main+322). Vamos a cortocircuitar este último salto . a ver qué pasa ;-) :

(gdb) j *0x080484a4
Continuing at 0x80484a4.
username? jota
error: wrong serial number!
Program exited normally.
(gdb)
Vaya, algo hemos avanzado, porque al menos nos pide username… Pero poniéndole cualquier cosa (jota, p.ej.), vemos que no le gusta.
Mmmmmhhh… volvamos a la carga:


(gdb) run
Starting program: /tmp/program
.
Breakpoint 1, 0x08048455 in main()
(gdb) disassemble
...
0x080484ab : call 0×804835c
0×080484b0 : lea 0xffffffac(%ebp),%eax
0×080484b3 : mov %eax,(%esp)
0×080484b6 : call 0×804833c
0×080484bb : mov $0×303c48b1,%eax
0×080484c0 : sub 0xffffffec(%ebp),%eax
0×080484c3 : mov %eax,0xffffffec(%ebp)
0×080484c6 : addl $0×2faf080,0xffffffec(%ebp)
0×080484cd : cmpl $0×0,0xffffffec(%ebp)
0×080484d1 : jne 0×804857a
0×080484d7 : movb $0×9b,0xffffffe0(%ebp)


Entre el printf (”username”) y el gets (recogida del parámetro por teclado) no hay nada que destacar.
Lo siguiente termina en un jne a main+310. Volvamos a cortocircuitar (no queremos saltar en main+141… queremos ir
a la siguiente instrucción) :

(gdb) j *0x080484d7
Continuing at 0x80484d7.
correct! password = d3nb0r4
Program exited normally.
(gdb)

¡Qué bonito password! :-)

Pwn 2 Own: y el ganador es… ¡Ubuntu!

Posted on March 29th, 2008 in HackIt, Seguridad by admin (1436 lecturas)

charlie_macosx.jpgCanSecWest 2008 es una conferencia sobre seguridad digital en la práctica, celebrada en Canadá, que reúne a los mejores grupos y empresas de seguridad informática del mundo. Entre otros interesantes eventos, el que mayor atención recaba es el concurso Pwn2Own. El objetivo es usar un 0day exploit sobre cualquiera de las 3 máquinas en juego:

  • VAIO VGN-TZ37CN ejecutando Ubuntu 7.10
  • Fujitsu U810 corriendo Vista Ultimate SP1
  • MacBook Air usando OSX 10.5.2

Los sistemas vienen instalados con lo justo: lo que “trae el CD” del sistema, instalación por defecto. Son 3 días en los que los mejores equipos de hackers del mundo (en el buen y mal sentido de la palabra ;-) intentan darle candela a esos sistemas. El que primero consiga leer el contenido de un fichero que la organización indica, gana el concurso. Premios: ¡fama! y el portátil que hayan conseguido hackear. Para el primero además, hay un plus de 10.000 dólares y para el segundo $5.000. ¿No está mal, eh? Eso sí, a cambio de ese dinero, la Zero Day Initiative (patrocinadores del evento) les compra los derechos de los exploits ;-) (avisando al fabricante del bug…)

El primer día sólo permiten ataques de red. Los 3 sistemas resistieron como campeones. El segundo día, para facilitar las cosas, permitieron que los atacantes facilitaran a la organización direcciones web que los organizadores visitarían usando el navegador instalado en el portátil. Aquí es donde cayó el primer sistema: MacOSX, debido a una vulnerabilidad (por ahora mantenida bajo secreto por la organización) en el navegador Safari. $10.000 y un precioso Mac Air para Charlie Miller de Independent Security Evaluators (foto de la izquierda). El segundo día no cayó ningún otro sistema. El tercer día quedaban sólo por tanto, Ubuntu Linux y Windows Vista. Los organizadores procedieron a facilitar un poco el concurso, instalando aplicaciones “populares” en ambos sistemas. Una de esas aplicaciones fue el plugin de Flash. Y ahí es donde Shane Macaulay de Security Objectives, junto a sus compañeros Alexander Sotirov y Derek Callaway, se llevaron el Fujitsu y 5.000 petrodólares.

team_vista.jpg

OoConfig: o cómo hacer tuning de OpenOffice

Posted on March 27th, 2008 in OOo by admin (375 lecturas)

ooconfig1.pngThorsten Berens, desarrollador OpenOffice para Novel, presentó en la pasada OOo Con 07 de Barcelona un prototipo de visor/editor de los parámetros de configuración internos de OpenOffice. Realizado en Python, parsea los ficheros XML de configuración de OOo y nos muestra los valores de cada parámetro convenientemente en una hoja de cálculo Calc. Hay varias columnas, indicando nombre de la variable, tipo de datos, explicación detallada de su función y valor. El objetivo de OoConfig es similar al about:confid de Firefox: permitir cambiar y ‘tunear’ valores de OOo ocultos. Hoy ya está disponible para su descarga una versión beta de dicha aplicación. Nunca está de más conocer estos detalles…

Fedora Koji: sistema de construcción y tracking de RPMs

Posted on March 26th, 2008 in Devel, Fedora by admin (295 lecturas)

Koji es el sistema desarrollado por Fedora para permitir la construcción y trazabilidad automática de RPMs.  En concreto, permite tomar código fuente del CVS original y convertirlo en un paquete RPM para Fedora.  Koji dispone de distintos interfaces de acceso, siendo el más sencillo de usar el interfaz web (que podemos ver aquí). El sistema automático de construcción de paquetes permite disponer del RPM de una aplicación a los pocos días de su publicación … de hecho, yo lo he conocido buscando un paquete RPM de Inkscape 0.46 para Fedora8, cuya fecha oficial de publicación ha sido… ¡hoy!

Linux Magazine 36

Posted on March 25th, 2008 in LinuxMagazine by admin (397 lecturas)

linuxmagazine36.jpg# Editorial: Incentivos
# DVD: DOS LADOS / DOS DISTROS: DEBIAN 4.0 R2 32 Y 64 BITS
# Portada: Trucos Del Kernel : Los desarrolladores están constantemente buscando nuevas maneras de interactuar con el versátil kernel de Linux. Este mes estudiamos algunos proyectos innovadores que se adentran profundamente en el espacio del kernel.
# Portada: Cambio de Controlador : Las nuevas versiones del Linux kernel soportarán un nuevo modelo de controlador en espacio de usuario, aunque existen algunos obstáculos que podrían limitar el uso de esta novedosa funcionalidad.
# Portada: Alta Presión : El módulo cloop nos permite manejar la compresión a nivel de dispositivo de bloques. Mostraremos lo que hacen Knoppix y otros Live CDs para que quepa tal cantidad de software en un solo disco.
# Portada: Virtualización Profunda : KVM introduce al kernel en el terreno de juego de la virtualización. Explicamos por qué el mundo Linux se está interesando tanto por esta prometedora alternativa.
# Portada: Como un Rayo : Actualmente la tecnología Flash forma parte de los entornos Linux. El nuevo sistema de ficheros LogFS ayudará al usuario frente a los problemas típicos de las memorias flash.
# Evaluación: Tienes Correo : Examinamos los puntos fuertes y débiles de cuatro clientes de correo muy populares: Kmail, Evolution, Thunderbird y Claws Mail.
# Práctico: Zona Plone : La simplicidad y la potencia de Plone hacen que este CMS de código abierto sea la elección ideal para el diseño de sitios sofisticados. Plone 3.0, que se presentó en Agosto, viene con importantes mejoras y un soporte mejorado para la realización de aplicaciones empresariales.
# Desarrollo: Aperitivos : Al afrontar algo complejo, como el aprendizaje de un idioma o los comandos de Vim, podría ser más efectivo asimilar pequeñas unidades de conocimiento que atragantarse con un atracón enorme de información. El artículo de Perl de este mes nos muestra un método para servir pequeños pedazos por email.
# Desarrollo: Malabarismos : Usemos el ágil Perlbal para distribuir la carga de nuestro tráfico.
# Desarrollo: Marcha a Blender : En un artículo anterior vimos cómo crear una escena muy simple con Python, hoy aprenderemos a realizar animaciones 3D.
# SysAdmin: Bloqueando Bruto : Los usuarios se conectan a servicios como SSH, FTP, SASL, POP3, IMAP, htaccess de Apache, y a muchos otros más utilizando sus nombres y sus contraseñas. Estos mecanismos de acceso son objetivos potenciales de los ataques por fuerza bruta. Un buen matón se encargará de bloquear los que están basados en diccionarios.
# SysAdmin: La Reina de la Velocidad : El sistema OpenSSI reorganiza los procesos para ser usados por el cluster de manera sencilla y transparente.
# SysAdmin: Sunshine : Una vez instalado, es el momento de conocer las mejores prácticas y recomendaciones en cuanto al arranque y parada del sistema OpenSolaris.
# Linux User: Sencillez : Numerosas herramientas para escanear documentos confunden a los usuarios con un exceso de funcionalidades. El limpio asistente para el escaneo gscan2pdf proporciona un método simple para convertir documentos de papel a ficheros PDF con su consiguiente ahorro de espacio.
# Linux User: Ojo al Cambio : Incluso sin ser programador, casi con toda probabilidad habremos oído hablar de Subversion, una potente herramienta para cambios de administración de proyectos software. A pesar de estar originariamente diseñada para desarrolladores, también puede ser útil para la mayoría de los mortales.
# Linux User: Trabajo en Equipo : Si estás buscando una herramienta para la edición de texto colaborativa en red, Gobby puede ser lo que buscas. Permite que múltiples usuarios editen documentos de texto colaborativamente y discutan los cambios online.
# Linux User: Unplugged : El brillo del sol, una piscina, un portátil, una WLAN abierta y Wireless Tools fue todo cuanto Heike necesitó para enviarnos el presente artículo de la “Línea de Comandos” desde Creta.
# Linux User: Made in Spain : Habitualmente venimos analizando juegos de factura extranjera. ¿Es que acaso no se programan videojuegos libres en España? La respuesta es sí, y buena muestra de ello son los dos juegos que os presentamos este mes. Ambos son obra del gaditano estudio CaninoStudios, que no han dudado en aplicarle a sus obras una serie de características muy andaluzas.
# Comunidad: Konsultorio : Klaus Knopper responde a las preguntas técnicas de los lectores. Este mes: Impresoras compartidas, conexiones inalámbricas, reproducción de música, Samba PDC y tarjetas de TV.
# Comunidad: Linux Legal : Jose María Lancho, fundador de Legal Venture y Secretario de HispaLinux contesta a las dudas técnicas de los lectores. Este mes: Las compras de MySQL y Trolltech.

OpenOffice.org 3.0: qué novedades nos esperan

Posted on March 23rd, 2008 in OOo, SoftLibre by admin (393 lecturas)

En OOoNinja.com nos hablan sobre las novedades que aportará OpenOffice.org 3.0, con fecha prevista de publicación en septiembre de este año. Destacaría las siguientes:

  • Vista multi-página en Writer
  • Soporte de documentos Office 2007
  • En Calc, se puede trabajar con hasta 1024 columnas (antes eran sólo 256)
  • Posibilidad de edición simultánea multiusuario de hojas de cálculo
  • Soporte nativo de tablas en Impress (¡por fin!)
  • Mejoras de las anotaciones al margen en Writer

En la OOoCon’07 de Barcelona nos hablaron de la posibilidad de que en la v3.0 se diera soporte a la edición de PDFs desde OpenOffice (no a la creación, si no a la edición). Parece que esa funcionalidad no llegará a tiempo, pero ¡ánimo a los desarrolladores! :-)

Túnel inverso SSH

Posted on March 22nd, 2008 in SysAdmin, ssh by admin (829 lecturas)

Supongamos la siguiente situación: estás en casa y quieres conectar por ssh con el Linux de tu oficina (destino). Problema: el firewall de la oficina bloquea las conexiones entrantes. Desde el pc de la oficina puedes conectar hacia el exterior, y en concreto tienes acceso ssh a una máquina intermedia. Desde casa tienes acceso a la misma máquina intermedia, también por ssh. Bien, aquí es donde entra en juego los túneles ssh inversos.

Desde la máquina destino (lógicamente tendrás que hacerlo antes de irte de la oficina, o bien que alguien que ya esté en la oficina lo haga, o bien un proceso cron…)

user@destino$ ssh -R 10000:localhost:22 usuariointermedio@maquinaintermedia

Es decir, desde destino, abrir una conexión ssh contra la máquina intermedia. Al conectar, crear un túnel inverso de tal forma que el puerto 10.000 de la máquina intermedia conecte con el puerto 22 de la máquina destino.

Desde casa:

user@casa $ ssh usuariodestino@maquinaintermedia -p 10000

Es decir, conectar desde casa al puerto  10.000 de la máquina intermedia (con credenciales de la máquina destino). Si todo va bien, se nos abrirá una conexión ssh contra el Linux de la oficina , pasando como trampolín o pasarela  por la máquina intermedia.

Para rematar, si quieres evitar problemas de desconeción por timeout, modifica el fichero de configuración ssh /etc/ssh/sshd_config  para que incluya las siguientes líneas:

TCPKeepAlive yes
ClientAliveInterval 30
ClientAliveCountMax 99999

Nota: si la última orden ssh te dice algo como “Connection refused” haz lo siguiente: conecta normal por ssh (al puerto 22) desde casa a la máquina intermedia. Una vez ahí, lanza la siguiente orden:

$ ssh usuariodestino@localhost -p 10000

¡Listo!  Hoy, leer en el wiki de Gentoo sobre cómo se hacen túneles inversos por ssh contra máquinas protegidas por un firewall me ha salvado de hacer un viaje de unas cuantas horas… Espero que os venga igual de bien a vosotros, lectores de diariolinux.com.  Y recuerda que no es la primera vez que hablamos de las maravillas de ssh.

Ubuntu 8.04 beta 1 ya en sus pantallas

Posted on March 21st, 2008 in Devel, SoftLibre, Ubuntu by admin (800 lecturas)

Entre las novedades de esta versión, aparte de lo que ya ofrece Fedora Core 9 (lo siento, tenía que decirlo ;-), se incluyen aplicaciones como Likewise Open  , un sistema que permite la autenticación de usuarios Linux en una red Microsoft usando Active Directory. Un usuario Linux puede loguearse en Linux usando las credenciales de Active Directory, y acceder a cualquier servicio kerberos que albergue la máquina Linux.

Vinagre, el nuevo cliente VNC de GNOME.

Al parecer se incluye también una nueva versión de Inkscape, la 0.46 que introduce el soporte de PDF nativo, ofreciendo la posibilidad de editar textos y gráficos en documentos PDF. ¿Será verdad? Lo probaremos e informaremos en otro post (o si algún lector ya lo ha hecho, se agradecería que nos enviara un email para publicarlo…)

Otra novedad: Wubi, una aplicación que permite instalar Ubuntu desde Windows . Muy interesante también, aunque había oído hablar de ella no la había probado y no creía que estuviera lo suficientemente madura como para incluirla de serie en Ubuntu. Parece que me equivocaba.

Estas vacaciones de semana santa pueden ser un buen momento para probar la beta en una máquina virtual. Eso sí, si tienes una tarjeta wireless Broadcom léete este bug.

Las universidades españolas promocionan el uso de software libre

Posted on March 20th, 2008 in Devel, SoftLibre by admin (374 lecturas)

Gracias a Ainhoa Eceiza (iKide) me entero de la reciente publicación del informe UNIVERSITIC 2007 (de la Conferencia de Rectores de las Universidades Españolas - CRUE) en el que se ha establecido como objetivo:

Objetivo 5.4. Facilitar el acceso a herramientas de software libre y código abierto

“Los resultados que se muestran a continuación presentan una mejora general en este objetivo:

  • En la campaña 2007 hemos detectado que el 10% de los ordenadores de las universidades tiene instalado un sistema operativo de libre distribución como sistema operativo, lo cual supone un incremento del 12% con respecto a la campaña anterior.
  • El 33% de los productos utilizados en las universidades son de software libre, continuando ya la tendencia creciente mostrada en el último año (Gráfico 10). Así, en todas las universidades que aportaron información correspondiente a este ítem, el porcentaje de productos de software libre en explotación sobrepasa ya el 10%.”

(pag. 42 del informe)

Esperemos que la UPV/EHU tome buena nota de esto. Afortunadamente, en la Facultad de Informática de Donostia al menos, cada vez se está tomando más conciencia de este tema y se están dando pasos muy interesantes… aunque la UPV/EHU insista en llevarnos por otros caminos.

Vídeo de la conferencia de Alan Cox en la OpenExpo

Posted on March 19th, 2008 in Devel, Eventos, OpenSource by admin (338 lecturas)

suiza.pngLa OpenExpo (Swiss Open Source Software Conference & Exposition) reunió esta semana, entre el 12 y 13 de Marzo, en Suiza a distintas personalidades y empresas relacionadas con software libre. Entre las más destacadas, Alan Cox, desarrollador del kernel contratado en estos momentos por Red Hat. Su conferencia, titulada “Práctica y procesos en la comunidad del kernel Linux” está disponible en vídeo (inglés), al igual que las diapositivas que usó.

En esa conferencia Alan explica los métodos y el proceso por el que atraviesa una porción de código fuente hasta ser aprobado e incluído en el kernel Linux. Se explica también cómo se han resuelto las disputas que ésto ha generado en alguna ocasión - y cómo las empresas que desarrollan para Linux interactúan con la comunidad para crear sus propios productos empresariales.

Next Page »