◇ OpenCyber Academy
Graduação · Capítulo 22 · Português

Capítulo 22 — Segurança de IA e aprendizado de máquina: dados e dependências

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

Capítulo 22 — Segurança de IA e aprendizado de máquina: dados e dependências

Mapa da aula

Aula 22 publicada. Mapa, exemplo, EX064.

flowchart TD
  N0["22.1 Riscos dos dados"]
  N1["22.2 Cadeia de suprimentos"]
  N2["22.3 Documentação"]
  N3["22.4 Proveniência e integridade"]
  N4["Síntese"]
  N0 --> N1 --> N2 --> N3 --> N4
  N4 --> EX["Exemplo resolvido"]
  EX --> Q["Exercício EX064"]

Desenho lógico

flowchart LR
  N0["22.1 Riscos dos dados"]
  N1["22.2 Cadeia de suprimentos"]
  N2["22.3 Documentação"]
  N3["22.4 Proveniência e integridade"]
  N4["Síntese"]
  N0 --> N1 --> N2 --> N3 --> N4 --> Q["EX064"]
[22.1 Riscos dos dados]
    |
    v
[22.2 Cadeia de suprimentos]
    |
    v
[22.3 Documentação]
    |
    v
[22.4 Proveniência e integridade]
    |
    v
[Síntese]
    |
    v
[Exemplo resolvido] --> [Exercício EX064]

Objetivos de aprendizagem

Você vai (1) avaliar dados de treinamento, de ajuste fino e de recuperação quanto a riscos de envenenamento e de privacidade; (2) gerenciar modelos, conjuntos de dados e bibliotecas de terceiros como dependências da cadeia de suprimentos; (3) documentar dados com datasheets e modelos com model cards; e (4) projetar controles de proveniência e integridade.

22.1 Riscos dos dados

Dados de treinamento podem ser envenenados para degradar o desempenho ou implantar backdoors; podem conter dados pessoais que o modelo talvez vaze; podem ser enviesados. Dados de recuperação podem carregar instruções injetadas e precisam de controle de acesso. O laboratório mostra que algumas dezenas de pontos com gatilho criam um backdoor forte enquanto a acurácia limpa continua alta.

"""Lab P: label-flip poisoning and a backdoor trigger on a toy nearest-centroid
classifier (synthetic data, stdlib only). Teaching model only."""
import random
rng = random.Random(11)
def point(label, trigger=False):
    cx = 1.0 if label else -1.0
    x = [rng.gauss(cx, 0.8), rng.gauss(cx, 0.8), 0.0]
    if trigger: x[2] = 5.0          # third feature is the 'trigger'
    return x, label
clean = [point(i % 2) for i in range(400)]
test = [point(i % 2) for i in range(400)]
def fit(data):
    c = {}
    for lab in (0, 1):
        pts = [x for x, y in data if y == lab]
        c[lab] = [sum(p[i] for p in pts)/len(pts) for i in range(3)]
    return c
def pred(c, x):
    d = {k: sum((x[i]-v[i])**2 for i in range(3)) for k, v in c.items()}
    return min(d, key=d.get)
def accuracy(c, data): return sum(pred(c, x) == y for x, y in data)/len(data)
print("label-flip poisoning (flip a fraction of class-1 labels to 0):")
for frac in (0.0, 0.1, 0.2, 0.3, 0.4):
    data = [(x, y) for x, y in clean]; ones = [i for i, (x, y) in enumerate(data) if y == 1]
    for i in ones[:int(frac*len(ones))]: data[i] = (data[i][0], 0)
    print(f"  flipped={frac:.1f} clean_test_accuracy={accuracy(fit(data), test):.3f}")
print("backdoor: add n triggered class-1 points labelled 0")
trig_test = [point(1, trigger=True) for _ in range(200)]
for n in (0, 10, 40, 80):
    data = clean + [(point(1, trigger=True)[0], 0) for _ in range(n)]
    c = fit(data)
    asr = sum(pred(c, x) == 0 for x, _ in trig_test)/len(trig_test)
    print(f"  poison_points={n:3d} clean_accuracy={accuracy(c, test):.3f} attack_success={asr:.3f}")

Saída esperada:

label-flip poisoning (flip a fraction of class-1 labels to 0):
  flipped=0.0 clean_test_accuracy=0.965
  flipped=0.1 clean_test_accuracy=0.965
  flipped=0.2 clean_test_accuracy=0.953
  flipped=0.3 clean_test_accuracy=0.950
  flipped=0.4 clean_test_accuracy=0.945
