Capítulo 7 — Segurança de IA e aprendizado de máquina: dados e telemetria
Mapa da aula
Aula 07 publicada. Mapa, exemplo, EX025.
flowchart TD
N0["7.1 Dados que um serviço de IA usa"]
N1["7.2 Controlando as mudanças"]
N2["7.3 Telemetria"]
N3["7.4 Dados pessoais na telemetria"]
N4["Síntese"]
N0 --> N1 --> N2 --> N3 --> N4
N4 --> EX["Exemplo resolvido"]
EX --> Q["Exercício EX025"]
Desenho lógico
flowchart LR
N0["7.1 Dados que um serviço de IA usa"]
N1["7.2 Controlando as mudanças"]
N2["7.3 Telemetria"]
N3["7.4 Dados pessoais na telemetria"]
N4["Síntese"]
N0 --> N1 --> N2 --> N3 --> N4 --> Q["EX025"]
[7.1 Dados que um serviço de IA usa]
|
v
[7.2 Controlando as mudanças]
|
v
[7.3 Telemetria]
|
v
[7.4 Dados pessoais na telemetria]
|
v
[Síntese]
|
v
[Exemplo resolvido] --> [Exercício EX025]
Objetivos de aprendizagem
Você vai (1) gerenciar os dados que um serviço de IA usa — conjuntos de treinamento, índices, registros; (2) controlar quem pode alterá-los; (3) coletar a telemetria necessária para a segurança; (4) proteger os dados pessoais presentes na telemetria.
7.1 Dados que um serviço de IA usa
O SpamShield aprende com mensagens rotuladas; o HelpBot recupera conteúdo de um índice de artigos de ajuda; ambos produzem registros. Cada conjunto de dados tem um responsável, uma classe de sensibilidade e uma lista de pessoas que podem alterá-lo. Mudanças nos dados de treinamento e nos índices mudam o comportamento do sistema tão certamente quanto mudanças no código. Na Kestrel, os responsáveis são concretos. O índice de artigos de ajuda pertence à equipe de conteúdo, e só os responsáveis pelo conteúdo podem publicar; o incidente da restauração de fábrica começou quando a conta de um prestador de serviço publicou sem revisão. Os rótulos de treinamento do SpamShield pertencem à equipe de dados e incluem o feedback dos clientes, e foi assim que 900 denúncias em massa de "não é spam" chegaram a uma rodada de treinamento. A telemetria do LineWatch pertence às operações de rede. O inventário de Ana listou cada conjunto com seu responsável, sua sensibilidade e as contas capazes de alterá-lo.
7.2 Controlando as mudanças
Restrinja quem pode acrescentar ou editar documentos indexados e rótulos de treinamento. Registre cada mudança com quem, quando e o quê. Revise as novas fontes antes de indexá-las. Os ataques de envenenamento — corromper rótulos ou plantar gatilhos de backdoor (Gu et al., arXiv:1708.06733) — dependem de um controle de mudanças frouxo.
"""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
Depois do incidente do SpamShield, a regra da Kestrel para os dados de treinamento passou a ser: o feedback de uma conta vale no máximo um peso fixo, o feedback em massa acima de um limiar fica retido para revisão, e cada rodada de treinamento registra quais lotes de feedback usou. No índice de artigos, cada publicação registra a conta do autor e o revisor. Esses registros permitiram que Ana encontrasse rapidamente as 900 denúncias e o artigo do prestador de serviço; sem eles, as duas investigações teriam partido apenas dos sintomas.
7.3 Telemetria
Colete: contagens de requisições e de tokens por conta; IDs dos documentos recuperados para cada resposta; chamadas de ferramentas com parâmetros e resultados; decisões de política; versões do modelo e do prompt; erros. Para classificadores: distribuições de pontuação e feedback de rótulos. Use um ID de requisição compartilhado, para que uma conversa possa ser acompanhada de ponta a ponta. Cada campo respondeu a uma pergunta num incidente da Kestrel. Os IDs dos documentos recuperados para cada resposta apontaram o artigo da restauração de fábrica em menos de uma hora. As chamadas de ferramentas com parâmetros revelaram as três contas com mais de 50 reinicializações. Os tokens por conta mostraram o fim de semana das 40.000 mensagens. As versões do modelo e do prompt descartaram uma mudança de modelo no caso da restauração de fábrica. No SpamShield, o feedback de rótulos por conta mostrou as 900 denúncias. O ID de requisição compartilhado é o que permite a um técnico juntar esses registros para uma única conversa.
7.4 Dados pessoais na telemetria
Os registros costumam conter nomes, endereços e números de conta. Mascare ou pseudonimize sempre que possível, restrinja o acesso e defina prazos de retenção. Uma telemetria que vaza dados de clientes cria o problema que deveria detectar. Para o HelpBot, a proposta de Ana manteve os IDs de conta, mas substituiu nomes, endereços e números de telefone no texto das conversas por marcadores antes de os registros saírem do orquestrador, limitou o acesso às conversas brutas ao líder de plantão e definiu 30 dias de retenção para o texto das conversas e um prazo mais longo para os registros de chamadas de ferramentas. Um cliente que digita o endereço de casa para relatar uma falha não deveria encontrá-lo num painel que dezenas de funcionários podem ler. O contador de reinicializações e as buscas por canários funcionaram ambos sobre os registros mascarados.
7.5 Exemplo resolvido (caso sintético da Kestrel)
A acurácia do SpamShield está estável, mas os clientes reclamam de um tipo de mensagem de golpe que está passando. Ana confere o feedback de rótulos: uma conta havia enviado 900 denúncias de "não é spam" para mensagens que continham um determinado link curto. O laboratório mostra como um backdoor pode deixar inalterada a acurácia nos dados limpos enquanto faz as entradas com gatilho passarem. A equipe limita o peso do feedback por conta, revisa o feedback em massa antes do treinamento e acrescenta um conjunto de teste com padrões de golpe conhecidos. O laboratório explica por que a acurácia escondeu o problema. Com 80 pontos envenenados com gatilho, a acurácia nos dados limpos ficou em 0,968 enquanto o gatilho funcionou em 98% das vezes; com 10 pontos, a taxa subiu só para 14,5%, contra uma referência de 7,5%, e com 40 pontos saltou para 68,5%. Um volume de 900 denúncias de uma única conta está muito acima dessa faixa. A acurácia geral, portanto, não é uma verificação de segurança: só um conjunto de teste contendo o próprio padrão do golpe teria mostrado a falha.
7.6 Erros e limites
Três erros são comuns: índices que qualquer pessoa pode editar; telemetria sem IDs de requisição; e dados pessoais não mascarados nos registros. Cada um deles atingiu a Kestrel. Um índice que qualquer pessoa podia editar permitiu que um prestador de serviço publicasse o artigo da restauração de fábrica e que outra edição mandasse o HelpBot reiniciar roteadores cinco vezes. Sem IDs de requisição, ligar uma resposta ruim ao artigo que ela recuperou significaria cruzar à mão as marcas de horário de três registros. Dados pessoais não mascarados nos registros transformam cada sessão de diagnóstico numa exposição de privacidade; as cópias mascaradas bastaram para todas as verificações descritas neste capítulo.
Exercícios
- EX025 — Controle de mudanças. Escreva uma regra de controle de mudanças para o índice de artigos do HelpBot. Rubrica: 3 = quem pode editar, revisão, registro, reversão; 2 = três; 1 = um ou dois; 0 = nada.
- EX026 — Laboratório de envenenamento. Interprete as linhas de backdoor do laboratório. Rubrica: 3 = o sucesso do ataque sobe, a acurácia limpa fica estável, implicação; 2 = dois; 1 = um; 0 = errado.
- EX027 — Lista de telemetria. Liste seis campos de telemetria e por que cada um importa. Rubrica: 3 = seis com razões; 2 = quatro; 1 = dois; 0 = nenhum.
- EX028 — Mascaramento. Proponha mascaramento e retenção para os registros do HelpBot. Rubrica: 3 = campos mascarados, acesso, prazo de retenção; 2 = dois; 1 = um; 0 = nada.
Síntese
Os dados e a telemetria moldam e revelam o comportamento da IA: controle quem altera os dados, colete telemetria rastreável e proteja os dados pessoais que ela contém.
Continue estudando — capítulo 07 de 18
← Capítulo 06 (rascunho) · Índice de capítulos do curso · Capítulo 08 (rascunho) →