29 septiembre 2014

Ayuda al Capitán Crunch!!





Hace unos días, llegó un mention a mi twitter con un enlace a una plataforma de crowdfunding, por la que el popular phreaker de los 70, John Draper, conocido como Captain Crunch, se encontraba hospitalizado y necesitaba financiación económica urgentemente.

Como no me fío un pelo de estas cosas, y tenía las sospechas de que fuese un scam, escribí un correo a Steve Wozniak, el que fue un buen amigo suyo y compañero de aventuras, según cuenta en su libro iWoz y por los que gracias a ellos, conozcamos la informática de la forma en la que la conocemos. Le indiqué que me había llegado ese enlace y que, inicialmente, no me fiaba.

Esta mañana tenía un mail con la respuesta de Woz:


  
Es decir, que según Wozniak también es cierto! En el enlace se ve un video en el que el propio John Draper pide que si quieres, puedes ir a verle al hospital en Las Vegas donde se encuentra (desconozco si sigue allí) escribiéndole un mail a jdcrunchman@gmail.com. En la web piden financiación para los gastos médicos que está teniendo. Aunque la meta era de 5000 dólares, ya la han superado, pero como todo con los hospitales, nunca se sabe qué otros gastos puedan surgir.




Pese a que la petición en la web de crowdfunding, no la ha hecho John directamente, y el "club de amigos de Crunch" es totalmente anónimo, al menos coincide que es cierto que está hospitalizado. 

Con la confirmación de Wozniak, personalmente me creo que la campaña va destinada a un buen fin y no es un fake. Si tú también quieres contribuir a ayudar a uno de los padres del hacking cuando realmente lo necesita, aquí tienes el enlace:  https://www.qikfunder.com/crowdfund/help-john-draper-captain-crunch

Leer más...

Octubre: Un mes repleto de eventos de seguridad





El otro día, Nico Castellano nos dejaba sus reflexiones sobre la cantidad de eventos de seguridad que han ido surgiendo en el panorama español, así como la importancia que tenía la exclusividad de las charlas para algunos Congresos de ámbito nacional.

En cualquier caso, es un hecho que en este mes de Octubre, se han aglutinado un montón de ellos en España, y también por coincidencia, en el otro lado del charco.

Al igual que he hecho en otras ocasiones, quiero en este post enumerar cronológicamente todos los que tengo constancia que existirán y, como participaré en unos cuantos de ellos, indicaré mi participación en los mismos.

  • 2, 3 y 4 de Octubre, Albacete: Navaja Negra. Uno de los eventos más esperados del año, organizado por gente cuyo nivel de humanidad cada día me sorprende más y en el que Securízame regalará, a quien gane el CTF, la matrícula al curso "Reversing y Exploiting Avanzado en Windows y Linux". A nivel personal, Participaré el viernes 3 dando por la mañana (tocará madrugar) el taller “Securízate! Buenas prácticas de configuración de sistemas de seguridad perimetral” en el que explicaré durante un par de horas las bases sobre diversas herramientas que permiten mejorar la seguridad por capas de una organización, utilizando como base un dispositivo UTM de Cyberoam. Por la tarde, estrenaré la charla de "CSI Madrid S13E37: спасению” que versa sobre un caso de peritaje forense que me resultó de lo más interesante.

 

  • 8, 9 y 10 de Octubre, Bogotá: B-Sides Colombia. Uno de los eventos que me consta que más dedicación e ilusión está poniendo mi amigo Giovanni Cruz, es B-Sides Colombia. Los dos primeros días estarán cargados de trainings, y el tercer día es cuando se desarrollarán las charlas. Como podéis ver, conocidos ponentes, como Jaime Andrés Restrepo o Alejandro Hernández, mezclados con speakers menos populares pero que seguro que traen materias muy interesantes. Me quedo con las ganas de haber podido participar en esta edición, pero me reservo para el próximo año! 


  • 23 y 24 de Octubre, Santiago de Chile: 8dot8. El evento de seguridad del año en Chile. Cada vez categorizado con una temática, este año va de superheroes. Ya tuve el año pasado la oportunidad de ir a mi segunda tierra y tenía claro que este año, era uno de los que quería repetir sí o sí! De momento, está por confirmarse si la charla que daré será “CSI Madrid S13E37: спасению” o “Cooking an APT in the Paranoid Way” (que estrené en la pasada edición de RootedCON Satellite en Valencia y de la que me llegó muy buen feedback por parte de los asistentes). Además sé que la organización de 8.8 me tienen preparada alguna que otra sorpresa para atender otros eventos previos en esos días, por lo que me iré con algo de tiempo.

  • 23 y 24 de Octubre, Jaén: ConectaCON. En 2014, Raimundo Alcázar y Antonio Cruz han vuelto a hacer el milagro. Si el año pasado me contaban que habían sido capaces de montar un evento gratuito a los asistentes, con unos recursos económicos limitadísimos, este año aunque han contado con más sponsors, lo que denota que el evento va evolucionando y que la comunidad andaluza demanda la existencia de eventos locales relacionados con seguridad informática. Así, si el año pasado ya fue un evento con una repercursión importante, estoy seguro que en 2014 se multiplicará en varios órdenes de magnitud. 
  • 29, 30 y 31 de Octubre, Buenos Aires: Ekoparty. Sin lugar a dudas: EL evento de seguridad de Latinoamérica. Si ya en pasados años han superado de largo los 1.200 asistentes, este año, siendo la décima edición, han tirado la casa por la ventana y lo celebrarán con una nueva ubicación en la que caben muchísimas más personas. Por mi experiencia en 2012, este es el evento que, si tienes oportunidad, NO te puedes perder. En esta ocasión tendré el placer de participar con un Workshop de un par de horas relacionado con análisis forense (partiendo de la base de la charla CSI Madrid S13E37: спасению) a la que añadiré más contenido sobre otros peritajes posiblemente, y el jueves 30 daré la charla “Cooking an APT in the paranoid way".
  • 31 de Octubre y 1 de Noviembre, Barcelona: No cON Name. El evento con más solera de la comunidad de seguridad en España, comandado por Nico Castellano celebra una nueva edición. Contará con talleres en los días previos, un par de coloquios y la ya propia Keysigning Party exclusiva de NocONName. Este año han querido diferenciar charlas de talleres, por lo que las primeras tendrán una duración de media hora y los talleres de 50 minutos. Tengo el placer de participar este año, dando una charla por primera vez en NcN, con “CSI Madrid S13E37” con lo que intentaré resumir en 30 minutos los contenidos para explicar el caso lo mejor posible. Podéis ver aquí la agenda de ponencias de No cON Name

Como veis, una agenda repleta de Congresos de seguridad, en la que, personalmente, me va a tocar hacer más kilómetros que “El Fugitivo” y cuadrar billetes de avión, tren y coche, para poder enlazar conferencias de seguridad y hacking, para mí imprescindibles, en Latinoamérica y en España

