MÓDULO 4.4

📋 Auditoria recorrente + skill semanal

Segurança que depende da sua memória falha. Cron + skill = auditoria automática. Heartbeat de saúde, rotação periódica de tokens e pós-incidente que vira aprendizado persistente.

6
Tópicos
25
Minutos
Inter.
Nível
Hands
Tipo
1

⏰ Por que automação de segurança importa

Auditoria manual é boa nas duas primeiras semanas. Depois vira "vou fazer no fim de semana", e aí "depois das férias", e aí nunca mais. Cron resolve: máquina não esquece, não cansa, não posterga.

⚖️ Manual vs automatizado

Manual

  • • Depende da sua disciplina
  • • Posterga em momento de stress
  • • Falha quando mais precisa
  • • Resultado inconsistente

Automatizado

  • • Cron executa sozinho
  • • Não tem mau humor nem férias
  • • Sempre roda no horário
  • • Você só revisa o relatório

⏱️Frequência ideal

  • Pesado (auditoria completa) — 1× por semana
  • Leve (heartbeat de RAM/disco) — a cada 5 min
  • Trimestral (rotação de tokens) — a cada 90 dias
  • Anual (revisão completa de arquitetura) — uma vez por ano

Frequência muito alta vira ruído ignorado. Muito baixa perde o evento. Calibre.

2

📜 Skill auditoria-vps

Em vez de descrever o procedimento toda vez, encapsule em uma SKILL.md em ~/.hermes/skills/auditoria-vps/. Procedimento claro = execução previsível. Você revisa um relatório consistente.

📄Estrutura da SKILL.md

---
name: auditoria-vps
description: Auditoria semanal de segurança e saúde da VPS
version: 1.0.0
metadata:
  hermes:
    tags: [security, devops, audit]
    category: security
---
# Auditoria VPS

## When to Use
Cron semanal de domingo 9h, ou sob demanda em
incidente.

## Procedure
1. Portas abertas: `ss -tlnp` e `ufw status verbose`
2. Processos top: `ps aux --sort=-%mem | head -20`
3. Espaço em disco: `df -h` e `du -sh /var/log/*`
4. Logs estranhos: `tail -100 /var/log/auth.log`
5. fail2ban: `fail2ban-client status sshd`
6. Atualizações: `apt list --upgradable`
7. Containers: `docker ps -a`, `docker stats --no-stream`

## Verification
- Relatório tem todas as 7 seções
- Anomalias destacadas no topo
- Sugestões de ação com prioridade

## Pitfalls
- Logs de auth.log podem ser longos — pegar só ~100 linhas
- df -h em ZFS pode mostrar números enganosos
- Containers parados também precisam ser auditados

🎯 Os 7 checks principais

  1. 1.Portas abertas — alguma nova que não deveria estar?
  2. 2.Processos suspeitos — top consumidores de CPU/RAM
  3. 3.Espaço em disco — partições próximas de 90%
  4. 4.Logs estranhos — auth.log, syslog, kern.log
  5. 5.fail2ban status — quantos IPs banidos esta semana?
  6. 6.Pacotes desatualizados — security updates pendentes
  7. 7.Containers — algum reiniciando, com OOM, parado inesperadamente?
3

📅 Cron semanal de segurança

Domingo 9h é o slot ideal: você acorda no fim de semana com café, lê o relatório, age se for o caso. Sem pressão da semana de trabalho. O Hermes injeta a skill na sessão fresh e roda sozinho.

⌨️Comando

/cron add "every Sunday at 09:00" \
  "Rode auditoria-vps e me mande o relatório no Telegram. Destaque anomalias no topo." \
  --skill auditoria-vps \
  --deliver telegram

🚩 Flags importantes

  • --skill auditoria-vps — injeta a skill na sessão fresh do cron
  • --deliver telegram — entrega o relatório no Telegram (ou discord, all, origin)
  • --workdir /path — define cwd se houver contexto específico
  • --name "auditoria-semanal" — nomeia o job para fácil gestão

🔧 Como funciona internamente

  1. 1. Scheduler lê ~/.hermes/cron/jobs.json a cada tick
  2. 2. Vê job vencido: domingo 9h chegou
  3. 3. Inicia sessão fresh do AIAgent
  4. 4. Injeta a skill auditoria-vps no system prompt
  5. 5. Executa o prompt até conclusão
  6. 6. Entrega no Telegram
  7. 7. Atualiza next_run_at
4

💓 Cron a cada 5 min em --no-agent

Modo --no-agent roda script sem chamar LLM. Custo zero. Um script Bash checa RAM e disco, sai silencioso se OK, retorna erro se passar do threshold. Sinal-ruído altíssimo.

📜memory-watchdog.sh

#!/bin/bash
# Checa RAM e disco. Silent se OK, exit 1 se crítico.

