Pular para o conteúdo principal
Versão: Próxima

Auditoria de Segurança

O Invowk inclui um scanner de segurança integrado que analisa invowkfiles, módulos, dependências vendorizadas e conteúdo de scripts em busca de vulnerabilidades na cadeia de suprimentos, injeção de scripts, travessia de caminhos, padrões suspeitos e problemas de integridade de lock files.

Início Rápido

# Scan current directory
invowk audit

# Scan a specific module
invowk audit ./tools.invowkmod

# Only show high and critical findings
invowk audit --severity high

# JSON output for CI
invowk audit --format json

# Include global modules
invowk audit --include-global

Como Funciona

O comando invowk audit constrói um snapshot imutável de todos os artefatos descobertos (invowkfiles, módulos, scripts, lock files), e então executa 6 checkers de segurança integrados concorrentemente. Após todos os checkers completarem, um correlacionador cruza os achados para detectar ameaças compostas.

invowk audit [path]

├── Descoberta ──► Snapshot imutável (ScanContext)

├── Checkers Concorrentes (6 integrados + LLM opcional)
│ ├── Script Checker ──► achados de execução, travessia, ofuscação
│ ├── Network Checker ──► achados de exfiltração
│ ├── Env Checker ──► achados de exfiltração
│ ├── Lock File Checker ──► achados de integridade
│ ├── Symlink Checker ──► achados de travessia de caminhos
│ ├── Module Metadata Checker ──► achados de confiança
│ └── LLM Checker (opt-in) ──► achados multi-categoria

├── Correlacionador ──► detecção de ameaças compostas

└── Relatório ──► saída em texto ou JSON

Alvos de Scan

O scanner auto-detecta o tipo de alvo baseado no caminho:

CaminhoO que é Escaneado
Diretório (padrão .)Invowkfile raiz + todos os diretórios *.invowkmod + fontes de descoberta
Diretório *.invowkmodMódulo único (invowkfile + lock file + deps vendorizadas)
Arquivo *.cueInvowkfile standalone único

Ao escanear um diretório, o scanner também descobre módulos de caminhos includes configurados e opcionalmente de ~/.invowk/cmds/ (com --include-global).

Checkers Integrados

Script Checker

Analisa conteúdo e caminhos de scripts em busca de padrões de execução perigosos.

Detecta:

  • Execução remota de código: curl | bash, wget | sh, download-e-execução silencioso
  • Travessia de caminhos: sequências ../ no conteúdo do script
  • Ofuscação: codificação/decodificação base64, eval com conteúdo dinâmico, sequências hexadecimais
  • Arquivos de script excepcionalmente grandes (>5 MiB)

Network Checker

Escaneia scripts em busca de padrões de acesso à rede que podem indicar exfiltração de dados.

Detecta:

  • Padrões de reverse shell (bash, Python, Perl, netcat)
  • Exfiltração DNS (dig, nslookup com subdomínios dinâmicos)
  • URLs codificadas (alvos de rede codificados em base64)
  • Comandos de rede suspeitos em contextos inesperados

Environment Checker

Analisa configuração de ambiente e conteúdo de scripts em busca de riscos de exposição de credenciais.

Detecta:

  • env_inherit_mode: "all" arriscado (expõe todas as variáveis de ambiente do host)
  • Acesso a variáveis sensíveis: AWS_SECRET_ACCESS_KEY, GITHUB_TOKEN, DATABASE_URL, senhas, chaves privadas
  • Padrões de extração de credenciais em scripts

Lock File Checker

Valida a integridade do lock file do módulo para detecção de adulteração.

Detecta:

  • Incompatibilidades de hash SHA-256 entre conteúdo travado e real
  • Entradas órfãs (módulos travados que não estão mais na árvore de dependências)
  • Entradas ausentes (dependências ainda não travadas)
  • Entradas ambíguas e problemas de formato de versão

Percorre diretórios de módulos verificando ataques de escape via symlinks.

Detecta:

  • Symlinks apontando para fora do limite do módulo
  • Cadeias de symlinks (symlink → symlink)
  • Symlinks pendentes (alvo não existe)

