"CREANDO UN SNIFFER BLUETHOOT CON PYTHON"
Unas de las grandes preguntas que me suelen hacer es que si existe o podemos crear algun sniffer de bluethoot mediante el lenguaje de programacion python tan usado hoy en dia para inteligencia artificial, ciencia de datos, y otras cuestiones interesantes por su simplicidad, flexibilidad, portabilidad y limpieza de codigo a la hora de programar.
Como todos sabemos python es un lenguaje muy poderoso que hasta hace algun tiempo empezo a ganar adeptos y popularidad dentro del terreno de las tecnologias disruptivas, que son las tecnologias disruptivas? pues claramente son las tecnologias mas modernas que tienen como padres las tecnologias anteriores es decir por ejemplo el machine learning es una tecnologia disruptiva el cual su padre es la ciencia de la inteligencia artificial y asi sucesivamente.
primero tenermos que tener en cuenta que tendremos que tener los drivers intalados compatibles con el estandar bluetooth ya se de baja energia o alta energia, en la actualidad, existen dos estandares o no sabria deciros con exactitud si es un estandar en realidad si no un metodo de funcionamiento por ejemplo los dispositivos de baja energia bt vendrian siendo aquellos que requieren estar encendidos continuamente para alguna funcion en especifico importante y que por ello tienden a consumir cantidades de energia muy por debajo del promedio.
para haceros la prueba del sniffer yo recomendaria no utilizarlo en windows a menos que utilices alguna otra libreria, ya que como especifican algunas librerias no es compatible con las interfaces bt de windows o al menos las internas si tu equipo tiene una interfaz bluetooth interna pudieras tener algunos inconvenientes al hacer las pruebas ya que necesitarias un adaptador externo como el que se muestra en la siguiente imagen:
podemos ver dentro de la documentacion de scapy en la seccion del protocolo bluetooth que nos dan una breve explicacion del funcionamiento interno del protocolo asi como se detalla lo que os mencionaba anteriormente los rangos y especificaciones del protocolo tanto normal como el protocolo de baja energia.
Como podemos ver dentro del apartado de bt de baja energia nos indican que las MTU son mas bajas y las capacidades un poco diferentes dentro del protocolo normal como lo conociamos en epocas pasadas esto se debe al surgimiento necesario del internet de las cosas y los dispositivos embebidos que se han venido acarreando en los ultimos tiempos.
podemos ver el bt de baja energia tampoco soporta en algunas ocasiones el modo promiscuo para capturar paquetes supongo que lo han modificado asi para segun ellos aumentar la seguridad y fiabilidad dentro del marco del internet de las cosas.
ahora vamos a lo que nos concierne, lo primero que deberemos checar si estamos en windows es comprobar que nuestras interfaces sean 100% detectables y en linux podriamos utilizar algunas de las utilidades o herramientas como son HCI, el comando para ver si una interfaz bt esta activada es el siguiente
hcitool dev
el resultado sera algo como esto:
hci0 xx:xx:xx:xx:xx:xx
donde x seria un numero hexadecimal y todos x serian la direccion MAC de la interfaz bt que tengamos activa o el conjunto de interfaces bt previamente activadas.
el otro paso es que deberemos tener instalado el conjunto de paquetes de python en nuestro linux o windows despues de esto probaremos a crear una apertura de conexion o socket como comunmente se le conoce en python con la libreria scapy previamente importada seria algo asi:
#abrimos un socket a la interfaz hci0 y le pasamos un 0 como argumento ya que es el numero de interfaz ejemplo hci0 si seria la hci1 seria algo asi #bluethoot = BluetoothHCISocket(1) y asi sucesivamente bluethoot = BluetoothHCISocket(0) #enviamos un paquete de prueba para analizar su respuesta ans, unans = bt.sr(HCI_Hdr()/HCI_Command_Hdr()) #esta es la respuesta vemos que obtuvimos una respuesta y 1 paquete recibidos y que quedan 0 paquetes en cola de espera, osea que ha sido un exito Received 1 packets, got 1 answers, remaining 0 packets #inspeccionamos la respuesta partiendo la variable dentro de un vector [] # ans[0] = Answered packet #0 # ans[0][1] = The response packet p = ans[0][1] p.show() ###[ HCI header ]### type= Event ###[ HCI Event header ]### code= 0xf len= 4 ###[ Command Status ]### status= 1 number= 2 opcode= 0x0
#si queremos capturar el trafico podriamos llamar al metodo sniff que ya viene incluido dentro del paquete de la libreria scapy paquetes = bt.sniff() print(paquetes) #salida del programa #Sniffed: TCP:0 UDP:0 ICMP:0 Other:0 #exportando el sniffeo a una captura .pcap mediante la libreria libcap y scapy wrpcap("/tmp/bluetooth.pcap", paquetes) #cargando paquetes de bluetooth mediante igualmente .pcap paquetes = rdpcap("/tmp/bluetooth.pcap")
//
Como podemos analizar es muy sencillo crear un script que busque y analice paquetes ahora lo complejo es realizarlo para una red cercana es decir que busque repetidores bt y tipos de dispositivos de baja energia como los que se suelen utilizar para el internet de las cosas o Iot, cabe aclarar que existen muchisismas tecnicas para crear un sniffer bt aqui solo se dieron a conocer las pautas para encaminarlos al camino del jedi si es que quieren convertirse en uno, hay que practicar, conocer protocolos, estudiar, practicar de nuevo, instalarse un entorno de pruebas y ejecutar las pruebas y despues analizar que es lo que realmente esta ocurriendo tras bambalinas.
Podriamos implementar la anterior programacion con una GUI o interfaz grafica con el uso de la libreria TKINTER en python que es de las librerias mas importantes para interfaces graficas de usuario.
sin mas por el momento me despido y recuerden ejecutar lo aqui previsto y mejorar el codigo haciendolo mucho mas complejo que ese es el camino del verdadero hacker y jedi.
The pentester
0 comments:
Publicar un comentario