Analizando un filtro para WhatsApp

Fecha: 7 y 8 de agosto del 2023

 

Escenario

 

Hace unas semanas volviendo de un viaje, en el avión ofrecían WiFi de cortesía que sólo estaba limitado

al envío de mensajes de WhatsApp, sólo de texto, y bloqueaba el envío de fotos, audios, etc…

Obviamente para poder ahorrar el limitado ancho de banda entre el avión e internet.

 

 

 

Lo primero que pensé fue “es una firma pre armada en un Forti, un Palo Alto, o un Checkpoint” , aunque luego

medité “pero que hace realmente esa firma ?” debo replicarla de alguna manera en un lab.

Este escenario no analiza cómo funciona WhatsApp, sino que intenta reproducir el filtro para lograr tal limitación.

 

 

Se armó una maqueta con un AP y un switch con port mirroring para enviar todo a Wireshark y poder analizar

qué sucede en cada tipo de conexión, con mensajes de texto o multimedia.

Como el tráfico de WhatsApp esta encriptado de extremo a extremo, descarto cualquier análisis en el payload.

 

 

 

Detalle del mail de confirmaci n del servicio.

 

 

1.- Prueba inicial con texto:

 

La primer captura que nos interesa es la resolución DNS.

 

 

Frame 1: 74 bytes on wire (592 bits), 74 bytes captured (592 bits) on interface

Ethernet II, Src: Routerbo_a4:2e:22 (d4:ca:6d:a4:2e:22), Dst: Shenzhen_2c:ea:50 (30:df:8d:2c:ea:50)

Internet Protocol Version 4, Src: 192.168.1.117, Dst: 8.8.8.8

User Datagram Protocol, Src Port: 33336, Dst Port: 53

Domain Name System (query)

Transaction ID: 0x5ff8

Flags: 0x0100 Standard query

Questions: 1

Answer RRs: 0

Authority RRs: 0

Additional RRs: 0

Queries

g.whatsapp.net: type A, class IN

[Response In: 2]

 

Frame 2: 113 bytes on wire (904 bits), 113 bytes captured (904 bits) on interface

Ethernet II, Src: Shenzhen_2c:ea:50 (30:df:8d:2c:ea:50), Dst: Routerbo_a4:2e:22 (d4:ca:6d:a4:2e:22)

Internet Protocol Version 4, Src: 8.8.8.8, Dst: 192.168.1.117

User Datagram Protocol, Src Port: 53, Dst Port: 33336

Domain Name System (response)

Transaction ID: 0x5ff8

Flags: 0x8180 Standard query response, No error

Questions: 1

Answer RRs: 2

Authority RRs: 0

Additional RRs: 0

Queries

g.whatsapp.net: type A, class IN

Answers

g.whatsapp.net: type CNAME, class IN, cname chat.cdn.whatsapp.net

chat.cdn.whatsapp.net: type A, class IN, addr 31.13.94.54

[Request In: 1]

[Time: 0.039853000 seconds]

 

Ahora sabemos con cual IP podr amos llegar a lidiar.

 

2.- Prueba con env o de una foto:

 

Primero vemos que en la captura aparece otro actor con la IP 31.13.94.52 (la IP del DNS server en esta prueba es el router

de internet que hace de relay DNS, otras pruebas las hicimos con el de Google).

 

 

2.1.- Detalle de la resolución de nombres de servidor de contenidos multimedia (MMX):

.

 

Frame 1: 79 bytes on wire (632 bits), 79 bytes captured (632 bits)

Ethernet II, Src: 6e:07:fe:09:9c:cc (6e:07:fe:09:9c:cc), Dst: 30:df:8d:2c:ea:50 (30:df:8d:2c:ea:50)

Internet Protocol Version 4, Src: 192.168.1.117, Dst: 192.168.1.254

User Datagram Protocol, Src Port: 64137, Dst Port: 53

Domain Name System (query)

Transaction ID: 0xa353

Flags: 0x0100 Standard query

Questions: 1

