jueves, 12 de febrero de 2015

CVE-2011-4862: Buffer overflow in libtelnet/encrypt.c


Un miembro de la lista de CrackSLatinoS a.k.a Boken (@Boken_), ha planteado una manera diferente de colaborar, motivar, aprender y practicar temas relacionados con la ingeniería inversa.

Para ello, propone la resolución de una serie de exploits de diferentes niveles de dificultad, del cual éste writeUp se encarga de documentar el primero de ellos de nivel medio.

El post original publicado en la lista el 11/12/2014 fue:


http://www.cvedetails.com/cve/2011-4862
La idea principal es que todo el que quiera hacer su versión de este exploit y comprender en profundidad el fallo, vaya comentando aquí sus avances, dudas, problemas y demás. Hay tanto exploits como detalles del mismo, pero la cuestión es que cada uno que lo intente y se atasque venga aquí a explicar sus problemas y pueda continuar.
Ni es un concurso, ni hay fecha de entrega. El único objetivo es que todo el que crea que no sabría hacerlo, pero quiera, utilice este post para conseguirlo. A ver si al final de este hilo entre todo lo comentado se pueden montar uno o varios tutes conjuntos.
Boken


Los detalles de esta vulnerabilidad son:
Buffer overflow in libtelnet/encrypt.c in telnetd in FreeBSD 7.3 through 9.0, MIT Kerberos Version 5 Applications (aka krb5-appl) 1.0.2 and earlier, Heimdal 1.5.1 and earlier, GNU inetutils, and possibly other products allows remote attackers to execute arbitrary code via a long encryption key, as exploited in the wild in December 2011.
Como no podía ser de otra manera, soez y yo nos pusimos a resolverlo con un resultado altamente satisfactorio para nosotros. Este tipo de retos siempre nos dejan muy buen sabor de boca. 

Ni que decir tiene que tan solo mostramos una pequeña prueba de concepto y que dista mucho de la POC original que en su día hicieron NighterMan y BatchDrake. Sin duda la de ellos es infinitamente más elaborada.

Espero que disfrutéis de esta lectura, tanto como nosotros redactándola. Aquí os dejamos todo lo necesario:
¡Hasta el próximo exploit!


lunes, 2 de febrero de 2015

Entrevista a Sergio Llata a.k.a. thEpOpE




Con esta entrada, intento recuperar el flujo de entrevistas a personas que de alguna manera, me aportan y hacen crecer en lo técnico y en lo humano. 

Esta vez, lo haremos de la mano de Sergio Llata (@sergiollata) a.k.a. thEpOpE. 

Fue en la rooted 2k14, donde tuve el inmenso placer de conocerle personalmente y en donde pude contemplar brevemente su enorme potencial.


Desde entonces, no solo hemos mantenido una buena amistad, sino que además hemos conseguido juntar y formar un equipo con unas cuantas mentes inquietas, del cual posiblemente hable en próximas entradas. Sin más preámbulos empezamos con la interview.


  • ¿Cuéntanos un poco a que te dedicas en tu día a día? 
Todo empezó allá en el año 1974, en un pueblo que dista 12 km de Santander (España). Allí nacía un servidor, siendo el tercero de 4 hermanos... (esto parece el inicio de una novela). Bueno, vamos al grano de la pregunta: actualmente tengo 40 años, y no me dedico a nada relacionado con la informática, o al menos de un modo directo. Aunque es algo que siempre se ha rumoreado de mí tanto en las listas de CracksLatinoS, o en el canal #crackers del IRC-Hispano, para salir de todad duda he de decir que, efectivamente, desde el año 2000 soy sacerdote católico. Realmente mi día a día consiste en ejercer mi sacerdocio como párroco en una localidad de la diócesis de Santander.
  • ¿De dónde viene o de dónde sacaste el nick thEpOpE? 
