Archivo de la categoría: Seguridad Informática

La Web como plataforma de referencia: viejos ataques y nuevas vulnerabilidades

El pasado jueves 27 de junio de 2013 participé en la XV Jornada de Seguridad TI de Nextel S.A. en la Alhóndiga de Bilbao, invitado por mi amigo Ritxi Acebedo.

El evento estuvo muy bien (podéis ver todas las presentaciones y vídeos en su web) y lo pasé muy bien, a pesar de ser el único tipo que no fue de traje y que después de que hablara, otros ponentes se refirieron a mí como un hacker malvado, cosa que dista mucho de la realidad (todas mis intrusiones son a 127.0.0.1 ;P).

Os dejo el vídeo de la conferencia (está sacado del streaming, así que el audio es… sub-óptimo O:) ):

Y aquí la presentación:

Espero que os resulte de interés 😉

Como bajar vídeos flash que se resisten (ComedyCentral, por ejemplo)

Me he pasado unas cuantas horas intentando descargar un vídeo en Flash para no depender de mi conexión a Internet cuando quiera volver a verlo. Con Firefox no suelo tener mayor problema en hacerlo gracias a Video Download Helper, una extensión que a golpe de click te resuelve la papeleta casi siempre. Pero el caso de esta tarde quedaba fuera de los dominios de Video Download Helper, porque no se trataba de un vídeo en Flash (FLV) descargado desde la web (HTTP), sino del típico esquema reproductor multimedia en Flash + streaming de vídeo por RTMP.

En concreto, mi «reto» era descargar la entrevista de Stephen Colbert a Lawrence Lessig (os la recomiendo, muy buena 😉 ).

Buscando en gúguel llegué a páginas bastante desactualizadas que me hablaban de infinidad de programas para Win32 como GetFLV o ReplayAV que terminé probando en Wine y en una máquina Windows con VirtualBox, con poco éxito.

Cada vez que pulsaba el botón de play, mi frustración iba en aumento, porque tenía claro que «si se puede ver, se puede descargar». Así que con el típico enfoque «moscas a cañonazos» que predomina en el recetario de este humilde blog, terminé dando con lo obvio (aunque como dijo Lacan: «Lo obvio suele pasar desapercibido, precísamente por obvio», también procede el más castizo refrán: «vistos los cojones, toro»): capturar todo, buscar URLs en la captura y descargarlas.

Manos a la obra:

1. Captura de tráfico

Para capturar el tráfico, nada como el viejo tcpdump a todo trapo:

tcpdump -i eth0 -p -s 0 -w captura.pcap
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
^C7042 packets captured
7042 packets received by filter
0 packets dropped by kernel

2. Búsqueda en la captura

Para buscar, probamos con grep:

grep -i rtmp captura.pcap
Coincidencia en el fichero binario captura.pcap

Sabemos que estás ahí…

strings captura.pcap | grep rtmp
rtmp://cp9950.edgefcs.net/ondemand/mtvnorigin/gsp.comedystor/com/colbert/season_05/episode_004/cr_05004_05_240.flv
rtmp://cp9950.edgefcs.net/ondemand/mtvnorigin/gsp.comedystor/com/colbert/season_05/episode_004/cr_05004_05_480.flv
@rtmp://88.221.92.180:1935/ondemand?_fcs_vhost=cp9950.edgefcs.net

Perfecto, a por ello…

3. Descarga del stream de vídeo

Para bajar un flujo de datos en RTMP, rtmpdump o flvstreamer son nuestros aliados:

