paint-brush
Cómo aplicar ingeniería inversa a un dron con Wireshark mediante la disección de paquetespor@angelinatsuboi
7,944 lecturas
7,944 lecturas

Cómo aplicar ingeniería inversa a un dron con Wireshark mediante la disección de paquetes

por Angelina Tsuboi26m2023/05/19
Read on Terminal Reader

Demasiado Largo; Para Leer

Este artículo describe los pasos que tomé para aplicar ingeniería inversa a drones DJI usando técnicas de monitoreo de paquetes con Wireshark. También profundizo en los detalles de la disección de paquetes y cómo puede desarrollar su propio disector de protocolo utilizando el lenguaje de programación Lua. A medida que se implementan e integran sistemas de drones más avanzados en varios sectores, se vuelve cada vez más importante tener en cuenta las vulnerabilidades que pueden presentar.
featured image - Cómo aplicar ingeniería inversa a un dron con Wireshark mediante la disección de paquetes
Angelina Tsuboi HackerNoon profile picture

A medida que se implementan sistemas de drones más avanzados y se integran en varios sectores, se vuelve cada vez más importante tener en cuenta las vulnerabilidades que pueden presentar para garantizar la seguridad de sus aplicaciones.

Desde que me interesé en la ciberseguridad aeroespacial , una cosa que siempre quise encontrar una forma de piratear fueron los UAV. En este artículo, describo los pasos que tomé para aplicar ingeniería inversa a los drones DJI usando técnicas de monitoreo de paquetes con Wireshark y profundizo en los detalles de la disección de paquetes y cómo puede desarrollar su propio disector de protocolo usando el lenguaje de programación Lua.

Aunque los drones de ingeniería inversa no son una tarea fácil, aún son vulnerables a una amplia gama de amenazas cibernéticas que podrían tener graves repercusiones. Al describir el proceso que tomé para aplicar ingeniería inversa a los drones DJI para exponer información confidencial almacenada en paquetes de datos, espero que la investigación resalte las vulnerabilidades existentes para encontrar mejores alternativas para salvaguardar los sistemas de drones existentes.

Tabla de contenido

  • Vehículo aéreo no tripulado
  • Drones deconstruidos
  • Vulnerabilidades de los UAV
  • ¿Qué es la detección y el análisis de paquetes?
  • ¿Qué es Wireshack?
  • Filtros de pantalla Wireshack
  • ¿Qué es la disección de paquetes?
  • Disección de paquetes con Wireshack
  • Drones DJI de ingeniería inversa
  • Disección de paquetes DJI con Wireshack
  • Profundizando en los disectores Wireshack 
  • Configuración del disector con Wireshack

Vehículo aéreo no tripulado

Un vehículo aéreo no tripulado (UAV, por sus siglas en inglés) es una aeronave que no lleva ningún piloto ni pasajeros a bordo. La mayoría de las veces, el término se aplica a los drones, pero existen otros tipos de vehículos UAV, como el Global Hawk de la NASA, que es un UAV de gran altitud y larga duración destinado a fines de investigación. Los UAV se utilizan para una amplia variedad de aplicaciones, como misiones de búsqueda y rescate, recopilación de datos, militares y policiales, fotografía aérea, etc. En comparación con las aeronaves convencionales, los UAV poseen una forma compacta, exhiben mayor agilidad, exactitud y precisión en su maniobras y resultan rentables, haciéndolos ampliamente favorecidos para diversas aplicaciones comerciales y de consumo, como servicios de entrega y topografía aérea.


Drones deconstruidos

Como este artículo profundizará en el análisis forense de los drones, es importante proporcionar una descripción general rápida de los componentes que componen el DJI Phantom 4. Si bien vale la pena señalar que los componentes alojados por un dron pueden variar según la marca o la versión, la mayoría de los UAV comparten una gran mayoría de componentes.

Chasis: el chasis del dron es el marco físico que mantiene unidos todos los componentes. el chasis generalmente está construido con materiales livianos como plástico o fibra de carbono para reducir el rendimiento de vuelo general del dron al reducir la resistencia y el peso

Drone Motor: los drones usan motores para crear la cantidad necesaria de sustentación para el vuelo. la mayoría de los drones suelen tener una configuración de cuadricóptero que consta de cuatro motores: dos motores que giran en el sentido de las agujas del reloj y dos motores que giran en el sentido contrario a las agujas del reloj para igualar la fuerza de giro. Esta configuración existe porque la Tercera Ley de Newton establece que para cada acción hay una reacción igual y opuesta, por lo que tener la misma cantidad de motores en sentido contrario a las agujas del reloj proporciona al dron coordinación de vuelo a través de una fuerza de giro igualada.

Controlador de vuelo de drones: el controlador de vuelo de un dron actúa como su cerebro. el controlador de vuelo recibe información de los sensores a bordo del dron, como el módulo GPS, para dar instrucciones específicas a los controladores electrónicos de velocidad (ESC) para controlar los motores

Módulo GPS: el módulo de satélite de posicionamiento global (GPS) utiliza dos sistemas de posicionamiento global diferentes para señalar la ubicación del dron. Usando el módulo GPS, el dron puede calcular su geolocalización en función del tiempo que tardaron en llegar las señales transmitidas desde diferentes satélites.

Controlador electrónico de velocidad (ESC): los ESC son el intermediario entre el tablero de distribución de energía del dron y los motores. Usan señales del controlador de vuelo para controlar la cantidad de energía asignada a un motor.

Módulo de puerto de alimentación: el puerto de alimentación es un módulo que muestra la cantidad de energía que proviene de la batería y la distribuye a los ESC y al controlador de vuelo del dron.