Answer RRs: 0

Authority RRs: 0

Additional RRs: 0

Queries

static.whatsapp.net: type A, class IN

[Response In: 2]

 

Frame 2: 120 bytes on wire (960 bits), 120 bytes captured (960 bits)

Ethernet II, Src: 30:df:8d :2c:ea:50 (30:df:8d:2c:ea:50), Dst: 6e:07:fe:09:9c:cc (6e:07:fe:09:9c:cc)

Internet Protocol Version 4, Src: 192.168.1.254, Dst: 192.168.1.117

User Datagram Protocol, Src Port: 53, Dst Port: 64137

Domain Name System (response)

Transaction ID: 0xa353

Flags: 0x8180 Standard query response, No error

Questions: 1

Answer RRs: 2

Authority RRs: 0

Additional RRs: 0

Queries

static.whatsapp.net: type A, class IN

Answers

static.whatsapp.net: type CNAME, class IN, cname mmx-ds.cdn.whatsapp.net

mmx-ds.cdn.whatsapp.net: type A, class IN, addr 31.13.94.52

[Request In: 1]

[Time: 0.009001000 seconds]

 

 

2.2.- Detalle del flujo de las comunicaciones para el envío de una foto:

 

Por la cantidad/vol men de tr fico de la nueva sesi n TCP a la IP 31.13.94.52 estimo (sin analizar

demasiado) que es sólo la apertura de un canal de señalización para luego transferir por la IP

original 31.13.94.54 vía el port TCP 5222.

---resumido/omitido---

 

 

3.- Probamos bloqueando la IP 31.13.94.52:

 

Para este fin creamos una ACL bastante básica y la aplicamos al port físico Fa0/1 que es donde se conecta el AP.

 

Switch#conf t

Enter configuration commands, one per line. End with CNTL/Z.

Switch(config)#ip access-list extended FILTRO

Switch(config-acl)#deny ip 192.168.1.0 0.0.0.255 host 31.13.94.52 (bloqueamos acceso a mmx-ds.cdn.whatsapp.net)

Switch(config-acl)#permit ip 192.168.1.0 0.0.0.255 host 31.13.94.54 (permitimos acceso a chat.cdn.whatsapp.net)

Switch(config-acl)#permit udp 192.168.1.0 0.0.0.255 host 8.8.8.8 eq domain (permitimos consultas DNS)

Switch(config-acl)#exit (por default se bloquea el resto)

Switch(config)#

Switch(config)#int fa0/1

Switch(config-if)#ip access-group FILTRO in (la asociamos la ACL al port (PACL))

Switch(config-if)#end

Switch#

 

Switch#sh access-lists FILTRO

Extended IP access list FILTRO

10 deny ip 192.168.1.0 0.0.0.255 host 31.13.94.52 (no vemos matches por otros motivos, pero bloquea)

20 permit ip 192.168.1.0 0.0.0.255 host 31.13.94.54

30 permit udp 192.168.1.0 0.0.0.255 host 8.8.8.8 eq domain

Switch#

 

3.1- Pruebas con un audio:

 

Podemos ver que intenta y al rato queda en modo reenviar.

 

3.2.- Pruebas con una foto:

 

 

3.3.- Retiramos la ACL:

 

Switch#conf t

Enter configuration commands, one per line. End with CNTL/Z.

Switch(config)#ip access-list extended FILTRO

Switch(config)#int fa0/1

Switch(config-if)#no ip access-group FILTRO in

Switch(config-if)#

 

Podemos ver que el audio y la foto finalmente se envían.

 

 

 

4.- Resumen:

 

Se pudo lograr el objetivo del laboratorio, que era emular una posible firma o regla fix de un firewall, sin entrar en detalles

de cómo funciona realmente WhatsApp, ni como evitar este tipo de restricciones en los hotspots, etc…

Básicamente se bloquea una IP que es el posible gateway que negocia los envíos y recepciones multimedia.

 

 

 

(2023) Things to meditate on a (lysergic) flight

Rosario, Argentina