SignalTrace: como o cluster de RF vence a randomização de MAC

SignalTrace: como o cluster de RF vence a randomização de MAC

Quando vi essa notícia do SignalTrace no Sapo.pt, minha cabeça de dev imediatamente foi para os bastidores técnicos: como diabos você associa sinais Wi-Fi e Bluetooth a uma matrícula de carro? E, mais importante — como isso continua funcionando quando iOS e Android randomizam MAC address há anos? Vou destrinchar isso aqui do ponto de vista de quem programa, não do ângulo sensacionalista de “Big Brother na sua porta”.

O que é o SignalTrace, afinal — e por que isso importa para quem desenvolve

Segundo a reportagem do Sapo.pt, o SignalTrace é uma tecnologia da Leonardo que não lê matrículas — ele rastreia sinais. Ele captura emissões Wi-Fi, Bluetooth e outras frequências dos dispositivos que viajam juntos no veículo, criando algo que a empresa chama de “impressão digital eletrônica”. Quando combinado com uma câmera ALPR (Automatic License Plate Recognition), o sistema correlaciona esse cluster de sinais com a matrícula, hora e localização.

Na prática, isso significa: mesmo que você apague a matrícula ou use placa falsa, se a polícia já capturou o “perfume eletrônico” do seu carro uma vez, ela consegue te rastrear de novo. É um vetor de surveillance que muda completamente o jogo do anonimato veicular.

A arquitetura técnica por trás do rastreamento

Vamos ao que interessa. O sistema opera em três camadas:

  1. Captura de sinais: sniffer de RF operando em 2.4 GHz e 5 GHz (Wi-Fi), 2.4 GHz (BLE), e bandas adjacentes. Não precisa estar pareado — basta o dispositivo estar emitindo probes ou beacons.
  2. Clusterização: algoritmos de proximidade temporal e RSSI (Received Signal Strength Indicator) agrupam dispositivos que estão juntos fisicamente. Celular + fone Bluetooth + smartwatch no mesmo carro = assinatura única.
  3. Correlação ALPR: a câmera lê a placa, e o cluster de sinais vira o identificador persistente. Mesmo que o carro troque de placa, o “perfume” dos dispositivos continua.

Por que a randomização de MAC não te protege (spoiler: nunca protegeu 100%)

Quando anunciaram iOS 14 e Android 10 com MAC randomization, a comunidade celebrou. Mas devs e pesquisadores de segurança já sabiam: randomização é ofuscação, não anonimato. O SignalTrace explora exatamente essa falha conceitual.

Funciona assim: mesmo com MAC random, o dispositivo ainda transmite:

  • SSIDs probe request (com nome da rede que você conectou antes — sua “CasaWiFi” no Starbucks conta uma história)
  • BLE advertisements com UUIDs de serviço (seu smartwatch transmite o mesmo UUID toda vez)
  • Padrões de timing e intensidade de sinal consistentes dentro do mesmo veículo

O MAC aleatório muda. O cluster de comportamento não. Quando você combina 5+ dispositivos no mesmo carro, com o mesmo padrão de movimento, a “impressão digital” se mantém única mesmo com randomização ativa. É o mesmo princípio de browser fingerprinting, mas aplicado ao espectro de RF.

Na Prática: simulando um sniffer BLE/Wi-Fi em Python

Quero mostrar como isso é tecnicamente viável. Não estou incentivando uso ilegal — isso é pra você entender o vetor de ataque e defender contra ele. O exemplo abaixo usa Scapy para capturar beacons Wi-Fi próximos:

#!/usr/bin/env python3
"""
Protótipo educacional: captura de probes Wi-Fi e beacons BLE
para demonstrar como um cluster de dispositivos é identificável.
Requer: scapy, bleak (ou rodar em Linux com monitor mode)
"""

from scapy.all import *
from collections import defaultdict
from datetime import datetime
import hashlib

# Janela de tempo para agrupar dispositivos "juntos"
CLUSTER_WINDOW_SEC = 30
MIN_SIGNAL_STRENGTH = -80  # dBm

captured_devices = defaultdict(list)

def packet_handler(pkt):
    if not pkt.haslayer(Dot11):
        return

    # Captura probes Wi-Fi (sem precisar estar conectado)
    if pkt.haslayer(Dot11ProbeReq):
        mac = pkt[Dot11].addr2
        ssid = pkt[Dot11ProbeReq].info.decode('utf-8', errors='ignore')
        rssi = pkt.dBm_AntSignal if hasattr(pkt, 'dBm_AntSignal') else -100
        timestamp = datetime.now()

        # MAC randomizado? Mesmo assim, agrupamos por SSID + timing
        fingerprint = hashlib.md5(
            f"{ssid}_{rssi}_{timestamp.minute}".encode()
        ).hexdigest()[:8]

        captured_devices[fingerprint].append({
            'mac': mac,
            'ssid': ssid,
            'rssi': rssi,
            'time': timestamp
        })

def cluster_devices():
    """Agrupa dispositivos que aparecem juntos na mesma janela de tempo."""
    clusters = defaultdict(set)
    for fp, sightings in captured_devices.items():
        if sightings and sightings[0]['rssi'] > MIN_SIGNAL_STRENGTH:
            clusters[len(clusters) + 1].add(sightings[0]['ssid'])
    return clusters

# Em produção real: usar iface em monitor mode
# sniff(iface="wlan0mon", prn=packet_handler, store=False)
print("Execute em interface monitor mode com permissão legal.")