Si me he dejado algún otro evento que se de en Octubre, os ruego me disculpéis, pero si lo indicáis en un comentario o en un correo, estaré encantado de incluirlo en la lista.
Leer más...

28 septiembre 2014

Enlaces de la SECmana - 243

Leer más...

25 septiembre 2014

¿Qué habrá detrás de las Conferencias de Seguridad IT/Hacking?

Este post surge como contestación a este hilo en twitter pero que se podría haber dado también aquí, y dado que éste no es un blog de opinión especialmente, me han invitado a hacerlo con la condición de redactar uno técnico. Esta publicación es un artículo de reflexión y no busco estar de acuerdo con nadie, tengo mi visión y mi cristal desde el prisma en el que lo veo. Seguramente cualquiera en cualquier momento puede ponerse en cristal opuesto y verlo totalmente distinto, voy a intentar trasladar dichas reflexiones.

Es un hecho que en España ya se congregaban hackers en algunos encuentros privados con cierta formalidad y otras sin ella, pero desde 2002 han ido emergiendo multitud de congregaciones que tienen que ver con el mundo de la Seguridad IT y hacking, y casi todas constituidas con titularidad jurídica propia y declaradas como asociación sin ánimo de lucro, lo cual indica la declaración de los socios fundadores o constituyentes de no lucrarse con las actividades que realizan y de cumplir con ciertas obligaciones que marca la ley de asociaciones. RootedCON con su satélite RootedVLC, No cON Name, Navaja Negra, ConectaCON, GSICKMinds, Congreso SSI, hackr0n, hackmeeting, etc. sonarán a más de una persona, pues son eventos que se nombran mucho en redes sociales y multitud de medios (como este), hay también eventos organizados por instituciones públicas como ENISE, Cybercamp o las Jornadas del CCN-CERT, eventos de concienciación como X1red+segura y por supuesto numerosas jornadas profesionales organizadas por las mismas empresas cuya finalidad son totalmente loables para intentar levantar su negocio (aunque las estrategias que veo que más están adoptando las empresas es la de asociar su imagen de marca a un conocimiento de "novedad", a ciertos expertos, o a un evento sin fines de lucro). Existe una ponencia titulada "A talk about (info-sec) talks" de Haroon Meer que pienso que es de vista casi obligada como reflexión para el asistente y el organizador.

El tema que seguramente está en más de una mente en estos días sobre las CONs, está relacionado con:

1- La multitud de eventos del mismo formato y su conveniencia en España.

¿Cual es la finalidad que piensan los organizadores de lo que debe ser su evento? ¿Divulgativa? ¿Investigación? ¿Sociabilización/Networking? ¿Show? ¿Negocio? ¿Underground? ¿Ser cool/hax0r/guay? ¿Todo lo anterior? ¿Ayuda a la gente en su región? Eso solo lo saben los organizadores y lo que explican en sus webs. No siempre es lo que parece, sino lo que es, dado que muchas veces los organizadores no llegan a lo que quisieran, pero sobretodo que cada uno saque sus conclusiones yendo y preguntándoles, que nadie te lo cuente ;-) 

¿Porqué hay muchos eventos del mismo estilo? ¿Se preguntan los organizadores las razones e idoneidad antes de iniciar un evento de características similares? Me refiero a dar ponencias/charlas ofensivas/hax0r/exploit/memegracioso/booom. En el video de Haroon Mer menciona tres razones de los que inducen a los organizadores a convocarlas: "Algunas razones generosas", "Dinero" o "influencia". La realidad es que hay multitud de eventos de este formato y no ABUNDAN por ejemplo (organizadas por hackers): hackatones, CaptureTheFlag, jornadas de concienciación sobre privacidad, Signing Partyes, canales temáticos en radio, TV, talleres prácticos sobre desarrollo, exploiting, o hardware hacking, etc. y estos en mi opinión tendrían incluso más éxito que los eventos del formato ponencia magistral.

Algunos mensaje de opiniones que he podido extraer en listas de correo como NocONName o RootedCON:

<aramosf> Demasiados eventos: hemos pasado de que hubiera pocos, a una época de ninguno, para ahora tener tropecientos. Pues mejor, ¿no? así los habrá para todos los niveles y gustos. Aunque yo sigo pensando que falta un tipo de evento práctico y abierto a modo workshop y que no tenga que ser de seguridad, que sea puramente tecnológico. La gente ahora no tiene background como antes, la gente empieza directamente a trabajar en seguridad sin haberse pegado con código, sistemas o con redes... me refiero a pegarse de verdad , no a compilar una shell en la práctica de la Uni, ni instalarse una Solaris en una máquina virtual o configurar un iptables en el router de su casa. Yo pienso que cada vez hay menos arquitectos de seguridad y más nessus con ojos que tras su primer script en nasl quieren explicarlo delante de 600 personas.

<patowc> Sobre la abundancia de Congresos: pues es COMO DEBE SER. Yo estoy absolutamente orgulloso de que aparezcan más y más eventos en nuestro país, que buena falta le hace. Y ESPERO QUE CADA VEZ HAYA MÁS.  Como dice Nico, quizás deberíamos plantearnos hacer cosas diferentes (nosotros los primeros, ojo, que no hacemos otra cosa que repetir un esquema que lleva desde la época de los LOD).

2- La conveniencia de sus fechas ya que están muy cercanas (especialmente las del segundo semestre del año)

Es una situación nefasta, y en algún encuentro que hemos tenido representantes de las CONs, ya se ha mencionado que no favorece a ninguna, más que nada porque no hay tantos interesados en asistir a todas a la vez sin un poco más de respiro. En mi opinión en muchas son casi los mismos. Es algo que se ha empezado a intercambiar entre organizadores con unos correos, pero no se ha avanzado.

3- La conveniencia de la repetición de ponencias (que se puedan aceptar en varias CONs).

Esto depende mucho del tipo de rumbo que quiera tomar la organización. Si el evento lo toman con el fin de enfocarlo a un evento divulgativo, es razonable que no les importe repetir las ponencias, pues puedes repetir tantas ponencias las veces y ediciones que lo organización considere. Otros eventos pretenden ser un punto de referencia en la investigación y/o novedad por lo se puntúan y se eligen según los criterios de la novedad, y algunas incluso no aceptan ponencias que se hayan dado en otros lugares. En el vídeo menciona otras razones que os invito a que conozcáis.

Algunos comentarios sobre las repeticiones o no-presentación de algunas ponencias pueden ser:

<patowc> "De potenciales ponentes que se cagan y deciden no echar charlas..."

<Lorenzo Martinez> "Sigo pensando que lo de la exclusividad está muy bien para la organización de un evento, y que por supuesto le da cache y valor al evento..."

<patowc> De gente que cree que lo que puede contar "no le interesa a nadie"