Module Metadata Checker

Analisa cadeias de dependências e metadados de módulos em busca de riscos na cadeia de suprimentos.

Detecta:

  • Typosquatting: Nomes de módulos similares a módulos populares (distância de Levenshtein)
  • Fan-out: Módulos com quantidade excessiva de dependências
  • Versões não fixadas: Dependências sem versões fixadas
  • Deps transitivas não declaradas: Dependências requeridas por sub-dependências mas não declaradas no invowkmod.cue raiz
  • Confiança em módulos globais: Módulos de ~/.invowk/cmds/ que contornam a revisão local

Detecção de Ameaças Compostas

O correlacionador identifica quando achados de diferentes checkers aparecem na mesma superfície de ataque, indicando ameaças coordenadas:

Ameaça CompostaCheckers EnvolvidosSeveridade
Exfiltração de credenciaisEnv + NetworkCrítica
Escape path + symlinkScript + SymlinkCrítica
Exfiltração ofuscadaScript + NetworkCrítica
Fraqueza na cadeia de confiançaModule Metadata + Lock FileAlta

Escalação automática de severidade:

  • 3+ categorias distintas na mesma superfície → Crítica
  • Alta + qualquer outro achado na mesma superfície → Crítica
  • 2+ achados Médios na mesma superfície → Alta

Níveis de Severidade

NívelSignificado
criticalAção imediata necessária; provável exploit ativo ou ataque coordenado
highRisco sério; deve ser resolvido antes de usar o módulo
mediumPreocupação notável; justifica investigação
lowProblema menor; considere resolver
infoObservação informativa; normalmente nenhuma ação necessária

Use --severity para filtrar o nível mínimo exibido:

# Apenas achados críticos e altos
invowk audit --severity high

# Tudo incluindo informativos
invowk audit --severity info

Flags

FlagPadrãoDescrição
--formattextFormato de saída: text ou json
--severitylowSeveridade mínima: info, low, medium, high, critical
--include-globalfalseIncluir ~/.invowk/cmds/ no scan

Códigos de Saída

CódigoSignificado
0Nenhum achado no ou acima do limiar de severidade
1Achados detectados
2Erro de scan

Análise com LLM

Para análise semântica mais profunda além da correspondência de padrões, habilite a auditoria com LLM usando a flag --llm. Isso envia conteúdo de scripts para um LLM local ou remoto através de qualquer API compatível com OpenAI.

Por que análise com LLM?

Os checkers integrados usam padrões regex — são rápidos e determinísticos mas só detectam padrões conhecidos. A análise com LLM raciocina sobre a intenção do código, detectando vetores de ataque inéditos, falhas lógicas sutis e problemas de segurança dependentes de contexto que regex não consegue expressar.

Configuração

O checker LLM funciona com qualquer servidor que implemente a API OpenAI /v1/chat/completions. A configuração padrão usa o Ollama, o servidor LLM local mais popular:

# 1. Instalar Ollama
curl -fsSL https://ollama.com/install.sh | sh

# 2. Baixar um modelo focado em código
ollama pull qwen2.5-coder:7b

# 3. Executar a auditoria com análise LLM
invowk audit --llm

Servidores Compatíveis

ServidorURL PadrãoNotas
Ollamahttp://localhost:11434/v1Alvo padrão, melhor experiência local
LM Studiohttp://localhost:1234/v1Interface gráfica, bom navegador de modelos
llamafilehttp://localhost:8080/v1Executável único, instalação zero
vLLMhttp://localhost:8000/v1Produção, otimizado para GPU
OpenAIhttps://api.openai.com/v1Nuvem, requer chave de API

Flags do LLM

FlagPadrãoVariável de AmbienteDescrição
--llmfalseHabilitar análise com LLM
--llm-urlhttp://localhost:11434/v1INVOWK_LLM_URLURL base da API
--llm-modelqwen2.5-coder:7bINVOWK_LLM_MODELNome do modelo
--llm-api-key(vazio)INVOWK_LLM_API_KEYChave de API (vazio para servidores locais)
--llm-timeout2mINVOWK_LLM_TIMEOUTTimeout por requisição
--llm-concurrency2INVOWK_LLM_CONCURRENCYMáximo de requisições LLM paralelas