Sensores para evitar obstáculos: algunos drones incluyen sensores de visión estéreo en su estructura. Estos sensores calculan la distancia entre el dron y el obstáculo frente al sensor calculando la profundidad a través de los píxeles de imagen capturados por cada sensor.

Cardán de 3 ejes: el cardán estabiliza la cámara conectada al dron para estabilizar el metraje. Cuando los sensores notan movimiento en cualquier eje, envían una señal al cardán para que realice los ajustes adecuados para suavizar las imágenes de la cámara.

Batería del dron: las baterías proporcionan energía al dron. Algunas baterías también incluyen características como protección contra sobrecarga, comunicación de salida de energía, etc.

Drone Camera: la cámara del dron se utiliza para filmar imágenes y tomar fotografías. El sensor de imagen de la cámara captura los rayos de luz entrantes y los procesa en una imagen digital

Antenas de drones: las antenas de drones actúan como un sistema de transmisión para transmitir información entre el controlador y el dron.

Sensor de evitación de obstáculos ultrasónico hacia abajo: estos sensores se utilizan para calcular la altura del dron sobre el suelo. La altura se puede calcular enviando un pulso de sonido de alta frecuencia desde un sensor y midiendo la cantidad de tiempo que tarda el otro sensor en recibirlo.

LED de vuelo: los LED de vuelo se utilizan generalmente para indicar la dirección en la que vuela el dron. Dos luces rojas parpadeantes indican la parte delantera del dron y las luces verdes parpadeantes indican la parte trasera

Palancas de mando: las palancas de mando se utilizan para controlar el dron al traducir el movimiento físico de las palancas en información que el controlador puede comunicar al dron como direcciones de movimiento.

Tablero de control remoto principal: el tablero de control remoto recupera telemetría útil sobre el dron, como su altitud, ubicación e imágenes de la cámara.

Tablero de la cámara principal: el tablero de la cámara procesa los datos del sensor de imágenes y los motores del cardán para sintetizar imágenes estables

Vulnerabilidades de los UAV

Aunque los UAV se utilizan para una amplia gama de aplicaciones, como cualquier otro dispositivo con un sistema informático a bordo, son vulnerables a una serie de amenazas de ciberseguridad. Algunas de las amenazas de ciberseguridad más comunes con los UAV incluyen:

Acceso no autorizado: los vehículos aéreos no tripulados son vulnerables a personas malintencionadas no autorizadas que pueden interceptar o suplantar las señales inalámbricas utilizadas para controlar el dron. Esto le permite al hacker controlar el dron o robarle información de forma pasiva.

Robo de datos: los UAV están equipados con una amplia variedad de sensores que recopilan activamente información sobre sus entornos, como fotos, videos y lecturas de telemetría. Estos datos pueden ser vulnerables a la intercepción de piratas informáticos que pueden usarlos con fines nefastos.

Denegación de servicio: un ataque más específico que los piratas informáticos pueden emplear para piratear drones es una denegación de servicio. Esto ocurre cuando un pirata informático ejecuta un DOS en el mismo sistema de comunicación inalámbrica del dron, interrumpiendo su capacidad para recibir o transmitir datos.

A medida que se descubren más vulnerabilidades de seguridad con la creciente popularidad de los vehículos aéreos no tripulados, es necesario que los investigadores de seguridad analicen de manera forense los dispositivos con fines maliciosos. Un subcampo dentro de la seguridad cibernética llamado análisis forense se enfoca en recopilar y analizar datos de un ataque con fines de investigación .

Este proceso es útil en escenarios delictivos de la vida real cuando se incauta información digital de un sistema informático y es necesario investigarla. A menudo, la gran mayoría de la información en la máquina no está relacionada con el crimen y debe filtrarse para desglosar los escenarios del crimen.

Existe una amplia gama de aplicaciones ilegales de drones, como lanzamientos de contrabando a áreas no autorizadas, envíos de drogas a través de fronteras extranjeras y vigilancia no solicitada. Como consecuencia de muchos de estos escenarios, el análisis forense digital se utiliza para determinar información como la propiedad del dispositivo y cualquier dato relacionado con el delito.

Un estudio realizado en modelos de drones comunes en varias escenas del crimen demostró que la información como los archivos multimedia en formato de foto o video, los patrones de vuelo, las ubicaciones y la información del propietario eran los más propicios para el éxito de los casos de análisis forense digital realizados por investigadores de las fuerzas del orden. Aunque los investigadores del estudio pudieron filtrar información sobre el delito utilizando técnicas forenses digitales, el estudio indicó que la legislación estatal y federal no ha manejado adecuadamente las regulaciones detrás de la tecnología de drones y, en consecuencia, deja vulnerables a muchas partes interesadas. En general, concluyeron que la falta de herramientas forenses y la estructura universal de drones hicieron necesario desarrollar más métodos de extracción de datos.

Para contribuir a abordar la falta de herramientas forenses de UAV, demostraré cómo creé un script de disección de paquetes para Wireshark usando el lenguaje de programación Lua para encontrar información de red útil durante los escenarios de análisis forense digital. La herramienta es una aplicación de primera mano de las habilidades forenses digitales para recopilar información útil sobre los vehículos aéreos no tripulados que podrían utilizarse durante situaciones de investigación para recopilar más datos relacionados con el delito que tuvo lugar.

¿Qué es la detección y el análisis de paquetes?

La detección de paquetes es el acto de interceptar y examinar paquetes de datos a medida que se transmiten a través de una red específica. Los profesionales de la ciberseguridad utilizan esta técnica para rastrear vulnerabilidades, diagnosticar fallas y el rendimiento de su red o descubrir amenazas.

