Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Gospel

#31
Gracias Brujo.

Ya había leído lo de la nueva especificación de Bluetooth y sobretodo destacan el "emparejamiento simple" con el espectacular sistema NFC.

Sobre seguridad, sí que había leído también que introducían mejoras en este aspecto. Si eso sólo lo que comentas, no es demasiado. Antes de la versión 2.1 ya era muy complicado sniffar tramas Bluetooth, ahora será imposible.

Lo que no tengo claro que hayan solucionado es el ataque Blue MAC Spoofing. Si no quieren romper la compatibilidad de los dispositivos 2.1 con versiones anteriores, la autenticación seguirá basándose en BD_ADDR + clave de enlace. Si consigues spoofear la BD_ADDR, lo cual es trivial, y robar la clave de enlace, boom! acceso al dispositivo.

Investigaré algo más sobre las mejoras de seguridad, a ver si han introducido algo más...

Saludos
#35
A ver...

Una cosa es que pruebes a enviarlo con ObexFTP y otra con BlueZSpammer, yo te digo que llames a ObexFTP con la misma llamada que BlueZSpammer.

Si lo envías con ObexFTP tal que así "obexftp -b MAC -p archivo", te encontrará el canal asociado al perfil de Transferencia de Archivos (OBEX FTP) y te lo enviará por ahi. Ahora bien, BlueZSpammer llama a ObexFTP con la opción -B, para especificar el canal por el que fuerzas a ObexFTP a enviar el archivo. Ese canal, lo descubre BlueZSpammer a través de una función que busca cual es el canal asociado al perfil de Carga de Objetos (OBEX PUSH) en el dispositivo destino.

Prueba a buscar el canal del perfil de Carga de Objetos con "sdptool browse MAC" y fuerza la llamada a ObexFTP con el parámetro -B, a ver si así te sigue funcionando. Que te funcione eso y no te funcione BlueZSpammer no tiene sentido.

Saludos
#36
¿Operation already in progress?

No me ha pasado nunca! No estarías haciendo alguna otra operación Bluetooth al mismo tiempo? Escanear, etc.

Busca la llamada a obexftp en el código, pégala en la shell, sustituye las variables por la MAC y el archivo a enviar y envía. Si eso funciona, debería funcionar también BlueZSpammer.

Saludos
#37
Prueba a cambiar la declaración de la variable que guarda la dirección MAC del dispositivo por un puntero char * o aumenta de tamaño el array estático. A ver...
#38
Programa 2 - Escanear y detectar dispositivos Bluetooth cercanos

#include <stdio.h>
#include <stdlib.h>
#include <bluetooth/bluetooth.h>
#include <bluetooth/hci.h>
#include <bluetooth/hci_lib.h>