Esse snippet é didático. Em ambiente real, o SignalTrace da Leonardo roda em hardware dedicado (provavelmente baseado em SDR tipo USRP ou Ettus) com pipelines em C++ para processar milhões de pacotes por segundo. Mas a lógica de clusterização é exatamente essa.

Comparação com alternativas do mercado

Sistema Abordagem Persiste após randomização?
Flock Safety (ALPR puro) Só placa Não
Stingrays (IMSI catchers) Celular 4G/5G Sim (via IMSI)
SignalTrace (Leonardo) RF cluster + ALPR Sim (via cluster fingerprint)
AirTag/Stalkerware detection Find My network da Apple Depende do ecossistema

Erros Comuns que devs cometem ao analisar surveillance tech

Vejo muita gente cometendo esses equívocos quando o tema é vigilância digital:

1. Achar que VPN ou Tor te protegem de surveillance física

VPN protege seu tráfego de rede. SignalTrace te rastreia no mundo físico baseado em emissões de RF dos seus devices. São camadas completamente diferentes. Desligar Wi-Fi e Bluetooth no carro? Ajuda, mas não resolve: seu celular continua buscando torres celulares, e triangulation 4G/5G é trivial para quem tem acesso legal aos dados da operadora (ou para quem tem um Stingray).

2. Confundir MAC randomization com anonimato

Já falei acima, mas vale repetir: randomização combate rastreamento trivial. Adversários com capacidade state-level (NSA, GCHQ, e agora qualquer departamento de polícia com budget) reconstroem o perfil via metadados. É a eterna guerra entre cifragem e análise de tráfego.

3. Ignorar o vetor “collar do cachorro”

A reportagem mencionou coleira de cachorro. Isso parece piada, mas é genial do ponto de vista do surveillance: o cachorro passeia com você, então carrega seu sinal. Quem pensa em desligar Wi-Fi do carro não pensa em desligar o AirTag da coleira do labrador. Tem implicações forenses absurdas.

4. Subestimar correlação tempor

Você pode ter 50 vizinhos com iPhone. Mas só você passa pela câmera ALPR de Oxon Hill às 3h da manhã de terça. Temporal correlation + spatial cluster = ID único. Não importa que existam milhões de MACs randomizados no mundo — só importa o padrão local.

O que está rodando em Oxon Hill, Maryland — e por que você deveria se importar

O consultor Ryan O’Horo confirmou que existem instalações reais do SignalTrace operadas pela polícia do condado de Prince George. É a primeira vez que a tecnologia deixa o papel, segundo a investigação. Isso é importante porque significa que o pipeline completo (sniffer + correlação ALPR + banco de dados) está funcional e testado em ambiente operacional.

Se isso escala, o modelo de negócio da vigilância muda: em vez de comprar placas (Flock faz isso), as polícias compram assinaturas para cruzar sinais com bancos de dados de matrículas já existentes. É um upgrade incremental sobre infraestrutura que já existe. Daqui a 5 anos, vai ser commodity.

FAQ — Perguntas que devs e engenheiros fazem

SignalTrace funciona mesmo com iOS 14+ e Android 10+?

Sim. A randomização por sessão ou por MAC é burlada via cluster analysis. O sistema não rastreia um device — ele rastreia o agrupamento. Seu carro tem 4-5 devices emitindo sinais, e o padrão conjunto é único.

É possível detectar se um SignalTrace está ativo na região?

Teoricamente, sim. Ferramentas como Kismet em modo monitor podem identificar tráfego anômalo de probing ou canais Wi-Fi com padrões não-padrão. Mas a varredura exige conhecimento técnico, equipamento e proximidade física. Para a pessoa comum, é inviável.

Como me proteger contra isso sem virar Amish digital?

Opções práticas: desligar Wi-Fi e Bluetooth no celular quando estiver dirigindo, usar um dispositivo “limpo” sem identificação pessoal no carro (tablet sem SIM, sem login), armazenar dispositivos pessoais em bolsa Faraday. Nada é bala de prata — é higiene operacional.

Isso é legal nos EUA? E no Brasil?

Nos EUA, a situação varia por estado — Maryland não tem legislação específica proibindo. No Brasil, a LGPD teoricamente exige consentimento para coleta de dados pessoais, mas sinais de RF ficam em zona cinzenta. Jurisprudência ainda está se formando.

O SignalTrace pode ser usado contra infratores isolados ou é só surveillance em massa?

Pelo modelo descrito, é surveillance em massa com busca retrospectiva. Você constrói o banco de dados de todas as impressões, depois pesquisa quando tem um suspeito. É exatamente o mesmo modelo do PRISM — pega tudo, filtra depois.

Reflexão final de quem trabalha com tech: a fronteira entre segurança pública e erosão de privacidade vai ficar cada vez mais borrada. Como devs, a gente constrói essas ferramentas — intencionalmente ou não. Saber como elas funcionam é o mínimo pra opinar com propriedade.


💻 Ver demos e PoCs no GitHub

Gostou? Me segue no GitHub e deixa um comentário se tiver dúvida ou quiser aprofundar algum ponto.

Y

Yuri Sousa

Front-End Developer / Designer

Desenvolvedor apaixonado por criar experiências digitais acessíveis e visualmente perfeitas. Escrevo sobre desenvolvimento web, design e tecnologia.