En una computadora, la tarjeta de interfaz de red (también conocida como NIC) es un componente de hardware que incluye una placa de circuito integrado que permite que la computadora interactúe con las redes y realice la detección de paquetes. La detección más elaborada con fines de ciberseguridad o piratería a menudo requiere que la NIC se ponga en modo promiscuo , lo que permite que la computadora recupere el tráfico de red circundante. Usando un proceso de decodificación, los rastreadores pueden obtener acceso a información codificada almacenada en paquetes de datos a medida que se transportan a través de una red. El olfateo se puede dividir en dos categorías generales: olfateo activo y pasivo .

Olfateo Pasivo

El rastreo pasivo consiste en escuchar solo los paquetes que se envían como tráfico de red. A menudo se utiliza como una técnica de reconocimiento para medir la información pertinente sobre el tráfico y el tipo de datos que se transmiten a través de una red. Esto permite a los profesionales de la seguridad analizar la red en busca de anomalías o actividades sospechosas, como la resolución de problemas de la red (usando el tráfico de la red como una métrica para los problemas de la red) y la optimización del rendimiento mediante la identificación de áreas de congestión.

Olfateo activo

El sniffing activo es una técnica utilizada en aplicaciones de inyección/suplantación de paquetes que pretenden obtener una respuesta de los dispositivos de red. Por ejemplo, un atacante podría enviar un paquete específico para engañar a un dispositivo o aplicación específicos para que respondan con información confidencial. Esto podría usarse para realizar múltiples actividades maliciosas, como orquestar un ataque de intermediario (MiTM) y secuestrar sesiones de red. El sniffing activo es un poco más complicado de detectar que el sniffing pasivo porque fue diseñado para hacerse pasar por el tráfico de red circundante. El sniffing activo se lleva a cabo ingresando intencionalmente paquetes de protocolo de resolución de direcciones (ARP) para sobrecargar la tabla de memoria de dirección de contenido (CAM) del conmutador. Esto conduce a que el tráfico de red legítimo se transporte a diferentes puertos que sirven como base para ataques de suplantación de identidad como ARP Spoofing, ataques de protocolo de configuración dinámica de host (DHCP) y envenenamiento de DNS (sistema de nombres de dominio).

Modelo OSI

El modelo OSI (conocido como interconexión de sistemas abiertos) se utiliza para conceptualizar cómo los componentes dispares de una red se comunican entre sí. El modelo se presenta como un modelo de siete capas que incluye un conjunto de reglas estandarizadas de cómo diferentes dispositivos y programas pueden intercomunicarse a través de la red.



El modelo OSI se puede segmentar en varias capas: Aplicación, Presentación, Sesión, Transporte, Red, Enlace de datos y Física.

Capa fisica
Esto describe las características físicas de la red que es responsable de la conexión física entre dispositivos, como cableado, conectores y señalización. En esta capa, los datos se transfieren a través de bits .

Capa de enlace de datos
En esta capa, los datos se formatean en paquetes y se transmiten a través de la red. La capa de enlace de datos también garantiza que sus datos no contengan errores internos. Los datos se transfieren mediante marcos .

Capa de red
La capa de red maneja cómo se direccionan y envían los paquetes a través de la red al encontrar la forma óptima de enviar el paquete. En esta etapa, las direcciones IP se adjuntan al encabezado del paquete.

Capa de transporte
La capa de transporte es la transición entre la red y las capas de sesión. Esta capa utiliza protocolos de red como UDP y TCP para determinar cómo transmitir datos entre aplicaciones. Los datos transportados en esta capa se denominan segmento .

Capa de sesión
Esta capa define cómo las aplicaciones establecen y mantienen conexiones entre sí.

Capa de presentación
La capa de presentación convierte los datos de los segmentos en un formato más legible por humanos. Esta capa también cubre el cifrado y descifrado de paquetes.

Capa de aplicación
La capa de aplicación es lo que se utiliza para interactuar con los usuarios. Define los protocolos e interfaces que pueden utilizar las aplicaciones para comunicarse con la red.

Desglose de la información del paquete

En redes, un paquete es un pequeño segmento de un mensaje más grande. Cualquier forma de datos que se pasa a través de una red se divide en paquetes. Una vez que pasan a través de la red, esos paquetes son reconstruidos por el dispositivo que los recibe.

Los paquetes enviados a través de una red tienen el encabezado, la carga útil y el final incluidos en su estructura. Usaré el paquete IPv4 como ejemplo para demostrar el tipo de información contenida dentro de un paquete.

1. Encabezado del paquete
El encabezado del paquete es la parte inicial de un paquete. Contiene direccionamiento y otros datos necesarios para que el paquete llegue a su destino. El encabezado de IPv4 contiene 13 campos...

- Versión: número de versión del protocolo de Internet utilizado (es decir, IPv4)

- Longitud de encabezado de Internet (IHL):
longitud de todo el encabezado IP

- Notificación de congestión explícita:
información sobre la información de congestión vista en ruta

- Longitud total:
longitud de todo el paquete IP (incluidos el encabezado y el cuerpo)

- Identificación:
si el paquete IP está fragmentado, cada paquete contendrá un número de identificación correspondiente para identificar el paquete IP original al que pertenecen

- Banderas:
indicación de si el paquete es lo suficientemente grande para ser fragmentado

- Fragment Offset:
posicionamiento del fragmento en el paquete IP

- Time to Live (TTL):
el número de enrutadores que le quedan al paquete para cruzar para evitar bucles en la red

- Protocolo:
la capa de red en el host de destino al que pertenece el paquete (es decir, TCP = 6, UDP = 17 e ICMP = 1)

- Suma de comprobación del encabezado:
valor de suma de comprobación de todo el encabezado utilizado para confirmar que el paquete no contiene ningún error

- Dirección de origen: dirección de 32 bits del remitente (origen) del paquete

- Dirección Destino:
dirección de 32 bits del Receptor (destino) del paquete

- Opciones:
campo opcional que puede contener información como Ruta de registro, Marcas de tiempo, etc.