<Albert López> Pero es que el problema ya no es que una misma persona repita la misma charla una y otra vez, el problema es ver refritos de una charla innovadora que se hizo hace 5 años y se siguen haciendo charlas sobre lo mismo... 

<patowc> De gente que no explora conceptos absurdos a priori...

<n0p> No digo que no se repitan charlas, pero es que vas a la NN, a la rooted y a la NCN y ves 3 veces varias charlas...
 
<Jesús Arnáiz> "Sinceramente, creo que la mayoría de las ponencias deben de costar a los investigadores muchos meses de trabajo para poder tener esa calidad. Tampoco van a estar 10 años contando lo mismo, pero creo que está bien que lo presenten, al menos durante ese año, en varios eventos. Así, además, llega a más gente..." "...(sé que están en youtube, pero es diferente verlas en directo, poder preguntar, etc.). También para el investigador ver cómo es acogido su trabajo en diferentes entornos, países, etc., puede ser interesante." ... "Entiendo que como organizador se premie la "primicia", y me parece bien que sea un aspecto valorable y por tanto, una charla pueda dejar fuera a otra por este hecho; Aparte, no soy yo quien le vaya a decir a una organización cómo debe valorar el contenido que ofrece en su congreso".

<patowc> La primicia es IMPORTANTE para los congresos. Porque ayuda a que el nombre del congreso se conozca, a poder mantenerse y lo ayuda a crecer.

4- Reflexiones y críticas desde el punto de vista del asistente (calidad)

Desde el punto de vista de los asistentes es bastante cómodo asistir a un evento (o a varios) si el bolsillo y el trabajo te lo permite (yo también lo soy de otros eventos) y beneficiarse de comodidades, prestaciones y experiencia ,proximidad y al menor coste posible.

<n0p> sobre todo, lo que mas me jode, son las charlas-show en las que estas una hora hablando y se podría resumir todo en un paper de 2 folios, pero te lo meto en una charla, 4 coñas, 3 memes y ale, una hora rajando. De vez en cuando, como comic-relief está bien, pero parece que se están convirtiendo en costumbre.

<n0p> cada vez hay menos información de la charla que vas a ver ANTES del congreso. Muchas charlas se presentan sólo con un título enigmático y punto.

<n0p> Me da la impresión que las cons están derivando a una quedada de amigos, donde siempre se juntan los mismos grupos y siempre dan las charlas las mismas personas, y cada vez se dejan más de lado las mismas en pro del evento social.

<Sinosuke> Lo de los memes y las coñas, para mí son indispensables, que la gente se pasa desde las 9:00 a las 19:00 escuchando charlas. Técnicas sí, por supuesto, pero un mínimo de amenas también, que no son cosas incompatibles

<Alfonso Muñoz> No veo ningún problema en que se repitan charlas, es más creo que incluso, por distintas razones (algunas las apuntaba Vins) es hasta positivo. Al final, es una decisión de la organización. No se genera material de calidad con facilidad ni existe tanta gente con las habilidades suficientes para exponerlas en público, una organización corre el riesgo de quedarse sin ponencias o con ponencias de menor categoría...

5- Valoraciones personales por parte de la organización de eventos.

  • Rumbo que se marca con las virtudes y deficiencias de los organizadores que lo forman. Los equipos llegan a ser grandes por muchas cualidades, pero el éxito está en su configuración, habilidad y unión.
  • Carácter y forma del evento: simposio, jornadas, seminario, disertación o congreso y su finalidad. 
  • Cantidad de asistentes vs filosofía: no siempre es así, pero no siempre los eventos que tienen menos cantidad de asistentes son de segunda. Los que hayáis estado en Euskal Party sabréis de qué hablo.
  • Idoneidad del evento: por supuesto como a toda persona o colectivo que dedica un tiempo, y más si es para darlo al resto, le gusta que ese tiempo sea de utilidad o reconocimiento: como comentaba con un maestro: hacer un evento para difundir los bailes y ritmos populares-tradicionales cubanos en Barcelona cuando hay cinco eventos con carácter lucrativo que funcionan, no tiene sentido; pero en otra ciudad que no se hace nada de nada, sí que se puede empezar a trabajar.
  • Idoneidad/mesura e intrusismo con el mundo laboral/privado: en el caso de los eventos altruistas, hay colectivos que se ganan la vida con las formaciones o dando otros tipos de servicio. La situación de precariedad laboral en estas fechas hace que mucha gente agudice el ingenio, y a veces el remedio sea peor que la enfermedad: no hay que olvidarse de la gente que ya está en el terreno laboral, pues hay que medir la cultura del "todo gratis": "sí, la cultura es propiedad de la humanidad" pero medir el formato que se da.
  • Financiación: todos los eventos se pueden hacer perfectamente sin dinero y nosotros en nuestros inicios lo hemos hecho. El quid es contar con la gente que quiera participar y sobretodo para hacerlo ágil y en unas condiciones cómodas, cuesta dinero que evidentemente hay que pagarlo (viajes de ponentes, estancia, gastos varios, alquiler de salas, merchandising, etc.) ya sea de los participantes y/o patrocinadores.  No es mejor ni peor que un evento que cuente con más o menos presupuesto, todo es dependiendo de la finalidad de la organización.
  • Patrocinadores: Experiencia con muchos patrocinadores las hay, positivas y negativas, si los eventos son con una organización sin ánimo de lucro no hay que olvidarse que los patrocinadores son un medio, no un fin. Es decir para llegar a realizar el congreso con comodidades se necesita un presupuesto, y parte de él ha surgido de un acuerdo con patrocinadores, pero las condiciones ha de ponerlas la organización (pese a algunas malas experiencias):  
P:¿Nos podrías enviar el listado de emails de los participantes? N:No. P:Lo teníamos que intentar jeje

en caso contrario pierde su esencia para convertirse en instrumento del eje lobbista (hay que estar atentos)
  • Colaboraciones: Primordial, hay que ayudarse entre "hermanos". Pero las colaboraciones en ambos sentidos (por favor, no solo en uno) e ir de frente.
  • Evitar a los ventajistas: Vamos, los trepas o lameculos que quieren estar en la organización para conseguir otro fin que no es el de la organización, en el caso de los eventos altruistas éstos hacen perder mucho tiempo.
  • En el caso de un evento con charlas y ponentes: dar oportunidad a nuevos ponentes y animarles con sugerencias como ser buenos oradores y que den algo de valor añadido a su proyecto de investigación/hacking (no solo leer en h3x4d3c1m3l es señal de un buen análisis, p.ej. inducir a mencionar el campo de pruebas realizadas para tener más información o, conclusiones/impacto que esa investigación tiene o podría tener en un campo de pruebas como la vida real.)
6- Conclusiones

