Skip to content

Motor de politicas e hooks

O motor de politicas e a camada de aplicacao que fica entre o LLM e o mundo exterior. Ele intercepta cada acao em pontos criticos do fluxo de dados e toma decisoes deterministicas de ALLOW, BLOCK ou REDACT. O LLM nao pode contornar, modificar ou influenciar essas decisoes.

Principio central: aplicacao abaixo do LLM

Camadas de aplicacao de politicas: o LLM fica acima da camada de politicas, que fica acima da camada de execucao

SEGURANCA O LLM fica acima da camada de politicas. Ele pode sofrer

prompt injection, jailbreak ou manipulacao -- e isso nao importa. A camada de politicas e codigo puro que roda abaixo do LLM, examinando requisicoes de acoes estruturadas e tomando decisoes binarias com base em regras de classificacao. Nao ha caminho da saida do LLM ate o contorno dos hooks. :::

Tipos de hooks

Oito hooks de aplicacao interceptam acoes em cada ponto critico do fluxo de dados.

Arquitetura de hooks

Fluxo da cadeia de hooks: PRE_CONTEXT_INJECTION -> Contexto do LLM -> PRE_TOOL_CALL -> Execucao de ferramenta -> POST_TOOL_RESPONSE -> Resposta do LLM -> PRE_OUTPUT -> Canal de saida

Todos os tipos de hooks

HookGatilhoAcoes-chaveModo de falha
PRE_CONTEXT_INJECTIONEntrada externa entra no contextoClassificar entrada, atribuir taint, criar linhagem, varrer injecoesRejeitar entrada
PRE_TOOL_CALLLLM solicita execucao de ferramentaVerificacao de permissoes, limite de taxa, validacao de parametrosBloquear chamada
POST_TOOL_RESPONSEFerramenta retorna dadosClassificar resposta, atualizar taint de sessao, criar/atualizar linhagemRedigir ou bloquear
PRE_OUTPUTResposta prestes a sair do sistemaVerificacao final de classificacao contra destino, varredura de PIIBloquear saida
SECRET_ACCESSPlugin solicita uma credencialRegistrar acesso, verificar permissao contra escopo declaradoNegar credencial
SESSION_RESETUsuario solicita reinicializacao de taintArquivar linhagem, limpar contexto, verificar confirmacaoExigir confirmacao
AGENT_INVOCATIONAgente chama outro agenteVerificar cadeia de delegacao, aplicar teto de taintBloquear invocacao
MCP_TOOL_CALLFerramenta de servidor MCP invocadaVerificacao de politica do Gateway (status do servidor, permissoes de ferramenta, schema)Bloquear chamada MCP

Interface de hooks

Cada hook recebe um contexto e retorna um resultado. O handler e uma funcao sincrona e pura.

typescript
interface HookContext {
  readonly sessionId: SessionId;
  readonly hookType: HookType;
  readonly timestamp: Date;
  // O payload especifico do hook varia por tipo
}

interface HookResult {
  readonly decision: "ALLOW" | "BLOCK" | "REDACT";
  readonly reason: string;
  readonly metadata?: Record<string, unknown>;
}

type HookHandler = (context: HookContext) => HookResult;

HookHandler e sincrono e retorna HookResult diretamente -- nao uma

Promise. Isso e por design. Os hooks devem ser concluidos antes que a acao prossiga, e torna-los sincronos elimina qualquer possibilidade de contorno assincrono. Se um hook expirar, a acao e rejeitada. :::

Garantias dos hooks

Cada execucao de hook possui quatro invariantes:

GarantiaO que significa
DeterministicoA mesma entrada sempre produz a mesma decisao. Sem aleatoriedade. Sem chamadas ao LLM dentro dos hooks. Sem chamadas a APIs externas que afetem decisoes.
SincronoOs hooks sao concluidos antes que a acao prossiga. Contorno assincrono nao e possivel. Timeout equivale a rejeicao.
RegistradoCada execucao de hook e registrada: parametros de entrada, decisao tomada, timestamp e regras de politicas avaliadas.
InfalsificavelA saida do LLM nao pode conter instrucoes de contorno de hooks. A camada de hooks nao tem logica de "fazer parsing da saida do LLM em busca de comandos".

Hierarquia de regras de politicas

As regras de politicas sao organizadas em tres niveis. Niveis superiores nao podem anular niveis inferiores.

Regras fixas (sempre aplicadas, NAO configuraveis)

Essas regras sao hardcoded e nao podem ser desabilitadas por nenhum administrador, usuario ou configuracao:

  • No write-down: O fluxo de classificacao e unidirecional. Os dados nao podem fluir para um nivel inferior.
  • Canais UNTRUSTED: Nenhum dado de entrada ou saida. Ponto final.
  • Taint de sessao: Uma vez elevado, permanece elevado durante toda a vida da sessao.
  • Registro de auditoria: Todas as acoes sao registradas. Sem excecoes. Sem como desabilitar.