2. Carga útil
La carga útil de un paquete incluye los datos reales que el paquete pretende llevar a su destino. En el caso del paquete IPV4, la carga útil recibe un relleno de 0 bits para garantizar que el paquete finalice dentro del límite de 32 bits.

3. Tráiler
A veces, los paquetes pueden contener un final para su paquete llamado tráiler. Aunque la estructura del paquete IPV4 no contiene un tráiler, las tramas de Ethernet contienen un tráiler para incluir información que los adaptadores de red en Ethernet necesitan para procesar la trama.

¿Qué es Wireshark?

Wireshark es una herramienta de análisis de paquetes y protocolo de red ampliamente utilizada y de código abierto. Le permite capturar paquetes de red de fuentes como inalámbricas (IEEE.802.11), Bluetooth, Ethernet, anillos de token, etc. Wireshark también incluye una capacidad de filtrado de paquetes que le permite filtrar el flujo de registro de paquetes a medida que se muestran en su pantalla .

Uso de Wireshark para el análisis de paquetes

La interfaz de Wireshark contiene diferentes paneles para mostrar la información del paquete. El panel principal muestra la lista de todos los paquetes que fluyen a través de la red. Si selecciona un paquete individual, deberían aparecer dos paneles cerca de la parte inferior de la pantalla que contienen datos de paquetes más específicos. Los detalles para cada una de las categorías de columnas en el panel principal son los siguientes:

No.: el número de paquete en el archivo de captura

Hora: la hora en que se capturó este paquete después de que se inició el rastreo de paquetes

Fuente: dirección IP y número de puerto del dispositivo emisor

Destino: dirección IP y número de puerto del dispositivo receptor

Protocolo: el tipo de paquete (es decir, TCP, UDP, HTTP, etc.)

Información: más contenido informativo sobre el paquete que variará según el tipo de paquete capturado

Esas son las columnas informativas preconfiguradas en Wireshark, pero hay muchas más columnas disponibles para mostrar en la herramienta, como TTL, suma de verificación, etc., al seleccionar la configuración de "Columnas".

La sección Detalles del paquete de la herramienta le muestra más información interpretable sobre el paquete que varía según el tipo de paquete. El panel inferior, Packet Bytes , muestra el contenido del paquete en formato hexadecimal puro.

Filtros de captura Wireshark

Los filtros de captura en Wireshark limitan los paquetes capturados por el filtro insertado. Si te has dado cuenta, los filtros de captura de Wireshark siguen el mismo formato que tcpdump , que es otra herramienta popular de captura de paquetes de red. La sintaxis de las capturas de paquetes se adhiere a las expresiones de sintaxis de Berkeley Packet Filter (BPF). Algunos filtros de captura comunes para Wireshark incluyen…

Capture el tráfico solo hacia y desde la dirección IP 172.18.5.4:

 host 172.18.5.4

Capture el tráfico hacia o desde un rango de direcciones IP:

 net 192.168.0.0/24

O

 net 192.168.0.0 mask 255.255.255.0

Capture el tráfico de un rango de direcciones IP:

 src net 192.168.0.0/24

O

 src net 192.168.0.0 mask 255.255.255.0

Capturar tráfico DNS (puerto 53):

 port 53

Captura excepto todo el tráfico ARP y DNS:

 port not 53 and not arp

Captura solo paquetes IPv4:

 ip

Captura solo paquetes Ethernet (EAPOL):

 ether proto 0x888e

Filtros de visualización de Wireshark

La función de filtros de visualización en Wireshark le permite reducir el tipo de paquetes que se muestran en la lista de paquetes capturados. Los ejemplos comunes de filtros de visualización incluyen los siguientes:

Filtros basados en protocolos:

Puede filtrar el tráfico de paquetes según el protocolo de red

 http

El ejemplo anterior solo muestra paquetes con el protocolo HTTP

Filtrar paquetes por dirección (es decir, filtrado de direcciones IP):

Puede filtrar paquetes a través de la dirección del remitente o del receptor

 ip.src == xxxx

Lo anterior muestra el tráfico proveniente de una dirección IP específica

Filtros basados en puertos:

Puede filtrar el tráfico de paquetes según el número de puerto que se utiliza

 http

El ejemplo anterior solo muestra paquetes TCP con puerto 80

Filtros basados en el tiempo:

Puede filtrar paquetes según el momento en que fueron capturados

 frame.time >= "YYYY-MM-DD HH:MM:SS" && frame.time <= "YYYY-MM-DD HH:MM:SS

El ejemplo anterior solo muestra paquetes dentro de un rango de tiempo seleccionado

Filtros basados en contenido:

Puede filtrar paquetes según el contenido de los paquetes

 frame contains google

El ejemplo anterior muestra paquetes cuyo contenido contiene la palabra clave "google"

¿Qué es la disección de paquetes?

Mientras que el proceso de análisis de paquetes se utiliza para obtener una visión general de los patrones de tráfico de la red, la disección de paquetes implica un enfoque mucho más limitado. La disección de paquetes se refiere al proceso de disección de paquetes individuales en sus distintos componentes (es decir, encabezados, contenido de carga útil, etc.) para obtener un conocimiento valioso de los procesos de red o del dispositivo que se está monitoreando. Algunas aplicaciones para las que se pueden usar las disecciones de paquetes incluyen análisis de protocolos y análisis forense.

Disección de paquetes con Wireshark

Por suerte para nosotros, Wireshark contiene un conjunto de herramientas integrado para realizar una disección completa de paquetes en cada paquete que se transporta a través de una red. Algunas técnicas para realizar la disección de paquetes incluyen…

Decodificación de protocolo: puede ver los detalles del protocolo para cada paquete expandiendo los detalles de la capa en el panel de detalles del paquete. Esto es útil para decodificar varios protocolos como TCP, UDP, DNS, etc.