Pienso que tanto organizadores como asistentes tenemos mucho que trabajar, con esta publicación quiero reflejar que por parte de la organización no es fácil hacer un evento personalizado, al final los que realizan eventos necesitan que tenga éxito, y esto depende del esfuerzo de mucha gente, no solo de uno, ni de dos... ni de ... la organización, sino de muchos actores implicados que quieren que funcione... La mayoría de gente piensa que el rumbo que toman las CONs debe ser diseñada junto con su márketing para un cliente/asistente como si de un producto se tratase, y no siempre es así: sino que a veces es una filosofía que ven algunos y que tarda  verse, madurar y encajar.

Artículo cortesía de José Nicolás Castellano (Nico) @jncastellano - Organizador en No cON Name
Leer más...

24 septiembre 2014

Grave vulnerabilidad en bash ~#☢

Se acaba de publicar una vulnerabilidad crítica en bash, el interprete de comandos de Linux y muchos otros sistemas Unix (incluido OSX), que también parece afectar a otros interpretes como zsh, tcsh, csh y ksh . pero no a otros otras shells. Se ha identificado con el registro: CVE-2014-6271 y seguro que dará mucho que hablar los próximos días.

Mediante esta vulnerabilidad es posible ejecutar comandos debido al incorrecto procesado de las variables de entorno, en determinadas circunstancias, esto puede ser explotable remotamente.

El problema reside en que bash permite la declaración de funciones (como cualquier otro lenguaje interpretado) y no son validadas correctamente cuando son almacenadas en una variable. Con ejemplos seguro que se ve mejor.

Una función se declara de la siguiente forma:

aramosf@digitalsec:~$ cat test.sh
#!/bin/bash
function hola () {
     echo "Hola mundo"
}
hola
aramosf@digitalsec:~$ bash test.sh
Hola mundo

Pero por desgracia bash procesa todo el contenido de la variable y continua ejecutando incluso cuando termina la función:

aramosf@digitalsec:~$ VAR="() { echo 'Hola mundo'; }; echo 'Adios mundo'" bash -c "echo Prueba"
Adios mundo
Prueba

En la prueba anterior, se esperaba que únicamente se mostrase "Prueba", pero acaba procesando el echo de "Adios mundo".

Esto tiene implicaciones en servicios remotos, en especial en páginas web con CGIs que leerán las variables enviadas por el cliente como cabeceras (y que pueden contener comandos) y ejecutarán su contenido cuando se invoque bash. Explotar CGIs escritos en bash será trivial y aunque parezca mentira, existen miles:


Otras implicaciones conocidas hasta ahora, pero que seguro que aumentan estos días, son:
  • Uso en ForceCommand de SSH para limitar capacidades de ejecución de comandos
  • Otros CGI (como php, perl, etc) que lancen subshells con llamadas del tipo system()
  • Clientes DHCP que lancen shells.
  • Herramientas y aplicaciones con SUID que invoquen bash para alguna acción.
  • Sistemas móviles que utilicen bash, como Android
  • Otros sistemas con Linux, como routers (que generalmente lanzan pings, traceroutes, etc), modems, televisores, etc..
La alegría de la huerta. Nos esperan días con muchas noticias sobre nuevos impactos, Eso seguro. 

Para solucionar el problema tan solo hay que esperar a que saquen el parche (y funcione), cosa que ya ha ocurrido en las distribuciones más populares, pero que tardará tiempo en sistemas embebidos o poco mantenidos.

Ejemplo de un código vulnerable y su explotación sacado de un comentario de reddit:

print 'hello world!'[root@host cgi-bin]# rm -fr /tmp/aa
[root@host cgi-bin]# cat /var/www/cgi-bin/hi
#!/bin/bash
echo "Content-type: text/html"
echo ""
echo "hai"
[root@host cgi-bin]# curl -k -H 'User-Agent: () { :;}; echo aa>/tmp/aa'  https://localhost/cgi-bin/hi
hai
[root@host cgi-bin]#  tail -n1 /var/log/httpd/ssl_access_log
::1 - - [24/Sep/2014:18:22:05 +0200] "GET /cgi-bin/hi HTTP/1.1" 200 4 "-" "() { :;}; echo aa>/tmp/aa"
[root@host cgi-bin]#  ls -l /tmp/aa
-rw-r--r--. 1 apache apache 3 24 sept. 18:22 /tmp/aa
[root@host cgi-bin]# sestatus
SELinux status:                 enabled
[root@host cgi-bin]# yum update

Referencias:
Leer más...
Nuevo proyecto del equipo de la distribución de seguridad Kali Linux, en la que ha creado un spinoff para dispositivos móviles y tablets Nexus, llamado NetHunter.


NetHunter nace como plataforma para realizar tests de intrusión desde dispositivos Android (más concretamente, dispositivos Nexus), en la que se incluyen, además de las herramientas típicas de Kali Linux, un conjunto más de aplicaciones con propósitos concretos (ataques por BadUSB, generación de puntos de acceso rogue, inyección de paquetes 802.11 por USB, etc). Además, es posible acceder a la pantalla del dispositivo a través de una conexión VNC desde cualquier ordenador.

Los dispositivos soportados son los siguientes:
  • Nexus 5 (GSM/LTE) - “hammerhead”
  • Nexus 7 [2012] (Wi-Fi) - “nakasi”
  • Nexus 7 [2012] (Mobile) - “nakasig”
  • Nexus 7 [2013] (Wi-Fi) - “razor”
  • Nexus 7 [2013] (Mobile) - “razorg”
  • Nexus 10 - “mantaray”
Los creadores del proyecto han publicado dos videos como demostración del potencial de la utilización de esta nueva plataforma para el ataque sobre sistemas.

El primer video corresponde con un ataque HID (simulación de teclado), en la que el dispositivo, una vez conectado por USB al sistema víctima, simulará la pulsación de un conjunto de comandos como administrador para establecer una shell reversa sobre un equipo:


El segundo video publicado por el momento muestra un ataque de man-in-the-middle utilizando la técnica BadUSB (presentada en la pasada BlackHat USA 2014), en el que será posible, mediante USB, hacer que el dispositivo Android se interponga entre las comunicaciones y sustituya al Gateway original:


Sin duda un proyecto interesante que seguir de cerca, sobretodo para aquellos poseedores de un dispositivo Nexus ya que con unos pocos clicls sobre la interfaz de usuario creada conseguiremos llevar a cabo tareas avanzadas de explotación por USB.

En la página del proyecto http://www.nethunter.com/ encontraréis todos los pasos necesarios tanto para instalar como utilizar y configurar esta plataforma, así como problemáticas a tener en cuenta.

[+] Página del proyecto NetHunter (Offensive-Security)http://www.nethunter.com/
Leer más...

21 septiembre 2014

Enlaces de la SECmana - 242



Leer más...

20 septiembre 2014

Publicada la OWASP Testing Guide v4

Han pasado ya 6 años desde la última versión estable de la Guía de pruebas OWASP, la v3. Esta semana, se ha anunciado por fin la OWASP Testing Guide versión 4 (por el momento únicamente en inglés). Así lo ha anunciado Mateo Mucci, uno de los líderes del proyecto en un post del blog MindedSecurity.


