Pular para o conteúdo principal
Portfolio logo Patrick Tavares

Voltar para todos os posts

A Ilusão da Caixa Preta: APIs de ML são um convite ao roubo

Publicado em por Patrick Tavares · 10 min de leitura

Olha, vamos ser honestos aqui: a premissa de Machine Learning as a Service (MLaaS) sempre foi meio ingênua. Você gasta milhões em GPUs, contrata PhDs que custam um rim, limpa terabytes de dados proprietários durante meses… e no final, expõe toda essa propriedade intelectual através de uma porta HTTP aberta para o mundo, acreditando que esconder os binários do modelo é proteção suficiente.

Spoiler: não é.

A realidade que estamos vivendo é que essa tal “Caixa Preta” é transparente para quem sabe onde bater. O ataque de Extração de Modelo (Model Stealing) não é mais aquela coisa de paper acadêmico que ninguém implementa. Virou uma disciplina de engenharia econômica, com ROI calculado e tudo. Se você tem uma API pública, pode ter certeza: alguém está treinando um modelo clone nas suas costas, usando seu orçamento de inferência para subsidiar o P&D deles.

Deixa eu te falar como isso funciona.

O Paradigma do Ataque: Eficiência é a Chave

Esquece aqueles ataques de força bruta de 2020. Ninguém vai ficar consultando sua API aleatoriamente até quebrar a banca (bem, quase ninguém). O jogo agora é eficiência de orçamento. O atacante quer replicar sua função fv(x)f_v(x) com um modelo substituto fs(x)f_s(x) gastando o mínimo possível em chamadas de API.

Pausa importante aqui: não confunda Extração com Inversão. São ataques completamente diferentes:

  • Extração (Stealing): “Eu quero copiar a funcionalidade do seu modelo para não pagar mais por ele.” É roubo de propriedade intelectual, puro e simples.
  • Inversão (Inversion): “Eu quero reconstruir os rostos/dados que você usou no treino.” Isso é violação de privacidade.

O que estou discutindo aqui é extração. E ela ficou assustadoramente eficiente.

A Revolução do AugSteal

Se sua API retorna apenas “Hard-Labels” (tipo “Gato” ou “Cachorro”, sem probabilidades), você provavelmente acha que está seguro. Meu amigo, eu tenho más notícias.

O framework AugSteal1 destruiu completamente essa noção de segurança. E a lógica dele é astuta e brilhante ao mesmo tempo: o atacante não quer saber o que seu modelo sabe. Ele quer saber o que o modelo substituto dele não sabe.

Funciona assim:

  1. Active Learning (AL): O atacante seleciona inputs onde o modelo clone dele tem alta entropia (incerteza). Sabe aqueles casos onde a IA não tem certeza? Aqueles pontos de fronteira de decisão? É exatamente ali que ele ataca.

  2. Consulta Cirúrgica: Ele só paga para consultar sua API nesses pontos críticos. Nada de desperdício.

  3. MixMatch/Data Augmentation: Ele usa rotações, ruídos e augmentações para extrair consistência de uma única resposta “Hard-Label”. É tipo tirar leite de pedra, mas funciona.

Resultado? Réplicas com mais de 90% de fidelidade custando uma fração ridícula do treinamento original. Estamos falando de economizar milhões aqui.

LLMs: A Matemática da Extração

Agora a coisa fica mais interessante (e matematicamente elegante, se você curte esse tipo de coisa). LLMs são, na essência, multiplicadores de matrizes gigantes. E álgebra linear é impiedosa.

Pesquisas recentes2 demonstraram que é trivial extrair a camada de projeção de embeddings de modelos como a família GPT. Trivial mesmo, não é exagero.

Como funciona o ataque matemático

Para entender, você precisa saber como um LLM funciona internamente. Quando você manda um texto, o modelo:

  1. Converte em números (embeddings) - a representação “h”
  2. Multiplica por uma matriz gigante “W” (a matriz de projeção que queremos roubar)
  3. Adiciona um viés “b”
  4. Gera as pontuações finais “z” (logits) para cada palavra possível no vocabulário

Matematicamente:

z=Wh+bz = W \cdot h + b

Onde:

  • z = logits (as pontuações brutas que o modelo dá para cada palavra do vocabulário)
  • W = matriz de projeção (os “pesos” secretos que queremos roubar)
  • h = embedding oculto (a representação interna do seu texto)
  • b = bias (um termo de ajuste constante)

O problema crítico é que algumas APIs (como a da OpenAI até 2024) expunham duas funcionalidades perigosas:

  • logprobs (log-probabilities): as probabilidades exatas que o modelo atribui a cada palavra. Em vez de só retornar “gato”, a API diz “gato tem 85% de chance, cachorro 10%, rato 5%”
  • logit_bias: um parâmetro que permite você injetar valores no “b” da equação acima, forçando o modelo a preferir ou evitar certas palavras