Secuencias TCP: Wireshark también contiene una función que muestra la secuencia TCP de todos los paquetes que fluyen a través de una conexión TCP. Para usar esta función, seleccione un paquete que pertenezca a una conexión TCP, haga clic con el botón derecho en el paquete y seleccione "Seguir > Flujo TCP".

Codificación por colores: también puede visualizar paquetes en función de criterios específicos, como la longitud del paquete o el tipo de protocolo. Para ver esta función, vaya a "Ver" y haga clic en "Reglas de color".

Gráficos de flujo: Wireshark tiene una función que muestra un gráfico de flujo que muestra los detalles de tiempo y secuencia de un paquete entre dos máquinas. Para configurar un gráfico de flujo, vaya a “Filtro de conservación” y seleccione la opción “TCP”. Esto crea un filtro que muestra todos los paquetes que pasan entre dos máquinas. Luego, seleccione "Estadísticas" y "Gráficos de flujo TCP" para crear el gráfico de flujo

Disección de paquetes para análisis de protocolos

La disección de paquetes se puede aplicar para analizar qué tipos de protocolos de red se utilizan y cómo se utilizan. Para probar el análisis de protocolos con Wireshark, comience capturando paquetes con su interfaz de red seleccionada. Luego, a medida que se capturan los paquetes, deben transmitir una variedad de protocolos como HTTP (puerto 80), HTTPS (puerto 443), SSH (puerto 22) y SNTMP, etc. Usemos HTTP para nuestro ejemplo de disección de paquetes. Comience seleccionando un paquete con el protocolo HTTP asignado como se muestra a continuación filtrando con la palabra clave http...



Una vez seleccionado el paquete, expanda el menú Protocolo de control de transmisión (TCP) para ver la información relevante para el paquete.



Una vez que se expanden los detalles del paquete, puede analizar diferentes campos del protocolo, como las direcciones IP de origen y destino, los puertos de origen y destino, el método HTTP utilizado (GET, POST, DELETE, etc.) y el código de respuesta HTTP.


Disección de paquetes para medicina forense

La disección de paquetes también se puede utilizar para el análisis forense digital con el fin de extraer información detrás de incidentes de red particulares. Por ejemplo, imagine una situación en la que un pirata informático envía información confidencial a través de su red a un servidor remoto. Podemos usar filtros de visualización en Wireshark para aislar el tráfico que llega a la máquina del pirata informático utilizando la dirección IP del dispositivo del pirata informático y la dirección IP del servidor remoto. Luego, podemos usar las herramientas de disección de paquetes que ofrece Wireshark, como la función "Seguir flujo TCP" para reconstruir el flujo de datos TCP entre el hacker y el servidor remoto. Al usar esta información, puede revelar información oculta que el pirata informático envió al servidor remoto, como la transferencia de archivos o imágenes maliciosos. Esta aplicación de disección de paquetes también se puede aplicar para analizar el tráfico de la red y detectar cualquier actividad delictiva.

Drones DJI de ingeniería inversa

La ingeniería inversa es el proceso de deconstruir y analizar un sistema para comprender cómo funciona "bajo el capó" y extraer información pertinente de él. Este proceso a menudo se realiza a través de un proceso iterativo que deconstruye aspectos específicos de un sistema, analiza sus especificaciones técnicas y su código, y ejecuta pruebas específicas para examinar sus resultados. En cuanto al caso de la piratería de UAV, podemos aplicar principios de ingeniería inversa para analizar el software y el firmware de un dron, extraer información de telemetría e identificar vulnerabilidades para explotar. Para este experimento de investigación, decidí aplicar ingeniería inversa al DJI Mini 2, un dron pequeño y compacto diseñado para uso recreativo desarrollado por una popular compañía de drones llamada DJI.


Configuración de hombre en el medio

Dado que las escuchas pasivas no devuelven ningún resultado de ingeniería inversa, en su lugar utilicé una configuración de red artificial y fácil de escuchar para permitir que la comunicación inalámbrica entre el dron y el operador sea inspeccionable e interceptable siguiendo la configuración a continuación:

a) Drone: el hecho inicializa el proceso iniciando un punto de acceso utilizado para la comunicación directa con sus pares de red

b) MITM AP: establecemos una segunda red virtual con nuestra máquina enmascarada como el AP para el cliente móvil

c) Cliente MITM: el cliente MITM se conecta directamente con el dron reenviando las redes del MITM AP al dron y viceversa

d) Máquina MITM: la máquina MITM es el dispositivo utilizado para espiar conectando a través de NAT (Network Address Translation) los MITM AP virtuales con la NIC interna del cliente MITM

e) Operador: el operador es el dispositivo móvil que ejecuta la aplicación DJI que se conecta vía Wi-Fi al representante del dron (MITM-AP)

Configuración del punto de acceso

Para configurar el MITM AP, utilicé el create_ap comando para crear un AP virtual sobre la línea de comando en mi máquina.

 sudo create_ap wlan0 wlan0 Operator 12345678 -w 2 -c 2 -m nat --freq-band 2.4 --country US

Este comando fue diseñado para eliminar la cantidad de perturbaciones entre la conexión enfocándose en la frecuencia de 2.4GHz y estableciendo los siguientes parámetros:

 -w 2
WPA2-PSK en modo de cifrado CCMP

 -c 2
uso de canal desocupado arbitrario y estático

 -m nat
NAT para conectarse entre AP virtual y NIC físico

 --freq-band 2.4
seleccionando solo la banda de 2.4GHz

 --country US
poner el código de país correcto para cumplir con las regulaciones locales

Espionaje de intercomunicación

