jueves, 31 de diciembre de 2009

A5/1 Cracked!

Primero que nada feliz 2010 y si este es mi primer post del año y esta jugoso ya que el tema que toca es la (in)seguridad en un producto masificado.
Esta vez nos incumbe a todos ya que al hablar de A5/1 hablamos de GSM.

Leyendo hackaday.com blog que leo muy seguido.
Me entere que A5/1 que es el algoritmo de cifrado en redes GSM fue crackeado por la gente del proyecto liderado por Karsten Nohl

Para romper el algoritmo se tuvieron que generar las rainbow tables mediante hardware gráfico el cual permite alta velocidad en calculo de punto flotante como nvidia y ati esto se llama GPGPU.
El mismo método el de rainbowtables fue utilizado para crackear sha-1 y md5 con un par de PS3.
El resultado de la rotura de este algoritmo fue divulgado en el siguiente white-paper.

Esto implica que cualquier atacante podría hacer un eavesdroing o sniffing on the air de nuestra conversación y podría descifrar los datos en un tiempo muy finito donde la consecuencia seria que nuestra conversación con un tercero quedaría al descubierto.

Tengo claro que el problema no esta en la herramienta sino en la intención de quien la usa pero:

Lo único bueno que veo en esto es todo el conocimiento que se genera y que sirve para que las empresas que controlan los estándares aplicados a las telecomunicaciones de hoy en día se den cuenta que los algoritmos de stream-cipher son obsoletos, y que gracias a la aparición de estas herramientas puedan auditar externamente sus productos(no me refiero a en su funcionamiento posteriori sino a en su diseño) permitiendo crear otros mas "seguros".
Lo otro que es bueno es que gracias a estos proyectos le están dando vida a otros como GNUradio, OpenBTS y OpenBSC los cuales tienen fines un poco mas comunitarios y menos oscuros.

El punto es que medidas tomaremos para cuando en un país(con sus antecedentes) como el nuestro se empiecen a probar estas cosas?
Cual sera el impacto real en la sociedad?

Bookmark and Share

martes, 29 de diciembre de 2009

Tengo Ext4 en debian!

Este es un howto que escribí para relatarles como pude lograr convertir una particion ext3 en ext4 (con extents) en debian en parte inspirado en esta guía
El modulo ext4 viene en el kernel a partir de su versión 2.6.27 pero no esta oficialmente soportado por la distro debian.
Para poder hacerlo andar me llevo varios intentos donde perdí el sistema ya instalado y andando pero bueno quedo, así que manos a la obra!

Primero que nada nos logueamos como root y cargamos el modulo ext4 e instalemos las utilidades e2fsprog y grub2.

#modprobe ext4 && apt-get install e2fsprog grub2

Es importante que quede instalado el grub2 nativo y que grub-legacyb y que no haga chainloading en grub2 ya que el grub-legacy o grub1 no va a poder leer la ext4, no la entiende...

Luego reiniciamos y verificamos que grub2 este booteando nativo.

Es altamente recomendable que desconectemos el disco de nuestra maquina y lo conectemos en otra maquina como esclavo o en mi caso yo utilice uno de esos adaptadores USB-IDE que venden por todos lados.
Esto es debido a que vamos a tener que tener desmontado el sistema.

Luego configuramos los extents, PELIGRO! (luego de este paso nuestro sistema no booteara mas como ext3) así que si dudan aqui pueden parar con este howto.

#tune2fs -o extents,uninit_bg,dir_index /dev/DEV

El dispositivo /dev/DEV seria /dev/hdX o /dev/sdX porque lo tengo conectado en el puerto usb en mi caso.
Luego de ejecutar el comando anterior es importante correr un esfsck para chequear la extructura ya que sin esto el sistema es inbooteable todavía (yo como soy medio paranoico este paso lo hice 2 veces).

#e2fsck -fDC0 /dev/DEV

Si nos aparece: "One or more block group descriptor checksums are invalid" lo ignoramos diciendole que no si nos pregunta modificarlo.

En la segunda pasada no nos pedira y nos dira que esta todo ok.
Aquí es donde tendremos que montar el archivo de bloques en un directorio:

#mount /dev/DEV /mnt/DEV -t ext4

Ahora tenemos que modificar el archivo /mnt/DEV/etc/fstab y en la entrada donde aparezca:

/dev/hda1 / ext3 noatime,errors=remount-ro 0 1

La reemplazamos por:

/dev/hda1 / ext4 noatime,errors=remount-ro 0 1

Lo podemos hacer fácilmente con sed y después renombramos el archivo:

#sed "s/ext3/ext4/g" /mnt/DEV/etc/fstab > /mnt/DEV/etc/fstab.new

Luego el ultimo paso configurar el grub2 para que boote el nuevo filesystem eso se hace agregando un parámetro en el commandline del kernel:
Esto se hace así:

