Skip to content
אצלי
Go back

ADS-B, SDR e a comunicação

Torre de controle do Aeroporto de Londrina em dia ensolarado
Foto de Rodolfo Gaion na Pexels

No primeiro artigo eu disse que avião é o alvo perfeito pra começar no mundo do rádio definido por software porque toda aeronave moderna grita a própria posição em texto aberto. Ficou faltando explicar como ela faz isso. E, mais interessante pra quem trabalha com segurança, faltou explicar outro detalhe: ninguém verifica se a aeronave está falando a verdade.

Vamos por partes.

O que é ADS-B

ADS-B é a sigla de Automatic Dependent Surveillance Broadcast. Traduzindo:

Automatic, porque a aeronave transmite sozinha, sem ninguém perguntar nada.

Dependent, porque ela depende dos próprios sistemas de bordo pra saber onde está, tipicamente o GPS. Surveillance, porque o propósito é vigilância de tráfego aéreo.

Broadcast, e essa é a palavra que importa pra gente, porque ela joga a informação pro mundo, sem destinatário específico, pra quem quiser ouvir.

O modelo mental é o de um servidor que ficasse berrando o próprio estado num canal aberto, várias vezes por segundo, sem autenticação, sem TLS, sem nada.

O que vai pelo ar

A aeronave determina a própria posição pelo GNSS e transmite, na frequência de 1090 MHz, mensagens curtas que carregam coisas como:

O endereço ICAO de 24 bits, que é o identificador único e permanente daquela fuselagem, o equivalente a um MAC address voador. O callsign, o indicativo do voo, tipo TAM3304. A posição em latitude e longitude. A altitude, barométrica ou por GNSS. A velocidade no solo, a direção do nariz, a razão de subida ou descida.

Cada um desses campos chega em mensagens diferentes, num fluxo contínuo. As de posição saem em torno de duas por segundo. Em alguns segundos de escuta você já tem um retrato bem completo de qualquer aeronave dentro do alcance.

O quadro no ar, pra quem veio de redes

Eu sou formado em redes de computadores, então quando li que a aeronave “transmite mensagens”, a primeira pergunta foi automática: qual o tamanho do quadro, qual a taxa, o que esse protocolo tem de parecido com TCP/IP? A resposta curta é quase nada, e é justamente isso que torna ele divertido de dissecar.

O nome técnico do que a gente vai receber é Mode S Extended Squitter, ou 1090ES. Squitter é o transponder falando espontaneamente, sem ninguém interrogar. Guarde esse vocabulário, porque é ele que vai aparecer na saída do decodificador.

Cada quadro tem exatos 112 bits, 14 bytes.

Pra calibrar a régua: o menor quadro Ethernet válido tem 64 bytes, e um cabeçalho IPv6 sozinho tem 40. Desses 112 bits, 5 são o downlink format, que diz o tipo do quadro, fazendo o papel que o EtherType faz num quadro Ethernet. Depois vêm 3 bits de capability, 24 do endereço ICAO, 56 de payload e 24 de CRC. Ou seja, o payload útil tem 7 bytes. Um cabeçalho UDP vazio tem 8.

Todo o retrato de um avião a 900 km/h passa por um cano mais estreito que o overhead do protocolo mais enxuto que você usa no dia a dia.

A modulação é PPM, pulse position modulation, a 1 Mbps. Cada bit ocupa 1 microssegundo dividido em duas metades: pulso na primeira metade é 1, pulso na segunda é 0.

Antes dos dados vem um preâmbulo de 8 microssegundos pra sincronizar o receptor, mesma função do preâmbulo Ethernet. Quadro completo: 120 microssegundos de ar.

E 1 Mbps é herança de projeto. O Mode S foi desenhado no MIT Lincoln Laboratory nos anos 70, então você está literalmente recebendo tráfego numa taxa de link da era do cabo coaxial.

De transporte, o ADS-B tem a filosofia do UDP broadcast levada ao extremo: sem ACK, sem janela, sem retransmissão, sem controle de fluxo. Fire and forget. Se dois transponders transmitem ao mesmo tempo, os quadros colidem e ambos se perdem. A mitigação é estatística, no espírito do ALOHA puro: cada aeronave sorteia o intervalo entre mensagens de posição num valor aleatório entre 0,4 e 0,6 segundo, justamente pra dois transmissores não ficarem colidindo em fase. E o canal de 1090 MHz é compartilhado: além do ADS-B, passam ali as respostas dos transponders ao radar secundário e ao TCAS dos outros aviões. Em espaço aéreo denso, é um barramento coaxial dos anos 80 em horário de pico. Quem separa sinal de destroço é o CRC de 24 bits, e o decodificador que vamos usar consegue inclusive recuperar quadro com erro de 1 bit fazendo força bruta em cima do CRC.

Potência de transmissão: tipicamente 125 a 250 watts em aeronave comercial, com teto de 500. Milhares de vezes o que o seu roteador WiFi tem permissão de emitir. É isso, somado à linha de visada de quem voa a 11 mil metros, que faz um quadro de 14 bytes atravessar 300 ou 400 quilômetros e cair inteiro na antena de mesa.