Para escuchar a escondidas, utilicé la herramienta de línea de comandos para optimizar el rendimiento de la red MITM. Con tcpdump, los paquetes de red capturados se almacenarán dentro de un archivo PCAP correspondiente que luego puede ser analizado por una serie de programas de análisis de red. También implementé filtros adicionales para reducir el rango de la salida capturada para que solo consista en paquetes de red relevantes entre el dron y la máquina.

 sudo tcpdump --interface=ap0 -n udp host 192.168.2.1 -w /tmp/dumps/capture.pcap

 -n
evita las resoluciones DNS

 udp
ignora cualquier paquete TCP

 host 192.168.2.1
asegura que los paquetes mostrados estén relacionados con drones

Especificaciones de investigación

Para realizar una investigación forense digital en el DJI Mini 2, traté de aplicar ingeniería inversa al protocolo Wi-Fi de DJI analizando los paquetes de red enviados por el dron usando Wireshark. Para determinar la estructura de protocolo exacta de los paquetes transmitidos por el dron, utilicé un razonamiento de precisión de bit para clasificar cada bit individual. A lo largo del proceso, encontré que los siguientes predicados de filtro en Wireshark son los más útiles:

 !dns && !mdns && !icmp
dado que solo los paquetes de red a nivel de aplicación son relevantes para este proceso, podemos excluir los protocolos DNS, Protocolo de mensajes de control de Internet (ICMP) y DNS de multidifusión (MDNS) de nuestra búsqueda.

 ip.src == 192.168.2.1
La dirección IP 192.168.2.1 representa la dirección IP del dron. Aquí especificamos el origen y el destino a filtrar por esa IP.

 data.len == 1472
En este ejemplo, solo los paquetes con una longitud de 1472 bytes se incluyen en la vista de resultados que muestra paquetes de drones con ese tamaño de carga útil exacto.

 data.data[0] == 0x00
esto compara el valor hexadecimal estático con el contenido de la carga útil del índice inicial. Esto es útil porque la inspección de paquetes en pleno vuelo se centra en los cambios relacionados entre el protocolo y las instrucciones de control del dron del operador.

Información del paquete

Con los paquetes obtenidos con Wireshark, me concentré en la carga útil desde el índice 0x2A hasta la longitud de la trama de Ethernet. Aunque el paquete completo incluye información, los bytes de datos desde 0x2A hasta el final son suficientes para fines de ingeniería inversa. Incluí la tabla de capas del modelo OSI de Ethernet a continuación como referencia:

Cifrado de carga útil

Aunque todo el flujo de comunicación está cifrado, el flujo de datos descifrado aún puede comprometer la integridad del cifrado. Un método para descifrar información con sistemas UAV es tener una comparación lado a lado entre múltiples cargas útiles para identificar patrones. El modo de libro de códigos electrónico (ECB) produce una secuencia de datos deterministas aplicando la misma permutación pseudoaleatoria a cada bloque de texto sin formato para crear bloques repetidos de texto cifrado. Podemos aplicar esto en nuestro proceso de ingeniería inversa para posiblemente encontrar una carga útil pseudoaleatoria o dos cargas útiles idénticas dentro de los paquetes UDP. Aunque no pude encontrar cargas útiles idénticas, había muchas que eran muy similares entre sí. Por ejemplo, las imágenes a continuación muestran dos paquetes en los que solo difieren 5 bytes. Las dos cargas útiles son muy similares e incluso indican un incremento de uno que es evidente de un flujo de datos sin cifrar.

Razonamiento deductivo

El enfoque principal que utilicé para la ingeniería inversa del DJI Mini 2 fue aplicar un razonamiento deductivo para comparar las cargas útiles en función de las entradas del operador correlacionadas. Usando las instrucciones de control directo del dron (es decir, aterrizaje, movimiento, despegue, etc.), obligué al operador a señalar el paquete de red representativo. Las instrucciones de control eran capaces de señalar el tipo de comando y el contenido de la carga útil. Luego, los paquetes se compararon entre sí usando la técnica de comparación binaria antes mencionada, revelando la estructura de comando y los valores de los parámetros. El análisis de paquetes reveló un protocolo de alto tráfico que consistía principalmente en paquetes de drones a operadores que dependían de la Unidad de transmisión máxima (MTU).

Razonamiento con precisión de bits

Con el fin de obtener más información sobre los datos almacenados en los paquetes transmitidos, se utilizó una técnica llamada razonamiento preciso de bits para el análisis de bits dentro de las cargas útiles de 56 bytes para hacer juicios específicos sobre la propiedad de cada paquete. Para simplificar el proceso, se usaron clústeres para agregar cargas útiles para que cada una tuviera exactamente la misma longitud. Recomiendo encarecidamente leer este artículo de investigación que profundiza en el método de precisión de bit para drones de ingeniería inversa para aprender más sobre esta técnica. La siguiente tabla a continuación muestra una descripción general de la información que se pudo extraer utilizando un razonamiento de precisión de bit.

Disección de paquetes DJI con Wireshark

A lo largo de este proceso de investigación, aprendí que la disección de paquetes para reconocimiento y para análisis forense digital/ingeniería inversa requieren enfoques completamente dispares. Afortunadamente, la disección de paquetes mediante reconocimiento pasivo y un disector de comunicación de red resultó muy útil para analizar las interfaces de comunicación del DJI Mini 2.

Para comenzar con el proceso de disección de paquetes, descargué los archivos PCAP enumerados en este repositorio de volcados de paquetes de comunicación de DJI, que incluye un amplio registro de datos de comunicación para todo tipo de drones de DJI que utilizan Wireshark. Una vez que se descargaron los archivos PCAP, los analicé usando Wireshark usando diferentes disectores.

Análisis de formatos de información

Antes de profundizar en el proceso de disección de paquetes específico de los volcados de paquetes de DJI, vale la pena mencionar todos los

