◇ OpenCyber Academy
Tecnólogo · Capítulo 6 · Português

Capítulo 6 — Sistemas operacionais e virtualização

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 6 — Sistemas operacionais e virtualização

Mapa da aula

Aula 06 publicada. Mapa, exemplo, EX016.

flowchart TD
  N0["6.1 Processos e permissões"]
  N1["6.2 Contêineres e máquinas virtuais"]
  N2["6.3 Sandbox para código gerado"]
  N3["6.4 Arquivos de modelos em repouso"]
  N4["Síntese"]
  N0 --> N1 --> N2 --> N3 --> N4
  N4 --> EX["Exemplo resolvido"]
  EX --> Q["Exercício EX016"]

Desenho lógico

flowchart LR
  N0["6.1 Processos e permissões"]
  N1["6.2 Contêineres e máquinas virtuais"]
  N2["6.3 Sandbox para código gerado"]
  N3["6.4 Arquivos de modelos em repouso"]
  N4["Síntese"]
  N0 --> N1 --> N2 --> N3 --> N4 --> Q["EX016"]
[6.1 Processos e permissões]
    |
    v
[6.2 Contêineres e máquinas virtuais]
    |
    v
[6.3 Sandbox para código gerado]
    |
    v
[6.4 Arquivos de modelos em repouso]
    |
    v
[Síntese]
    |
    v
[Exemplo resolvido] --> [Exercício EX016]

Objetivos de aprendizagem

Você vai (1) explicar processos, usuários, permissões de arquivos e isolamento; (2) usar contêineres e máquinas virtuais para isolar componentes de IA; (3) isolar em sandbox o código gerado ou executado por ferramentas de IA; e (4) proteger arquivos de modelos em repouso.

6.1 Processos e permissões

Todo serviço roda como um processo sob uma conta de usuário. Se o orquestrador roda como root, um bug se torna um comprometimento completo do sistema. Rode cada componente com seu próprio usuário de baixo privilégio, com acesso de leitura apenas aos arquivos de que precisa. No Ask Brightwell, o orquestrador, o serviço de recuperação e os serviços de ferramentas rodam cada um sob sua própria conta, de modo que um bug no orquestrador não consegue ler diretamente o banco de dados de pedidos. A conta da ferramenta de pedidos pode ler pedidos, mas não alterá-los, e a conta da ferramenta de devoluções pode criar devoluções, mas não pode ler outras tabelas. Jonas confirma isso na homologação enviando uma consulta à tabela de pedidos com a conta do orquestrador e verificando que o banco de dados a recusa.

6.2 Contêineres e máquinas virtuais

Contêineres empacotam um serviço com suas dependências e o isolam usando recursos do kernel; máquinas virtuais isolam com mais força, com um kernel separado. Rode servidores de modelo, recuperação e serviços de ferramentas em contêineres separados, com imagens mínimas, sistemas de arquivos somente leitura sempre que possível e nenhum acesso de rede desnecessário. No CodePilot, o servidor do modelo hospedado internamente roda em seu próprio contêiner, com sistema de arquivos somente leitura, de modo que um servidor comprometido não consegue reescrever os arquivos do modelo. Os serviços de ferramentas do Ask Brightwell ficam em contêineres separados, com regras de rede que permitem apenas ao orquestrador chamá-los. Imagens separadas também deixam claro qual componente precisa de qual segredo.

6.3 Sandbox para código gerado

Assistentes de programação e agentes com uma ferramenta de "executar código" executam texto produzido por um modelo — texto que um atacante pode influenciar. Rode esse código numa sandbox descartável: sem rede por padrão, sem acesso a segredos, com limites de CPU e memória, um tempo-limite e destruição após o uso. O botão original de "executar testes" do CodePilot violava todas essas regras: rodava o código gerado num servidor de compilação compartilhado que tinha chaves de implantação. O novo desenho inicia um contêiner novo para cada execução, sem rede, sem segredos e com tempo-limite, e o destrói depois. Um comentário plantado ainda pode moldar o código, mas o código já não alcança nada de valor.

6.4 Arquivos de modelos em repouso

Arquivos de pesos de modelos podem ser trocados ou adulterados. Alguns formatos (por exemplo, arquivos baseados em pickle do Python) podem executar código quando carregados. Prefira formatos que armazenam apenas tensores, verifique os hashes antes de carregar e restrinja quem pode gravar nos diretórios de modelos.

"""Lab H: integrity of model artefacts with SHA-256 manifests (stdlib only).
Creates synthetic 'artefact' bytes, records a manifest, then detects a
one-byte tampering and a swapped file. No real models are involved."""
import hashlib, json
files = {"model.bin": bytes(range(256)) * 40, "tokenizer.json": b'{"vocab": ["a", "b"]}',
         "config.yaml": b"layers: 4\nheads: 8\n"}
manifest = {n: hashlib.sha256(b).hexdigest() for n, b in files.items()}
print(json.dumps({k: v[:16] for k, v in manifest.items()}, indent=1))
received = dict(files)
tampered = bytearray(received["model.bin"]); tampered[5000] ^= 1
received["model.bin"] = bytes(tampered)
received["config.yaml"] = b"layers: 4\nheads: 8\ntrust_remote_code: true\n"
for n, b in sorted(received.items()):
    ok = hashlib.sha256(b).hexdigest() == manifest[n]
    print(f"{n:15s} {'OK' if ok else 'MISMATCH'}")

Saída esperada:

{
 "model.bin": "e96760a87768717b",
 "tokenizer.json": "f63d2ddabc61f2d9",
 "config.yaml": "e5bbb570ca0fcb87"
}
config.yaml     MISMATCH
model.bin       MISMATCH
tokenizer.json  OK

Para o modelo hospedado internamente do CodePilot, a Brightwell guarda o hash esperado de cada arquivo no controle de versão, e o carregador se recusa a iniciar se algum arquivo for diferente. Apenas a conta do pipeline de implantação pode gravar no diretório de modelos, e ela registra cada gravação, de modo que um arquivo trocado seria ao mesmo tempo bloqueado e visível.

6.5 Exemplo resolvido (caso sintético da Brightwell)

O CodePilot oferece um botão de "executar testes" que roda o código gerado num servidor de compilação compartilhado com acesso a chaves de implantação. Jonas mostra, numa cópia, que um comentário num arquivo de código aberto baixado pode levar o assistente a escrever código que imprime as variáveis de ambiente. Ele move a execução para um contêiner descartável, sem rede e sem segredos, e acrescenta verificações de hash para os arquivos do modelo hospedado internamente; o laboratório mostra como um arquivo alterado é detectado. O comentário plantado não precisou explorar nada: bastou persuadir o assistente, e o acesso do servidor de compilação fez o resto.

6.6 Erros e limites

Três erros são comuns: serviços rodando como root; executar código gerado por modelo em máquinas compartilhadas; e carregar arquivos de modelos sem verificações de integridade. O desenho original do CodePilot tinha o segundo erro, e o orquestrador anterior do Ask Brightwell corria o risco do primeiro. As mudanças deste capítulo dão a cada serviço sua própria conta, movem o código gerado para um contêiner descartável e verificam os hashes dos arquivos do modelo antes de carregá-los. Cada erro é barato de evitar quando um serviço é construído e caro de corrigir quando outros sistemas já dependem dele. O pipeline agora executa uma verificação para cada erro em toda implantação.

Exercícios

Síntese

O isolamento no sistema operacional limita o que um componente de IA comprometido pode fazer: contas de menor privilégio, contêineres, sandboxes descartáveis e arquivos de modelos verificados.

Continue estudando — capítulo 06 de 30

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