Como os hemos hablado en multitud de ocasiones en Security By Default, la guía de pruebas OWASP contempla un conjunto de puntos de control que engloban las buenas prácticas de seguridad en aplicaciones web, convirtiéndola en una metodología muy completa y utilizada por los profesionales de la seguridad.

Como principales novedades, además de la reorganización de categorías y subcategorías de algunas pruebas, se ha puesto especial hincapié en los siguientes puntos:

Además, se ha modificado y mejorado el contenido de los puntos de control habituales, haciendo un total de 87 puntos de control (frente a los 64 de la versión anterior). Se ha incluido información con referencias a otros proyectos importantes de OWASP, como son las guías de programación segura y para desarrolladores.

Para esta versión 4 de la guía, encontraremos las siguientes categorías (en inglés):
  1. Information Gathering (OTG-INFO)
  2. Configuration and Deployment Management Testing (OTG-CONFIG)
  3. Identity Management Testing (OTG-IDENT)
  4. Authentication Testing (OTG-AUTHN)
  5. Authorization Testing (OTG-AUTHZ)
  6. Session Management Testing (OTG-SESS)
  7. Input Validation Testing (OTG-INPVAL)
  8. Testing for Error Handling (OTG-ERR)
  9. Testing for weak Cryptography (OTG-CRYPST)
  10. Business Logic Testing (OTG-BUSLOGIC)
  11. Client Side Testing (OTG-CLIENT)
Cabe destacar la gran revisión que se la ha dado a la categoría "Business Logic" (Lógica de negocio), que ha pasado de tener una única subcategoría general en la versión 3 a 9 subcategorías en la versión 4.

Como es habitual, la guía esta disponible tanto en PDF para su descarga, como en versión navegable dentro de la wiki del proyecto.

Nos queda esperar a la versión en castellano.
Leer más...

18 septiembre 2014

Tinfoleak, stalkeando twitter en línea de comandos




Gracias a un RT de Yago, me picó la curiosidad de echar un vistazo a una herramienta: Tinfoleak. Se trata de un sencillo script en python, hecho por Vicente Aguilera, que permite, a través de línea de comandos “preguntar a twitter” por diversa información de un nick en concreto.
Entre otras opciones, podemos saber:

  • Información básica del usuario, según aparezca en twitter (Nombre, ubicación, followers, foto, etc,…)
  • Dispositivos, sistemas operativos y algunas redes sociales utilizadas por el usuario
  • Hashtags a los que ha hecho referencia el usuario
  • Quién lo ha mencionado
  • Búsqueda de palabras clave dentro de los tweets en concreto
  • Filtrado por fechas y hora inicio/fin, etc....
  • Geolocalización de los tweets, generando un mapa de las localizaciones visitadas 

Todas estas opciones pueden ser utilizadas en combinación con otros flags que permiten filtrar por fechas, indicar la muestra de los últimos N tweets a buscar (por defecto N = 100), lo que hacen que sea muy potente y que no requiera la utilización de un entorno gráfico para la mayoría de las opciones.

Para su utilización, la descargamos desde Google Code, enlazado desde la página de herramientas del autor, y la descomprimimos.

Tiene como dependencia el módulo “tweepy”, que si no lo tienes ya instalado en el sistema, se resuelve rápidamente con un “sudo pip install tweepy”

Una vez está esto resuelto tendremos que registrarla como aplicación válida en Twitter y obtener una Consumer Key y Consumer secret, así como un Token Key y Token Secret, que deberemos rellenar dentro del script .py.

Para ello, loggeados desde una cuenta twitter, nos vamos a https://apps.twitter.com/app/new, y le damos un nombre  (Ojo, que el nombre de la app no tiene que existir aún,… obviamente tinfoleak existe, por lo que podéis poner el ID que queráis), descripción y website (para que no de error, en formato URL con http://www.loquesea.com). 

Una vez esté creado nos aparecerá una pestaña llamada API Keys, en la que podremos obtener ya  los valores API Key y API Secret (que son el Consumer Key y Consumer Secret, respectivamente, a rellenar en el script).



Ahora hay que generar un Token Key y Token secret. En esta misma pantalla, abajo del todo hay un boton que dice "Generate Access Token”, le damos, y tras unos segundos nos generará un par de valores Access Token y Access Token Secret.



Con esto, rellenamos las variables  CONSUMER_KEY = ‘ ‘, CONSUMER_SECRET = ‘’, ACCESS_TOKEN = ‘ ‘ y ACCESS_TOKEN_SECRET = ‘ ‘ del script y está ya listo para funcionar.

Os dejo un ejemplo que muestran la potencia de la herramienta.

Információn básica, sources (dispositivos y clientes), y hashtags usados por el usuario @lawwait en sus 100 últimos tweets: 

python tinfoleak.py -n lawwait -bsh



En la web del autor de la herramienta podéis encontrar más ejemplos con integración hasta con Google Earth, geolocalizando a los usuarios.

Leer más...

17 septiembre 2014

Nmap: Ejemplos de uso

Hace algún tiempo, mi compañero Alejandro publicó un exitoso cheat sheet sobre Nmap, hoy me gustaría compartir unos cuantos comandos útiles a la hora de realizar un pentesting.

Mucha gente asocia Nmap = Scanner de puertos, pero la verdad es qué, Nmap, permite hacer un montón de cosas mucho más avanzadas que únicamente barrer puertos

Scanning básico

# nmap -sP 192.168.1.* (Ping a toda una clase C)

# nmap -sT  192.168.1.179 (Connect)

# nmap -sS  192.168.1.179 (SYN)

# nmap -sF  192.168.1.179 (FIN)

# nmap -sU -p 0-100 192.168.1.179 (UDP)


Scanning avanzado

# nmap -sO 192.168.1.179 (Procotolos)

# nmap -sV 192.168.1.179 (Servicios)

# nmap -O 192.168.1.179 (Fingerprint)

# nmap -sS -T insane 192.168.1.179 (Agresivo)

# nmap -sS -oN resultado.txt 192.168.1.179 (Logging a fichero)

# nmap -n -D192.168.1.5,10.5.1.2 192.168.1.179 (Con hosts fake)

Tipos de scripts NSE

Auth --> (Procesos de autenticación)
Broadcast --> (Descubrir hosts en red local)
Brute --> (Ataques de fuerza bruta)
Default --> (Juego de tests ‘por defecto’)
Discovery --> (Descubrir nuevos hosts con pruebas avanzadas)
Dos --> (Ataques de tipo DoS)
Exploit --> (Sacar partido de vulnerabilidades)
External --> (Uso de servicios externos como ‘Whois’)
Fuzzer --> (‘Fuzzing’ de aplicaciones)
Intrusive --> (Puede causar daños al host remoto)
malware --> (Para detectar equipos infectados)
Safe --> (No hay riesgo para el host remoto)
Version --> (Detectar versiones de servicios)
Vuln --> (Búsqueda de vulnerabilidades explotables)