Comunicación UART: UART significa Universal Asynchronous Receiver-Transmitter es un protocolo serial comúnmente utilizado para transmitir información entre dispositivos electrónicos que utilizan el flujo asíncrono de bits de datos secuencialmente a través de una sola línea de comunicación.

DUML Streams: DUML son las siglas de DJI Universal Markup Language, que describe el protocolo de fuente cercana para la comunicación DJI. Se utiliza para controlar la configuración interna del dispositivo o para iniciar actualizaciones de firmware

Archivos KML: también conocidos como Keyhole Markup Language, estos son archivos XML que se utilizan de memoria para mostrar específicamente datos geográficos en el software de mapas. Los archivos KML contienen datos sobre ubicaciones específicas, formas, rutas y otras características geográficas

Registros de vuelo DAT: DAT significa Cinta de audio digital. Se refieren a los datos de vuelo grabados almacenados en cintas de audio digital. Los archivos DAT incluyen información de vuelo pertinente para su análisis

El archivo PCAP dentro del repositorio de volcados de paquetes de DJI contiene un gran volcado de registros de comunicación de varios hardware de DJI. Este almacenamiento de registros de comunicación nos permite descifrar las comunicaciones internas de los protocolos junto con un buen punto de referencia para investigar problemas de hardware dentro del hardware. Por ejemplo, el primer archivo de registro p3x_ofdm_to_center_run1 contiene un volcado de comunicación del volcado UART de la placa receptora DJI P3X. El volcado de datos presenta una comunicación bilateral entre una MCU (unidad de microcontrolador) OFDM (multiplexación por división de frecuencia ortogonal) y un FC (controlador de vuelo) en el dron mediante un cable plano y el programa comm_serial2pcap.py .

Configuración de Wireshark

Para configurar una disección de comunicación fundamental de DJI, utilicé los archivos de disección de comunicación enumerados en las herramientas de firmware de DJI. Las herramientas de disección de comunicación, proporcionan las siguientes funcionalidades:

- Mostrar campos dentro de paquetes DUML capturados desde una fuente de drones

- Mostrar campos dentro de paquetes almacenados en vuelo binario

- Grabar archivos DAT

- Visualice vuelos a través de la función de exportación KML

Las herramientas también le permiten analizar los comandos de protocolo a través de las siguientes opciones:

- Archivos PCAP basados en secuencias DUML

- Archivos PCAP que contienen volcados de comunicación USB/Ethernet dentro de cargas útiles DUML integradas

- Archivos PCAP basados en registros de vuelo DAT

Para comenzar a configurar su entorno, descargue todos los archivos .lua que se enumeran en este enlace . Luego, dentro de Wireshark, abra el menú Acerca de Wireshark y vaya a la pestaña Carpetas .

Luego, haga clic en la referencia de la ruta del archivo a Personal Lua Plugins y pegue todo el contenido del archivo .

Una vez que esté configurado, actualice Wireshark con el comando Ctrl+Shift+L para cargar todas las herramientas de disección de comunicación. Una vez que esté cargado, abra

 Preferences -> Protocols -> DLT_USER -> Edit
y haz las asignaciones de acuerdo a la siguiente imagen:

Después de inicializar la tabla DLT, vaya a

 Preferences -> Appearance -> Columns
y ajuste la configuración para mostrar la información de protocolo que desee. El siguiente es un ejemplo de una forma en que se puede configurar:

Disección de comunicación

De las herramientas de disección de comunicación podemos extraer la siguiente información de los protocolos de comunicación de DJI:

Estructura del archivo de firmware: el disector puede delinear información sobre la estructura de los archivos de firmware como encabezados, secciones y secciones de datos

Componentes de firmware: las herramientas también pueden extraer componentes de firmware individuales como el cargador de arranque, el firmware de control de vuelo, el firmware de la cámara, el firmware del cardán, etc.

Parámetros de configuración: también se pueden consultar los parámetros de configuración que proporcionan información de configuración para componentes como la cámara, el control de vuelo y los sensores.

Scripts: fragmentos de código y binarios ejecutables también se pueden descubrir dentro del archivo de firmware

Cifrado: según la situación, el disector también puede descifrar y cifrar partes de archivos de firmware que revelan información sobre el proceso de cifrado del firmware.

Contenidos del sistema de archivos: si un archivo de firmware incluye un sistema de archivos, las herramientas también pueden extraer y analizar contenidos dentro de ese sistema de archivos

Profundizando en los disectores Wireshark

En Wireshark, un disector es responsable de interpretar y decodificar los protocolos de red. Los disectores son útiles porque analizan los paquetes de red capturados y extraen información útil de ellos, como la estructura del protocolo, los campos y las reglas de codificación, y los muestran en un formato legible por humanos.

Wireshark también le permite desarrollar sus propios disectores personalizados utilizando un lenguaje de programación llamado Lua . Aunque Wireshark se escribió en C y los disectores para el programa generalmente se escriben en C, Wireshark también permite que los disectores se escriban en el lenguaje de programación Lua para que la curva de aprendizaje sea menos pronunciada para las personas que son nuevas en el desarrollo. Lua es un lenguaje de programación multiparadigma, procedimental y funcional con características integradas orientadas a objetos. Aunque elegir Lua como lenguaje para el desarrollo de disectores compromete la velocidad, es favorable en la mayoría de las circunstancias debido a su peso ligero y facilidad de aprendizaje.

Introducción básica a Lua

Como mencioné antes, Lua presenta una sintaxis de código intuitiva y simple, teniendo en cuenta la velocidad, la portabilidad y la integración con otros programas, lo que facilita su uso sin sacrificar mucha funcionalidad y rendimiento. Aquí hay algunos fragmentos de código básicos que describen las características fundamentales del lenguaje:

