Como ya es bien conocido en la comunidad de seguridad, los días 6, 7 y 8 de Marzo tiene lugar uno de los mejores congresos de seguridad informática de ámbito nacional, la
RootedCon. Este año, la organización hizo un esfuerzo extra para intentar ofrecer una visión más internacional al evento tanto aceptando propuestas de ponentes extranjeros como ofreciendo servicios de traducción simultánea. Sin embargo, el tema que vamos a tratar en este artículo versa, posiblemente, del mejor training de explotación de software a nivel internacional.
La organización de la RootedCon consiguió que Peter Van Eeckhoutte, aka @corelanc0d3r, viniera por primera vez a España a impartir su “ Corelan Live: Win32 Exploit Development Bootcamp”, marcando un precedente, como suele ocurrir con muchas de las cosas que se llevan a cabo en la RootedCon.
El Bootcamp de Corelan tiene una duración de dos días, sin embargo, ya nos avisaron de que no iban a ser dos días muy normales, que tuviéramos claro que se iba a dormir muy poco. Y así fue. El training de Corelan bien se podría hacer durante toda una semana. El primer día de training empezó a las nueve de la mañana, durando hasta la una y media. No, no la una y media del medio día... sino ¡de la madrugada! Un total de 16 horas y media de training, contando la hora para comer. El segundo día empezó sobre las nueve y acabó a las dos y media. 17 horas y media. Y acabamos a las dos y media porque Peter nos vio las caras de incredulidad y desesperación cuando dijo que estaría bien acabar cierto exploit antes de irnos. Un use Use-After-Free haciendo Heap Spraying y ROP, que en condiciones normales posiblemente nos hubiera llevado una o dos horas, pero después de un total de unas 33 horas de training en dos días, todo apuntaba a que nos iba a llevar todo lo que quedaba de noche.
¡Si esto no te ha convencido para hacer el training en cuanto puedas, no sé qué podría hacerlo!
Cuando se presentan los requisitos del training, sorprendentemente se afirma que no son necesarios conocimientos previos de exploiting y hasta se afirma que no es necesario tener conocimientos de ensamblador. Después de asistir al bootcamp, por extraño que parezca, me pareció que realmente sí que era cierto que no eran necesarios conocimientos de ensamblador.
Durante todo el training, Peter tiene preparados todo un conjunto de ejercicios en los que te presenta las aplicaciones vulnerables y un pequeño Proof of Concept que utiliza para generar un crash en la aplicación. A partir de ese momento, eres tú el que se encarga de hacer de ese crash una ejecución de código arbitraria. Esto significa que en ningún momento necesitas hacer reversing de la aplicación para identificar la vulnerabilidad. Evidentemente vas a tener que leer un poco de ensamblador, pero con unos conocimientos básicos que te da el propio Peter ya es más que suficiente.
Por otro lado, creo que lo que no es tan cierto es que no se necesiten conocimientos previos de exploiting. Es verdad que Peter asume que los asistentes no tienen estos conocimientos (hasta te refresca aspectos de arquitectura de computadores de primero de carrera) pero la curva de aprendizaje es exponencial. Juzga tú mismo: ¿crees que es posible no tener ni idea de lo que es un desbordamiento de búfer y al cabo de dos días estar explotando vulnerabilidades en navegadores web a través de Use-After-Free? Peter casi materializa este milagro, pero te aconsejo que antes de asistir al training pongas un poco de tu parte para no perderte a medio camino. Una buena estrategia es hacer un repaso a sus tutoriales. No hace falta que llegues a los últimos, pero sí que deberías asistir al training con unos conceptos sólidos.
En fin, vayamos a lo interesante.
El primer día, nos adentramos en el mundo del exploiting en Windows a través de desbordamientos básicos de bufers para, como diría el propio Peter, influenciar el registro EIP (que no es lo mismo que sobrescribirlo). Después se hace hincapié en técnicas para evadir medidas de seguridad como SEH, repasando conceptos como SafeSEH o SEHOP, pero sin entrar en profundidad en ellos. También se programan varios módulos de Metasploit para facilitar el desarrollo de los exploits. Durante este primer día también se tocan otros conceptos como el uso de los debuggers, la identificación de caracteres inválidos en los payloads o el uso de una de mis nuevas herramientas favoritas, Mona.
Este podría parecer un día básico para alguien con conocimientos sobre exploiting, pero lo cierto es que se obtienen unos conocimientos y metodologías muy robustos que establecen la base para seguir hacia adelante. Eres capaz de vislumbrar el modo de pensar y trabajar de una persona que se ha dedicado al desarrollo de exploits durante más de diez años. Para todos aquellos que tengáis unos conocimientos sólidos sobre métodos de explotación de software, estoy seguro que las siguientes frases de Peter (las digo de memoria, así que puede que su forma literal varíe) os harán plantear ciertas cosas:
- " Si alguien os dice que puede sobrescribir EIP, ¡huid! A EIP sólo se le puede influenciar."
- " Si alguien os dice que puede sobrescribir una vtable, ¡huid!"
Y la que a mí más me gustó y, a la vez, más me chocó es:
- " Si alguien está utilizando NOPS en su exploit, probablemente no tenga ni idea de lo que está haciendo"
Ahora decidme... Alguna vez habéis utilizado NOPS en vuestros exploits? Si es así, es momento de plantearos si realmente era necesario o simplemente no teníais muy claro lo que estaba ocurriendo. :)
El segundo día del training nos adentramos en conceptos algo más avanzados como DEP o ASLR. A diferencia del primer día en el que se trabaja con Windows XP SP3, este segundo día se trabaja sobre Windows 7. Esto nos llevó toda la mañana y parte de la tarde. Llegados a este punto se supone que ya eres capaz de programar módulos de Metasploit sin muchos problemas y utilizarlos para explotar las vulnerabilidades. De la tarde hasta la madrugada se empezó a profundizar en temas como Heap Spraying y Use-After-Free. Por desgracia, no nos dio tiempo de asentar los conocimientos más avanzados tal y como había ocurrido con los conocimientos del primer día. Tampoco pudimos abordar el tema de information leaks.
Esto sería un problema, si no fuera porqué después del training, a los asistentes se les da acceso a un foro+IRC privado para que todas tus dudas sean resueltas por el propio Peter u otros estudiantes. Sí, lo habéis leído bien. Después del training, Peter sigue resolviendo tus dudas. De nuevo, el precio/hora del training parece que se reduce. :)
Comentar que todas las vulnerabilidades que se explotan en el training son reales, pasando por simples reproductores de música hasta Wireshark o navegadores web. Además hay muchos ejercicios que se quedan en el tintero, para que los pienses tu en casa.
Por último, me gustaría recalcar el valor añadido que ofrece Peter.
A nivel personal, es el profesor más implicado que jamás he visto. ¿Sabéis lo que es estar encerrado durante 17 horas en la misma sala y que él siga motivándote? Siempre que nos ponía un ejercicio iba dando vueltas por la sala en vez de quedarse sentado en su sitio esperando a que lo llamaras, con lo que era mucho más amigable plantearle dudas. Cuando avanzaba con los ejercicios, se aseguraba (dentro de lo posible) que todos lo hubiéramos conseguido.
A nivel pedagógico, Peter es muy bueno explicando. A mí, que ya tenía experiencia previa, me quedaron claros la mayoría de los conceptos. Sin embargo, vi a personas que se perdían a medio camino. Lo que es evidente es que, por un lado, sin unos conocimientos sólidos te va a ser más difícil seguir la clase, y por el otro, si te despistas 5 o 10 minutos, te pierdes. Así que debes mantenerte concentrado todo el tiempo.
Por último, a nivel de conocimientos, Peter es excepcional y, además, trabaja duro. Esto se puede apreciar en muchos momentos. Te da explicaciones sobre ciertos conceptos que normalmente no se encuentran por la red (aún menos en libros). Te explica cosas que la gente acostumbra a hacer, sin saber realmente porqué las hace y te explica por qué ya no son necesarias. Te ofrece información que ha descubierto él mismo y que, por lo que se puede apreciar, seguro que obtenerla le ha llevado una buena cantidad de horas. Además, al final del training habrás interiorizado un modo de trabajar y de pensar que puede facilitarte mucho las cosas en el momento de encarar otros escenarios por tu cuenta.
Ahora, como dice Peter, llega el punto clave: si la semana siguiente al training no repasas todos los conceptos explicados es muy posible que todo esto no haya servido de nada. Por suerte, en las diapositivas y los materiales del training hay decenas de ejercicios que no se hicieron en el training, con lo que hay diversión para tiempo. Por suerte, tendremos el apoyo de Peter con todas las dudas que nos puedan surgir.
Y sobre todo, ¡Don't look the next slide!
Autor: Albert López
Departamento de Auditoría
La organización de la RootedCon consiguió que Peter Van Eeckhoutte, aka @corelanc0d3r, viniera por primera vez a España a impartir su “ Corelan Live: Win32 Exploit Development Bootcamp”, marcando un precedente, como suele ocurrir con muchas de las cosas que se llevan a cabo en la RootedCon.
El Bootcamp de Corelan tiene una duración de dos días, sin embargo, ya nos avisaron de que no iban a ser dos días muy normales, que tuviéramos claro que se iba a dormir muy poco. Y así fue. El training de Corelan bien se podría hacer durante toda una semana. El primer día de training empezó a las nueve de la mañana, durando hasta la una y media. No, no la una y media del medio día... sino ¡de la madrugada! Un total de 16 horas y media de training, contando la hora para comer. El segundo día empezó sobre las nueve y acabó a las dos y media. 17 horas y media. Y acabamos a las dos y media porque Peter nos vio las caras de incredulidad y desesperación cuando dijo que estaría bien acabar cierto exploit antes de irnos. Un use Use-After-Free haciendo Heap Spraying y ROP, que en condiciones normales posiblemente nos hubiera llevado una o dos horas, pero después de un total de unas 33 horas de training en dos días, todo apuntaba a que nos iba a llevar todo lo que quedaba de noche.
¡Si esto no te ha convencido para hacer el training en cuanto puedas, no sé qué podría hacerlo!
Cuando se presentan los requisitos del training, sorprendentemente se afirma que no son necesarios conocimientos previos de exploiting y hasta se afirma que no es necesario tener conocimientos de ensamblador. Después de asistir al bootcamp, por extraño que parezca, me pareció que realmente sí que era cierto que no eran necesarios conocimientos de ensamblador.
Durante todo el training, Peter tiene preparados todo un conjunto de ejercicios en los que te presenta las aplicaciones vulnerables y un pequeño Proof of Concept que utiliza para generar un crash en la aplicación. A partir de ese momento, eres tú el que se encarga de hacer de ese crash una ejecución de código arbitraria. Esto significa que en ningún momento necesitas hacer reversing de la aplicación para identificar la vulnerabilidad. Evidentemente vas a tener que leer un poco de ensamblador, pero con unos conocimientos básicos que te da el propio Peter ya es más que suficiente.
Por otro lado, creo que lo que no es tan cierto es que no se necesiten conocimientos previos de exploiting. Es verdad que Peter asume que los asistentes no tienen estos conocimientos (hasta te refresca aspectos de arquitectura de computadores de primero de carrera) pero la curva de aprendizaje es exponencial. Juzga tú mismo: ¿crees que es posible no tener ni idea de lo que es un desbordamiento de búfer y al cabo de dos días estar explotando vulnerabilidades en navegadores web a través de Use-After-Free? Peter casi materializa este milagro, pero te aconsejo que antes de asistir al training pongas un poco de tu parte para no perderte a medio camino. Una buena estrategia es hacer un repaso a sus tutoriales. No hace falta que llegues a los últimos, pero sí que deberías asistir al training con unos conceptos sólidos.
En fin, vayamos a lo interesante.
El primer día, nos adentramos en el mundo del exploiting en Windows a través de desbordamientos básicos de bufers para, como diría el propio Peter, influenciar el registro EIP (que no es lo mismo que sobrescribirlo). Después se hace hincapié en técnicas para evadir medidas de seguridad como SEH, repasando conceptos como SafeSEH o SEHOP, pero sin entrar en profundidad en ellos. También se programan varios módulos de Metasploit para facilitar el desarrollo de los exploits. Durante este primer día también se tocan otros conceptos como el uso de los debuggers, la identificación de caracteres inválidos en los payloads o el uso de una de mis nuevas herramientas favoritas, Mona.
Este podría parecer un día básico para alguien con conocimientos sobre exploiting, pero lo cierto es que se obtienen unos conocimientos y metodologías muy robustos que establecen la base para seguir hacia adelante. Eres capaz de vislumbrar el modo de pensar y trabajar de una persona que se ha dedicado al desarrollo de exploits durante más de diez años. Para todos aquellos que tengáis unos conocimientos sólidos sobre métodos de explotación de software, estoy seguro que las siguientes frases de Peter (las digo de memoria, así que puede que su forma literal varíe) os harán plantear ciertas cosas:
- " Si alguien os dice que puede sobrescribir EIP, ¡huid! A EIP sólo se le puede influenciar."
- " Si alguien os dice que puede sobrescribir una vtable, ¡huid!"
Y la que a mí más me gustó y, a la vez, más me chocó es:
- " Si alguien está utilizando NOPS en su exploit, probablemente no tenga ni idea de lo que está haciendo"
Ahora decidme... Alguna vez habéis utilizado NOPS en vuestros exploits? Si es así, es momento de plantearos si realmente era necesario o simplemente no teníais muy claro lo que estaba ocurriendo. :)
El segundo día del training nos adentramos en conceptos algo más avanzados como DEP o ASLR. A diferencia del primer día en el que se trabaja con Windows XP SP3, este segundo día se trabaja sobre Windows 7. Esto nos llevó toda la mañana y parte de la tarde. Llegados a este punto se supone que ya eres capaz de programar módulos de Metasploit sin muchos problemas y utilizarlos para explotar las vulnerabilidades. De la tarde hasta la madrugada se empezó a profundizar en temas como Heap Spraying y Use-After-Free. Por desgracia, no nos dio tiempo de asentar los conocimientos más avanzados tal y como había ocurrido con los conocimientos del primer día. Tampoco pudimos abordar el tema de information leaks.
Esto sería un problema, si no fuera porqué después del training, a los asistentes se les da acceso a un foro+IRC privado para que todas tus dudas sean resueltas por el propio Peter u otros estudiantes. Sí, lo habéis leído bien. Después del training, Peter sigue resolviendo tus dudas. De nuevo, el precio/hora del training parece que se reduce. :)
Comentar que todas las vulnerabilidades que se explotan en el training son reales, pasando por simples reproductores de música hasta Wireshark o navegadores web. Además hay muchos ejercicios que se quedan en el tintero, para que los pienses tu en casa.
Por último, me gustaría recalcar el valor añadido que ofrece Peter.
A nivel personal, es el profesor más implicado que jamás he visto. ¿Sabéis lo que es estar encerrado durante 17 horas en la misma sala y que él siga motivándote? Siempre que nos ponía un ejercicio iba dando vueltas por la sala en vez de quedarse sentado en su sitio esperando a que lo llamaras, con lo que era mucho más amigable plantearle dudas. Cuando avanzaba con los ejercicios, se aseguraba (dentro de lo posible) que todos lo hubiéramos conseguido.
A nivel pedagógico, Peter es muy bueno explicando. A mí, que ya tenía experiencia previa, me quedaron claros la mayoría de los conceptos. Sin embargo, vi a personas que se perdían a medio camino. Lo que es evidente es que, por un lado, sin unos conocimientos sólidos te va a ser más difícil seguir la clase, y por el otro, si te despistas 5 o 10 minutos, te pierdes. Así que debes mantenerte concentrado todo el tiempo.
Por último, a nivel de conocimientos, Peter es excepcional y, además, trabaja duro. Esto se puede apreciar en muchos momentos. Te da explicaciones sobre ciertos conceptos que normalmente no se encuentran por la red (aún menos en libros). Te explica cosas que la gente acostumbra a hacer, sin saber realmente porqué las hace y te explica por qué ya no son necesarias. Te ofrece información que ha descubierto él mismo y que, por lo que se puede apreciar, seguro que obtenerla le ha llevado una buena cantidad de horas. Además, al final del training habrás interiorizado un modo de trabajar y de pensar que puede facilitarte mucho las cosas en el momento de encarar otros escenarios por tu cuenta.
Ahora, como dice Peter, llega el punto clave: si la semana siguiente al training no repasas todos los conceptos explicados es muy posible que todo esto no haya servido de nada. Por suerte, en las diapositivas y los materiales del training hay decenas de ejercicios que no se hicieron en el training, con lo que hay diversión para tiempo. Por suerte, tendremos el apoyo de Peter con todas las dudas que nos puedan surgir.
Y sobre todo, ¡Don't look the next slide!
Autor: Albert López
Departamento de Auditoría