Ejemplos de Scripts NSE

# nmap --script-help "*"

# nmap -sC 192.168.1.179 (audit default)

# nmap --script "http-*" 192.168.1.179 (tests vulnerabilidades HTTP)

# nmap --script ftp-anon 192.168.1.179 (Test FTP anónimo)

# nmap --script banner 192.168.1.179 (Captura banners de servicios)

# nmap --script "not intrusive" 192.168.1.179 (Audit no agresiva)

# nmap --script "intrusive" 192.168.1.179 (Audit agresiva)

# nmap --script mysql-brute 192.168.1.179 (Fuerza bruta Mysql)

Leer más...

15 septiembre 2014

RootedSatellite: Valencia

Este fin de semana, 19 y 20 de Septiembre, se celebrará la RootedSatelllite: Valencia en la Fundación Universidad-Empresa de Valencia.


Esta edición spinoff de Rooted cuenta con dos jornadas: el 19 de Septiembre se realizarán los Rootedlabs:

El precio de cada uno es de 50€ para estudiantes y 80€ para profesionales, y tienen una duración de 8 horas. Puedes registrarte en cualquiera de ellos a través de la siguiente URL:


Las ponencias ya confirmadas para el Sábado 20 de Septiembre son las siguientes:
  • José Selvi - Adaptando exploits para evitar la frustración
  • Leonardo Nve - Explotando cambio de servidores DNS
  • David Pérez y José Picó (Layakk) - I wanna jam it wid you
  • Pablo San Emeterio - How to protect your hot pics with WHF
  • Lorenzo Martinez - Cooking an APT... in the paranoid way
  • Cesar Lorenzana - PICOLETOS EN RootedLand….. WTF!!!!
Para este evento, el debate (RootedPanel) tendrá como tema principal el "Estado de las TI en la Comunidad Valenciana"

A continuación se presenta la agenda confirmada:

Horario del Sábado 20 de Septiembre de RootedSatellite: Valencia
Como es habitual, para los que viajen en tren/ave desde fuera de Valencia hay disponible un descuento de Renfe de un 30% para el congreso.

El precio para el congreso del sábado es de 15€ para estudiantes y 25€ para profesionales, pudiendo realizar el registro todavía a través de la siguiente URL:


Podéis consultar más información en la página web de este evento: https://www.rootedcon.es/vlc/

¡No te lo pierdas!
Leer más...

14 septiembre 2014

Enlaces de la SECmana - 241



Leer más...

10 septiembre 2014

Solucionando crackmes precargando librerías

Una de las técnicas más utilizadas en sistemas UNIX para analizar o modificar el comportamiento de una aplicación es la de precargar una libreria para hacer que el linker priorize nuestros funciones en vez de las disponibles en librerias externas.

De hecho, en iOS, todo el sistema de MobileSubstrate y la app Flex, se basan en este concepto para extender o modificar las funcionalidades de las aplicaciones de forma bastante cómoda.

La técnica consiste en definir una variable de entorno (LD_PRELOAD o DYLD_INSERT_LIBRARIES en OSX/iOS). La cual es parseada por el linker dinámico del sistema (/lib/ld.so o dyld) y cargará nuestra libreria permitiendonos varias opciones:

  • inspeccionar los parametros y sus contenidos
  • cambiar el valor de retorno de una función
  • extender la funcionalidad
  • reemplazar la implementación
  • volcar los backtraces (desde donde se llama)
  • ...


Para ejemplificar toda esta teoría he escrito un pequeño crackme:

        I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KCgppbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpIHsKCWNoYXIgKnBhc3MgPSAoY2hhciAqKWFyZ3ZbMF07CglpZiAoYXJnYzwyKSB7CgkJcHJpbnRmICgiR2ltbWUgYW4gYXJnXG4iKTsKCQlyZXR1cm4gMTsKCX0KCWlmICghc3RyY21wICgiYSIsICJiIikpIHsKCQlwcmludGYgKCJBcmUgeW91IHRyaWNraW5nIG1lP1xuIik7CgkJcmV0dXJuIDE7Cgl9CglpZiAoIXN0cmNtcCAoYXJndlsxXSwgcGFzcykpIHsKCQlwcmludGYgKCJZb3Ugd2luIVxuIik7CgkJcmV0dXJuIDA7Cgl9CglwcmludGYgKCJXcm9uZ1xuIik7CglyZXR1cm4gMTsKfQo=

El desensamblado del crackme en OSX se vé tal que así:




La inyección de librerías sólo es posible en ejecutables no estáticos y que no tengan el bit SUID activado. Esto podemos comprobarlo facilmente con ls y rabin2.

$ isSuid() { ls -l $1 |awk '{print $1}' | grep -q s && echo YES || echo NO; }
$ isStatic() { rabin2 -I $1 | grep ^static | grep -q true && echo YES || echo NO; }     
$ isSuid ./a.out
 NO
$ isStatic ./a.out
NO

Estamos de suerte! el crackme cumple las condiciones para seguir con el post ;)

En este punto debemos saber que símbolos y librerías importa. Para ello utilizaremos rabin2, un programa que forma parte del framework de Radare2 y que nos permite inspeccionar y extraer información de binarios, principalmente ejecutables, librerías, etc.

        $ rabin2 -qi a.out
        printf
        strcmp
        dyld_stub_binder
        $ rabin2 -ql a.out
        /usr/lib/libSystem.B.dylib

