domingo, 26 de enero de 2014

Spoiled Onions: un proyecto para identificar los relays de salida maliciosos en la red Tor


En enero de 2014, la red anónima Tor se compone de 5.000 relays de los cuales casi 1.000 son de salida. Como se muestra en el diagrama de la derecha, los relays de salida cierran la brecha entre la red Tor y la Internet "abierta". Como resultado, los relays de salida son capaces de ver el tráfico de red anonimizado enviado por los clientes Tor.

Aunque la mayoría de los relays de salida son inocuos y dirigidos por voluntarios bienintencionados, hay excepciones: en el pasado, se documentaron algunos relays de salida que han esnifado y manipulado el tráfico retransmitido. Los ataques expuestos en su mayoría son MiTM de HTTPS, inyección HTML y SSL tripping.

Existe un proyecto de investigación bautizado como Spoiled Onions, que ha desarrollado un escáner rápido y modular escrito en Python para detectar estos relays de salida maliciosos: exitmap. Está disponible en GitHub bajo licencia GPLv3:

git clone https://github.com/NullHypothesis/exitmap.git

Desde septiembre de 2013 ha estado monitorizando todos los relays de salida con el fin de exponer, documentar y frustrar los relays maliciosos o mal configurados. En su lista negra también incluyen relays de salida que involuntariamente interfieren el tráfico de red debido a la censura de DNS.


Así que, si utilizas Tor, ¿a qué estas esperando para echar un vistazo a esta lista?

Web del proyecto: http://www.cs.kau.se/philwint/spoiled_onions/


Paper de investigación:
Spoiled Onions: Exposing Malicious Tor Exit Relays [pdf, bib]

miércoles, 22 de enero de 2014

Port knocking con un sólo paquete cifrado (SPA)

Tradicionalmente hablamos de port knocking o golpeo de puertos como un mecanismo para abrir puertos mediante una secuencia de conexiones preestablecida a otros cerrados. Por ejemplo, para abrir el puerto TCP 22 de SSH tendremos que intentar conectarnos primero al 7000, luego al 8000 y finalmente al 9000. Esto lo hemos visto recientemente con Knockd para securizar openssh en modo paranoico y hace tiempo en nuestra pequeña Raspberry Pi...

Pero "aporrear" varias veces la puerta para entrar es muy escandaloso y poco caballeroso ¿verdad?. Existe una forma más fina y elegante mediante Single Packet Authorization (en adelante SPA), una variante de port knocking con la cual sólo será necesario un sólo 'knock' mediante el envío de un único paquete cifrado.

Para ello utilizaremos fwknop (FireWall KNock OPerator), la herramienta de facto que implementa este esquema de autenticación y que por tanto nos permitirá, con un sólo paquete, abrir un servicio oculto detrás de un firewall que por defecto deniega su acceso (INPUT a DROP). Básicamente por defecto el cliente mandará al puerto UDP 62201 un paquete cifrado con Rjindael (simétrico) o GnuPG (asimétrico), no reproducible y autenticado por medio de HMAC. Mientras, el servidor fwknopd estará esnifando el tráfico de forma pasiva mediante libpcap y, si el paquete es válido, ejecutará el iptables, PF o ipfw de turno para permitir el acceso al puerto durante el tiempo especificado.

Además, la cantidad de información que puede ser incluída en el paquete sólo se encuentra limitada por su MTU, es decir, además de la información de acceso también podríamos incluir en el paquete comandos que sean ejecutados en el servidor SPA. Y al usar un único paquete será más difícil de detectar y mucho más rápido. Todo ventajas.

Bien, ya nos hemos convencido de las bondades de fwknop y ahora nos preguntamos cómo hemos podido ser capaces de seguir con nuestras mundanas vidas sin utilizarlo... vamos a ponerle remedio...

En nuestro escenario de ejemplo vamos a configurar port knocking con SPA entre un servidor fwknopd en una máquina virtual con Kali Linux y un cliente fwknop en Windows 7 (so nativo). También y para más seguridad, usaremos cifrado asimétrico con claves GnuPG.

Lo primero que debemos hacer es generar un par de claves en cada máquina.

Generando las claves GnuPG en el cliente y en el servidor 

En el caso del cliente, si ya tienes una clave GnuPG para el correo electrónico (o cualquier otro) la podrás utilizar con seguridad porque sólo se usará para la firma de mensajes de fwknop. Si por el contrario todavía no la tienes, puedes crearla fácilmente con la herramienta Kleopatra que viene con Gpg4win (puedes ver un tutorial en este enlace):



Una vez creadas las claves, no olvides exportar tu clave pública a un fichero ascii:


Ahora le toca el turno al servidor fwknopd. En este caso si tendrás que crear una clave de GnuPG que se utilice exclusivamente para las comunicaciones de fwknop. La razón es que la contraseña utilizada para desbloquear esta clave debe estar almacenada en texto plano en el archivo /etc/fwknop/access.conf porque fwknopd la utilizará para descifrar los mensajes que hayan sido cifrados por el cliente fwknop con la clave pública del servidor. 