Seguramente nuestro menuentry en el archivo /mnt/DEV/boot/grub/grub.cfg se vea así:

menuentry "Debian GNU/Linux, with Linux 2.6.32-trunk-686" {
insmod ext2
set root=(hd0,1)
search --no-floppy --fs-uuid --set 72fc07dd-0833-4195-905b-4051d3f32f97
linux /boot/vmlinuz-2.6.32-trunk-686 root=UUID=72fc07dd-0833-4195-905b
-4051d3f32f97 ro quiet nmi_watchdog=0
initrd /boot/initrd.img-2.6.32-trunk-686
}

Ahora se tiene que ver así:

menuentry "Debian GNU/Linux, with Linux 2.6.32-trunk-686" {
insmod ext2
set root=(hd0,1)
search --no-floppy --fs-uuid --set 72fc07dd-0833-4195-905b-4051d3f32f97
linux /boot/vmlinuz-2.6.32-trunk-686 root=UUID=72fc07dd-0833-4195-905b rootfstype=ext4
-4051d3f32f97 ro quiet nmi_watchdog=0
initrd /boot/initrd.img-2.6.32-trunk-686
}


Listo! Tenemos ext4 nativo y con extents!!!, ahora tenemos que desmontar el disco y montarlo en la maquina de destino o podemos probar con:

#qemu /dev/DEV

Donde DEV es el dispositivo no la particion o sea sin numerito en el nombre y booteara sin problemas.

Bookmark and Share

viernes, 25 de diciembre de 2009

Feliz navidad!

A todos mis lectores les deseo unas Feliz navidad y un muy prospero año 2010.




Gracias a todos!

Bookmark and Share

miércoles, 23 de diciembre de 2009

torrentflux: cliente de torrent en nuestro servidor

Hoy instale este cliente de bittorrent en mi servidor para probarlo y la verdad es que me gusto mucho asi que comparto como instalarlo

Como soy debianero probe con apt-get install torrentflux el cual me bajo todas las dependencias que necesita esta aplicación pero la solución se puede hacer mas portable e independientemente del so y tuve que recurrir al fuente para bajar la versión modificada del BitTornado.

Manos a la obra:

Nos aseguramos de cumplir con las siguientes dependencias apache2 mysql-server python2.6 php5 mysql-php5, esto dependera del SO que tengamos

por ejemplo:

$apt-get install apache2 mysql-server python2.6 php5 mysql-php5

o

$yum install httpd mysql-server python2.6 php5 mysql-php5

Descargamos el source de torrentflux:

wget http://prdownloads.sourceforge.net/torrentflux/torrentflux-2.0beta1.tar.gz?download

Creamos el directorio donde bajaremos los archivos (a mi gusto):

$mkdir /var/www/downloads

creamos la base de datos en el servidor mysql

$mysqladmin create torrentflux

Despues necesitamos crear la estructura de la base de datos de torrentflux con el script torrentflux.sql el cual viene en el source:

$mysql torrentflux < torrentflux.sql

Luego nos conectamos a la base de datos y creamos el usuario con sus permisos

$mysql

Podemos usar: connect torrentflux o use torrentflux, no conozco la diferencia...

Luego creamos el usuario con permisos casi totales sobre la tabla torrentflux

grant CREATE,INSERT,DELETE,UPDATE,SELECT on torrentflux.* to tf@localhost;

Por ultimo seteamos el password

set password for tf = password('MiPassword');

Listo tenemos la base de datos configurada!

Ahora queda configurar el script que esta en /var/www/torrentflux/config.php
Tendria que quedar de la siguiente forma:

$cfg["db_type"] = "mysql";
$cfg["db_host"] = "localhost";
$cfg["db_name"] = "torrentflux";
$cfg["db_user"] = "tf";
$cfg["db_pass"] = "MiPassword";

$cfg["path"] = "/samba_share/downloads/";
$cfg["btphpbin"] = "/var/www/torrentflux/TF_BitTornado/btphptornado.py";

$cfg["btshowmetainfo"] = "/var/www/torrentflux/TF_BitTornado/btshowmetainfo.py";

Configuramos apache creamos el archivo: /etc/apache2/sites-enabled
Tendría que quedar así:


Alias /torrentflux /var/www/torrentflux/

<Directory /var/www/torrentflux/>
Options FollowSymLinks
AllowOverride Limit
<IfModule mod_dir.c>
DirectoryIndex index.php
</IfModule>
</Directory>


Podemos también optar por un virtualhost es solo una linea la diferencia.

Reiniciamos el apache2:

$ /etc/init.d/apache2 restart