Os recomiendo usar siempre la versión de git de radare2, y pasaros por el IRC (freenode canal #radare) si tenéis cualquier duda o idea :)

        $ git clone https://github.com/radare/radare2
        $ cd radare2
        $ sys/install.sh

Bien, parece que este ejecutable está usando printf y strcmp. Es bastante probable, que strcmp se esté usando para comprobar la contraseña suministrada por el usuario. Así que vamos a crear una librería que nos muestre con que parámetros se está ejecutando.

        $ cat mylib.c
        int strcmp(char *a, char *b) { return 0; }
        $ gcc -fPIC -shared mylib.c -o mylib.dylib
        $ rarun2 program=./a.out preload=mylib.dylib arg1=something
        Are you tricking me?

Si cambiamos el valor de retorno el crackme lo detectará. Así que debemos crear algún tipo de filtro para que sólo devuelva correcto desde la llamada que comprueba la contraseña, y no la previa que sirve para verificar que no hemos hookeado 'strcmp'.

En este ejemplo, he optado por reescribir strcmp para no complicar más el ejemplo y evitar explicar el lazy binding y el rtld-next para redirigir la ejecución a la implementación nativa.

Para esto podemos comprobar el caller utilizando esta macro:


        

El número mágico 0x100000ee7 es la dirección de la siguiente instrucción que encontramos después del 'call strcmp' que queremos interceptar, que es la dirección que encontraremos en el backtrace de la pila.



Compilamos la librería y ejecutamos el crackme con rarun2 para que éste nos defina las variables de entorno y todo lo necesario para inyectar la librería al programa, independientemente de estar en OpenBSD, OSX o Linux.

        $ gcc -shared -fPIC mylib.c -o mylib.dylib
        $ rarun2 program=./a.out preload=mylib.dylib arg1=something
        You Win!

Cabe destacar que precargar una librería nos permite introducirnos en la tabla de resoluciones de llamadas a librerías externas. Así que no nos será posible hookear funciones del mismo binario... o sí?

En el caso de tener la posibilidad de modificar el binario podemos parchear las llamadas a la función que queremos interceptar. O sencillamente, si queremos modificar por completo esa función podemos parchear los primeros bytes de esta para redirigir la ejecución con un jmp a la plt.

De esta forma cada vez que el programa llame a esa función interna el flujo de ejecución se redirigirá hacia un símbolo importado de alguna librería externa.

Pongamos un ejemplo para ver la explicación un poco más clara:


        

Compilamos y desensamblamos el programa

        $ gcc test.c
        $ r2 -Aqc 'pD $SS @ $S' a.out



Como observamos, el simbolo sym._test está en la dirección 0x100000e90. Si queremos reimplementar esa función por una externa debemos parchear la primera instrucción para que realize un salto a algún import, que estos a su vez están asociados a un símbolo local del binario, el cual es utilizado por el linker para saltar a la función cargada de una librería con ese nombre.

      $ rabin2 -i a.out
        [Imports]
        ordinal=000 plt=0x100000f38 bind=NONE type=FUNC name=printf
        ordinal=001 plt=0x100000f3e bind=NONE type=FUNC name=strcmp
        ordinal=002 plt=0x00000000 bind=NONE type=FUNC name=dyld_stub_binder
        3 imports
        $ rabin2 -s a.out | grep imp.
        vaddr=0x100000f38 paddr=0x00000f38 ord=003 fwd=NONE sz=0 bind=LOCAL type=FUNC name=imp.printf
        vaddr=0x100000f3e paddr=0x00000f3e ord=004 fwd=NONE sz=0 bind=LOCAL type=FUNC name=imp.strcmp

Una vez obtenida la dirección de los imports podemos proceder a parchear el ejecutable:

        $ r2 -qc 'wa jmp 0x100000f38 @ 0x100000e90' -w a.out

Si desensamblamos ahora la función sym._test veremos como realiza un salto a sym.imp.printf:



Así pues, si ejecutamos el programa ahora veremos como nos muestra que la contraseña que esperaba era el argv[0], es decir, el nombre del ejecutable.

        $ ./a.out
        ./a.out

Volvemos a ejecutar el crackme original:

        $ ./a.out.orig ./a.out.orig
        LE WIN!

Para este simple ejemplo no nos sería necesario inspeccionar mucho más allá de insertar un salto, ya que en este caso solo nos interesaba conocer el primer argumento de strcmp. Pero para otro tipos de análisis de binarios puede sernos de gran utilidad el poder redirigir la ejecución de ciertas funciones internas para reimplementarlas desde fuera.

Este tipo de técnica és utilizada en multitud de casos reales de ingenieria inversa, para analizar comunicaciones de malware, entender como se funciona un flasher, etc.

Si estás interesado en conocer más detalles sobre esta y otras técnicas, os recomiendo que echéis un vistazo al curso de ingeniería inversa y exploiting que vamos a impartir próximamente con Yago, NighterMan, Ricardo, Newlog y un servidor: pancake.


Nos leemos!

Artículo por cortesía de Sergi Álvarez
--pancake
Leer más...

09 septiembre 2014

¡ Malditos ! Ya no me puedo creer nada !

Vivimos en una sociedad en la que aparentar significa mucho, no es lo mismo sacar de tu bolsillo un precioso Iphone de 900 dólares que un simple Huawei de 100. Igual que tampoco genera la misma imagen bajar de un Mercedes a bajarse de un Skoda.

Sí, es injusto, tan injusto como inherente al ser humano, como bien lo describió Maslow en su pirámide

Gracias a esa necesidad de aparentar, desde hace mucho tiempo circula una floreciente economía de las imitaciones, hay trajes (H)armani, pantalones Lavis e incluso en muchos casos hasta es un copy / paste con marca incluida pero de calidad inferior.

Lamentablemente en Internet esto se está trasladando muy rápidamente a las redes sociales, hay que aparentar, todo el mundo conoce y sabe que se pueden comprar followers en twitter, no son caros y generan 'imagen', no es lo mismo andar con 200 followers que con 20.000.

Lo que me ha sorprendido es que, el tema de las redes sociales está tan prostituido que no es solo twitter o Facebook, es que prácticamente cualquier red social tiene su servicio que-vende-algo.

Crees que los likes y los followers de Instagram son reales ?


Si piensas en la siempre reputada Linkedin, tampoco te puedes fiar


Ni en followers ni en 'Endorsements'


Te sorprende cómo ese artista que a ti te resulta tan penoso tiene tantos visionados en Youtube ? Apuesta a que también ha hinchado sus stats a base de visionados falsos


Y Quora ? esa red social que vino empujando tan fuerte y de la que ya nadie se acuerda 


Tal vez puedas pensar que Google+ (que está muerta, dicen ...) se salva


Igual alguien se esté preguntando qué tiene que ver esto con la seguridad informática, es una buena pregunta y la respuesta es: RE-PU-TA-CI-ÓN

Mucha gente, si le presentan una super oferta de Iphones a 200 euros y ve una web con un perfil twitter asociado con, digamos, 2000 followers, 1000 tipos en G+, otros cientos en Instagram, le va a transmitir una sensación de confianza para 'creer' ese fake y caer en el timo.

Al final todo es aparentar
Leer más...

08 septiembre 2014

Reversing: ¿algo más allá de los 0s y 1s?

Durante todos los cursos formativos de Reversing que he tenido el placer de impartir, tanto en la NoConName como en la RootedCON, siempre intento transmitir a los alumnos la necesidad de saber leer el código. Sí sí, me refiero a coger un binario, leer sus instrucciones y saber abstraerse de modo que se entienda, en un "vistazo rápido", qué es lo que está haciendo una cierta parte de código.

Esto es cada día más una necesidad, si pensamos en la gran cantidad de binarios con intención maliciosa que corren por la red, cada vez más personalizados con lo que los método automáticos de análisis de muestras maliciosas dejan de ser útiles, y que un analista debe analizar de manera manual. Así pues, vamos a ver un ejemplo sencillito de por qué aprender a leer ensamblador es bueno! :)

