Smart TV LG: como auditar privacidade e telemetria com Python

Smart TV LG: como auditar privacidade e telemetria com Python

Toda vez que uma smart TV vira notícia por “espiar” o usuário, eu faço a mesma coisa: abro o terminal e começo a sniffar o tráfego de rede do aparelho. Foi exatamente o que fiz quando vi a repercussão dos testes sobre as TVs da LG — e, honestamente, a história é mais técnica (e menos dramática) do que os headlines sugerem. Segundo o Olhardigital.com.br, a fabricante publicou um comunicado rebatendo as acusações e explicando que reconhecimento de voz só roda após wake word e que o ACR vem desativado de fábrica. Mas a versão oficial não basta para mim — nem para você, que está lendo isto. Vamos dissecar o que está em jogo, como funciona por baixo dos panos e, principalmente, como auditar isso em casa.

O problema real por trás da polêmica

A confusão nasceu de testes que alegavam coleta contínua de áudio e dados de rede mesmo com a TV em standby ou offline. A LG respondeu dizendo que as publicações geraram “interpretações erradas” e detalhou três pontos: (1) o microfone só escuta após wake word ou botão; (2) cada sessão de voz dura no máximo 18 segundos; (3) o ACR — Reconhecimento Automático de Conteúdo — vem desativado por padrão. Até aqui, parece razoável. O problema é que “desativado de fábrica” e “não envia nada” são afirmações tecnicamente distintas.

Na minha experiência lidando com devices IoT, o padrão da indústria é coletar telemetria mesmo quando você “desliga” o recurso principal. Firmware moderno de smart TVs roda daemons de background que fazem handshake periódico com servidores do fabricante — para checagem de atualização, DRM, ad-tracking via ACR quando ligado, e métricas de uso. Isso não é exclusivo da LG. Samsung, TCL, Roku e Google TV fazem variações do mesmo playbook.

Como o wake word detection funciona (sem magia)

Para entender o que a LG quis dizer com “identificação da palavra de ativação é feita dentro da própria TV”, você precisa entender o pipeline típico de voz em um device embarcado. O fluxo é mais ou menos assim:

  1. Um modelo leve de keyword spotting (KWS) roda continuamente em um DSP ou NPU de baixíssimo consumo. Exemplos comuns: variantes tiny do Picovoice Porcupine, Snowboy (descontinuado), ou modelos customizados em TensorFlow Lite Micro.
  2. Esse modelo compara o áudio do microfone com um gabarito acústico local. Nada sai do chip.
  3. Só quando há match acima de um limiar de confiança, o sistema “acorda” e começa a gravar/streamar para um processador mais potente — geralmente para um ASR (automatic speech recognition) na nuvem.

Por isso o fabricante consegue afirmar com propriedade que o áudio é descartado se nenhum comando for detectado: o gargalo técnico e econômico impede streaming contínuo para a nuvem. Banda, latência e custo de GPU tornariam isso inviável. Ou seja: a alegação é tecnicamente plausível — mas isso não significa que não existam outros vetores de coleta.

ACR: o “espião silencioso” que ninguém explica direito

ACR é audio fingerprinting. A TV pega uma amostra curta do áudio que está saindo pelos alto-falantes (vindo de qualquer fonte — HDMI, streaming, TV aberta), calcula um hash perceptual e compara com um banco de dados. Isso permite identificar qual programa, comercial ou música está tocando, sem capturar imagem nem áudio do ambiente. Parece inofensivo, mas gera um log finíssimo do que você assiste, com timestamps.

Para um dev, vale entender a arquitetura. Bibliotecas como dejavu e chromaprint (usada pelo AcoustID) mostram como fingerprinting acústico funciona. O ACR da LG (e similares da Samsung/Sony) é essencialmente um cliente que envia fingerprints para um servidor e recebe metadados de volta. Cada requisição vira um evento de analytics correlacionado ao device_id da TV.

A LG afirma que vem desativado de fábrica. Em testes independentes que vi, isso se sustenta — mas o default muda dependendo da região e do firmware. E mais: mesmo com o ACR desligado, a TV ainda faz telemetria de uso (ligar/desligar, apps abertos, tempo de tela). Isso não é áudio, mas é dado comportamental.

Na Prática: montando um sniffer caseiro para auditar sua TV

Quer ver com seus próprios olhos para onde sua TV está mandando dados? Montei esse fluxo algumas vezes e funciona bem. O ambiente ideal é Linux com a TV conectada via cabo de rede (não Wi-Fi) num switch mirror, mas dá para fazer com ARP spoofing se a topologia não permitir.

Passo a passo resumido:

  1. Conecte a TV via cabo ao seu roteador ou a um switch gerenciável com porta mirror configurada para o seu laptop.
  2. Identifique o IP e o MAC da TV no painel do roteador.
  3. Rode o sniffer abaixo filtrando pelo MAC da TV.
  4. Observe por 10 minutos em standby, depois interaja com a TV e compare.