flvstreamer -r "rtmp://cp9950.edgefcs.net/ondemand/mtvnorigin/gsp.comedystor/com/colbert/season_05/episode_004/cr_05004_05_240.flv" -o colbert.flv
FLVStreamer v1.8e
(c) 2009 Andrej Stepanchuk, The Flvstreamer Team, license: GPL
Connecting ...
Starting download at 0.000 kB
Metadata:
duration 370.94
width 240
height 180
videodatarate 250
audiodatarate 80
framerate 14.98
creationdate Fri Jan 9 01:01:09 2009
lasttimestamp 370.91
lastkeyframetimestamp 368.97
videocodecid 4
audiocodecid 2
audiodelay 0
canSeekToEnd FALSE
filesize 12810455
videosize 8851208
audiosize 3879788
datasize 19758
ERROR: ReadPacket, failed to read RTMP packet body. len: 65812
Download may be incomplete (downloaded about 8.30%), try --resume
Closing connection.

Vaya, parece que se corta cada pocos bytes, probaremos usando la fuerza bruta y la opción «resume»:

while true; do flvstreamer --resume -r "rtmp://cp9950.edgefcs.net/ondemand/mtvnorigin/gsp.comedystor/com/colbert/season_05/episode_004/cr_05004_05_240.flv" -o colbert.flv; done

¡Genial! El FLV ya está en nuestro disco duro a buen recaudo. Ahora a remezclaro y vitaminarlo 🙂

Hackit 2009

Tarde, muy tarde, mucho más tarde de lo razonable… pero bueno, aquí está, el hackit del 2009 disponible para que wannabes, hax0rz y demás calaña se entretengan en estas entrañables fiestas. Esta edición ha sido coordinada por el inefable Hey_neken, al que le hemos ayudado entre topo[LB], Futur3, roman – el gallego, thEpOpE / Nocturns, Jonbaine, OntzA, sourcerer, Juanan y otra gente que conformamos la lista creade después del Call for levelz de 2008.

Podéis jugar online desde http://hackit2009.txipinet.com, bajaros el tarball con los niveles y configurar un servidor local o crear un mirror propio en Internet. Si elegís esta última opción, avisadme para referenciar vuestro mirror en la página de hackits 😉

Happy hacking! 😉

PD: Hay dos niveles (11 y 12) que se han quedado fuera del tarball: uno requiere de un servicio de red y el otro es un dump de memoria enorme que no hemos podido traer fácilmente al servidor. Intentaremos colgar este último más adelante, de todas formas.

Bajar presentaciones no disponibles para descarga en Slideshare

Este artículo va de saltarse restricciones, de forma manual y un poco chapucera, pero efectiva O:-)

Restricciones que quizá estén ahí por algo, pero que personalmente me tocan la moral porque no me gusta nada depender de la conexión a Internet y de que los hados de la Cloud Computing se apiaden de mí cuando los necesite.

El caso es que cuando encuentro una presentación en Slideshare que me gusta, suelo descargármela y archivarla en mi PC (muy 1.0, ya sé, pero es que se ven muchos sopapos 2.0 y tampoco estamos para perder el tiempo :-D).

Bueno, al tema. Como os digo, todo esto es un poco manual, quizá se pueda automatizar algo más (animaos a hacer sugerencias en los comentarios 😉 ):

  1. Instalamos GreaseMonkey en nuestro Mozilla Firefox.
  2. Instalamos y activamos el script «SlideShare Downloader» de GreaseMonkey.
  3. Instalamos el complemento DownThemAll! de Mozilla Firefox.
  4. Accedemos a una presentación en Slideshare que no permita la descarga (ésta, por ejemplo). Si hemos hecho los pasos anteriores bien, nos aparecerá un enlace «Download» al lado de la presentación (fijaos que es diferente del original «Get File»): Download Slideshare
  5. Pulsamos en el enlace y nos generará tantos enlaces a ficheros flash como transparencias tenga la presentación: Slideshare download all
  6. En esa ventana, botón derecho > DownThemAll! y nos bajamos todos los SWFs: Slideshare downthemall
  7. Pasamos los SWFs a JPG con SWF2JPG (quizá venga bien un bucle tipo: for F in *.swf; do swf2jpg $F $F.jpg; done).
  8. Con todos los JPGs, hacemos un PDF: convert *jpg presentación.pdf
  9. Profit! 😉