Es recomendable que el tamaño de la clave sea 2048 bits o menos porque les recordamos que los mensajes SPA deben caber en un sólo paquete IP.

root@kali:~# gpg --gen-key
gpg (GnuPG) 1.4.12; Copyright (C) 2012 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

gpg: directory `/root/.gnupg' created
gpg: new configuration file `/root/.gnupg/gpg.conf' created
gpg: WARNING: options in `/root/.gnupg/gpg.conf' are not yet active during this run
gpg: keyring `/root/.gnupg/secring.gpg' created
gpg: keyring `/root/.gnupg/pubring.gpg' created
Please select what kind of key you want:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (sign only)
   (4) RSA (sign only)
Your selection?
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048)
Requested keysize is 2048 bits
Please specify how long the key should be valid.
         0 = key does not expire
      <n>  = key expires in n days
      <n>w = key expires in n weeks
      <n>m = key expires in n months
      <n>y = key expires in n years
Key is valid for? (0)
Key does not expire at all
Is this correct? (y/N) y

You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form:
    "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"

Real name: Vicente
Email address: hackplayers@ymail.com
Comment:
You selected this USER-ID:
    "Vicente <hackplayers@ymail.com>"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
You need a Passphrase to protect your secret key.

We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.

Not enough random bytes available.  Please do some other work to give
the OS a chance to collect more entropy! (Need 283 more bytes)

gpg: /root/.gnupg/trustdb.gpg: trustdb created
gpg: key 04E602A1 marked as ultimately trusted
public and secret key created and signed.

gpg: checking the trustdb
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0  valid:   1  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 1u
pub   2048R/04E602A1 2014-01-20
      Key fingerprint = 4F3E 847C EE9B EB8C DFD4  F86E 467A CF40 04E6 02A1
uid                  Vicente <hackplayers@ymail.com>
sub   2048R/71374B8D 2014-01-20

Después de completar el proceso comprobamos que las claves se han generado con éxito:

root@kali:~# gpg --list-keys
/root/.gnupg/pubring.gpg
------------------------
pub   2048R/04E602A1 2014-01-20
uid                  Vicente <hackplayers@ymail.com>
sub   2048R/71374B8D 2014-01-20

Y también y al igual que con el cliente, exportamos la clave pública generada a un fichero ascii:

root@kali:~# gpg -a --export 04E602A1 > servidor.asc

root@kali:~# cat servidor.asc
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.12 (GNU/Linux)

mQENBFLdoG4BCAC6Tz7R9tlpuGsUpt9r/OlcEK8QpsIC5BjtYAZuzBqoav8Ce4vH
1VbXtTPwYwqqj7MkCz79/RKTBfQN+2CyJzSXmLCShJ+W6py9K/sjPx4AWH9KFwHy
IUQowTQbD6LssOF/fJZjKxQhqZGc8McPAFvxTogRdUFMSF01augPM/iYqx27/TZL
MqVUnVR2v47PQ93Ge1wS6dh2qRKyrd+KWtMC7x3ZQAfqw6VEPQG3cWmS6is3mVdK
M7dYxicVJWG7tkAF9o0ZU7kJp/bQrs39IKUNjFosMHMnIq966E38sBNd6SOuUYN+
CVEArizrTieG7NTbWn/uosL+4PfX6/XDt1XnABEBAAG0H1ZpY2VudGUgPGhhY2tw
bGF5ZXJzQHltYWlsLmNvbT6JATgEEwECACIFAlLdoG4CGwMGCwkIBwMCBhUIAgkK
CwQWAgMBAh4BAheAAAoJEEZ6z0AE5gKhGJwH/Rr/SIZNEXNHhioh8Ufnv9uOMg74
+2XB2k7Icl2sB7vdGIyVKiC9nDVLHr0w2+fMddTyF7Q+JyNhepcHbwYNT025ol6J
V4TNiFRplfvoac3aOdzuga/LfYYax72OVYbJ/i5rMmFrCN1NXuXJPGMle6y2UYw8
LwTWqG1UCkXhn3zZ+cq3HlT4bugUmrW+uLwTs8ul3rZJOlOx0ZI7UDJ3UAmSG7cr
14FjNS5ypj1JDpCDd2es2c7OO554utMT7OIFQyIzCTDCBXe88eRd2hJM8/sQztge
+VXD1/3lrUWWbRRFEjRsTyBjayATgTTqMxnHOgbbd3m/EPe+sUKR/CzDYUm5AQ0E
Ut2gbgEIAJxbLq3urlQbEkxI0rTN2vrdRwYGyn4J+N+1zoNdXB9i2f6sfOWZrkmz
UnL+QL4SddE3op/c+YnYLk3lKVwTVUO5aiXANiVy4IkNqyT6JBJKK4nHHHwxS5g3
5aWwL9p4CDkul88KQB9k5aQa71/ftaZINSfXejnLSZIyWKLk+glTsZbzTuktLDjv
5f0F9ZAjd+nKL10d46GmstC63A8x87ZpFJfMsnEfRM0l3ZfRIcYyIaruPiisvH4s
1jaS+1CE5lyDWmRRfkEZ6VxFPsy+JL3YqlxGc0ycWx8QlOgn1DGfRi4FCBsWGR4T
TLR46Yu9ZWHwOIo3fRl41NIRLOLzPV0AEQEAAYkBHwQYAQIACQUCUt2gbgIbDAAK
CRBGes9ABOYCoc8SB/sEOJycx6p9JPwo/eN1PP9DDyBQ73ZIpgMTcRCg6fneJ8hq
4LoHMy5Y/o5+gwhwkZzv7lp7yeMP5CPD+7NQ/ggoWMOHRXXiwIWwfPBF94VCGaJk
GjLU9zsI0yWv6GXmzdgFw5zrkx9psLnuK/GipshBbvyc+0lK4HpMLWHAHtkFpW9q
bAZvFGNpmYa0uLBeScSJdXcEBA6eu9hUgZohP1zChXIlcYXdCSC3QOVBwt/qdQCg
PzUHdGGR7mhI15Fowug3hULhejH1La7hNeXBDQICC/BQWumu6wuc/T+Tz13WKnUR
imSmtFemZ7DtjDdj+gBefGopd5QnfT0//E/+Bj+S
=pBiY
-----END PGP PUBLIC KEY BLOCK-----
root@kali:~#

Una vez que hayamos creado las claves necesarias en el cliente y en el servidor, tendremos que intercambiar las públicas por scp (o por donde quieras) y firmarlas.

En el servidor importamos y firmamos la clave pública del cliente:

root@kali:~# gpg --import cliente.asc
gpg: key 68E338DE: public key "Vicente2 (Cliente) <hackplayers@ymail.com>" imported
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)

root@kali:~# gpg --edit-key 68E338DE
gpg (GnuPG) 1.4.12; Copyright (C) 2012 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.


pub  2048R/68E338DE  created: 2014-01-20  expires: never       usage: SCE
                     trust: unknown       validity: unknown
[ unknown] (1). Vicente2 (Cliente) <hackplayers@ymail.com>

gpg> sign

pub  2048R/68E338DE  created: 2014-01-20  expires: never       usage: SCE
                     trust: unknown       validity: unknown
 Primary key fingerprint: 9757 064C 2B1B 843C 4ACB  401E 1545 3B76 68E3 38DE

     Vicente2 (Cliente) <hackplayers@ymail.com>

Are you sure that you want to sign this key with your
key "Vicente <hackplayers@ymail.com>" (04E602A1)

Really sign? (y/N) y

You need a passphrase to unlock the secret key for
user: "Vicente <hackplayers@ymail.com>"
2048-bit RSA key, ID 04E602A1, created 2014-01-20

Y en el cliente importamos y firmamos la clave pública del servidor:


Instalando y configurando el servidor fwknopd

Una vez intercambiadas las claves, vamos a instalar y preparar fwknopd en el servidor:

root@kali:~# apt-get install fwknop-server libpcap-dev

Empezamos editando el fichero /etc/default/fwknop-server e indicamos que fwknopd se ejecute al inicio:

START_DAEMON="yes"

El siguiente paso será especificar el interface y el puerto a la escucha editando el fichero /etc/fwknop/fwknop.conf:

PCAP_INTF                   eth0; 
PCAP_FILTER                 udp port 62201;
 
Finalmente sólo nos queda configurar las directivas de /etc/fwknop/access.conf de tal manera que fwknopd use GnuPG para verificar y descifrar los paquetes SPA. Fíjate que el ID de la clave del servidor es 04E602A1 y el ID de la clave del cliente es 68E338DE:

SOURCE: ANY;
OPEN_PORTS: tcp/22;
DATA_COLLECT_MODE: PCAP;
GPG_REMOTE_ID: 68E338DE;
GPG_DECRYPT_ID: 04E602A1;
GPG_DECRYPT_PW: password123;
GPG_HOME_DIR: /root/.gnupg;
FW_ACCESS_TIMEOUT: 60;


Probando el acceso al servicio ssh mediante SPA

Si habrás seguido estos sencillos pasos ya tendrás todo el entorno montado. Para probarlo vamos a arrancar fwknopd y configurar el firewall del servidor con una política por defecto de denegación en la entrada:

root@kali:~# service fwknop-server start 
root@kali:~# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
root@kali:~# iptables -A INPUT -i ! lo -j DROP

Como puedes comprobar, el acceso al puerto SSH desde el cliente está inicialmente cerrado:

C:\Users\vmotos>nmap -p 22 192.168.225.129

Starting Nmap 5.51 ( http://nmap.org ) at 2014-01-21 00:57 Hora estßndar romance

Nmap scan report for 192.168.225.129
Host is up (0.00s latency).
PORT   STATE    SERVICE
22/tcp filtered ssh
MAC Address: 00:0C:19:8D:5
2:DC (VMware)

Nmap done: 1 IP address (1 host up) scanned in 3.55 seconds

Ahora tendremos que generar y enviar desde el cliente el paquete SPA correspondiente. Para ello utilizaremos Morpheus, un IU para Windows escrito por Daniel López que además es de código abierto.

Como verás en el siguiente pantallazo, su configuración no puede ser más simple. Especificaremos el puerto y la dirección IP que podrá acceder a fwknopd, el tipo de cifrado PGP y la ruta de la clave privada del cliente y la clave pública del servidor:


Al introducir la frase de paso enviaremos el paquete SPA y, casi por arte de magia, el puerto 22/TCP del servicio SSH se abrirá durante el perido de tiempo especificado:



Puedes comprobarlo volviendo a escanear el puerto:

C:\Users\vmotos>nmap -p 22 192.168.225.129

Starting Nmap 5.51 ( http://nmap.org ) at 2014-01-21 01:12 Hora estßndar romance

Nmap scan report for 192.168.225.129
Host is up (0.00038s latency).
PORT   STATE SERVICE
22/tcp open  ssh
MAC Address:
00:0C:19:8D:52:DC (VMware)

Nmap done: 1 IP address (1 host up) scanned in 3.23 seconds

C:\Users\vmotos>

Y bueno, para terminar verificamos el log en el servidor...

root@kali:~# tail -f /var/log/syslog | grep fwknop

Jan 20 19:00:47 kali fwknopd[13583]: SPA Packet from IP: 192.168.225.1 received.
Jan 20 19:00:48 kali fwknopd[13583]: Added Rule to FWKNOP_INPUT for 192.168.225.1, tcp/22 expires at 1390262508
Jan 20 19:01:48 kali fwknopd[13583]: Removed rule 1 from FWKNOP_INPUT with expire time of 1390262508.


...  así como las reglas de iptables creadas:
 
root@kali:~# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination        
FWKNOP_INPUT  all  --  anywhere             anywhere           
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
DROP       all  --  anywhere             anywhere           

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination        

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination        

Chain FWKNOP_INPUT (1 references)
target     prot opt source               destination        
ACCEPT     tcp  --  192.168.225.1        anywhere             tcp dpt:ssh /* _exp_1390262645 */

Sencillo ¿verdad? 

¿A qué hora llamarás a las puertas de tus servicios más sigilosamente? ;)

 
Fuentes: 

- Single Packet Authorization - A Comprehensive Guide to Service Concealment with fwknop
- fwknop: Single Packet Authorization y port knocking
- Firewall improvement with fwknop  
- Fwknop versus Knockknock
- SinglePacketAuthorization
 

martes, 21 de enero de 2014

dSploit: Pentesting & Hacking WiFi desde Android (1 de 2)

dSploit es un aplicación de Android que reúne distintas herramientas para el análisis y pentesting de redes en una sola suite unificada. Permite realizar pruebas de seguridad de la red en la que se encuentra conectada el dispositivo móvil, lo que puede ayudar a hacer tests de seguridad en clientes que haya que auditar ad-hoc. Según la web de los creadores de la herramienta, esta aplicación ofrece el kit de herramientas más completo y avanzado para llevar a cabo este tipo de tareas, apoyándose en las características siguientes.



Figura 1: Comparativa de dSploit para Android con otras herramientas

En la imagen anterior, además de mostrar las características que ofrece la herramienta, hace una comparativa con algunas de las aplicaciones para Android más conocidas que realizan tareas similares, intentando recalcar su superioridad y complejidad. Por supuesto, no tiene porque ser la mejor, pero nos ha parecido más que interesante probarla y hablaros sobre ella.

Para poder instalar esta aplicación es necesario tener rooteado el sistema Android del terminal movil donde se vaya a instalar. Es posible que una vez terminado el proceso de instalación, la aplicación solicite la que se descargue también BusyBox. Por lo general, las distintas herramientas que se utilizan para rootear el movil o la ROM personalizadas ya incluyen BusyBox, sin embargo, podría darse el caso de que no esté instalada o que esta sea antigua.

Cuando a aplicación esté en el sistema opeartivo Android y se le haya dado permisos de superusuario, la pantalla principal que ofrece es una visualización con el mapeo de la red a la que estemos conectados, donde se listaran todos los dispositivos que hayan sido localizados. En esta pantalla se pueden realizar el listado de acciones que tiene que ver con el escaneo de redes WiFi y el cracking de claves conocidas de determinados tipos de puntos de acceso o routers.


Figura 2: Mapa de red creado por dSploit


También se puede observar en la parte superior derecha de esta pantalla el menú de botones que ofrece las opciones de lo que se puede hacer con la red:

- Especificar objetivos: La primera de estas opciones, representada con un signo ‘+’, permite especificar un objetivo concreto de forma manual a través de una dirección URL, introduciendo el nombre del host o la dirección IP que tenga configurada el equipo. 

- Nuevo escaneo de red: La segunda de ellas, representada con un par de flechas circulares, permite refrescar la lista de los equipos de la red, haciendo que se vuelva a realizar un mapeo completo de la red en busca de nuevos equipos conectados.

- Cambio de red WiFi y cracking: La tercera, que está representada con el símbolo de WiFi que utiliza comúnmente Android, permite cambiar de redes directamente desde la aplicación y, si fuera posible - en el caso de que uno de los routers fuera del tipo de los que la aplicación conoce el algoritmo de generación de claves por defecto que estos implementan -, el cracking de la clave de conexión. Esta acción solo tendrá un resultado positivo siempre y cuando la red WiFi conserve la contraseña por defecto.

- Menú de opciones: La cuarta y última de ellas, representada por tres cuadrados alineados verticalmente, en las que se puede encontrar las distintas opciones que ofrece la aplicación.

En cuanto se haya realizado el mapeo de la red y se encuentren los diversos dispositivos, presionando sobre ellos se pueden observar las distintas acciones que se pueden realizar para cada uno de ellos.


Figura 3: Acciones que pueden realizarse con dSploit en la red

En la imagen anterior se pueden observar todas las acciones que pueden realizarse, sin embargo, estas variaran dependiendo del tipo de dispositivo. Por ejemplo, en el caso de la primera acción de la lista (Router PWN), solo se puede realizar sobre AP al que se está conectado. Con esta opción es posible tomar el control del router utilizan el servicio que ofrece RouterPWN.

Al igual que hay acciones que se pueden realizar para un solo tipo de dispositivos, también hay elementos identificados en el mapeo que solo se pueden llevar un conjunto limitado de acciones, como es el caso del primero de ellos que se lista en el mapeo de la red. Este primer elemento representa a la totalidad de la red, el cual está representado por la NET_ID y la máscara de red, y solo permite llevar a cabo las acciones que se agrupan dentro de las herramientas de man in the middle. Estas acciones afectarán a todos los elementos detectados en el escaneo de la red.

El resto de los elementos que se encontraran en el mapeo son los distintos dispositivos que se encuentran conectados a la red, y se podrán llevar a cabo todas las acciones mostradas en la imagen, exceptuando la comentada anteriormente que solo aplica a los AP.

- Trace: La primera de esas opciones se encarga de identificar todos los saltos que se realizan para llegar al objetivo que fue seleccionado usando el conocido comando de red Trace.

- Escáner de puertos: Con el que se realiza un escaneo de tipo TCP SYN para obtener los puertos los puertos que el dispositivo tiene abierto.


Figura 4: Escaneo de puertos a un objetivo

. Inspector: S encargara de hacer un fingerprinting al dispositivo en busca de su sistema operativo y los servicios que pueda identificar.


Figura 5: Inspector de un equipo conectado a la red para hacer un fingerprinting

Para estos tres primeros casos, solo basta con seleccionar la acción, presionar el botón Start y esperar a que termine el proceso. Esto es así porque son funciones estancas que no necesitan mucho trabajo previo de campo para la configuración del entorno completo de pruebas.

- Búsqueda de vulnerabilidades y exploits: Para poder hacer uso de estas opciones es necesario haber realizado las tareas de escaneo de puertos y fingerprinting previamente, ya que la herramienta se basa en los resultados obtenidos en esos procesos para realizar la búsqueda de vulnerabilidades y de exploits en el S.O. y en los servicios detectados.

Para poder realizar la búsqueda de exploits en concreto, primero debe realizarse la búsqueda de vulnerabilidades y haberse encontrado alguna. Después ya se buscaran exploits relacionados con todas esas vulnerabilidades encontradas.

- Login Cracker: Se basa en los resultados obtenidos en el proceso de escaneo de puertos. Esta opción se encarga de intentar hacer un cracking del login de alguno de los servicios conocidos que se encuentran listados en la aplicación, especificando uno de los puertos de los que fueron encontrados, el juego de caracteres para la generación de contraseñas, el nombre de usuario de una lista que la aplicación ofrece, la longitud mínima y la longitud máxima de la contraseña a generarse.


Figura 6: Login Cracker en dSploit

De los requisitos antes mencionados habría que destacar que la aplicación permite agregar algún otro nombre de usuario que el usuario considere, sin embargo, solo se puede seleccionar uno a la hora de iniciar la aplicación. También permite especificar un conjunto personalizado de caracteres en caso de que se desee incluir alguno para la generación de las contraseñas. En cuanto a los caracteres mínimos y máximos, solo ofrecen un rango entre 1 y 6 caracteres.


Autor: Umberto Francesco Schiavo de Eleven Paths


********************************************************************************** - dSploit: Pentesting & Hacking WiFi desde Android (1 de 2)
- dSploit: Pentesting & Hacking WiFi desde Android (2 de 2)
**********************************************************************************

 Fuente

martes, 14 de enero de 2014

Caso práctico de uso de un AP falso

En la pasada entrada vimos cómo instalar un punto de acceso falso (en adelante rogue AP) sin airbase. Aprovechando que ya lo tenemos montado, vamos a ver un caso práctico de cómo aprovechan estos ap para nuestra desgracia...

Imagina que estas en la universidad, una cafetería, la casa de tu madre y no dispones de una red inalámbrica "segura". O mejor, ¿cuántos amigos tienes que en dichos establecimientos urgan en su celular para encontrar una red abierta??. O para más inri, nuestro propio móvil nos avisa de que existen redes abiertas disponibles a nuestro alcance...

Claro está, que nos sentimos seguros puesto que disponemos de HTTPS que cifra todas nuestras comunicaciones importantes o, mejor dicho, desde hace un tiempo los protocolos que viajaban en texto plano como http, smtp, ftp, pop se les ha añadido una capa adicional de protección: SSL (Secure Sockets Layer) o protocolo de capa de conexión segura, un adicional al protocolo el cual trabaja con certificados y son utilizados en los protocolos que se mencionaron antes.

Vale, hasta aquí bien... ¿Qué nos puede pasar? ¿quién se va a poner a destripar nuestras conexiones, aparte cifradas (con el trabajo que eso puede suponer)? Acepto webstart como animal acuático....conectando.

Es justamente aquí donde el atacante (en este caso pasivo) hace uso de su Rogue AP y de otra herramienta llamada ssltrip.

Ssltrip no es ni más ni menos que un proxy transparente que reemplaza todas las peticiones HTTPS de una página web por HTTP.

Veamos como la complicación del ataque es desmesurada...

La víctima

Hemos quedado que hemos tenido la desgracia de conectarnos a una red que no conocemos, detrás de la cual hay un señor que se aburre mucho y, por ejemplo, nos disponemos a enviar un mail a nuestra novia...

Veamos qué pasa en la máquina del atacante cinco minutos antes:

Levantamos nuestro rogue AP con el script que confeccionamos en la entrada anterior.

Pasamos a la fase dos del ataque, la de "y se van a poner a descifrar mi conexión si tiene que ser complicadísimo" si en efecto "mu complicao"...

iptables -t nat -A PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-port 10000

sslstrip -l 10000 -a -w captura.cap


Ya está... complicadísimo llevar a cabo este ataque, incluso para más comodidad podemos implementar estas líneas en un script que llamaremos setupsslarip.sh... levantaremos nuestro falso AP y sslstrip al unísono:

  
Veamos cómo se desarrollan los acontecimientos:


 La víctima se conecta a nuestro AP y, como hemos mencionado antes, se conecta al servicio de Gmail y escribe un mensaje a su novia... ¡¡¡Bingo!!! Miramos el archivo captura.cap y entre muchísima información así a vote pronto nos llama la atención la siguiente línea:



Tras conectarse con su móvil Android 4.1.2 podemos ver toda su navegación e incluso el login en Gmail....

Si combinamos esta técnica "tan compleja" con otras que hemos visto estas semanas (que tampoco suponen un trabajo desmesurado) podemos reventar cualquier resquicio de privacidad de nuestra víctima...



Un saludo!!!! y portence bien :P 

viernes, 10 de enero de 2014

¿Se puede Dosear el WhatsApp de alguien?


Hace no demasiado tiempo se generó una buena polémica con el servicio de Apple iMessage al descubrirse que existían formas de fastidiar a los usuarios con diferentes ataques para hacer Spam y Denegación de Servicio. La ventaja para el atacante de Apple iMessage era que podrían utilizarse cuentas no necesariamente asociadas a números de teléfonos, y automatizar el ataque desde equipos Mac OS X con sencillos scripts. Los ataques para hacer un D.O.S. eran tan sencillos como hacer mensajes muy largos, o costosos de renderizar, haciendo uso de codificaciones complejas como Zalgo.


Figura 1: Mensajes D.O.S. para Apple iMessage enviado en Zalgo

Como Apple no tenía la opción de bloquear contactos en iOS 6 - fue introducida en iOS 7 -, decidió poner un sistema antispam bastante curioso: Enviar un correo electrónico a Apple para decir quién te estaba spameando o haciendo D.O.S. por Apple iMessage para que ellos lo comprobaran y tomaran medidas.


Como Apple iMessage y WhatsApp son similares, decidí comprobar si esto era posible hacerlo también de alguna forma en la popular app de mensajería. Sí, sé que todo el mundo quiere saber cómo espiar WhatsApp, pero supongo que el poder hacer un D.O.S. como broma a algún amigo pesado de esos que se pasa todo el día enviándote chorradas podría ser un buen escarmiento, así que perdí un poco de tiempo revisando estas cosas.


Figura 2: ¿Mensajes de tamaño ilimitado en WhatsApp? 

 
Lo primero fue mirar en Internet a ver si se conocían los límites de los mensajes de WhatsApp, y no resulta fácil encontrarlos, ya que todo el mundo parece pensar que son ilimitados. Evidentemente, el término ilimitado cuando hablamos con tecnología no parece demasiado científico, ya que al final siempre acaba apareciendo un límite.


 
Si miramos la estructura de una base de datos de WhatsApp con SQLite Data Browser, por ejemplo, se puede ver que los campos que almacenan el contenido de los mensajes son de tipo BLOB y TEXT, así que sólo hay que mirar el tamaño de estos tipos de datos en SQLite, que pueden consultarse en SQLite Limits.


Figura 3: Estructura de la tabla messages de WhatsApp

 
Como se puede ver, el tamaño de mensaje, salvo que la app haya establecido algún límite por el GUI puede ser mucho más grande que lo que un terminal pueda soportar con soltura, así que decidí probar a crear unos mensajes de gran tamaño a ver cómo se comportaban un iPhone, una Blackberry de las antiguas, y unos terminales con Android con los que contaba a mano.


Figura 4: Máximo tamaño para un BLOB. Para un TEXT el límite lo pone SQLITE_ MAX_SQL_LENGHT 

 
Para hacer el ataque se podría haber creado algún script un poco más elaborado haciendo uso de Yowsup, pero como la idea se me ocurrió mientras andaba tirado en el sofá, lo único que tuve que hacer es crear un mensaje copiando en el portapapeles una frase muy larga y pengándola sucesivas veces durante 10 minutos hasta que construí un mensaje lo suficientemente largo - por supuesto muy lejos de los límites de SQLite -.


BlackBerry con Whatsapp 2.11.528

Tras enviárselo a mi pobre Blackberry e intentar abrir la app de WhatsApp, el terminal se quedó bloqueado totalmente y tuve que reiniciarlo y borrar todos los datos antes de poder volver a abrir WhatsApp. La versión exacta de WhatsApp para BlackBerry que tengo instalada en este terminal, por si alguien quiere probar más, es la 2.11.528.

Android con WhatsApp 2.11.152

En los terminales Android, mi Nexus 4, mi HTC Desire y mi HTC One soportaron que la app de WhatsApp, versión 2.11.152, se quedara en un estado de thrashing que hace imposible su manejo. Es necesario esperar durante varios minutos a hacer cada nueva acción y conseguir eliminar el mensaje envenenado, o por supuesto, desinstalar la app y volver a instalarla.

La "gracia" de este mensaje es enviarlo a una lista de amigos que tengan Android, ya que cuando se visualiza la lista de conversaciones intenta hacer una previsualización de 20 caracteres y parece que para ello carga todo el mensaje en memoria del tirón sin hacer alguna lectura con RTRIM o similares. Aún así, la app entra en thrashing pero no cae, aunque los destinatarios con los que he probado han acabado todos desinstalando y volviendo a instalar la app.

iPhone 5 con iOS 7

El que mejor resultado obtuvo fue el terminal iPhone 5, que aunque iba a tirones, podía manejarse con relativa facilidad y conseguir borrar el mensaje, lo que hace suponer que la app de iOS esté mejor diseñada y cuente con algún control a la hora de manejar límites en mensajes de gran tamaño. 

La app de iOS es la que mejor parada sale, bloqueándose durante unos instantes al recibir, pero luego al hacer scroll la app - aunque da algún tirón - consigue moverse sin bloquearse demasiado. Creo que WhatsApp para iOS tiene algún limite de mensaje a la hora de manejarlos por el GUI que Android y Blackberry no tienen.

Con estas sencillas pruebas se puede ver que sí que parece posible hacer un DOS a WhatsApp y molestar a los usuarios normales de este sistema, y que tanto los detalles sutiles de la implementación de las apps en las diferentes arquitecturas, como los sistemas operativos y la calidad del hardware en el que corran, tienen importancia a la hora de diseñar un sistema robusto. De todas formas, si te toda un amigo "guasón" que te hace estas cosas, lo más fácil es que le bloquees en WhatsApp, que se puede hacer fácilmente.


Saludos y.... ¡Buen año! ...


Autor: Pau González

miércoles, 8 de enero de 2014

Un Redirect en Facebook para hacer Phishing a Facebook


A través de Twitter pude ver un mensaje de Jonathan Funes (@xfunex) que aludía a un No-Bug de Facebook. Es decir, a algo que él consideraba un bug pero que tras haber contactado con el equipo de seguridad de la red social por excelencia, le habían dicho que eso no era un bug, algo similar a lo que le pasó a otro investigador de seguridad con una "característica" que le permitió cambiar un estado del propio Mark Zuckerberg.

Como me interesaba el tema le pedí más información, y me pasó una pequeña explicación en vídeo que os paso describir. En este caso se trata de algo bastante sencillo de reproducir, así que puedes probarlo tú mismo con tu cuenta de Facebook. La idea es aprovechar un Open-Redirect de Facebook para hacer un ataque de Phishing bastante convincente a la propia Facebook.

Paso 1: Créate una mensaje privado que solo puedas ver tú con un enlace a cualquier web que quieras usando el enlace al link de redirección que puedes ver en la imagen. Lo único que necesitas es poner la dirección al final de la URL. En este caso, cuando alguien haga clic en ese enlace irá a la página de Google.com

Figura 1: Creando un estado que publique el link de redirección a Google.
El dominio del enlace de publicación aparece como www.facebook.com


Como se puede ver, automáticamente aparece que el dominio al que apunta ese enlace es a www.facebook.com, pero realmente es un hiperenlace que lleva a Google.com sin mostrar ningún mensaje de alerta.

Paso 2: Edita el título de la web para poner algo significativo, en este caso yo no me he complicado y he puesto que es un enlace de www.facebook.com, para que coincida con el dominio de publicación del enlace que Facebook creó antes.

Figura 2: Cambiando el título del enlace publicado

Paso 3: Borra el enlace original y pon textos sugerentes que inciten a los que lo vean a pulsar sobre él. Aquí llega la parte de ingeniería social necesaria para conseguir el call-to-action de las personas que lo vean.

Figura 3: Poniendo textos sugerentes en la publicación del phishing

Paso 4: Publica el estado. Como se puede ver, queda bastante aparente y parece que es un enlace a una web de Facebook.

Figura 4: El enlace publicado parece una página de Facebook

Paso 5: Sin embargo, como se puede ver en el enlace, el hipervínculo es a Google.com y navegará a esa dirección sin mostrar ninguna alerta.

Figura 5: El enlace llevará a Google.com sin dar ninguna alerta

En este ejemplo yo he utilizado un destino que llama mucho la atención, como es Google.com, pero si alguien quisiera hacer un ataque dirigido a uno de sus seguidores podría elegir un dominio en el que se simulara la página de Facebook y pidiera el usuario y la contraseña de Facebook para robársela.

En el vídeo de la demostración, Jonathan Funes usa un BeeF para infectar con un JavaScript malicioso la sesión del usuario - algo similar a lo que hicimos con la JavaScript Botnet -, pero lo más recomendable sería utilizar SET con Metasploit para conseguir un efecto de Phishing perfecto que pudiera ponerse en cualquier dominio o subdominio que pueda engañar a la víctima.



Figura 6: Explotación del Open-Redirection en Facebook 


Ten cuidado con estas cosas, porque parece que de momento Facebook no piensa corregir o añadir alguna protección extra a esta característica de compartición de enlaces y uso del Open-Redirect que tienen implementado, así que atento para no caer en esquemas de phishing porque te hayas fiado en el dominio de publicación del enlace.



Fuente

Cicada 3301: quizás el puzzle más misterioso y elaborado de Internet


Las cigarras desaparecen totalmente durante largos períodos, para volver a aparecer en gran número - increíblemente - sólo en los años que contienen números primos...

Cicada 3301 (en español Cigarra 3301) es el nombre de la misteriosa organización que el 5 de enero de 2012 publicó en el foro de 4chan una imagen con el siguiente texto sobre fondo negro:


“Hola. Estamos buscando a individuos sumamente inteligentes. Para encontrarlos hemos concebido una prueba. Hay un mensaje oculto en esta imagen. Encuéntralo y te llevará por el camino hacia nosotros. Esperamos con ansias conocer a los pocos que llegarán al final del camino. Buena suerte.”

Así dio comienzo lo que muchos consideran el "más elaborado y misterioso puzzle de la edad de Internet", una maratoniana serie de pruebas y retos virtuales sobre seguridad, criptografía y esteganografía que han llevado a sus participantes a compartir pistas y verse inmersos en referencias a poemas, sitios en la deep web, numerología maya, música clásica, ingeniería inversa, etc... además de pistas físicas dejadas en coordenadas rastreables vía GPS de 10 ciudades distribuidas por todo el mundo que hacen que Cicada 3301 parezca tratarse de una organización compleja y con medios...


¿Quiénes son realmente? Algunos suponen que se trata de la mismísima NSA o la agencia de espionaje británica MI6. 

Otros dicen que detrás está Google o Microsoft. Otros piensan que podría ser un colectivo hacker o algún grupo con fines nefastos.....


¿Cuáles son realmente sus intenciones? ¿De verdad están buscando a los mejores para reclutarlos? 


Sólo los que consigan resolver todos los puzzles podrán averiguarlo... o no, quién sabe.

En 5 de enero de 2013, justo un año después, hubo una segunda ronda. ¿Habrá una tercera ronda también este domingo? Pronto lo sabremos...


Referencias:

- Cicada 3301 Wikipedia

- Uncovering Cicada Wiki  

- Cicada 3301: The most elaborate puzzle of the internet age
 
- Cicada 3301: ¿el secreto mejor guardado del Internet? 

- Online puzzle has world’s codebreakers baffled
 
- Cicada 3301: the mystery keeping cryptologists awake at night 


Fuente