Quando você combina essas duas features, vira matemática de faculdade. O atacante:

  1. Envia a mesma frase várias vezes
  2. Cada vez, muda o logit_bias (manipula o “b”)
  3. Observa como as logprobs (o “z”) mudam
  4. Com N queries, monta um sistema de equações lineares
  5. Resolve para encontrar “W” usando álgebra linear básica

Deixa eu te mostrar o conceito de forma simplificada:

Extração de Modelo
# Simplificação do conceito de extração de W
import numpy as np
# O atacante envia queries variando o bias (b)
# e observa as mudanças exatas nas log-probs de saída (z).
# Com N consultas, ele resolve:
# W * h = z_observado - b_injetado
def solve_projection_layer(queries_results):
# Resolve sistema linear Ax = B usando mínimos quadrados
# Isso extrai a matriz W que o provedor queria manter secreta
projection_matrix = np.linalg.lstsq(
queries_results['h'],
queries_results['z_adjusted']
)
return projection_matrix

Quer saber o custo estimado para roubar a matriz de projeção do gpt-3.5-turbo? Abaixo de $2.000 USD2.

Deixa isso afundar por um segundo. Menos de dois mil dólares. Isso revela o vocabulário exato, a dimensão oculta e fornece uma “cabeça” perfeita para ataques adversários subsequentes. É basicamente comprar as plantas da casa que você quer invadir.

Nota importante: Vale destacar que os pesquisadores do artigo de Carlini et al. obtiveram permissão prévia da OpenAI para conduzir este ataque de forma ética e responsável. A OpenAI já corrigiu essa vulnerabilidade, e hoje você não consegue mais usar logit_bias livremente na API deles. Mas o ataque serviu como prova de conceito devastadora: se sua API vaza informação demais, álgebra linear faz o resto.

A Réplica é o Dojo do Atacante

Agora você deve estar pensando: “Beleza Patrick, mas por que alguém roubaria meu modelo além de economizar na conta da API?”

Boa pergunta. A resposta é: para quebrá-lo.

Existe uma propriedade em Deep Learning chamada Transferibilidade3. Exemplos adversários (inputs projetados cirurgicamente para enganar a IA) criados para um modelo A frequentemente enganam um modelo B, se as arquiteturas ou datasets forem parecidos.

Então o fluxo de ataque fica assim:

  1. Eu roubo seu modelo e tenho o fs(x)f_s(x) rodando localmente na minha GPU
  2. Posso gerar milhões de ataques adversários por segundo (White-Box attack) sem pagar um centavo de API e sem aparecer nos seus logs de rate limiting
  3. Otimizo o ataque até atingir 100% de sucesso no meu modelo local
  4. Disparo um ÚNICO request contra sua API de produção. E ele passa.

Sua API vira um alvo estático. O atacante treina no dojo (a réplica) e vence no ringue (produção) com um golpe só. É tipo treinar contra um boneco de você antes da luta real.

Side-Channels: O Silêncio que Fala

Mesmo que você bloqueie logprobs, oculte scores de confiança e bana IPs suspeitos, sua infraestrutura física ainda entrega informação. Timing Attacks em APIs de NLP são absolutamente devastadores.

Modelos Mixture-of-Experts (MoE), como o GPT-4 em diante ou Mixtral, têm tempos de inferência variáveis dependendo de quantos e quais “especialistas” são ativados internamente.

Se o input A demora 200ms e o input B demora 250ms consistentemente, eu ganhei um bit de informação sobre a complexidade ou a rota de roteamento da sua rede. Parece pouco? Multiplica isso por 10.000 queries.

Em sistemas de classificação, se a classe “Fraude” passa por 3 camadas extras de verificação e auditoria, a latência denuncia o resultado antes mesmo do JSON chegar. É tipo poker, mas seu servidor tem tells óbvios.

Para o atacante, o jitter da sua latência é código Morse transmitindo detalhes da sua arquitetura.

Defesa: Um Jogo de Gato e Rato (com Estado)

Ok, chega de bad news. Como a gente se defende?

A defesa passiva morreu. A única saída é Stateful Detection (Detecção com Estado).

O Fim da Statelessness

APIs REST foram desenhadas para serem stateless. Isso é ótimo para escalabilidade. E péssimo para segurança de ML. Se você não mantiver histórico de queries de um usuário, você está lutando de olhos vendados.