Tempestades electromagnéticas desde tu ordenador

Hace un par de semanas organizamos en Deusto el Asegur@IT III, un evento relacionado con la Seguridad Informática, con la participación de empresas punteras a nivel estatal: S21sec, Panda Security, la Universidad de Deusto, Informática64 y Microsoft.

Yo participé con la charla más marciana de todas, sin desmerecer la atrapada de Mikel Gastesi e Iñaki Etxebarría con Windows Internals a tope, hablando sobre TEMPEST.

Podría escribir un artículo sobre TEMPEST, pero es más fácil poneros un par de enlaces a la presentación que utilicé y al audio de la charla.

He intentado hacer un slidecast con slideshare, sincronizando transparencias y audio, pero parece que solo admite ficheros de audio hasta 32 minutos. El resto, lo tendréis que sincronizar a mano O;-)

Espero que os resulte de interés 😉

Bombas fork(): un snowcrash para tu shell

Es conocido desde hace tiempo que hay una vulnerabilidad de DoS (Denial of Service, Denegación de Servicio) que afecta a muchos UNIX (¿cuál es el plural de UNIX? UNICES suena fatal :-D), así como en GNU/Linux. Con simplemente escribir este conjuro en una shell, terminamos por colgar el sistema:

:(){ :|:&};:

Menuda movida, ¿no? :-O

Lo primero de todo, ¿qué significa ese código? Bien, si sustituimos «:» por «función» e indentamos bien, se entiende mejor:

:(){ :|:&};:

funcion () { funcion | funcion & }; funcion

funcion () {
  funcion | funcion &
};
funcion

Es decir, primero definimos una función y luego la llamamos. Dentro de esa función, se llama de nuevo a esa función (recursión) dos veces y se une esos dos procesos por una tubería (pipe). Además se pone un & al final para que todo eso se ejecute en segundo plano.

A fin de cuentas lo que tenemos es un proceso que se llama a sí mismo (lo que ocasiona un bucle), pero que no tiene condición de finalización (bucle infinito) y lanza dos procesos hijos cada vuelta del bucle y los une por una tubería (más del doble de recursos necesarios cada vez).

Lo dicho, esto es más viejo que el picor, aunque hay scripts realmente sencillos que hacen cosas parecidas con distinto código. En Journey’s End nos plantean uno:

#!/bin/sh
$0 &
exec $0

Así que el problema no está en el conjuro en sí (no tendría sentido poner en nuestro IDS esa cadena para detectarla como maliciosa, porque habría infinitas cadenas que harían lo mismo), sino en la teoría que subyace: un usuario con un límite demasiado amplio de procesos de usuario creados, puede acabar los recursos del sistema.

¿Cuál es mi límite de procesos? Lo podemos conocer fácilmente con el comando ulimit:

ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 12273
max locked memory (kbytes, -l) 32
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 12273
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited

El número máximo en este sistema es 12273 para mi usuario, más que suficiente para dejarlo tuerto 🙁

Si quisiéramos evitar este problema, bastaría con cambiar ese límite, así:

ulimit -u 1000

De esta manera, evitamos el problema, aunque solamente para la shell en la que hemos ejecutado este comando. Podríamos lanzarlo en el /etc/profile o en algún script de inicio de sesión, pero es bastante más elegante modificarlo en el fichero limits.conf.

grep "nproc" /etc/security/limits.conf
# - nproc - max number of processes
#@student hard nproc 20
#@faculty soft nproc 20
#@faculty hard nproc 50
#ftp hard nproc 0

Como vemos, tenemos varios ejemplos que limitan los procesos a 20 o a 50 en función del grupo al que pertenezcan. También se pueden definir límites por usuario o se puede establecer un límite general:

% hard nproc 1000

Con esto limitamos el número máximo de procesos a 1000 para todos los usuarios.