int main ()
{
      inquiry_info *ii = NULL; //Almacena la lista de dispositivos detectados durante el inquiry
      int max_rsp, num_rsp; //Numero de respuestas/dispositivos detectados
      int dev_id; //Identificador del adaptador Bluetooth local
      int socket; //Socket HCI;
      int len, i;

      char MAC_dev[20]; //Direccion MAC del dispositivo detectado
      char nombre_dev[248]; //Nombre del dispositivo detectado

      printf("+ BlueScanner por Gospel [elblogdegospel.blogspot.com]\n");
      printf("+ src: people.csail.mit.edu/albert/bluez-intro/c401.html\n\n");

      //Obtenemos el identificador del adaptador local Bluetooth
      dev_id = hci_get_route(NULL);
      if (dev_id < 0)
      {
            printf("[!] Error. Dispositivo Bluetooth local no disponible.\n");
            exit(1);
      }
                     
      //Abrimos un socket local HCI
      socket = hci_open_dev(dev_id);
      if (socket < 0)
      {
            printf("[!] Error. Fallo al intentar abrir socket HCI.\n");
            exit(1);
      }

      //Inicializamos algunas variables
      len = 8; //El tiempo de inquiry por dispositivo es de 1.28x8=10.24 secs/dispositivo
      max_rsp = 255; //Se pueden detectar a lo sumo 255 dispositivos

      //Creamos la lista de dispositivos detectados con hci_inquiry
      ii = (inquiry_info*)malloc(max_rsp * sizeof(inquiry_info));

      printf("Detectando dispositivos...\n\n");

      //hci_inquiry lleva a cabo un descubrimiento de dispositivos Bluetooth y devuelve una lista de
      //dispositivos detectados en inquiry_info ii para ser almacenados.
      //La bandera IREQ_CACHE_FLUSH permite que la caché sea limpiada antes de buscar nuevos dispositivos.
      //En otro caso, podrian aparecer dispositivos anteriormente detectados pero ahora fuera de rango.
      num_rsp = hci_inquiry(dev_id, len, max_rsp, NULL, &ii, IREQ_CACHE_FLUSH);
      if(num_rsp < 0)
            printf("[!] Error. Fallo al intentar hci_inquiry.\n");

      //Para cada una de las respuestas obtenidas durante el inquiry obtenemos el nombre del dispositivo
      for(i=0;i<num_rsp;i++)
      {
            ba2str(&(ii+i)->bdaddr, MAC_dev);
            memset(nombre_dev, 0, sizeof(nombre_dev));
            if(hci_read_remote_name(socket, &(ii+i)->bdaddr, sizeof(nombre_dev), nombre_dev, 0) < 0)
                  strcpy(nombre_dev, "[Desconocido]");

            printf("Dispositivo (%d) encontrado:\n\tMAC: %s\n\tNombre: %s\n\n", i+1, MAC_dev, nombre_dev);
      }
     
      free(ii);

      close(socket);

      return(0);

}
#39
Programa 1 - Resolver el nombre de un dispostivo Bluetooth a partir de su dirección MAC.

#include <stdio.h>
#include <stdlib.h>
#include <bluetooth/bluetooth.h>
#include <bluetooth/hci.h>
#include <bluetooth/hci_lib.h>

int main (int argc, char **argv)
{
      bdaddr_t bdaddr; //Estructura bdaddr_t para almacenar la direccion MAC
      char MAC_dev[20]; //Direccion MAC del dispositivo
      char nombre_dev[248]; //Nombre del dispositivo
      int id_dev; //Identificador del adaptador Bluetooth local
      int socket; //Socket HCI

      if(argc < 2)
      {
            printf("Sintaxis: %s <direccion MAC>\n",argv[0]);
            exit(1);
      }

      printf("+ BlueResolver por Gospel [elblogdegospel.blogspot.com]\n\n");
     
      strncpy(MAC_dev,argv[1],20);

      printf("Detectando nombre del dispositivo <%s>...\n",MAC_dev);

      //Convertimos la dirección MAC al formato de estructura bdaddr_t
      baswap(&bdaddr, strtoba(MAC_dev));
                     
      //Obtenemos el identificador del adaptador local Bluetooth
      id_dev = hci_get_route(&bdaddr);
      if (id_dev < 0)
      {
            printf("[!] Error. Dispositivo Bluetooth local no disponible.\n");
            exit(1);
      }
                     
      //Abrimos un socket local HCI
      socket = hci_open_dev(id_dev);
      if (socket < 0)
      {
            printf("[!] Error. Fallo al intentar abrir socket HCI.\n");
            exit(1);
      }
           
      //Obtenemos el nombre de la dirección MAC remota
      int timeout = 10000;
      if (hci_read_remote_name(socket,&bdaddr,sizeof(nombre_dev), nombre_dev, timeout) == 0)
      {
            printf("Dispositivo encontrado:\n\tMAC: %s\n\tNombre: %s\n",MAC_dev,nombre_dev);
      }
      else
      {
            printf("[!] Error. No se ha podido resolver el nombre del dispositivo.\n");
            printf("Dispositivo encontrado:\n\tMAC: %s\n\tNombre: [Desconocido]\n",MAC_dev);
      }
       
      close(socket);

      return(0);
}
#40
Taller orientado al desarrollo de programas relacionados con la Seguridad en Bluetooth en Linux.

Se necesita tener instalados los siguientes paquetes Bluez (a ser posible, las últimas versiones):
- bluez-utils
- bluez-libs
- bluez-libs-devel