domingo 26 de febrero de 2012

fwknop: Single Packet Authorization and Port Knocking

Fwknop es una herramienta que permite agregar un nivel mas de seguridad en nuestra red.
Si lo que queremos es ser invisibles hacia fuera y asegurarnos que nadie pueda entrar en nuestros servicios por lo general configuramos el netfilter para que descarte cualquier paquete entrante a nuestra WAN.
Pero en este caso además de poder hacer eso vamos a incluso poder tener servicios accesibles como ssh que estarán escuchando en un puerto cerrado por netfilter y para eso esta herramienta nos vendrá a la mano.

Esta herramienta se encargara de ejecutar una vieja técnica llamada portknoking enviando un solo paquete autenticado (SPA) con AES (cifrado de bloques Rijndael de clave simétrica de hasta 128 bits) o mediante GPG y si la autenticación es exitosa el puerto nos quedara abierto por un intervalo de 10 segundos.

La diferencia básica entre AES y GPG es que AES al ser un algoritmo de cifrado simétrico con claves mas chicas permite el mismo nivel de seguridad que GPG(Asimétrico).

Ahora vamos a describir como se compone un paquete SPA

- 16 bytes de datos aleatorios
- usuario local
- timestamp local
- fwknop versión
- modo (acceso o comando)
- acceso deseado o comando a ejecutar
- MD5 sum

Los primeros 16 bytes de datos al azar se emplean para asegurarse de que cada paquete sea único permitiendo al servidor mantener un cache de mensajes SPA recibidos para frustrar los ataques de replay.
Luego se incluye el usuario local por razones de privilegios del lado del servidor.
El modo le indicara al servidor si lo que debe hacer es ejecutar un comando o permitir el acceso a un puerto.
Luego cada campo se separa por : y el mensaje entero se codifica con base64.
Por ultimo se emplea uno de los dos algoritmos de cifrado o AES o GPG.
Ahora vamos a probar la herramienta:

Primero instalamos fwknop

Servidor(como root):

apt-get install fwknop-server

Cliente(como root):

apt-get install fwknop-client

Configuramos el servidor de fwknop archivo: /etc/fwknop/access.conf:

SOURCE: ANY;
OPEN_PORTS: tcp/22;
KEY: <encrypt_key>
FW_ACCESS_TIMEOUT: 10;
REQUIRE_USERNAME: dclavijo;
DATA_COLLECT_MODE: ULOG_PCAP;

En modo servidor fwknop puede adquirir los paquetes de una interfaz en modo promiscuo usando libpcap.

Ahora en el cliente verificamos que no podemos establecer la conexión

[cliente]$ nc -v 192.168.1.1 22

Hasta ahora bien parece que netcat se cuelga porque no puede completar la conexión simplemente porque el netfilter del servidor descarto el paquete SYN antes de que pudiese acceder al stack tcpip.

Ahora para poder acceder a nuestro puerto mandamos el paquete SPA

daedalus@neuromancer:~/code/fwknop-2.0/client$ ./fwknop -A tcp/22 -s -D 192.168.1.1 -v
Enter encryption password:

FKO Field Values:
=================

Random Value: 9854906951929078
Username: daedalus
Timestamp: 1330307367
FKO Version: 1.9.12
Message Type: 1
Message String: 0.0.0.0,tcp/22
Nat Access:
Server Auth:
Client Timeout: 0
Digest Type: 3

Encoded Data: 9854906951929078:ZGFlZGFsdXM:1330307367:1.9.12:1:MC4wLjAuMCx0Y3AvMjI

SPA Data Digest: Oo2OlFRdw3SjO2xKlsFuSxy62zVPuMYRNg41xvQAy+Y

Final Packed/Encrypted/Encoded Data:

9xZYQdwWlSOaUPue68lN0hn+7T8zSzKU9b/PtGbdVhmci4e4jXELn/EzoyFvtXMWKBihMFEkE+SiUQ+mS6zcwLod+r7n/DbEGWQbBx/Q51f9GszQ+KHlH49iy/KupGC9BGvBG+1J4C3JtzJBd1aAS+mcWX4Y8rCyQ

Generating SPA packet:
protocol: udp
port: 62201
IP/host: 192.168.1.1
send_spa_packet: bytes sent: 161

Ahora tranquilamente podemos conectarnos al servidor:

[cliente]$ nc -v 192.168.1.1 22
192.168.1.1 22 (ssh) open
SSH-2.0-OpenSSH_5.5p1 Debian-6

Ahora la instancia del proceso de Fwknop que esta corriendo en el servidor configuro el netfilter para que desde nuestra ip los paquetes hacia el puerto 22 no sean descartados.
Incluso después de 10 segundos fwknop expirara la sesión volviendo al estado por defecto pero esto no implica que perdamos la conexión ya establecida sino que futuras conexiones serán descartadas.