Y entonces podemos preguntarnos ¿cómo la gente de GNU/Linux es tan torpe de poner un límite que nos puede colgar el sistema operativo? La respuesta tiene que ver no solo con la cantidad de procesos, sino con el peso de cada uno de ellos. Si fijamos a 1000 el número máximo de procesos por usuario, nos libramos de las dos bombas fork que hemos visto, pero modificando ligeramente la segunda, podríamos seguir tirando el sistema para muchos menos procesos:

#!/bin/sh
$0 &
find . &
exec $0

Quizá entonces no solamente haya que limitar el número de procesos, sino otros límites definidos en el fichero limits.conf.

Cuando leamos que tal malware permite ejecutar «código arbitrario» en nuestro sistema, nos podremos acordar de este torpe código y de cómo el solito es capaz de tumbar todo el servidor, desde una cuenta de usuario :-O

Reflexiones sobre el cracktivismo

Hace unas semanas, Mercè Molist, periodista especializada en hacking, cracking y hierbas afines, me escribió para que le contara mis opiniones sobre los recientes actos de cracktivismo que se estaban dando en la red.

¿Cracktivismo? Sí, cracktivismo, algo diferente al hacktivismo. El término se lo he leído por primera vez a Manel Medina, director del equipo de seguridad esCERT, y me parece muy acertado: hacker + activista = hacktivista, cracker + activista = cracktivista.

Un poco a vuelapluma solté unas cuantas ideas:

  • Los defacement o los ataques DDoS no son propios de hackers. La motivación de los defacement no es la curiosidad, pura droga del cerebro hacker, sino el ego y la admiración, algo mucho más mundano, típico de mentes menos inquietas. Los DDoS atentan contra un pilar de la ética hacker: la información debe fluir, quiere ser libre, no se debe poner trabas a la libertad de expresión.
  • El hacktivismo bebe de la ética hacker y comparte su postura en gran parte. A pesar de que los Netstrikes pueden verse como DDoS, no son más que sentadas virtuales, hechas con medios tecnológicos sencillos, al alcance de cualquiera que desee sumarse. Sus razones y sus modos están muy lejos de las botnets empleadas por las cibermafias para tumbar casi cualquier sitio en la Red, a pesar de que aparentemente el resultado pueda parecer similar.
  • No es lo mismo estudiar la tecnología para evaluar su uso, protestar frente a abusos tecnológicos o legales y preparse para evitarlos (autodefensa digital), que conseguir por medios propios o ajenos técnicas y tecnologías que otorgan poder a unos pocos, les permite imponer sus criterios y deja indefensa a gran parte de la Red.
  • Tomando prestada la célebre frase de mi paisano Unamuno, los hacktivistas no pretenden vencer, sino convencer, mientras que los cracktivistas intentan lo contrario, vencer sin convencer. El hacktivista se centra en la batalla ideológica, realmente su pelea se da en las mentes de cada persona que participa o asiste a sus acciones. El resultado práctico no importa en absoluto. Su verdadero objetivo no es apropiarse o tumbar un servidor, sino llegar a las mentes de quienes acceden a él. A pesar de ser capaz de saltar barreras tecnológicas como cortafuegos o sistemas de detección de intrusos, el hacktivista tiene que sortear una capa más, la humana, llena de trincheras de preconceptos y alambradas de prejuicios. Por eso usa otras bazas además de las tecnológicas: el humor, la argumentación, la emotividad, la sorpresa… El cracktivista, en cambio, utiliza a las personas y a sus ordenadores como meros fines para incrementar su cuota de poder, establece sus criterios por la fuerza, alimenta su ego con el miedo de quien teme sus ataques.
  • Más que de ciberguerra puede hoy hablarse de cibermafia. Redes de extorsión cibernética tejidas gracias a la colaboración no voluntaria de miles de cibernautas. Un hacktivista declinaría todo ese poder, puesto que sabe que su uso y abuso destruiría lo más preciado de la Red, su libertad, y facilitaría la adopción de medidas cada vez más restrictivas. El cracker, y en igual medida el cractivista, tiene objetivos mucho más mundanos, más a corto plazo. No duda en demostrar su poder en cada ocasión y en imponer su ley.
  • ¿Irá a más esta cibermafia? Depende de sus resultados en cuanto a costes y beneficios. Actualmente el coste es prácticamente cero y los beneficios son altísimos, así que tiene sentido que aumente su incidencia. La buenas noticia es que es probable que no haya pastel para todos y que muchos de estos ataques se centren en otros grupos mafiosos, en guerras fratricidas. Si finalmente se convierte en una pelea de «perros grandes», será más fácil combatirlos porque serán menos heterogéneos, aunque habrá que estar a la altura en conocimientos y medios.

