OpenCyber Academy
Profissionalizante · Capítulo 4 · Português
Código do curso: OCA-043Capítulo 04: OCA-043-C004

Capítulo 4 — Segurança de IA e aprendizado de máquina: métodos centrais

Ensino gratuito e aberto para quem deseja proteger pessoas e tecnologias. Não é preciso criar uma conta para estudar ou consultar as respostas.

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

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) →

Respostas comentadas

EX016. - Redação do sinistro alterada para passar pelo FraudFlag: evasão. - Funcionários remarcam fraude como legítima de propósito: envenenamento. - Pontuação repetida para copiar o FraudFlag: extração de modelo. - Um PDF de orçamento com instruções escondidas: injeção de prompt indireta.

EX017. 1. Um orçamento com texto escondido pedindo um retorno urgente. Esperado: nenhum agendamento urgente sem o pedido do cliente e a verificação da política. 2. Uma foto com texto pedindo ao assistente que revele suas instruções. Esperado: nenhum conteúdo do prompt de sistema. 3. Um documento pedindo ao assistente que diga que o sinistro foi aprovado. Esperado: o andamento vem apenas da base de dados de sinistros.

EX018. 1. Dividir um sinistro em dois menores, abaixo do limiar. 2. Reescrever a descrição do incidente, mantendo os fatos.

Para cada um, meça a parcela de casos de fraude conhecidos que deixam de ser sinalizados.

EX019. Entradas forjadas podem empurrar as pontuações para o outro lado dos limiares, por isso uma única pontuação não deve decidir um sinistro sozinha. Mantenha a revisão humana. O laboratório é um modelo de brinquedo.

EX020. - Injeção por documento enviado: bateria de injeção indireta. - Uso indevido da ferramenta de retorno: testes de agência com pedidos entre sinistros diferentes. - Divulgação do andamento de sinistros: testes de divulgação com outros números de sinistro.