A defesa eficaz requer monitoramento comportamental. Frameworks modernos de detecção como GuardNet4 e PRADA5 abordam especificamente a detecção de model extraction attacks analisando padrões de consulta ao longo do tempo:

GuardNet (2024) combina três componentes críticos:

  1. Características de Fronteira: Detecta queries que exploram fronteiras de decisão (o alvo natural de ataques baseados em Active Learning como o AugSteal)
  2. Distância Inter-Amostra: Analisa a distância entre amostras consecutivas para identificar padrões de exploração sistemática
  3. Divergências de Distribuição: Usa autoencoders variacionais (VAE) e distância de Wasserstein para distinguir mudanças legítimas de distribuição versus padrões adversários

O diferencial do GuardNet é sua capacidade de detectar model stealing usando menos queries e minimizar falsos positivos causados por mudanças naturais na distribuição de usuários legítimos um problema crítico que destruiu abordagens anteriores baseadas em thresholds fixos.

PRADA (2019), o framework clássico de detecção, estabeleceu o conceito de identificar padrões estatísticos de knowledge distillation nas queries. Embora eficaz contra ataques mais antigos, pesquisas recentes demonstraram que pode ser evadido por técnicas como ActiveThief. Ainda assim, serve como baseline importante para sistemas de defesa em camadas.

Deixa eu te mostrar as abordagens de defesa e quão eficazes elas realmente são:

Limitação de Rate (IP/Token throttling)

  • Eficácia: Baixa
  • Por quê: Bypassed facilmente via Sybil attacks e proxies rotativos

Hard-Label Only (Ocultar probabilidades)

  • Eficácia: Média
  • Por quê: Quebrada pelo AugSteal, como já vimos

POW (Proof-of-Work)

  • Eficácia: Média
  • Por quê: Aumenta o custo do ataque, mas prejudica seriamente a UX de usuários legítimos

Stateful Detection (GuardNet/PRADA)

  • Eficácia: Alta (GuardNet demonstra detecção eficaz com menos queries e baixo falso positivo)
  • Por quê: Analisa padrões comportamentais ao longo do tempo (boundary exploration, inter-sample distance, distribution shifts)
  • Limitação: Requer infraestrutura de monitoramento com estado e análise contínua

O Pesadelo da Conformidade

E aqui vem uma bomba jurídica que pouca gente está discutindo:

Se eu roubo seu modelo treinado com dados médicos sensíveis, minha réplica (o modelo roubado) pode memorizar e vazar esses dados. A pergunta jurídica de 2026 vai ser: Quem é o culpado pelo vazamento de dados via modelo roubado?

A empresa vítima que não protegeu adequadamente a API, ou o atacante?

Se GDPR/LGPD decidir que a falha de segurança na API foi negligência grave, VOCÊ paga a multa pelos dados que o LADRÃO vazou. É tipo ser assaltado e ainda ter que pagar pelos danos que o ladrão causou com o que ele roubou de você.

Pensa nisso.

Conclusão

Seu modelo é seu produto. Se você o expõe via API, você está vendendo amostras grátis da sua propriedade intelectual a cada requisição HTTP 200.

A segurança por obscuridade acabou. Morreu. Foi enterrada. Se você não está implementando monitoramento de estado para detectar padrões anômalos de consulta, ou medindo a entropia das queries recebidas, seu modelo provavelmente já é:

  • O dataset de treinamento de alguém, OU
  • O saco de pancadas de um script adversário rodando 24/7

A regra de ouro: Proteja os pesos, mas proteja AINDA MAIS os gradientes.

E se você acha que isso é paranoia, talvez seja hora de checar seus logs de API. Aqueles 50.000 requests “suspeitos” da semana passada? Não eram bot de scraping.

Eram alguém clonando você.


Leitura adicional:

Referências:

Footnotes

  1. Gao et al. (2024). AugSteal: Advancing Model Steal With Data Augmentation in Active Learning Frameworks. IEEE Transactions on Information Forensics and Security. 10.1109/TIFS.2024.3384841

  2. Carlini et al. (2024). Stealing Part of a Production Language Model. Proceedings of the 41st International Conference on Machine Learning (ICML). 10.48550/arXiv.2403.06634 2

  3. Tramèr et al. (2016). Stealing Machine Learning Models via Prediction APIs. 25th USENIX Security Symposium. 10.48550/arXiv.1609.02943

  4. Zhang et al. (2024). Making models more secure: An efficient model stealing detection method. Computers and Electrical Engineering, Volume 117. 10.1016/j.compeleceng.2024.109266

  5. Juuti et al. (2019). PRADA: Protecting Against DNN Model Stealing Attacks. IEEE European Symposium on Security and Privacy (EuroS&P). 10.1109/EuroSP.2019.00044