Incluso fwknop es invulnerable a los ataques de replay, supongamos que un atacante fue capaz de escuchar el mensaje SPA que se envió desde el cliente al servidor al puerto UDP 62201.

[atacante]# tcpdump -i wlan0 -c 1 -s 0 -l -nn -X udp port 62201
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on wlan0, link-type EN10MB (Ethernet), capture size 65535 bytes
23:49:29.049157 IP 192.168.2.179.51065 > 192.168.1.1.62201: UDP, length 161
0x0000: 4500 00bd efc6 4000 4011 c564 c0a8 02b3 E.....@.@..d....
0x0010: c0a8 0101 c779 f2f9 00a9 cb79 3978 5a59 .....y.....y9xZY
0x0020: 5164 7757 6c53 4f61 5550 7565 3638 6c4e QdwWlSOaUPue68lN
0x0030: 3068 6e2b 3754 387a 537a 4b55 3962 2f50 0hn+7T8zSzKU9b/P
0x0040: 7447 6264 5668 6d63 6934 6534 6a58 454c tGbdVhmci4e4jXEL
0x0050: 6e2f 457a 6f79 4676 7458 4d57 4b42 6968 n/EzoyFvtXMWKBih
0x0060: 4d46 456b 452b 5369 5551 2b6d 5336 7a63 MFEkE+SiUQ+mS6zc
0x0070: 774c 6f64 2b72 376e 2f44 6245 4757 5162 wLod+r7n/DbEGWQb
0x0080: 4278 2f51 3531 6639 4773 7a51 2b4b 486c Bx/Q51f9GszQ+KHl
0x0090: 4834 3969 792f 4b75 7047 4339 4247 7642 H49iy/KupGC9BGvB
0x00a0: 472b 314a 3443 334a 747a 4a42 6431 6141 G+1J4C3JtzJBd1aA
0x00b0: 532b 6d63 5758 3459 3872 4379 51 S+mcWX4Y8rCyQ
1 packets captured
1 packets received by filter
0 packets dropped by kernel

Ahora el atacante mediante la herramienta netcat puede reenviarnos el paquete SPA

[attacker]$ echo "9xZYQdwWlSOaUPue68lN0hn+7T8zSzKU9b/PtGbdVhmci4e4jXELn/EzoyFvtXMWKBihMFEkE+SiUQ+mS6zcwLod+r7n/DbEGWQbBx/Q51f9GszQ+KHlH49iy/KupGC9BGvBG+1J4C3JtzJBd1aAS+mcWX4Y8rCyQ" |nc -u 192.168.1.1 62201

Y simplemente en el syslog podemos ver que se recibió un mensaje pero no se realizo ninguna acción.

Feb 26 23:30:11 server fwknop: attempted message replay from: 192.168.1.179

Bookmark and Share

Passwords faciles y muy fuertes

El cómic de XKCD lo dice todo: en vez de utilizar un password ultra complicado y corto deberíamos utilizar passwords largos y fáciles de acordar.

Bookmark and Share

viernes 17 de febrero de 2012

SEAndroid: el Android de la NSA

Cerca de el año 2000 la NSA creo una serie de patches para el kernel linux llamados SELinux, los cuales brindaban una serie de medidas extras de seguridad.
Ahora la NSA libero el código de una serie de patches sobre el ecosistema Android con el fin de hacerlo mas "seguro".
En un principio y a groso modo se porto el parche de SELinux al kernel de Android.

A continuación cito las principales características de SEAndroid:

*Per-file security labeling support for yaffs2,
*Filesystem images (yaffs2 and ext4) labeled at build time,
*Kernel permission checks controlling Binder IPC,
*Labeling of service sockets and socket files created by init,
*Labeling of device nodes created by ueventd,
*Flexible, configurable labeling of apps and app data directories,
*Userspace permission checks controlling use of the Zygote socket commands,
*Minimal port of SELinux userspace,
*SELinux support for the Android toolbox,
*Small TE policy written from scratch for Android,
*Confined domains for system services and apps,
*Use of MLS categories to isolate apps.