backdoor: add n triggered class-1 points labelled 0
  poison_points=  0 clean_accuracy=0.965 attack_success=0.075
  poison_points= 10 clean_accuracy=0.963 attack_success=0.145
  poison_points= 40 clean_accuracy=0.963 attack_success=0.685
  poison_points= 80 clean_accuracy=0.968 attack_success=0.980

As duas tabelas do laboratório contam histórias diferentes. Inverter 40% dos rótulos baixa a acurácia limpa apenas de 0.965 para 0.945, então uma rotulagem ruidosa é um incômodo; 80 pontos com gatilho dão 0.980 de sucesso ao ataque, então o envenenamento direcionado é uma ameaça.

22.2 Cadeia de suprimentos

Modelos pré-treinados, conjuntos de dados, bibliotecas e plug-ins vêm de terceiros. O OWASP LLM 2025 lista cadeia de suprimentos (LLM03) e envenenamento de dados e de modelos (LLM04). Controles: fontes confiáveis, versões fixadas, verificação de hashes e assinaturas, formatos de arquivo seguros, varredura e avaliação antes do uso. O modelo do fornecedor do DocSort é a maior dependência da cadeia de suprimentos da LCH, e a verificação de assinatura descrita no capítulo de criptografia o cobre. As bibliotecas do Ask Lumen têm versões fixadas num arquivo de lock, e as atualizações passam por revisão. A LCH evita formatos de arquivo de modelo que podem executar código ao serem carregados, o que remove um caminho pelo qual um download adulterado poderia rodar em seus servidores.

22.3 Documentação

Os datasheets para conjuntos de dados (Gebru et al., arXiv:1803.09010) registram motivação, composição, coleta, pré-processamento e usos recomendados. Os model cards (Mitchell et al., arXiv:1810.03993) registram uso pretendido, avaliação, limitações e considerações éticas. Ambos ajudam outras pessoas a julgar se uma dependência é segura para o seu uso. Rina escreveu um datasheet para as cartas de treinamento do DocSort. Escrevê-lo revelou que ninguém sabia quais meses de cartas estavam incluídos nem como os casos ambíguos haviam sido rotulados. O model card que ela pediu ao fornecedor informava que o modelo fora avaliado com cartas de outro sistema de saúde, o que a LCH registrou como limitação e verificou com seu próprio conjunto de teste.

22.4 Proveniência e integridade

Registre de onde veio cada item de dados e quem o alterou; versione os conjuntos de dados; calcule o hash do conteúdo na coleta; revise amostras de fontes novas; restrinja quem pode rotular. No DocSort, isso significa que cada lote de treinamento registra o terceirizado que o rotulou, a data e um hash do arquivo rotulado. Se um gatilho for encontrado depois, a LCH consegue descobrir quais lotes o contêm e quem os rotulou, retreinar sem eles e decidir se o arranjo com os terceirizados precisa de revisão. Sem esse registro, todo o conjunto de treinamento ficaria sob suspeita.

22.5 Exemplo resolvido (caso sintético da LCH)

O DocSort era retreinado mensalmente com cartas rotuladas por uma equipe terceirizada temporária. Rina não encontrou registro de quem rotulou o quê. Ela introduziu proveniência por lote, uma amostra de revisão por especialista de 5% por lote e uma verificação automática de palavras raras fortemente associadas a um encaminhamento — um detector simples de gatilhos. No primeiro mês, ele sinalizou uma frase-padrão inofensiva usada por um consultório de clínica geral, que foi documentada como benigna. O alarme falso foi útil: mostrou que o detector funcionava e ensinou à equipe como são os gatilhos benignos.

22.6 Erros e limites

Três erros são comuns: rotuladores desconhecidos e dados sem versão; baixar modelos sem verificação; e datasheets e model cards nunca escritos. Sem registros dos rotuladores, um lote envenenado não pode ser rastreado nem removido, que era a situação do DocSort antes das mudanças de Rina. Downloads não verificados deixam um modelo adulterado chegar à produção sem aviso. A falta de datasheets e model cards significa que ninguém consegue julgar se um conjunto de dados ou um modelo serve a um novo uso, então descompassos, como a avaliação do DocSort com cartas de outro sistema de saúde, passam despercebidos até que os resultados decepcionem em produção e os pacientes recebam cartas mal encaminhadas.

Exercícios

Síntese

Dados e dependências moldam o que os modelos aprendem e fazem. Proveniência, verificação, documentação e revisão impedem que entradas envenenadas ou não confiáveis se tornem comportamento em silêncio.

Continue estudando — capítulo 22 de 40

← Capítulo 21 (rascunho) · Índice de capítulos do curso · Capítulo 23 (rascunho) →