El nick creo que está claro :) En el año 1998, cuando aún estaba estudiando en el seminario, mi hermano puso un modem 33k en casa, y de este modo empezamos a tener Internet. Anteriormente siempre había firmado como DJ Dos, S.O.S. , o simplemente con mi nombre. A raíz de conectarme al IRC, tuve que elegir un nick, y ahí estuvo la pega. Inicialmente me atrajo la idea de Bishop, por el doble significado que tiene en castellano. Pero pensé que siempre habría alguien que podría ponerse un nick en jerarquía superior, y además me parecía que iba a hacer uso del nick de un modo no ofensivo a lo que significa. Además fundé el #canal_catolico también en IRC-Hispano, lo cual daba una identidad interesante. De ahí surgió mi nick inicial, que originalmente tenía corchetes [ThePope] ; y finalmente, cuando quité los corchetes lo dejé con una grafía un poco más h4xor, y que además era el estilo que adopté para la página con tutoriales (y otras lindezas ;) que tuve enlazada desde la web de karpoff. En mi caso he usado otros nicks, como Horeb y MrKhaki.
  • Estoy deseando que nos cuentes como fueron tus comienzos, especialmente en lo que a términos como 'spectrum', 'dibujo', 'música', 'scene', ...
Los comienzos son fáciles de explicarlos. Cuando yo tenía 13 años a mi hermano alguien le regaló un Spectrum+ de 48kb. Hay que pensar que en aquella época en mi casa no había electricidad a 220V, y teníamos que usar un transformador, junto con la única TV que había en casa. Aunque los juegos que venían de demostración eran divertidos, pronto me cansé de ellos, y empecé a experimentar y probar los programas del manual. Así es como poco a poco fui haciendo mis primeros pinitos en Basic de Sinclair. Pronto descubrí que con Basic poco o nada se podía hacer, y aunque la MicroManía tenía bastante enjundia como revista de juegos, cuando mi hermano empezó a la universidad trajo un día una revista que regalaban una cinta.. MicroHobby. Eso fue el lanzamiento total: listados en ensamblador de z80, artículos de programación, herramientas, consultorio de dudas, etc. En el instituto pude intercambiar un montón de material con gente que tenía la misma afición, pero desgraciadamente debía ser casi el único que le gustaba el ensamblador y listados hexadecimales.
Fue a raíz de los concursos de MicroHobby como me puse a hacer los primeros pinitos en dibujos pixel a pixel, así como destripar algunos juegos, en busca de los ansiados pokes de vidas infinitas, o quitar las limitaciones de tiempo que tenían las demos jugables que venían en MicroHobby. Debido al concurso de aventuras conversacionales que hizo MicroHobby me enrolé en ese mundo también, haciendo muchas colaboraciones en el fanzine Z for Zero. En este período llegó a casa un Macintosh Classic, y posteriormente un PC - 386. Fueron dos ordenadores que me introdujeron en el mundo de formatos de sonido, formatos de gráficos, compresores, Motorola 68000...
Justo al año siguiente yo empecé a la universidad, me matriculé en Físicas. A decir verdad lo hice con la intención de hacer Física Electrónica, pero la idea del seminario y la vocación llevaban tiempo en la mente y en el corazón. Y cuando terminé el segundo curso en la universidad, me fui al seminario. En el seminario teníamos una sala con 2 ordenadores Macintosh :) Y posteriormente nos permitieron tener ordenador personal en la habitación :) En ese periodo desarrollé una aventura conversacional para PC, desarrollé un sistema de sonido para PC que permitía incluir sonidos y música en este tipo de juegos (hay unos cuantos juegos por ahí que llevan música mía):
e hice una librería para QBasic que permitía gestionar el CD-Rom, SoundBlaster, ratón, etc...
Al mundo de la scene ... es otra historia muy larga. Porque realmente fue la evolución desde los IRC de ingeniería inversa. Al participar en las parties, nos juntamos unos cuantos que nos gustaba este tema (inicialmente Cathedral :O , y posteriormente Nocturns). A mí me tocó la parte de sonido, a decir verdad, me dediqué a reversar motores de sonido de intros de 64kb, y de 4kb, para después desarrollar el nuestro propio.
  • ¿Cómo ha sido tu evolución en el mundo del (Hack | Crack)ing?