Hoy vamos a analizar el binario "reversing.exe", firma MD5 d1287fdcc585c09b532d3c953378d745., que es un crackME, es decir, un programa especialmente desarrollado para practicar la ingeniería inversa (es decir, se permite inspeccionar su código binario y analizarlo, aspecto que no está tan claro su legalidad conforme a la legislación de ciertos países). La procedencia del mismo no voy a hacerla pública yo, os la dejo de deberes. Desde aquí un abrazo fuerte a su autor y amigo, lector asiduo de este blog y muy buen profesional ;). Lo primero siempre a la hora de analizar un crackME es ejecutarlo, para ver qué pinta tiene. En este caso, nos encontramos con esta pantalla:

Aparece una terminal donde se pide la introducción de un número de serie. En función del desarrollado del crackME, nos podemos encontrar que también se pide el nombre de usuario, o incluso nada (estos suelen tener "truco" para resolverlo ;)).  Antes de empezar a poner las manos en la masa, veamos qué ocurre si ponemos algún texto cualquiera como número de serie, y aceptamos:


El programa nos informa de que el número de serie introducido es inválido, ¡vaya!. Hubiera estado muy bien haber acertado a la primera, pero parece que hoy no toca... Bueno, pues ¡vamos a empezar el análisis fino! El primer paso siempre será ver a qué nos vamos a enfrentar: lenguaje de programación, si tiene alguna protección (packer), etc. Esto servirá para definir el análisis que tengamos que realizar, junto con las herramientas a utilizar. Le pasamos, en mi caso, el PEiD, que me informa de que al parecer es un binario normal y corriente, sin protecciones adicionales:


Visto lo cual, vamos a echarle un vistazo al código binario a ver qué nos encontramos. Para ello, podemos cargarlo en una herramienta de análisis estático, como el Win32Dasm (soy un clásico, perdonadme), o una herramienta de análisis dinámico, como el OllyDBG. En mi caso, me voy a decantar por la segunda pero no voy a ejecutarlo, simplemente voy a "leer" el código.

En la imagen superior se muestra lo que nos aparece dentro del debugger OllyDBG. El debugger siempre nos para en la "primera" instrucción que se va a ejecutar del binario, que es la que se encuentra en el "Program Entrypoint". Vamos a observar un poco en detalle el código que nos encontramos.

Como veis, lo primero que hace el binario es llamar a la función de Windows GetTickCount(). Esta función devuelve el número de milisegundos transcurridos desde el encendido del ordenador. Este valor devuelto se almacena en el registro EAX, que en la instrucción de después guarda en una variable en memoria (dirección 0x4030AF). Tras esta asignación, hay una llamada a la dirección 401051. Esta función contiene el siguiente código:

Lo primero que hay es un "XOR EAX, EAX", que quiere decir que pone un 0 en EAX. ¿Por qué el compilador no ha puesto entonces "MOV EAX, 0", que es una instrucción de ensamblador para poder asignar valores a los registros del micro? La respuesta es sencilla: por optimización. Un "XOR EAX, EAX" ocupa menos bytes y consume menos ciclos (o sea, se ejecuta antes) que un "MOV EAX, 0" en una arquitectura x86. Después de este XOR, aparece una llamada a IsDebuggerPresent(), que devuelve un 0 ó 1 en función de si el programa se está ejecutando bajo debugger. Si el valor de EAX es 0, el "OR EAX, EAX" también será 0, con lo que la bandera de cero estará activada, y el salto condicional "JE" de después se ejecutará, con lo que llevará la ejecución a 40105D (es decir, dentro de la misma función). Después observad que hay varias llamadas a otros lugares. Si leyéramos cada una de ellas, veríamos que hay cierto código que hace "cosas" que a priori no sabemos muy bien para qué las hace. ¿Hará falta profundizar en cada una de estas llamadas y analizarlas en detalle? Pues no lo sabemos todavía, así que si es necesario, mejor dejarlo para el final, ¿no?. Para ir acabando el artículo, voy a centrarme en las dos últimas que son las que presentan algo de chicha. El código de ambas funciones, 0x4010A3 y 0x40110B, se presentan respectivamente a continuación:



Fijaos en la última llamada. Aparece una llamada a CompareStringA(), que es una función para comparar dos cadenas. Las dos cadenas que se comparan son las almacenadas en las variables 0x403136 (String2) y 0x4030C2 (String1). Si nos centramos ahora en el código de la primera función (0x4010A3), se observa una llamada a wsprintfA(), que es una función para imprimir cadenas, seguro que la conocéis si habéis programado en C. En este caso, observad con detalle sus parámetros: el primer parámetro 0x4030B8, es un puntero a una cadena, el segundo es el formato en el que debe de "imprimir" esa cadena, que es %.08X, es decir, hasta 8 carácteres hexadecimales; y el tercero es dónde ha de imprimirlo, que en este caso es otra variable cadena en la dirección 0x403136, que es la que coincide con el parámetro de entrada a la función CompareStringA() que se ha comentado anteriormente.

Si leemos un poco más hacia atrás del wsprintf, observad que aparece como parámetro de la función GetVolumeInformationA(), que sirve para recuperar información sobre el disco duro donde está montado el raíz del sistema. Concretamente, coincide con la variable donde se guarda el número de serie del volumen del disco duro raíz.

Observad que hasta ahora, no ha sido necesario ejecutar el binario y simplemente hemos "leído" su código, analizando y observando lo que va a suceder cuando se ejecute. Sabemos que si no se ejecuta bajo debugger, el programa llega un momento en que recoge información del disco duro donde se está ejecutando, y compara su número de serie del volumen con otra cadena. ¿Será la otra cadena la que nos permite introducir como clave el crackME? ¡Vamos a probarlo!

Pero... ¡antes tenemos que saber cuál es el número de serie de nuestra unidad raíz! ¿Y cómo se sabe esto? Pues muy fácil, mediante el comando "vol C:" en la consola de Windows XP, obtenemos la respuesta. Así que ahora ya podemos ejecutar "reversing.exe" tranquilamente, e insertar el número de serie del volumen proporcionado por el comando anterior (¡ojo! sin el guión intermedio, recordad el formato de la llamada wsprintfA). Y voilá:


¡Reto resuelto!

Cabe decir que si no hubiera sido la solución, podríamos haber seguido estudiando el código en estático, como hemos hecho, o bien empezar a analizar el código en binario, para ver "en caliente" que está pasando durante la ejecución del binario. Como veis, el "ensayo y error" es la forma de ir avanzado poco a poco en este "arte" de la ingeniería inversa.

Yo siempre lo digo, que además del inglés y el español, también "hablo" ensamblador x86. En el próximo curso de Reversing & Exploiting organizado por Securízame, y del cual tengo el honor de formar parte del profesorado junto con las figuras de primer nivel en sus respectivos campos, detallaré algunas cosas más sobre la abstracción de código ensamblador a código de alto nivel para entender qué hace un binario concreto, así como enseñaré algunos trucos y las técnicas más comunes para "atacar" ciertos tipos de binarios.

Y tú, ¿a qué esperas para aprender a "hablar" ensamblador? ¡Apúntate ya! ;)


Colaboración por cortesía de Ricardo Rodríguez
Leer más...