Apuntamos nuestro browser favorito hacia http://ipdenuestroserver/torrentflux o http://torrentflux.ipdenuestroserver y veremos la pagina de configuración la cual ya viene cargada con unos valores iniciales, le damos al botón "update Settings" y listo tenemos nuestro nuevo servicio de descarga de torrents!

Un screenshot!



y que tul?

Bookmark and Share

lunes, 21 de diciembre de 2009

Porque uso software libre y no privativo?

Texto que extraje de http://www.gnu.org/philosophy/free-sw.es.html

  • La libertad de ejecutar el programa, para cualquier propósito (libertad 0).
  • La libertad de estudiar cómo trabaja el programa, y cambiarlo para que haga lo que usted quiera (libertad 1). El acceso al código fuente es una condición necesaria para ello.
  • La libertad de redistribuir copias para que pueda ayudar al prójimo (libertad 2).
  • La libertad de mejorar el programa y publicar sus mejoras, y versiones modificadas en general, para que se beneficie toda la comunidad (libertad 3). El acceso al código fuente es una condición necesaria.

Bookmark and Share

domingo, 20 de diciembre de 2009

Da para pensar no?



Foto del 9 del 11 del 2001, fíjense en la viga cortada diagonalmente...

Bookmark and Share

sábado, 19 de diciembre de 2009

SSLSNIF tool

sslsnif: es una herramienta de los mismos creadores que sslstrip, se encarga de efectuar un ataque mitm(man in the middle) sobre una red lan y generar certificados para los contenidos que estan siendo accedidos "on-the -fly".
La aplicacion no es un sniffer en si ya que no depende de libpcap ni pone ninguna interfaz en modo promiscuo.

Para correr esta herramienta solo se necesita:

Instalar sslsniff:

  • Instalar las dependencias de sslsniff (openssl, libboost1.35-dev, libboost-filesystem1.35-dev, libboost-thread1.35-dev, liblog4cpp5-dev)
  • Desempaquetar sslsniff-0.6.tar.gz, despues './configure', y por ultimo 'make'

Configurar iptables

  • Poner el kernel en forwarding mode ip_forward mode (echo 1 > /proc/sys/net/ipv4/ip_forward)
  • Agregar una regla para interceptar el trafico SSL (iptables -t nat -A PREROUTING -p tcp --destination-port 443 -j REDIRECT --to-ports <$listenPort>) en este punto es donde difiere de un sniffer real.
  • si queremos hacer "fingerprints" de los clientes y solo interceptar trafico basado en un tipo de cliente, podemos agregar una regla para interceptar trafico http (iptables -t nat -A PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-ports <$httpListenPort>), esto seria muy util para poder relacionar el trafico seguro y no seguro para tener un mejor panorama del escenario.

Envenenando la cache de arp o arpspoofing

Asumiendo que queremos interceptar trafico desde 192.168.1.x, necesitamos "mentirle" a ese host y hacer que "piense" que nosotros somos el router. Usando arpspoof podemos "convencer" a ese host que nuestra mac es la mac del router.
  • arpspoof -i eth0 -t 192.168.1.x 192.168.1.1
Listo ahora tenemos seteado todo nuestro entorno para poder hacer un man-in-the-middle sobre ssl a un host especifico.

Solucion??? ninguna excepto migrar a ipv6, alguien se le ocurre alguna???

Bookmark and Share

jueves, 10 de diciembre de 2009

No me puedo dormir

Muchas veces me quedo hasta tarde nerdeando enfrente al pc, pero hoy me quiero dormir y alguien me paso una tira cómica de xkcd muy elocuente...

Bookmark and Share

sábado, 5 de diciembre de 2009

libro: Implementacion de servidores con GNU/Linux

Esta disponible la version electronica del libro: "Implementación de Servidores con GNU/Linux".
El cual esta licenciado bajo Creative Commons Reconocimiento - NoComercial - CompartirIgual 2.1
Este libro es una recopilacion de 10 años plasmados en 600 hojas de experiencia y experimentacion en deployment de servidores y servicios en el ambiente Gnu/Linux en concreto Centos 4 y 5.
El proyecto esta actualmente en manos de la comunidad http://alcancelibre.org.

Bookmark and Share

Google controla el internet




8.8.8.8 y 8.8.4.4. son dos numeritos de ip que fueron asignados a Google como sus DNS servers primario y secundario.
Los DNS servers son los que se encargan de traducir nombres lejibles por los humanos en numeros de direcciones ip como por ejemplo dclavijo.blogspot.com en 74.125.65.191.
Google ha dado otro paso mas en la busqueda del control total de lo que pasa en internet.
Puede que anden mas rapido y sean mas seguros que los de nuestro ISP pero debemos delegar tantos servicios en manos de este gigante?
La cuestion queda sobre la mesa...

Mas info en http://code.google.com/intl/es/speed/public-dns/

Bookmark and Share