No me considero hacker. Más bien siempre me he considerado cracker. Y no por romper cosas... sino porque "lo virtual" me ha resultado siempre muy etéreo. Me ha gustado más todo lo que se pueda toquetear en local.
Mis inicios en esto indudablemente están en la etapa del Spectrum, cuando usaba el MONS para desensamblar y poder buscar los pokes de los juegos (un parche en toda regla, vamos). También para buscar las contraseñas y poder jugar a las segundas partes sin haber terminado la primera. Después estuve en relación con todo lo de Macintosh (tenía un debugger en la propia instalación del sistema 7 MacsBugs , y un editor de recursos que desensamblaba los recursos de código), y cuando tuve mi 486 cayó por mis manos una versión del win32dasm. La etapa del IRC trajo el resto: sice, trw2000, ollydbg... A todo esto hay que añadir que anteriormente a Internet, no había más posibilidad que la biblioteca de la universidad, y un montón de cintas de spectrum y diskettes que intercambiábamos por correo ordinario.
  • Sabemos de buena tinta que fuiste parte importante en grupos de mucha importancia tales como TNT o WkT! ¿qué nos puedes contar de tu paso por esos te@ms? y sobre todo  ¿en que crees que habéis podido influir para las actuales generaciones?
Bueno, parte importante no me he considerado nunca. En TNT coincidí con miembros españoles, como Xasx (fundador de TNT), Metamorfer, SkUaTeR, y Karlitoz. Salvo con Metamorfer, he tenido la suerte de poder dialogar personalmente y compartir mesa con el resto. TNT me aportó el vértigo de lo que eran originalmente los 0days. Hoy sale un programa, y en menos de 24 horas había que sacar la medicina. Mi conexión de Internet no daba para tanto, y mi tiempo tampoco.
A través del canal #crackers de IRC-Hispano pudimos hacer varias kedadas en la Euskal
Party. La primera fue en la edición 8 de la Party. A partir de ahí entré en contacto con gente de WkT!. En esta época hice buenos amigos de faena donde coincidíamos en la Party: Uri (int3pids), Xezaw (48bits), Shotgan (Nocturns), Ripe (7a69 ezine), Dreg (fr33project), noukeys.
MrBlack hizo campaña de reclutamiento en una party, y finalmente fuimos tres miembros de TNT quienes adquirimos colores :) Si TNT era vértigo, WkT! era madurez. Ante todo se apreciaba lo que cada uno hacía, porque aportaba mucho al resto. Buenos tutoriales, buenas herramientas, nuevas líneas de investigación. Y todo en español. De WkT! guardo un gratísimo recuerdo, y eso que me tocó en la última época, justo cuando se apagó...
No sé a qué nivel hayamos podido contribuir entre todos a las actuales generaciones. Cuando Shaddy dijo en su entrevista que un tutorial mío había marcado un antes y un después en cómo hacer él los suyos, me sentí orgulloso de saber que el tiempo que invertí en hacer aquello había merecido la pena para otros.
  • Dinos que es lo primero que te viene a la cabeza si te pregunto por:
    • Ingeniería Inversa: hexadecimal, estructuras de datos
    • Hacker: admiración por lo que hacen...
    • amn3s1a: diversión a raudales, y buena gente... Como tú dijiste en cierta ocasión: me ha quitado 15 años de encima
    • Mr. Snow: un buen amigo, y una bestia parda. Cuando hacemos retos juntos nos complementamos muy bien. También me viene a la cabeza alguna noche loca por Bilbao (El Alicates, El Siete, y Jade ...)
    • Marcan: valium :) A gente como Marcan no se les debería permitir salir de este país. Debería poner por escrito y con lenguaje humano todo lo que hierve en esa cabeza.
    • Euskal Encounter: Añoranza... con menos participantes era más divertido. Actualmente es el punto de encuentro con otros grupos, y gente "de toda la vida".
    • DemoScene, Intro y 4 K.: Asombro, emoción, arte, cultura digital
    • Criptografía: "Tú verás lo que haces, pero yo a la carcel no voy a verte" (la frase de mi madre cuando ve determinadas herramientas en pantalla). Realmente es lo que ha dado sentido a las pocas matemáticas que sé.
    • Matemática: Qué pena que las he cogido cariño ahora... son el lenguaje del orden
    • Amistad: "Un amigo es aquel que conoce todo de ti, y aún así te sigue queriendo". De estos he tenido muy pocos. La informática me ha dado amigos que los aprecio como hermanos (eSn-mIn, Jade, noukeys)
    • CTF: ¿el fin de semana? ¡¡madre mía, a ver qué ratos me quedan libres para poder echar un cable al grupo!!
  • ¿Cual es el lenguaje de programación que más te gusta y por qué? 