Fuente [http://www.kriptopolis.org/node/8988]

Bookmark and Share

lunes 23 de enero de 2012

Wolrd ipv6 launch day

IP version 6 es la nueva versión del protocolo de direccionamiento de Internet.
El 6 de junio del corriente año se celebrara una puesta en marcha masiva de servicios que actualmente ya estaban en IP version 4.
Los nuevos servicios serán Facebook, Google(actualmente se puede acceder a través de http://ipv6.google.com) y varios ISP entre otros...  que

Para mas info pueden visitar: http://www.worldipv6launch.org

A nivel de cliente si quieren tener conectividad ipv6 pueden seguir estas guías Como configurar Túnel IPv6 tspc en Linux Debian / Ubuntu o Configurando Router IPv6

Bookmark and Share

miércoles 28 de diciembre de 2011

Compilando el Doom3 en PPC

Anteriormente les comente que había sido liberado el código de fuente del juego Doom3.
Ahora tengo el agrado de comentarles como compilarlo para la arquitectura ppc,
Para lograr compilarlo en mi PowerBookG4 con Debian6.0.3 tuve que agregarle un par de parches ya que el codigo solo estaba pensado para MacosX-PPC y no Linux-PPC
Si bien compila y arranca el juego no es jugable dado que presenta muchos giltches de video y audio que todavia no se a que se deben.

#apt-get install scons
#apt-get install libc6-dev libgcc1 gcc-multilib libstdc++6 g++-multilib zlib1g-dev
#apt-get install libopenal-dev
#apt-get install libxxf86vm-dev
#apt-get install libglu-dev
#ln -s /usr/lib32/libz.a /usr/lib/libz.a

Clonamos el repositorio con los parches tanto de github o de gitorious
$git clone https://github.com/daedalus/iodoom3.git
$git clone git://git.iodoom.org/iodoom3-ppc/iodoom3-ppc.git iodoom3

Compilamos...
$cd doom3.gpl
$cd neo
scons --cache-populate

Por ultimo ejecutamos ./doom.ppc
DOOM 1.3.1.1304-debug linux-ppc Dec 28 2011 09:33:06
found interface lo - loopback
found interface eth0 - 200.40.20.134/255.255.255.0
found interface vboxnet0 - 192.168.56.1/255.255.255.0
no 'base' directory in exe path /home/daedalus/code/iodoom3/neo, skipping
WARNING: using hardcoded default base path
------ Initializing File System ------
Current search path:
/home/daedalus/.doom3/base
/usr/local/games/doom3/base
game DLL: 0x0 in pak: 0x0
Addon pk4s:
file system initialized.
--------------------------------------
Unknown command 'vid_restart'
idRenderSystem::Shutdown()
Sys_Error: Couldn't load default.cfg
Ahora estamos en condiciones de agregarle el contenido del CD y probar el juego copiando el contenido del directorio "base" a $HOME/.doom3/base

Bookmark and Share

lunes 26 de diciembre de 2011

NO SOPA















Después del boicot contra Godaddy ahora son 141 las empresas que soportan SOPA plenamente.
Anteriormente les comente sobre un plugin de Firefox que se encargaba de saltear el bloqueo de DNS de SOPA.
Ahora se trata de una extensión para Chrome que se llama NOSOPA
Esta extensión se encarga de notificar al usuario con una barra superior si el sitio que estamos visitando es de alguna de las compañías que soportan plenamente SOPA.

Fuente [http://alt1040.com/2011/12/no-sopa-la-extension-que-te-notifica-si-te-encuentras-en-una-pagina-que-apoya-sopa]

Bookmark and Share

miércoles 21 de diciembre de 2011

Liberado el codigo de fuente del Doom3























Me entero leyendo barrapunto que hace un mes atrás fue liberado el código de fuente del juego Doom3.

Anteriormente John Carmack había prometido hacerlo pero por problemas de patentes con el algoritmo de Sombras Volumétricas que creo John Carmack bajo el nombre Carmack Reverse y que por similitudes con el código patentado por Creative Labs, id software se vio obligado a comprar una licencia de la biblioteca EAX e incluirla en el juego.

Así que ahora: el código fuente de Doom 3 ya está publicado, y es software libre bajo la GPL, versión 3.

Pero lo único que es libre es el código del motor, y no los datos (niveles, gráficos, sonidos, músicas), que siguen siendo propietarios. cosa que me importa poco ya que como en contribuciones anteriores nacieron proyectos como Tremulous, OpenArena y UrbanTerror ahora hay que esperar y ver que se viene...

Bookmark and Share

Si no te gusta la Sopa dos platos!

Hoy todo el mundo esta hablando de SOPA (Stop Online Piracy Act) la ley draconiana y de censura que se esta por aprobar en el Congreso de los Estados Unidos la cual se teme que podría acabar con el Internet que conocemos en nuestros días y que amenaza la libertad de expresión.
Esta ley permitirá al departamento de Justicia de los Estados Unidos y a los que mantengan copyrights el poder levantar ordenes judiciales en contra de sitios acusados de facilitar el infracción de copyrights o "piratería".
Esta ley abarca la eliminación de los registros DNS, el bloqueo de medios financieros como paypal y el derecho de exigir a los motores de búsqueda el bloqueo del sitio infractor.
Pero hecha la ley hecha la trampa:

DeSopa es un plugin que permite a Firefox la circumvencion del bloqueo de DNS utilizando servidores DNS extranjeros.

Bookmark and Share

lunes 12 de diciembre de 2011

Anatomia del algoritmo de Luhn

ATENCION: Los fines de este post son solo educativos no me hago responsable por su utilización.

El algoritmo de Luhn desarrollado por Hans Peter Luhn es un algoritmo que se encuentra en el dominio publico.
Permite verificar la validez de un numero y distinguir o discriminar un conjunto de números "validos" de otro conjunto al azar.
Su utilizad reside en que permite la corrección de errores debidos a la mala transcripción de estos numeros.
Se aplico extensamente para verificar tanto números de tarjeta de crédito como los números IMEI.
Se puede aprender en no mas de 5 minutos.
No es un algoritmo criptográfico seguro, lo cual lo hace vulnerable a ataques.

Veamos el algoritmo:

El primer dígito de la tarjeta es el "dígito mayor identificador industrial" o Rubro:

Ej:
1 y 2 son compañias aéreas
3 Viajes y entretenimiento
4 y 5 Bancos y Financieras
6 Marcado y Bancos
7 Petróleo
8 Telecomunicaciones
9 Asignación Nacional

Los primeros 6 dígitos componen el numero de la institución emisora del numero.
Ej:

Visa: 4xxxxx
Mastercard: 51xxxx - 55xxxx
Discover: 6011xx - 644xxx - 65xxxx
Amex: 34xxxx - 37xxxx

Los siguientes digitos que pueden variar entre 9 y 12 dígitos dependen de la tarjeta y son identificadores de la cuenta personal.

El ultimo dígito es el verificador.

Forma facil:

Supongamos que el numero de tarjeta sea: 4417 1234 5678 9113

El algoritmo es el siguiente: se recorren de izquierda a derecha multiplicando los dígitos impares por dos, se excluye el dígito verificador
Se suman los dígitos obtenidos por ejemplo si teníamos 5x2 = 10, sumamos: ...+1+0+....

Numero de tarjeta: 4 4 1 7 1 2 3 4 5 6 7 8 9 1 1 3
Primer paso: 4x2 4 1x2 7 1x2 2 3x2 4 5x2 6 7x2 8 9x2 1 1x2
Segundo paso: 8 + 4 + (2) + 7 + (2) + 2 + (6) + 4 + (1 + 0) + 6 + (1 + 4) + 8 + (1 + 8) + 1 + (2) = 67

Por ultimo: A la sumatoria agregamos el dígito verificador y verificamos el modulo 10:

67 + 3 = 70 y (70 mod 10) = 0

Si el numero es divisible entre 10 significa que el numero de tarjeta es valido.

Una forma alterna:  
Seria excluir el dígito verificador, revertir el orden del resto de los números y multiplicar los números en las posiciones impares por dos.
Si son superiores a 9 se le resta 9.
Luego se suma todo.

Numero de tarjeta4 4 1 7 1 2 3 4 5 6 7 8 9 1 1 3
Primer paso: 1 1 9 8 7 6 5 4 3 2 1 7 1 4 4
Segundo paso 1x2 1 9x2 8 7x2 6 5x2 4 3x2 2 1x2 7 1x2 4 4x2
Tercer paso: 2 + 1 + (18-9) + 8 + (14-9) + 6 + (10-9) + 4 + (6) +2 + (2) + 7 +(2) +4 + (8) = 67

Por ultimo: como dio 67 y 67 + 3 = 70 y 70 mod 10 = 0 otra vez podemos llegar a la conclusión de que el numero es valido.

En python el codigo resultante seria:

def cardLuhnChecksumIsValid(card_number):
  sum = 0
  num_digits = len(card_number)
  oddeven = num_digits & 1

  for count in range(0, num_digits):
    digit = int(card_number[count])
    if not (( count & 1 ) ^ oddeven ):
      digit = digit * 2
    if digit > 9:
      digit = digit - 9

    sum = sum + digit

  return ( (sum % 10) == 0 )

Bookmark and Share

martes 15 de noviembre de 2011

OPETH EN URUGUAY

























Si escribí el titulo con mayusculas gritandolo de la emocion, mi banda favorita en mi país la banda de un compatriota y todavía cerca de mi barrio!!!!
La fecha ya esta confirmada en la pagina oficial de Opeth y sera el 29 de Marzo del 2012 en el teatro Las Duranas (Trápani 1350 esquina Bayona).

Un poco de background: opeth es una banda de death metal progresivo de Suecia formada por Mikael Akerfeldt Martin Mendez y Martin Lopez estos dos ultimos Uruguayos

Alineacion actual de la banda:

Les dejo unos videitos

Opeth - Harvest
















Opeth - Bleak
















Opeth - When

Bookmark and Share