Y Mercè las ha juntado con las suyas propias, las de Manel y las que ha encontrado en la red para hacer un artículo muy chulo: «Crecen los ciberataques por motivos políticos» 🙂

Call for levelz!

Llevo ya unos cuantos años encargándome del concurso «Hack it!» de la Euskal Encounter, y algunos más haciendo lo propio en la Universidad de Deusto. A pesar de que es bastante trabajo, lo hago encantado porque en nivel técnico y las ganas de los participantes son alucinantes 🙂

Sin embargo, mi red neuronal es finita y cada vez me cuesta más inventar nuevos retos que tengan la mezcla justa de complejidad técnica, ingenio y diversión, así que el año pasado decidí (después de hablar con muchos de los participantes) cambiar un poco el concurso.

Las reglas serán prácticamente las mismas, pero la manera de definir los niveles será mucho más abierta.

Hubo un debate el año pasado con respecto a la secuenciación de los niveles. Existían partidarios de publicar todos los niveles a la vez y otros que preferían el reto del «camino único» (niveles con un orden pre-establecido que evitan que pases al siguiente si no has completado el anterior). Todavía no lo tengo 100% claro, pero quizá opte por probar un método que me sugirieron: ir publicando cada X tiempo un nuevo nivel. La gente que pase los niveles anteriores, tendrá ventaja porque tendrá más tiempo para los siguientes y la gente que no los pase, no se quedará atascada en un nivel infernal (siempre hay alguno, aunque es muy difícil detectarlos desde la organización O:-) ).

Dicho todo esto, os escribo para pediros niveles. En lugar de un «call for papers», hagamos un «call for levels», donde se pueda contribuir enviando propuestas de niveles para el hackit. Las condiciones son las siguientes:

1) Se podrán enviar tantas propuestas como se estime oportuno, no hay límite de envíos.

2) Las propuestas deberán remitirse a txipi ALGARROBO txipinet PUNKO com, indicando en el asunto «Call for levels, hackit 2008».

3) En la propuesta deberá especificarse una explicación detallada del nivel, su resolución y un grado de dificultad estimado.

4) Se admitirán también sugerencias de niveles menos elaboradas, bocetos, ideas, etc. aunque sus posibilidades de ser incluidas en el concurso serán menores que las de propuestas más elaboradas.

5) El nivel propuesto deberá desvelar una palabra (frase o URL) que apunte hacia el siguiente nivel en el concurso. Conseguir esa palabra será el indicador de que el nivel ha sido superado.

Ya, ¿y qué ventaja tiene participar en este «call for levels»? Tampoco es que os pueda conceder la vida eterna, pero hay algunos beneficios:

1) Si participas en el concurso y se incluye alguna de tus propuestas, tendrás niveles ya resueltos, lo que puede suponer una gran ventaja.

2) Aparecerás en los créditos del concurso, por supuesto.

3) Me harás una persona un poco menos agobiada y más feliz 🙂