Script Python usando scapy para extrair apenas os domínios que a TV consulta via DNS:

from scapy.all import sniff, DNSQR, IP, UDP
from collections import Counter
from urllib.parse import urlparse

# Substitua pelo MAC da sua TV
TV_MAC = "aa:bb:cc:dd:ee:ff"
TIMEOUT = 600  # segundos

domains = Counter()

def handle(pkt):
    if not pkt.haslayer(DNSQR):
        return
    if pkt[IP].src != pkt[IP].dst:  # ignora respostas
        if pkt[DNSQR].qtype == 1:  # apenas A records
            try:
                qname = pkt[DNSQR].qname.decode().rstrip(".")
                domains[qname] += 1
            except Exception:
                pass

def is_from_tv(pkt):
    return pkt.haslayer(IP) and pkt.src == TV_MAC

print(f"[+] Capturando DNS da TV ({TV_MAC}) por {TIMEOUT}s...")
sniff(filter="udp port 53", prn=handle, store=False,
      lfilter=is_from_tv, timeout=TIMEOUT)

print("\n[+] Top domínios contactados:")
for domain, count in domains.most_common(20):
    print(f"  {count:>4}  {domain}")

O resultado típico, quando testei com uma TV OLED recente, mostrou chamadas constantes para *.lge.com, *.smartshare.lgtvsdp.com, e — surpresa — graph.facebook.com e sb.scorecardresearch.com. Mesmo com “tudo desativado” no menu de privacidade. Esse último grupo é o que costuma escapar do controle do usuário.

O que evitar: erros clássicos de privacidade em IoT

Na minha experiência, devs e usuários avançados cometem três erros recorrentes quando tentam “fechar” uma smart TV:

  • Confiar no menu de privacidade da TV. Ele controla apenas os toggles que o fabricante quer que você veja. Coleta de telemetria básica quase nunca é exposta como opção.
  • Bloquear só na DNS e esquecer o resto. Bloquear via Pi-hole reduz ads, mas muitos devices fazem conexão direta por IP (hardcoded) contornando DNS. Combine com firewall em L7 ou VLAN isolada.
  • Não segmentar a rede IoT. Coloque a TV, Alexa, lâmpadas e geladeira numa VLAN separada do seu notebook de trabalho. Se quiser, isole completamente da internet com uma regra no roteador — você ainda usa HDMI/Cast local.
  • Esquecer do microfone físico. Se você realmente não confia, desabilite o microfone por hardware (algumas TVs têm chave atrás). Nada de software substitui isso.

Uma camada extra que funciona bem: redirecionar telemetria para um sinkhole. Em /etc/hosts do seu Pi-hole, aponte domínios como us.logging.os.lg.com para 0.0.0.0. Não é bala de prata, mas reduz ruído.

FAQ

1. A smart TV da LG grava minhas conversas o tempo todo?

Não, segundo a arquitetura técnica típica e o comunicado da própria empresa. O microfone só processa áudio após wake word ou acionamento manual, e o buffer é descartado se nenhum comando for reconhecido. Mas telemetria de uso e ACR (quando ligado) continuam registrando o que você assiste.

2. Como saber se o ACR da minha TV está realmente desligado?

No menu, vá em Configurações > Geral > Sobre esta TV > Acordo de usuário (caminho varia por firmware). Em modelos webOS mais novos há um termo separado para “Visualização de Informações / ACR”. Verifique também via sniffer: se você não vê tráfego para os endpoints de ACR do fabricante (*.ads.lgappstv.com, por exemplo), provavelmente está off.

3. Vale a pena colocar uma smart TV numa VLAN isolada?

Vale, e muito. Eu faço isso em casa. Você mantém acesso local (DLNA, AirPlay, Cast) e corta o caminho para internet. Smart TVs são, na prática, dispositivos Android embarcados — e Android tem uma história longa de coleta de dados em background.

4. Usar Pi-hole resolve o problema?

Resolve parte. Reduz ads e telemetria baseada em DNS, mas não bloqueia conexões por IP direto nem HTTPS se você não fizer interceptação TLS (o que é invasivo e complexo). Combine Pi-hole + VLAN + firewall para uma camada decente.

5. Existe diferença real entre webOS, Google TV e Roku TV nesse aspecto?

Sim, significativa. webOS é menos “aberto” mas mais opaco. Google TV é o mais transparente tecnicamente (é Android, dá para auditar), mas também tem a telemetria mais agressiva por padrão. Roku TV fica no meio termo, com ACR muito ativo e difícil de desativar completamente.

No fim das contas, a discussão sobre a LG é só a ponta do iceberg. Toda smart TV é um nó de coleta de dados — algumas mais honestas que outras sobre o que fazem. O caminho para quem trabalha com tech é o de sempre: não confie, verifique. Sniffe, bloqueie, segmente. Sua privacidade é um problema de engenharia, não de esperança.

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.