Pra fechar, a cara do bicho. Um quadro real, do jeito que o dump1090 cospe no modo raw:

*8D4840D6202CC371C32CE0576098;

28 caracteres hexadecimais, 112 bits. Ali dentro tem o downlink format 17, o endereço ICAO 4840D6 e o callsign KLM1023. O mesmo quadro aberto, campo a campo:

quadro 1090ES · downlink format 17 DF · 5 bits CA · 3 bits preâmbulo · 8 µs ICAO 24 bits identidade única payload (ME) 56 bits · 7 bytes posição, altitude, velocidade CRC 24 bits confere erros 8D 4840D6 202CC371C32CE0 576098 112 bits · 14 bytes · 112 µs no ar (120 µs com o preâmbulo)

Lendo da esquerda pra direita: o preâmbulo são quatro pulsos que funcionam como um toque de campainha, avisando o receptor de que vem mensagem. O DF diz o tipo da mensagem e o CA o que aquele transponder sabe fazer. O ICAO é a identidade única da fuselagem, aquele MAC address voador do começo do texto. O payload é a carga útil, onde viajam posição, altitude e velocidade. E o CRC é o lacre: se a conta não bate, o receptor joga a mensagem fora. Um envelope minúsculo com remetente, carga e lacre, e nada mais.

O dongle, aliás, não entrega esses bits prontos: ele entrega amostras IQ de 8 bits a 2,4 milhões por segundo, uns 4,8 MB/s escoando pela USB. Achar o preâmbulo nesse fluxo e transformar pulso em bit é trabalho de software, e é exatamente aí que a parte de Linux dessa série começa.

O detalhe que faz a posição caber em poucos bits

Tem uma sacada de engenharia aqui: Transmitir latitude e longitude completas, com precisão decente, gastaria bits demais pra uma mensagem que precisa ser curta e frequente. A solução é um esquema chamado Compact Position Reporting.

Em vez de mandar a coordenada absoluta toda vez, a aeronave alterna entre dois tipos de quadro, chamados par e ímpar, e cada um carrega uma representação comprimida da posição. Combinando um quadro par com um ímpar, ou usando uma posição de referência que você já conhece, o receptor reconstrói a coordenada global. É compressão com estado, basicamente, e funciona porque um avião não teleporta entre uma mensagem e a próxima. A continuidade física do voo é a chave de decodificação.

Por que morar perto do aeroporto resolve metade do problema

Sinal de 1090 MHz é linha de visada. Ele vai em linha reta e não contorna montanha, prédio nem a curvatura da Terra. Isso quer dizer que o seu alcance depende de altitude e de obstáculo. Uma aeronave a nível de cruzeiro, bem alta, pode ser captada a mais de 200 milhas náuticas com uma antena decente e horizonte limpo. Uma aeronave baixa, em aproximação, some atrás do primeiro morro.

E aqui mora a vantagem geográfica que eu mencionei. Morando embaixo do corredor de aproximação do GRU, eu recebo aeronaves baixas, próximas e com sinal forte, exatamente a faixa que seria difícil pra quem mora longe. O que normalmente é a parte chata do ADS-B, captar tráfego de baixa altitude, no meu caso cai pronto no colo. Quando eu mudar pra perto do Catarina, a brincadeira muda de figura, porque jato executivo voa em perfil diferente, mas isso é conversa pra quando a antena estiver montada.

A parte que deveria te incomodar

Releia a descrição do protocolo e procure a palavra autenticação. Ela não está lá, porque não existe.

O ADS-B foi concebido entre os anos 90 e 2000, num mundo onde a preocupação era fazer o sistema funcionar e ser interoperável, não defendê-lo de um adversário. O resultado é que as mensagens não são assinadas nem cifradas. Qualquer um com o transmissor certo pode injetar no ar uma mensagem dizendo que existe uma aeronave numa posição onde não há nada, com um identificador inventado, e os receptores vão acreditar, porque acreditar é tudo o que eles sabem fazer.

O Spoofing de ADS-B é um problema reconhecido na segurança da aviação, estudado em papers e demonstrado em laboratório. A defesa prática hoje não vem do protocolo em si, e sim de cruzar fontes: radar primário convencional, que enxerga o metal independente do que ele diz de si mesmo, e multilateração, uma técnica que vou detalhar depois e que infere posição pelo tempo que o mesmo sinal leva pra chegar em receptores diferentes. Em outras palavras, a aviação resolveu o problema da falta de autenticação adicionando observabilidade externa, o que, convenhamos, é o que um SRE faz quando recebe um sistema legado.

Pra mim, que vou só receber e nunca transmitir, nada disso é risco. Receber broadcast aberto é perfeitamente legal e passivo. Mas conhecer o buraco de segurança do protocolo muda a forma como você lê os dados que vão aparecer no mapa. Nem todo avião no seu dashboard é necessariamente um avião. Quase sempre é. Nem sempre.

Próximo

No artigo 3 eu desço pro hardware: por que escolhi a RTL-SDR v4 especificamente, o que diferencia ela de um clone barato, e por que essa diferença importa morando numa cidade infestada de estações FM potentes.

Referências


Share this post on:

Next Post
SDR - Radio no Linux