RAM_USED=$(free | awk '/Mem:/ {print int($3/$2 * 100)}')
DISK_USED=$(df / | awk 'NR==2 {print int($5)}')

if [ "$RAM_USED" -gt 90 ]; then
  echo "ALERTA: RAM em ${RAM_USED}%"
  exit 1
fi

if [ "$DISK_USED" -gt 85 ]; then
  echo "ALERTA: Disco em ${DISK_USED}%"
  exit 1
fi

# Tudo OK, sai sem output (silent tick)
exit 0

📅 Comando do cron

hermes cron create "every 5m" \
  --no-agent \
  --script memory-watchdog.sh \
  --deliver telegram \
  --name "memory-watchdog"

Comportamento:

  • stdout vazio + exit 0 → tick silencioso, nada é entregue
  • exit não-zero → alerta de erro entregue no Telegram
  • Scripts .sh/.bash rodam sob /bin/bash

💡Por que --no-agent

A cada 5 min × 30 dias = ~8.640 execuções/mês. Com LLM, isso queimaria budget significativo. Com --no-agent, custo zero. Use LLM só quando precisa de raciocínio.

5

🔄 Rotação de tokens

Token vazado meses atrás e não trocado é vulnerabilidade silenciosa. Mesmo se você nunca souber do leak, rotação periódica garante que a janela de exposição é limitada. 90 dias é o padrão razoável.

⌨️Cron de lembrete

/cron add "every 90 days" \
  "Hora de rotar tokens. Liste:
   1. GitHub fine-grained tokens (verifique expiração)
   2. OpenRouter API keys
   3. OpenAI project keys
   4. Telegram bot tokens (se houve incidente)
   5. SSH keys (verificar authorized_keys)
   Avise quais foram trocados. Atualize MEMORY.md."

📋 Procedimento de rotação

  1. 1.Gere nova chave no provedor
  2. 2.Teste a nova chave em ambiente isolado
  3. 3.hermes config set KEY nova_chave
  4. 4.Reinicie gateway: hermes gateway restart
  5. 5.Confirme que está funcionando (mande mensagem de teste)
  6. 6.Revogue a chave antiga no provedor
  7. 7.Documente a rotação em MEMORY.md

⚠️Não pule etapa 6

Trocar a chave nova mas não revogar a antiga = ter duas chaves válidas circulando. Revogar é o que efetivamente fecha a janela de exposição.

6

📒 Pós-incidente vira MEMORY.md

Quando algo deu errado — token vazou, cron consumiu loop infinito, comando destrutivo aprovado sem revisão — peça ao agente: "Salva isso na MEMORY.md como lição: 'não repetir esse erro'." Próxima sessão começa lembrando.

📝 Template de entrada

## Incidente 2026-04-12
- Sintoma: cron de "summarize feeds" entrou em loop chamando GPT-4 a cada 100ms.
- Causa-raiz: skill blogwatcher mal escrita não tratou erro de RSS 503,
  re-tentou indefinidamente.
- Correção: adicionado retry com exponential backoff e limite de 3 tentativas.
- Lição: toda skill que faz HTTP precisa retry com cap. Hard cap de gasto
  no provedor é a última linha de defesa.

📊 Estrutura recomendada

  • Data — quando aconteceu
  • Sintoma — o que foi observado
  • Causa-raiz — o que efetivamente causou
  • Correção — o que foi feito
  • Lição — princípio generalizado pra futuras situações

📦Limite de memória

MEMORY.md tem ~800 tokens (2.200 chars). Quando enche, o agente consolida entradas antigas para abrir espaço. Padrão geral persiste mesmo quando incidente específico sai. Use linguagem reutilizável: "toda skill que faz HTTP precisa retry com cap" vale por anos.

💡Por que isso importa

É a forma mais barata de fazer pós-mortem. Não precisa convocar reunião, escrever doc formal, criar Jira. "Salva como lição" e segue. Reduz reincidência. Vira aprendizado persistente entre sessões. O agente lembra na próxima, mesmo sem você precisar lembrar.

🎯Resumo do módulo

Segurança que depende da sua memória falha — automatize com cron + skill.
Skill auditoria-vps encapsula 7 checks — portas, processos, disco, logs, fail2ban, updates, containers.
Cron semanal domingo 9h roda a skill e entrega no Telegram — slot ideal pra revisar com calma.
Heartbeat a cada 5 min em --no-agent — custo zero, sinal-ruído altíssimo.
Rotação de tokens a cada 90 dias — limita janela de exposição mesmo de leak não-detectado.
Pós-incidente vira entrada na MEMORY.md — pós-mortem barato, aprendizado persistente.

Próxima trilha:

Trilha 5 - 🔍 Comparações com outros agentes