Por herencia, el Basic (he dicho Basic, no VBasic :p). Actualmente me gusta mucho el
python, me parece un lenguaje de aprendizaje rápido, y versátil. A decir verdad apenas programo, y aunque me cuesta mucho escribir 5 líneas seguida en él, el C me ha parecido siempre la mejor opción para cosas grandes y serias. Para des-programar lo tengo claro, ensamblador (da igual de qué máquina sea :), y de hecho sigo haciendo algunas cosas directamente en ensamblador.
  • ¿Cómo percibes el 'mundo hacker' de hoy en día?, ¿Qué cambiarías de él? y ¿Qué no? 
Lo percibo monetizado, convertido en moneda de cambio, y todo lo que se monetiza se oxida. Ahora cualquiera que use Kali o haya hecho un curso de 30 horas sobre seguridad en sistemas, ya se considera hacker... :S Cambiaría muchas cosas, para empezar a quienes hacen las leyes en este país; y también todo ese lenguaje importado con títulos y palabrejas raras... ¿a quién se le ocurre autodenominarse "researcher"? ¿Dónde está la creatividad original y 'typical spanish' del Jamón y el Vino?. No cambiaría a las personas concretas que siguen dándole duro, con ganas de abrir nuevos caminos, y que siguen marcando nuevas fronteras...
  • ¿Qué consejos le darías a los que empiezan o están comenzando? 
Leer, preguntar, probar. Volver a leer, volver a preguntar, volver a probar. Aunque digan que el tiempo es oro, prefiero la paciencia, que es una virtud. Cuanto más aprendas, más te darás cuenta de lo que aún te queda por aprender.
  • ¿Cómo ves tu futuro? 
No lo veo :) No soy adivino ni clarividente, pero espero no perder nunca la curiosidad de conocer, saber, y cambiar en mí lo que sea un obstáculo para los demás.
  • ¿A quién admiras? y ¿a quién no?
Admiro a las personas que se entregan desinteresadamente, especialmente en favor de otros. No admiro a quienes quieren sacar tajada...
  • ¿Nos recomiendas algún libro en especial?
Pues si digo el Evangelio de Marcos quizás no lo toméis en serio, pero os lo recomiendo. El manual de Spectrum +2, ahi está mi base...
  • ¿Qué tipo de música te gusta?, ¿Podrías recomendarnos alguna canción?
Me gusta prácticamente todo, el pop rock en español, la música de los 80; pero me motiva bastante la música electrónica y el hardstyle. Por lo experimental en el momento en que se publicó y que siempre me ha parecido una genialidad: Un mundo separado por un mismo Dios, de Nacho Cano. Algo más actual, y que me ha parecido motivadora para los CTF : Kronos & Drone, "Level 2" 
  • ¿Qué opinas de CrackSLatinos y de su creador (Sr. Ricardo Narvaja)?
Me parece que ha hecho una labor de continuidad bastante positiva, y ha conseguido mantener una comunidad internacional unida por el mismo idioma. Del modo en que se hizo inicialmente prefiero no opinar. A Ricardo no lo conozco personalmente, ni tampoco he coincidido chateando con él como para tener una idea. Como persona no puedo opinar, pero por el hecho de haber estado ahí haciendo lo que ha hecho de modo altruista ya merece mi más sincero respeto.
  • ¿A quién te gustaría que hiciésemos la próxima entrevista?
A Uri o Xezaw.
  • ¿Hay algo que no te hayamos preguntado y que te gustaría decir?
crAck & prAy </mentiras>


Aquí termina la entrevista y no quiero finalizar sin dejaros algunos de los fabulosos trabajos con los que nos ha obsequiado Sergio:


Quiero dar las gracias a todos aquellos que han colaborado en la realización de esta interview, especialmente a C1b3r Pr13st! (@ciberpriest)

Nos vemos en la próxima!



domingo, 1 de febrero de 2015

Práctica de Procesadores del Lenguaje II 2k14


Esta asignatura es la continuación a la de PL I, vista en el la entrada anterior.

Sin duda alguna es una asignatura tremendamente compleja pero a su vez apasionante.

En este caso, el alumno deberá comprender el análisis semántico, así como el proceso final de traducción de un lenguaje formal a las serie de instrucciones manejables por un microprocesador.

