Mapa da aula
Aula 04 publicada. Mapa, exemplo, EX016.
flowchart TD
N0["4.1 Classes de ataque"]
N1["4.2 Testar injeção"]
N2["4.3 Testar classificadores"]
N3["4.4 Ataques à privacidade"]
N4["4.5 Ajustar os métodos aos riscos"]
N5["Síntese"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5
N5 --> EX["Exemplo resolvido"]
EX --> Q["Exercício EX016"]
Desenho lógico
flowchart LR
N0["4.1 Classes de ataque"]
N1["4.2 Testar injeção"]
N2["4.3 Testar classificadores"]
N3["4.4 Ataques à privacidade"]
N4["4.5 Ajustar os métodos aos riscos"]
N5["Síntese"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> Q["EX016"]
[4.1 Classes de ataque]
|
v
[4.2 Testar injeção]
|
v
[4.3 Testar classificadores]
|
v
[4.4 Ataques à privacidade]
|
v
[4.5 Ajustar os métodos aos riscos]
|
v
[Síntese]
|
v
[Exemplo resolvido] --> [Exercício EX016]
Objetivos de aprendizagem
Você vai (1) descrever as principais classes de ataque e como cada uma é testada; (2) testar aplicações com LLM quanto a injeção de prompt direta e indireta; (3) testar classificadores quanto a evasão; (4) compreender os ataques à privacidade; e (5) escolher métodos de acordo com os riscos.
4.1 Classes de ataque
Evasão: entradas forjadas para enganar um modelo (Goodfellow et al., arXiv:1412.6572). Envenenamento: corromper dados de treinamento ou inserir portas dos fundos (backdoors) (Gu et al., arXiv:1708.06733). Privacidade: inferência de pertencimento (Shokri et al., arXiv:1610.05820) e extração de modelo (Tramèr et al., arXiv:1609.02943). Injeção de prompt: direta (digitada pelo usuário) e indireta (escondida em conteúdo que o modelo lê; Greshake et al., arXiv:2302.12173). Na Meridian, a injeção de prompt se aplica ao ClaimChat, a evasão ao FraudFlag e a inferência de pertencimento a qualquer modelo treinado com dados de segurados. Mapeie cada classe para os serviços em que ela se aplica antes de escrever um plano de teste.
4.2 Testar injeção
Construa entradas de teste que tentem fazer o assistente fazer algo que não deveria: agendar um retorno para outro sinistro, revelar suas instruções, marcar um sinistro como aprovado, incluir um link que carregue dados. Plante-as em mensagens e em documentos. Varie a redação, o idioma e a posição. Julgue pelos efeitos nos registros das ferramentas e nos dados, não pelo tom das respostas. Os 60 casos indiretos de Sofia foram plantados em orçamentos enviados e em textos dentro de fotos. Cada caso tinha um marcador inofensivo, de modo que o sucesso aparecia no registro da ferramenta, e não num julgamento sobre a redação. Os casos diretos vieram da janela de chat.
4.3 Testar classificadores
No FraudFlag, altere as características que um fraudador controla (divisão do valor do sinistro, momento, descrição) e meça com que frequência casos de fraude conhecidos caem abaixo do limiar de sinalização.
"""Lab E: evasion of a toy linear classifier (synthetic data, stdlib only).
Trains logistic regression on two synthetic clusters, then applies a
fast-gradient-sign (FGSM-style) perturbation of size eps to every test point
and reports clean vs adversarial accuracy. Teaching model only."""
import math, random
rng = random.Random(7)
def point(label):
cx = 1.0 if label else -1.0
return [rng.gauss(cx, 0.7), rng.gauss(cx, 0.7)], label
train = [point(i % 2) for i in range(400)]
test = [point(i % 2) for i in range(200)]
w, b = [0.0, 0.0], 0.0
sig = lambda z: 1 / (1 + math.exp(-z))
for epoch in range(200):
gw, gb = [0.0, 0.0], 0.0
for x, y in train:
p = sig(w[0]*x[0] + w[1]*x[1] + b)
gw[0] += (p - y)*x[0]; gw[1] += (p - y)*x[1]; gb += p - y
w = [w[i] - 0.1*gw[i]/len(train) for i in range(2)]; b -= 0.1*gb/len(train)
def acc(data, eps):
ok = 0
for x, y in data:
# gradient of the loss w.r.t. x is (p - y) * w; FGSM steps along its sign
p = sig(w[0]*x[0] + w[1]*x[1] + b)
xa = [x[i] + eps*math.copysign(1, (p - y)*w[i]) for i in range(2)]
ok += (sig(w[0]*xa[0] + w[1]*xa[1] + b) >= 0.5) == bool(y)
return ok / len(data)
print(f"weights w=({w[0]:.3f}, {w[1]:.3f}) b={b:.3f}")
for eps in (0.0, 0.25, 0.5, 0.75, 1.0):
print(f"eps={eps:.2f} accuracy={acc(test, eps):.3f}")
Saída esperada:
weights w=(1.795, 1.756) b=-0.080
eps=0.00 accuracy=0.985
eps=0.25 accuracy=0.950
eps=0.50 accuracy=0.840
eps=0.75 accuracy=0.660
eps=1.00 accuracy=0.505
Meça a parcela de casos de fraude conhecidos que caem abaixo do limiar depois de cada alteração e relate-a com um intervalo. No FraudFlag, Sofia usou 30 variações de sinistros de fraude sintéticos conhecidos. Teste apenas as características que um fraudador consegue de fato controlar, já que as demais não estão ao alcance dele. Mantenha as variações realistas, como valores e redação.
4.4 Ataques à privacidade
Pergunte se as saídas revelam dados de treinamento ou permitem copiar o modelo. Pontuações detalhadas e consultas ilimitadas aumentam ambos os riscos. No FraudFlag, uma API para parceiros que devolvesse pontuações detalhadas sem limites facilitaria as duas coisas. O próprio pertencimento pode ser sensível: saber que alguém abriu um sinistro pode revelar circunstâncias pessoais. A recomendação de Sofia a partir do laboratório foi devolver apenas "padrão / revisão", com limites de taxa por parceiro. Teste com registros sintéticos de segurados na homologação. Meça quanto melhor do que o acaso um atacante conseguiria adivinhar o pertencimento e quantas consultas seriam necessárias para copiar o comportamento do modelo, antes e depois das saídas grosseiras.
4.5 Ajustar os métodos aos riscos
Parta dos riscos do seu quadro de fluxo de dados. Documentos enviados → testes de injeção indireta. Ferramentas → testes de agência. API de pontuação → testes de extração e de evasão. Dados pessoais no treinamento → testes de pertencimento. O plano de Sofia para o ClaimChat seguiu esse mapeamento: testes de injeção indireta para os envios, testes de agência para a ferramenta de retorno e testes de divulgação para o andamento dos sinistros. Guarde o mapeamento com o plano. Cada par decorre de um ponto de entrada ou de um ativo do quadro. Se o quadro mostrar uma via sem testes mapeados, acrescente testes ou registre por que a via está fora do escopo, para que a lacuna seja deliberada e visível para o revisor e o responsável.
4.6 Exemplo resolvido (caso sintético da Meridian)
O plano de teste de Sofia para o ClaimChat: 40 casos de injeção direta e 60 de injeção indireta (em orçamentos enviados e em textos de fotos), 20 casos de divulgação e 10 de consumo. Para o FraudFlag: 30 variações de evasão sobre sinistros de fraude sintéticos conhecidos. No análogo de evasão, o laboratório mostra a acurácia de um modelo de brinquedo caindo de 0,985 para 0,505 à medida que as perturbações crescem — uma razão para não deixar que uma única pontuação decida um sinistro. Cada conjunto de casos remete a um risco do quadro de fluxo de dados, de modo que um revisor pode ver por que ele está ali. O plano foi aprovado antes que qualquer caso fosse executado.
4.7 Erros e limites
Três erros são comuns: julgar os testes pelo tom da resposta; apenas testes de injeção direta; e métodos escolhidos sem referência aos riscos. Cada erro deixa passar danos reais. Uma recusa educada pode esconder uma chamada de ferramenta que aconteceu mesmo assim, por isso o tom não é evidência. Testes diretos sozinhos não pegam a injeção por orçamentos e fotos enviados, a principal exposição do ClaimChat. Métodos escolhidos sem referência aos riscos desperdiçam esforço e deixam riscos mapeados sem teste. Verifique os três no seu plano de teste antes de executá-lo. Corrija cada um antes de executar os casos. O próprio plano de Sofia os evitou ao mapear os casos para o quadro de fluxo de dados.
Exercícios
- EX016 — Classes. Associe quatro cenários a classes de ataque. Rubrica: 3 = quatro corretos; 2 = três; 1 = um ou dois; 0 = nenhum.
- EX017 — Casos indiretos. Descreva três documentos de teste de injeção indireta (não armados), com o comportamento seguro esperado. Rubrica: 3 = três variados, com expectativas; 2 = dois; 1 = um; 0 = nenhum.
- EX018 — Evasão. Projete dois testes de evasão para o FraudFlag. Rubrica: 3 = duas alterações controladas pelo atacante, com medição; 2 = uma; 1 = vago; 0 = nenhum.
- EX019 — Laboratório. O que a queda para 0,505 significa para as decisões do FraudFlag? Rubrica: 3 = uma entrada forjada pode inverter decisões; manter revisão humana; ressalva de modelo de brinquedo; 2 = parcial; 1 = vago; 0 = errado.
- EX020 — Ajuste. Associe três riscos do ClaimChat a métodos de teste. Rubrica: 3 = três pertinentes; 2 = dois; 1 = um; 0 = nenhum.
Síntese
Os métodos centrais testam cada classe de ataque onde o sistema está exposto, julgam pelos efeitos e são escolhidos de acordo com os riscos que você mapeou.
Continue estudando — capítulo 04 de 12
← Capítulo 03 (rascunho) · Índice de capítulos do curso · Capítulo 05 (rascunho) →