Archivo de la etiqueta: seguridad

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 😉

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.

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

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

Seguridad en redes WiFi, desde un punto de vista práctico

Este lunes, dentro de los cursillos y charlas de julio del e-ghost, he dado una charla sobre seguridad en redes WiFi en la universidad, haciendo demos de reinyección de paquetes, asociación falsa, cracking WEP y WPA, etc., utilizando WifiSlax, una distro pensada para hacer estas cosas de forma muy cómoda. Por si os interesa el tema, he colgado en esta entrada todo el material…
Sigue leyendo

Charla sobre cibercontrol social en el UNI Encounter 2006

El año pasado fui invitado al UNI Encounter, un evento organizado por el UNI Eibar – Ermua en el que se organizan concursos, mesas redondas, conferencias y demás, para tratar un tema sobre el que ya he hablado en el blog y en otros muchos sitios (Xabier Barandiaran dijo una vez que me podía hacer una camiseta con el “Txipi – Cibercontrol Tour” y por la espalda todos los sitios en los que he hablado de este tema :-D). La verdad es que a la gente le gusta la conspiranoia y esta charla la alimenta un poco, así que suele apetecer escucharla. Si queréis hacerlo, mirad dentro del artículo…
Sigue leyendo

Ataques de denegación de servicio en VoIP (III)

Terminamos la serie de artículos sobre ataques de Denegación de Servicio (DoS attacks) en redes VoIP analizando herramientas específicas de ataque. En el primer artículo comentamos aspectos teóricos de los ataques DoS en general y en VoIP en particular y en el segundo artículo hablamos de fuzzers o herramientas para generar tráfico y hacer tests de stress a infraestructuras de red. Espero que os resulte interesante esta última entrega 😉

Sigue leyendo

Ataques de denegación de servicio en VoIP (II)

En el anterior artículo de esta serie introdujimos los ataques de Denegación de Servicio (DoS attacks) en redes VoIP. abordando la problemática de los ataques DoS en general, y comentando su impacto específico en VoIP. En esta ocasión hablaremos de los fuzzers o herramientas para generar tráfico, que pueden emplearse con fines perversos y desencadenar un DoS. Dejamos para la tercera entrega el análisis de herramientas específicas de ataque.
Sigue leyendo

Ataques de denegación de servicio en VoIP (I)

En esta serie de artículos hablaremos sobre los ataques de Denegación de Servicio (DoS attacks) en redes VoIP. Inicialmente comentaremos la problemática de los ataques DoS en general, posteriormente comentaremos su impacto en VoIP y dejaremos para la siguiente entrega el uso de diferentes herramientas para probar este tipo de ataques 😉

Sigue leyendo