OpenCyber Academy
Técnico · Capítulo 15 · Português
Código do curso: OCA-066Capítulo 15: OCA-066-C015

Capítulo 15 — Segurança de IA e aprendizado de máquina: integração 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.

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

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

Respostas comentadas

EX057. A API do modelo do fornecedor, a biblioteca de orquestração, a biblioteca de análise de documentos, o banco de dados vetorial, o serviço de chamados, o serviço de gerenciamento de roteadores, o provedor de identidade e o cofre de segredos.

EX058. 1. Nossos dados são usados para treinamento, e por quanto tempo são retidos? 2. Podemos fixar versões e receber aviso prévio de mudanças? 3. Qual é o prazo de notificação de incidentes? 4. Que testes de segurança vocês fazem, e podemos ver um resumo?

EX059. 1. Consultar a lista de materiais para o componente e a versão afetados. 2. Avaliar a exposição: que caminhos processam arquivos não confiáveis. 3. Mitigar imediatamente, por exemplo pausando a ingestão. 4. Corrigir ou atualizar e depois reconstruir. 5. Rodar a bateria de testes. 6. Retomar e registrar as ações e as datas.

EX060. Sistemas com entrada não confiável, ferramentas que agem e dados pessoais recebem pontuação mais alta, porque mais coisas podem dar errado e o dano é maior.