Mapa da aula
Aula 15 publicada. Mapa, exemplo, EX057.
flowchart TD
N0["15.1 Dependências"]
N1["15.2 Verificações de fornecedores e de código aberto"]
N2["15.3 Integrações seguras"]
N3["15.4 Avisos de segurança"]
N4["15.4b Acompanhando as mudanças"]
N5["Síntese"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5
N5 --> EX["Exemplo resolvido"]
EX --> Q["Exercício EX057"]
Desenho lógico
flowchart LR
N0["15.1 Dependências"]
N1["15.2 Verificações de fornecedores e de código aberto"]
N2["15.3 Integrações seguras"]
N3["15.4 Avisos de segurança"]
N4["15.4b Acompanhando as mudanças"]
N5["Síntese"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> Q["EX057"]
[15.1 Dependências]
|
v
[15.2 Verificações de fornecedores e de código aberto]
|
v
[15.3 Integrações seguras]
|
v
[15.4 Avisos de segurança]
|
v
[15.4b Acompanhando as mudanças]
|
v
[Síntese]
|
v
[Exemplo resolvido] --> [Exercício EX057]
Objetivos de aprendizagem
Você vai (1) listar as dependências de um serviço de IA; (2) verificar componentes de fornecedores e de código aberto; (3) proteger as integrações entre serviços; (4) responder a avisos de segurança sobre dependências.
15.1 Dependências
Um serviço de IA depende de: o modelo (API do fornecedor ou arquivo), bibliotecas (orquestração, recuperação, análise de documentos), o banco de dados vetorial, os serviços de ferramentas, o provedor de identidade e o cofre de segredos. Uma falha na cadeia de suprimentos de qualquer um deles afeta o serviço — OWASP LLM03 Supply Chain. No HelpBot, isso significa: a API do modelo do fornecedor, a biblioteca de orquestração, a biblioteca de análise de documentos usada na ingestão, o banco de dados vetorial que guarda o índice de artigos, os serviços de chamados e de gerenciamento de roteadores, o provedor de identidade que autentica os clientes e o cofre de segredos que guarda a chave de API e a credencial do roteador. O aviso sobre a biblioteca de análise de documentos mostrou que uma biblioteca que os clientes nunca veem ainda pode ser o ponto mais fraco, já que ela processa todos os arquivos enviados ao índice.
15.2 Verificações de fornecedores e de código aberto
Para fornecedores de modelos: uso e retenção dos dados, fixação de versão, aviso de mudanças, notificação de incidentes. Para modelos e bibliotecas de código aberto: origem, licença, manutenção, vulnerabilidades conhecidas, formato de arquivo (evite formatos que executam código ao carregar) e fixação por hash. Mantenha uma lista de todos os componentes e versões (uma lista de materiais). A lista de materiais da Kestrel registra cada componente do HelpBot com sua versão e sua imagem. A lacuna dela era o modelo do fornecedor, que não tinha entrada porque ninguém o instalou; Ana acrescentou a versão fixada do modelo e o endereço de avisos de mudança do fornecedor. Para o modelo do LineWatch, hospedado pela própria empresa, a verificação inclui o formato do arquivo: um formato que roda código ao carregar, combinado com trust_remote_code na configuração, é o caso que a divergência em config.yaml no laboratório de hashes ilustra.
15.3 Integrações seguras
Cada integração tem um contrato escrito: dados trocados, formato, validação, autenticação, limites, tratamento de erros. Trate os dados vindos de outros serviços — inclusive de outros serviços de IA — como não confiáveis. Em caso de erro, falhe de forma fechada. O contrato do HelpBot com o serviço de gerenciamento de roteadores é um exemplo: o serviço de ferramentas envia um ID de roteador que corresponde a R- mais cinco dígitos e a identidade do cliente, por TLS mútuo, com no máximo 3 reinicializações por roteador por dia; qualquer erro, tempo esgotado ou campo inesperado significa nenhuma reinicialização e uma negação registrada. Falhar de forma fechada significa que, quando o banco de dados de contas está inacessível, a verificação de titularidade recusa em vez de permitir, como fez com o cliente cujo ID de roteador estava ausente.
15.4 Avisos de segurança
Quando um aviso de segurança é publicado (uma vulnerabilidade de biblioteca, um incidente de fornecedor), consulte a lista de materiais, avalie a exposição, corrija ou mitigue, verifique com a bateria de testes e registre o que foi feito.
"""Lab V: an AI system inventory scored for review priority (synthetic).
Each system lists exposure, autonomy, data sensitivity and whether it reads
untrusted content; mapping to OWASP LLM Top 10 (2025) IDs is illustrative."""
import json
inv = json.loads("""[
{"name":"support-chatbot","exposure":"public","autonomy":"tools","data":"customer","untrusted_input":true},
{"name":"invoice-ocr-model","exposure":"internal","autonomy":"none","data":"financial","untrusted_input":true},
{"name":"code-assistant","exposure":"internal","autonomy":"suggest","data":"source","untrusted_input":true},
{"name":"churn-predictor","exposure":"internal","autonomy":"none","data":"customer","untrusted_input":false},
{"name":"hr-cv-screener","exposure":"internal","autonomy":"decide","data":"personal","untrusted_input":true}
]""")
E = {"public": 3, "internal": 1}; A = {"none": 0, "suggest": 1, "tools": 3, "decide": 3}
D = {"customer": 2, "financial": 2, "source": 2, "personal": 3}
for s in inv:
s["score"] = E[s["exposure"]] + A[s["autonomy"]] + D[s["data"]] + (2 if s["untrusted_input"] else 0)
risks = []
if s["untrusted_input"]: risks.append("LLM01")
if s["autonomy"] in ("tools", "decide"): risks.append("LLM06")
if s["data"] in ("customer", "personal"): risks.append("LLM02")
s["owasp"] = ",".join(risks) or "-"
for s in sorted(inv, key=lambda s: -s["score"]):
print(f"{s['name']:18s} score={s['score']:2d} owasp={s['owasp']}")
Saída esperada:
support-chatbot score=10 owasp=LLM01,LLM06,LLM02
hr-cv-screener score= 9 owasp=LLM01,LLM06,LLM02
code-assistant score= 6 owasp=LLM01
invoice-ocr-model score= 5 owasp=LLM01
churn-predictor score= 3 owasp=LLM02
No aviso sobre a biblioteca de análise de documentos, essas etapas levaram dois dias. A lista de materiais mostrou que a imagem de ingestão do HelpBot usava uma versão afetada. A exposição era real, mas estreita: só os arquivos que entravam no índice eram analisados, então pausar a ingestão a conteve. A atualização foi reconstruída pelo pipeline, a bateria do HelpBot rodou na homologação e passou, a ingestão foi retomada, e o registro listou o aviso, as versões antes e depois e os resultados dos testes.
15.4b Acompanhando as mudanças
Assine os avisos de segurança das suas principais bibliotecas e os avisos de mudança do fornecedor do seu modelo. Quando um fornecedor anunciar uma atualização de modelo, planeje um novo teste na homologação antes que a mudança chegue à produção, ou fixe a versão antiga até tê-lo feito. A Kestrel fixa a versão do modelo do fornecedor do HelpBot e recebe os avisos de mudança do fornecedor na caixa de correio das operações de serviço. Quando uma nova versão é anunciada, a bateria do HelpBot roda primeiro contra ela na homologação; a versão antiga continua fixada até o portão passar. É isso que mantém o "modelo" como uma causa verificada no diagnóstico, e não um palpite.
15.5 Exemplo resolvido (caso sintético da Kestrel)
Uma biblioteca popular de análise de documentos, usada pelo pipeline de recuperação do HelpBot, tem uma vulnerabilidade que permite que arquivos construídos executem código. Ana consulta a lista de materiais: a versão é afetada. Mitigação no mesmo dia: pausar a ingestão de documentos novos; no dia seguinte: atualizar, reconstruir, rodar a bateria, retomar a ingestão. Ela também acrescenta à lista de materiais a versão do modelo do fornecedor, que estava faltando. A pausa da ingestão foi escolhida porque eliminava a exposição sem tirar o HelpBot do ar: os clientes continuaram recebendo respostas a partir do índice existente, e só os artigos novos esperaram um dia. A versão do modelo que faltava foi encontrada porque Ana percorreu a lista de materiais linha por linha durante o aviso, e não apenas a biblioteca afetada.
15.6 Erros e limites
Três erros são comuns: não ter lista de materiais; confiar na saída de outro serviço; e carregar arquivos de modelo em formatos que executam código. Sem uma lista de materiais, o aviso sobre a biblioteca de análise teria exigido conferir cada imagem à mão enquanto a ingestão continuava aberta. Confiar na saída de outro serviço deixaria um sistema de chamados comprometido devolver instruções ao HelpBot pelo texto dos chamados. Carregar arquivos de modelo em formatos que executam código transforma um modelo do LineWatch trocado em código rodando dentro da rede da Kestrel, e é por isso que a verificação de hash e a montagem somente leitura andam juntas. Durante o aviso sobre a biblioteca de análise, Ana confirmou que o arquivo de modelo do LineWatch usava um formato que não roda código ao carregar.
Exercícios
- EX057 — Dependências. Liste oito dependências do HelpBot. Rubrica: 3 = oito pertinentes; 2 = seis; 1 = três; 0 = menos.
- EX058 — Perguntas ao fornecedor. Escreva quatro perguntas para um fornecedor de modelos. Rubrica: 3 = quatro pertinentes; 2 = três; 1 = uma ou duas; 0 = nenhuma.
- EX059 — Aviso de segurança. Escreva como procedimento as etapas que Ana seguiu. Rubrica: 3 = consultar a lista de materiais, avaliar, mitigar, corrigir, verificar, registrar; 2 = quatro; 1 = duas; 0 = nenhuma.
- EX060 — Laboratório de inventário. Por que o laboratório dá pontuação mais alta a alguns sistemas? Rubrica: 3 = entrada não confiável, ferramentas, dados; 2 = dois; 1 = um; 0 = errado.
Síntese
Os serviços de IA só são tão seguros quanto suas dependências: liste-as, verifique-as, defina contratos de integração e responda rapidamente aos avisos de segurança.
Continue estudando — capítulo 15 de 18
← Capítulo 14 (rascunho) · Índice de capítulos do curso · Capítulo 16 (rascunho) →