Variables y Operaciones

 local a = 25
local b = 5
local result = a + b print (result) -- Output: 30

Declaraciones condicionales

 local temperature = 15
local heatSetting = 0
if temperature < 0 then heatSetting = 3
elseif temperature <= 20 then heatSetting = 2
else heatSetting = 1 end
print (heatSetting) -- Output: 2

Bucles

 -- While Loops
local i = 0
while i < 10 do 
 i = i + 1
end
print (i) -- Output: 10
 -- For Loops
local i = 0
-- i = first, last, delta
for i = 0 , 10 , 1 do
  print (i) end
print (i) -- Output: 10

Mesas

 local new_table = {} -- Table value assignment
new_table[ 20 ] = 10
new_table[ "x" ] = "test"
ax = 10  

Funciones

 function add (arg1, arg2)
    return arg1 + arg2 end
local added_number = add( 2 , 3 ) print (added_number) -- Output: 5

Notas resumidas sobre Lua

Lua está tipado dinámicamente

El alcance se especifica como local o global. Global es el predeterminado

Los puntos y comas no son necesarios, lo que hace que los espacios en blanco tengan más valor

-- denota un comentario

i = i + 1 usado para incremento variable

~= usado en lugar de !=

Los tipos son: cadena, número, booleano, nil, función, datos de usuario, hilo y tabla

Nil se usa para un no valor

En condicionales: nil y false son falsos, el resto son verdaderos.

La única estructura de datos de Lua es la tabla. Tables implementa arreglos asociativos. Las matrices asociativas se pueden indexar tanto por números como por otros tipos, como cadenas. Son dinámicos ya menudo llamados objetos.

Disector de configuración con Wireshark

Para configurar el desarrollo de disector con secuencias de comandos Lua en Wireshark, haga clic en

 Help -> About Wireshark -> Folders
. Desde allí, haga clic en la referencia de la carpeta Personal Lua Plugins o Global Lua Plugins. La ruta debería parecerse a C:\Program Files\Wireshark\plugins\2.4.2 en Windows . Para crear un disector, inicialice un archivo dentro de ese directorio como
 example.lua
. El script se aplicará automáticamente una vez que se vuelva a cargar Wireshark. Puede volver a cargar Wireshark reiniciando la aplicación o recargando todos los scripts de Lua usando Ctrl+Shift+L .

Configuración de un protocolo

Ahora que tiene todo configurado, lo guiaré a través de un script disector rudimentario que extrae y muestra información sobre un protocolo personalizado.

 -- Create a new protocol for our custom protocol
local custom_protocol = Proto( "CustomProtocol" , "Custom Protocol" ) -- Define the fields of our custom protocol
local field1 = ProtoField.uint8( "custom_protocol.field1" , "Field 1" , base.DEC) local field2 = ProtoField. string ( "custom_protocol.field2" , "Field 2" ) -- Register the fields to the custom protocol
custom_protocol.fields = { field1, field2 } -- Create a function to dissect the packets of our custom protocol
function custom_protocol.dissector (buffer, pinfo, tree)
  -- Create a subtree for our custom protocol in the Wireshark GUI
  local subtree = tree:add(custom_protocol, buffer(), "Custom Protocol Data" )  -- Extract and display the values of Field 1 and Field 2
  local field1_value = buffer( 0 , 1 ):uint() subtree:add(field1, buffer( 0 , 1 )):append_text( " (Value: " .. field1_value .. ")" )  local field2_value = buffer( 1 , 5 ): string () subtree:add(field2, buffer( 1 , 5 )):append_text( " (Value: " .. field2_value .. ")" ) end
-- Register our custom protocol as a dissector in Wireshark
local udp_port = DissectorTable.get( "udp.port" ) udp_port:add( 12345 , custom_protocol)

- el código comienza inicializando un protocolo personalizado usando el objeto Proto llamado

 CustomProtocol


se inicializa una tabla de campos para el protocolo que contiene dos campos personalizados:
 field1
y
 field2


se inicializa la función disector para el protocolo, que se llama una vez por cada paquete que tiene el tipo de protocolo personalizado. La función toma los parámetros
 buffer
,
 pinfo
, y
 tree
. el búfer incluye el búfer del paquete y el objeto Tvb , pinfo contiene las columnas de la lista de paquetes y el árbol es la raíz del árbol

- Dentro de la función disector, creamos un subárbol dentro de la sección Detalles del paquete Wireshark que muestra nuestro protocolo personalizado como un campo

- Dentro de la sección de vista de árbol, mostramos la información del paquete para cada uno de los campos respectivos dentro del protocolo personalizado

- Por último, asignamos un protocolo a un puerto. En este caso, el puerto utilizado es

 12345
para UDP

Conclusión

En general, al usar Wireshark junto con algunos disectores de comunicación basados en DJI, pudimos revelar información confidencial transmitida por drones DJI a través de sus protocolos de comunicación. Espero que este extenso proceso de investigación haya aclarado algunas técnicas de ingeniería inversa que podría aplicar durante su proceso de ciberseguridad para posiblemente encontrar vulnerabilidades dentro de los sistemas existentes. Además, espero que este informe demuestre que, aunque la piratería con drones puede ser un poco tediosa, no es imposible. Es importante seguir ampliando los límites de lo que se sabe actualmente sobre un sistema para resaltar las fallas existentes antes de que los malos actores las noten. En este caso, revelamos que los protocolos de drones, incluso para fabricantes de marcas grandes y confiables como DJI, siguen siendo vulnerables a la interceptación de datos y la ingeniería inversa. Al tener esto en cuenta, se pueden tomar medidas constructivas para mitigar estas vulnerabilidades existentes y solidificar la seguridad de los canales de comunicación de drones.

También publicado aquí.