Los objetivos que se persiguen son:

› Aprender a valorar la semántica subyacente a las construcciones sintácticas.
› Aprender a integrar el sistema de tipos dentro de un compilador.
› Estudiar la traducción de cada una de las construcciones de un lenguaje imperativo.
› Aprender a dar soporte a la ejecución de invocaciones recursivas de subprogramas.
› Aprender a dar soporte a la declaración anidada de subprogramas.
› Conocer los procesos de generación de código ejecutable.

Y cuyo contenido es:
  • Análisis semántico
    • Gramáticas con atributos
    • Tabla de símbolos
    • Tipos de datos y verificación de tipos
  • Ambientes de ejecución
    • Organización de la memoria
    • Ambientes de ejecución estáticos
    • Ambientes de ejecución basados en pila
    • Paso de parámetros
  • Generación de código
    • Código intermedio
    • Generación de estructuras de datos
    • Generación de código para expresiones
    • Generación de código para sentencias de control
    • Generación de código para invocación de subrutinas
    • Optimización de código

La práctica continúa partiendo de la de PL I como es de esperar. Tanto el enunciado como las directrices se pueden descargar en los siguientes enlaces:
En cuanto a la resolución de la práctica, los siguientes enlaces contienen el proyecto completo para Eclipse, la memoria práctica y los casos de prueba:

Exactamente igual que en la entrada anterior, quiero dar las gracias a mis compañeros Armando Platero y Alejandro González de Aguilar y al profesor D. Javier Vélez Reyes (@javiervelezreye), su inestimable ayuda y dedicación, ya que si ellos hubiera sido casi imposible, el haber podido realizar esta práctica. A todos ellos, !muchísimas gracias!




Práctica de Procesadores del Lenguaje I 2k14


Se trata de una asignatura, la cual desde hace muchos años tenía enormes ganas de cursar y por la cual el alumno debe de aprender a construir y utilizar los analizadores léxicos y sintácticos; cuyos objetivos generales son:

› Conocer la estructura interna de un compilador.
› Comprender el proceso de análisis formal de un lenguaje.
› Aprender las fases que lo constituyen conceptualmente.
› Distinguir los diferentes tipos de lenguajes existente.
› Conocer los diferentes algoritmos utilizados en el análisis sintáctico de lenguajes.


En cuanto al contenido de la asignatura tenemos:
  • Introducción 
    • Estructura de un compilador
    • Proceso de traducción
  • Análisis léxico
    • Proceso de análisis léxico
    • Expresiones regulares
    • Autómatas finitos
  • Análisis sintáctico
    • Proceso de análisis sintáctico
    • Gramáticas libres de contexto
    • Árboles sintácticos
    • Ambigüedad
    • Notación EBNF
  • Análisis sintáctico descendente
    • Análisis sintáctico descendente recursivo
    • Análisis sintáctico LL (1)
    • Recuperación de errores sintácticos descendentes
  • Análisis sintáctico ascendente
    • Análisis sintáctico LR (0)
    • Análisis sintáctico SLR (1)
    • Análisis sintáctico LALR (1)
    • Análisis sintáctico LR (1)

Para la práctica del año 2k13/14, el Equipo Docente propuso realizar un compilador del lenguaje HAda, que implementa un lenguaje similar a PASCAL usando la sintaxis del lenguaje Ada. En los siguientes enlaces se puede obtener el enunciado y las directrices de implementación proporcionadas por el E.D: 
En cuanto a la resolución de la práctica, los siguientes enlaces contienen el proyecto completo para Eclipse, la memoria práctica y los casos de prueba:

No quiero finalizar esta entrada sin dar las gracias a quienes hicieron posible el que pudiera aprender y entender esta fantástica asignatura y que sin ellos no hubiera sido posible la realización de esta práctica y la siguiente de Procesadores del Lenguaje II. Por ello, gracias Armando Urrestarazu Platero por tu increíble constancia; gracias Alejandro González de Aguilar por tus incansables ganas de enseñar y por esas nocturnas horas que me has dedicado y gracias al tutor D. Javier Vélez Reyes (@javiervelezreye) por guiarnos desde el principio con auténtica pasión y vocación y por sus apuntes de la asignatura, que más que apuntes, bien podrían ser la biografía básica.