Regras configuraveis (ajustaveis pelo administrador)

Os administradores podem ajustar estas por meio da interface ou arquivos de configuracao:

  • Classificacoes padrao de integracoes (ex.: Salesforce tem como padrao CONFIDENTIAL)
  • Classificacoes de canais
  • Listas de permissao/negacao de acoes por integracao
  • Listas de dominios permitidos para comunicacoes externas
  • Limites de taxa por ferramenta, por usuario ou por sessao

Escotilha de escape declarativa (empresarial)

Implantacoes empresariais podem definir regras de politicas personalizadas em YAML estruturado para cenarios avancados:

yaml
# Bloquear qualquer consulta ao Salesforce que contenha padroes de SSN
hook: POST_TOOL_RESPONSE
conditions:
  - tool_name: salesforce.*
  - content_matches: '\b\d{3}-\d{2}-\d{4}\b'
action: REDACT
redaction_pattern: "[SSN REDACTED]"
log_level: ALERT
notify: security-team@company.com
yaml
# Exigir aprovacao para transacoes de alto valor
hook: PRE_TOOL_CALL
conditions:
  - tool_name: stripe.create_charge
  - parameter.amount: ">10000"
action: REQUIRE_APPROVAL
approvers:
  - role: finance-admin
timeout: 1h
timeout_action: DENY
yaml
# Restricao por horario: nao enviar para externos fora do horario
hook: PRE_OUTPUT
conditions:
  - recipient_type: EXTERNAL
  - time_of_day: "18:00-08:00"
  - day_of_week: "Mon-Fri"
action: BLOCK
reason: "Comunicacoes externas restritas fora do horario comercial"

As regras YAML personalizadas devem passar por validacao antes de serem

ativadas. Regras invalidas sao rejeitadas no momento da configuracao, nao em tempo de execucao. Isso evita que erros de configuracao criem brechas de seguranca. :::

Experiencia do usuario na negacao

Quando o motor de politicas bloqueia uma acao, o usuario ve uma explicacao clara -- nao um erro generico.

Padrao (especifico):

Nao posso enviar dados confidenciais para um canal publico.

  -> Reiniciar sessao e enviar mensagem
  -> Cancelar

Opcional (educativo):

Nao posso enviar dados confidenciais para um canal publico.

Por que: Esta sessao acessou o Salesforce (CONFIDENTIAL).
O WhatsApp pessoal e classificado como PUBLIC.
Os dados so podem fluir para classificacao igual ou superior.

Opcoes:
  -> Reiniciar sessao e enviar mensagem
  -> Pedir ao seu administrador para reclassificar o canal do WhatsApp
  -> Saiba mais: [link da documentacao]

O modo educativo e opcional e ajuda os usuarios a entender por que uma acao foi bloqueada, incluindo qual fonte de dados causou a escalacao de taint e qual e a incompatibilidade de classificacao. Ambos os modos oferecem proximos passos acionaveis em vez de erros sem saida.

Como os hooks se encadeiam

Em um ciclo tipico de requisicao/resposta, multiplos hooks sao executados em sequencia. Cada hook tem visibilidade completa das decisoes tomadas pelos hooks anteriores na cadeia.

O usuario envia: "Verifique meu pipeline do Salesforce e mande uma mensagem para minha esposa"

1. PRE_CONTEXT_INJECTION
   - Entrada do proprietario, classificada como PUBLIC
   - Taint de sessao: PUBLIC

2. PRE_TOOL_CALL (salesforce.query_opportunities)
   - Ferramenta permitida? SIM
   - O usuario tem conexao com o Salesforce? SIM
   - Limite de taxa? OK
   - Decisao: ALLOW

3. POST_TOOL_RESPONSE (resultados do Salesforce)
   - Dados classificados: CONFIDENTIAL
   - Taint de sessao escala: PUBLIC -> CONFIDENTIAL
   - Registro de linhagem criado

4. PRE_TOOL_CALL (whatsapp.send_message)
   - Ferramenta permitida? SIM
   - Decisao: ALLOW (verificacao no nivel da ferramenta passa)

5. PRE_OUTPUT (mensagem para a esposa via WhatsApp)
   - Taint de sessao: CONFIDENTIAL
   - Classificacao efetiva do destino: PUBLIC (destinatario externo)
   - CONFIDENTIAL -> PUBLIC: BLOQUEADO
   - Decisao: BLOCK
   - Motivo: "classification_violation"

6. O agente apresenta a opcao de reinicializacao ao usuario