De acuerdo, supongamos que os he convencido (o estáis de exámenes y os enrolaríais en un carguero uzbeko con tal de no estudiar)… ¿qué se puede enviar como propuesta? Podéis echar un vistazo a otras ediciones del hackit para situaros: hackit1, hackit2. En general se aceptan pruebas de seguridad en cliente web (javascript, Java, Flash, ActiveX, etc.), criptografía, cracking en cualquier plataforma y cosas similares. Si queréis enviar algo para hackear en la parte servidora (por ejemplo, un nivel de sql injection contra un servidor web), deberéis preparar una máquina virtual de Qemu con lo necesario, para que la lancemos desde el servidor del hack it (intentad limitar la memoria RAM que use la máquina virtual, para que pueda haber varias ejecutándose concurrentemente).

Así que lo dicho, espero que concursantes de otros años como la gente de 48 bits, e-ghost, DiarioLinux, Navarparty, #euskal_linux, Linuca y demás, os animéis a colaborar! 😉

Happy hacking!

hackelarre: hackmeeting 2007

Con mucho retraso publico en el blog mis impresiones sobre el último hackmeeting. Intentaré ser breve, porque supongo que se podrán leer crónicas extensas en otros lados.

Lo primero de todo, agracecer el sacrificado trabajo de preparar todo antes del evento a la gente del Gaztetxe Astra de Gernika, hack.in#badakigu y demás tropa que llegó una semana antes a poner cristales, hacer carteles, limpiar y demás. El sitio estuvo muy bien. A pesar del fresquillo que ya hacía por octubre, estuvimos 3 días muy a gusto, salas limpias, con proyectores, PCs para grabar el audio de las charlas y demás. El propio gaztetxe tiene barra y hubo durante el hackmeeting un servicio de comedor vegetariano bastante baratito, así que estuvimos servidos (aún así, una noche nos fuimos al pueblo a por unos bokatas de lomo con pimientos :-9»).

hackmeeting 2007

En cuanto a los contenidos, hubo casi de todo: charlas técnicas, charlas sociales, talleres, debates, actividades, etc. Un hackmeeting no es una «con» de hackers, sino más bien un encuentro de hacktivistas con ganas de verse las caras, compartir experiencias y enseñar algunas cosas. En esta edición me apetecía colaborar con charlas y talleres, y el viernes me encargué de coordinar junto con Cikgu (metabolik, reciclanet, hckrs, etc.) un debate sobre el copyright, el copyleft y la cultura libre. Fue un debate interesante, aunque solamente al final surgieron las verdaderas divergencias. Al día siguiente, di una charla-taller sobre seguridad en VoIP, muy en la línea de la charla que ya di en la universidad. Finalmente, el domingo comenté las vulnerabilidades que adolece el protocolo IEEE 802.11 (el de las redes Wi-Fi) en la capa de acceso al medio y cómo a día de hoy poco se puede hacer para contrarrestar estos ataques.

A pesar de estar bastante pendiente de mis charlas, disfruté de lo lindo con otros eventos, como la charla sobre Rootkits de sheroc y Xezaw, la de Propiedad Intelectual de David Maeztu, la de las radios libres de Martintxo y muchas otras, además de lo bueno de volver a ver a gente conocida 🙂

Dejo aquí las presentaciones que utilicé para las charlas:

Hay mucho más material en el archivo del hackelarre (aunque todavía falta el audio de algunas charlas por subir, ¡paciencia! ;-)).

Más conferencias: Seguridad en VoIP

Dos días después de la charla de Seguridad en redes WiFi, también dentro de los cursillos y charlas de julio del e-ghost, dí otra charla sobre seguridad en VoIP en la universidad, esta vez no tan práctica, aunque con alguna demo de SIP-cracking y de sniffing del flujo RTP de la conversación y demás. El mundo de la seguridad en VoIP todavía está mucho más verde que en WiFi y eso se nota en las técnicas y herramientas. Como la anterior vez, he colgado en esta entrada todo el material…
Sigue leyendo