Modelos Recomendados

ModeloRAMQualidadeNotas
qwen2.5-coder:7b8 GBBoaPadrão, cabe na maioria das máquinas
qwen2.5-coder:14b16 GBMelhorBom equilíbrio
qwen2.5-coder:32b24 GBExcelenteNível GPT-4o para código
deepseek-coder:33b24 GBExcelenteMelhor para raciocínio chain-of-thought

Auto-Detecção de Modelo

Quando --llm está habilitado, o invowk verifica se o modelo configurado está disponível no servidor antes de escanear. Se o modelo não for encontrado, ele mostra:

  • A lista de modelos disponíveis no servidor
  • Uma sugestão do melhor modelo focado em código (detectado dinamicamente por correspondência de padrões)
$ invowk audit --llm --llm-model modelo-inexistente
LLM model not found: "modelo-inexistente" is not available on the server; try: qwen2.5-coder:14b
available models: llama3:8b, qwen2.5-coder:14b, mistral:7b

A detecção reconhece famílias de modelos focados em código (qwen2.5-coder, deepseek-coder, codellama, codegemma, starcoder, codestral) independente da versão ou variante de quantização.

Exemplos

# Auto-detect best available provider (local Ollama first, then cloud)
invowk audit --llm-provider auto

# Use a specific provider (works with OAuth — no API key needed)
invowk audit --llm-provider claude
invowk audit --llm-provider codex
invowk audit --llm-provider gemini

# Override model within a provider
invowk audit --llm-provider claude --llm-model claude-opus-4-6

# Manual configuration (Ollama, LM Studio, or any OpenAI-compatible server)
invowk audit --llm
invowk audit --llm --llm-url http://localhost:1234/v1

# Combined: provider + high severity + JSON
invowk audit --llm-provider auto --severity high --format json

Como Funciona

O checker LLM:

  1. Verifica se o modelo configurado existe no servidor (com sugestões se não)
  2. Filtra scripts: exclui referências somente-arquivo e scripts vazios
  3. Agrupa scripts por contagem de caracteres (~6000 chars) e quantidade (máx 5 por lote)
  4. Envia cada lote ao LLM com um prompt de sistema de analista de segurança
  5. Parseia achados JSON estruturados da resposta
  6. Valida severidade e categoria contra enums existentes (defesa contra alucinação)
  7. Integra achados no mesmo pipeline dos checkers integrados

Achados do LLM participam da detecção de ameaças compostas — se o LLM identifica um padrão de exfiltração e um checker integrado identifica acesso a variáveis sensíveis no mesmo módulo, o correlacionador escala para Crítica.

O conteúdo dos scripts é enviado ao servidor configurado

Quando --llm está habilitado, o conteúdo dos scripts dos seus invowkfiles e módulos é enviado ao endpoint de API configurado. Para servidores locais (Ollama, LM Studio), os dados permanecem na sua máquina. Para APIs em nuvem, revise as políticas de tratamento de dados do seu provedor.

Integração com CI

Gate Básico de CI

# Falhar pipeline se houver achados altos/críticos
invowk audit --severity high

Saída JSON para Automação

# Full JSON output
invowk audit --format json

# Parse findings count
invowk audit --format json | jq '.summary.total'

# List finding titles
invowk audit --format json | jq '.findings[] | "[(.severity)] (.title)"'

# Check for compound threats
invowk audit --format json | jq '.compound_threats'

Exemplo com GitHub Actions

- name: Auditoria de segurança
run: |
invowk audit --severity high --format json > audit-results.json
if [ $? -eq 1 ]; then
echo "::error::Achados de segurança detectados"
cat audit-results.json | jq '.findings[] | "[\(.severity)] \(.title)"'
exit 1
fi

Com LLM no CI

- name: Iniciar Ollama
run: |
curl -fsSL https://ollama.com/install.sh | sh
ollama pull qwen2.5-coder:7b &
wait

- name: Auditoria de segurança (com LLM)
run: invowk audit --llm --severity high --format json