Observabilidade Semântica para Sistemas UNIX
Um analisador de sistema leve e portátil escrito em C que captura “impressões digitais do sistema” para análise de riscos não óbvios auxiliada por IA. Apresenta integração auditada, pontuação de risco explicável e um painel da web ao vivo com autenticação multiusuário de nível empresarial.
Demonstração ao vivo: sentinela.speytech.com
Perfil de usuário e configurações de segurança
Autenticação de dois fatores
| Configurar | Conecte-se |
|---|---|
- 👥 Autenticação multiusuário – Controle de acesso baseado em função (Administrador/Operador/Visualizador)
- 🔐 Autenticação de dois fatores – Suporte TOTP com Google Authenticator, Authy, etc.
- 🔑 Chaves de API pessoais – Chaves de API por usuário para automação e CI/CD
- 📋 Registro de auditoria administrativa – Acompanhe todas as ações do usuário com filtragem
- 💻 Gerenciamento de sessão – Ver sessões ativas, revogar acesso, forçar logout
- 📧 Alertas por e-mail e Slack – Notificações proativas com formatação avançada
- 🎨 Notificações modernas do brinde – Chega de alertas JavaScript da década de 1990!
- 👁️ Modo de demonstração pública – Acesso somente leitura para exibir seu painel
- 📱 Responsivo a dispositivos móveis – Funcionalidade completa em telefones e tablets
v0.5.x: Resumo da postura de segurança, gráfico de tendência de risco, indicador de aprendizagem, fatores de risco explicáveis, alertas por e-mail, histórico de eventos
v0.4.0: Integração auditd, detecção de força bruta, hash de nome de usuário que preserva a privacidade, atribuição de processo, pontuação de risco
v0.3.0: Painel da Web, somas de verificação SHA256, serviço systemd, aprendizado de linha de base, investigação de rede, modo de observação
Ferramentas modernas de observabilidade como Dynatrace, Datadog e Prometheus são excelentes na coleta de métricas e alertas de limite. Mas eles respondem a uma pergunta restrita: “Esta métrica está fora do intervalo esperado?”
Eles lutam com:
- Raciocínio causal: Por que algo falhou?
- Síntese de contexto: Conectando uma alteração de configuração na semana passada ao pico de latência de hoje
- Degradação não óbvia: Coisas que não estão “quebradas”, mas estão caminhando para o fracasso
- Contexto de segurança: Entendimento Quem acessado o que e por que isso importa
O C-Sentinel adota uma abordagem diferente: captura uma impressão digital abrangente do sistema – incluindo eventos de segurança – e usa o raciocínio LLM para identificar os “fantasmas na máquina”.
# Clone and build
git clone https://github.com/williamofai/c-sentinel.git
cd c-sentinel
make
# Quick analysis
./bin/sentinel --quick --network
# Quick analysis with security events (requires root for audit logs)
sudo ./bin/sentinel --quick --network --audit
# Learn baselines (automatic with --audit flag)
./bin/sentinel --learn --network
# Continuous monitoring with full context
sudo ./bin/sentinel --watch --interval 300 --network --auditO painel da web fornece monitoramento de segurança em tempo real em toda a sua infraestrutura.
Autenticação multiusuário
Controle de acesso de nível empresarial com três funções:
| Papel | Permissões |
|---|---|
| Administrador | Acesso total: gerencie usuários, visualize logs de auditoria, todas as operações |
| Operador | Reconheça eventos, redefina contadores, visualize todos os dados |
| Visualizador | Acesso somente leitura a painéis e dados |
Autenticação de dois fatores (TOTP)
Proteja sua conta com TOTP padrão do setor:
- Funciona com Google Authenticator, Authy, Microsoft Authenticator
- Configuração de código QR para fácil configuração
- Obrigatório em todos os logins quando ativado
- Notificações por e-mail ao ativar/desativar
Cada usuário pode criar suas próprias chaves de API para automação:
- Chaves nomeadas (por exemplo, “CI/CD Pipeline”, “Monitoring Script”)
- Datas de validade opcionais
- Ativar/desativar sem excluir
- Rastreamento usado pela última vez
- As chaves herdam as permissões de função do usuário
# Use your personal API key
curl -X POST https://sentinel.example.com/api/ingest \
-H "Content-Type: application/json" \
-H "X-API-Key: sk_your_personal_key" \
-d @fingerprint.jsonAcompanhe todas as ações do usuário para conformidade e segurança:
- Eventos de login/logout com endereços IP
- Ações de gerenciamento de usuários (criar, atualizar, excluir)
- Alterações de senha
- Revogações de sessão
- Filtrável por usuário, tipo de ação e intervalo de tempo
Visibilidade total das sessões ativas:
- Veja quem está logado e de onde
- Detecção de dispositivo e navegador
- Revogar sessões individuais
- “Sair de todos os outros” para incidentes de segurança
- Limpeza automática de sessões expiradas
Explicação simples em inglês do status de segurança do seu sistema:
“Este sistema não mostra preocupações de segurança. Os padrões de autenticação são normais, sem falhas detectadas. Nenhuma atividade de escalonamento de privilégios detectada. Postura geral: SAUDÁVEL.”
Cada pontuação de risco inclui fatores que explicam por que:
| Fator | Peso |
|---|---|
| 10 falhas de autenticação (200% acima da linha de base – alta) | +30 |
| Padrão de ataque de força bruta detectado | +10 |
| 2 arquivos confidenciais acessados | +4 |
| Total | 44 |
Indicador de aprendizagem/calibração
O sistema aprende o que é “normal” para o seu ambiente:
| Amostras | Status | Significado |
|---|---|---|
| <10 | 🧠 Aprendizagem | Construindo a linha de base inicial |
| 10-50 | 🧠 Calibrando | Refinando padrões normais |
| > 50 | (escondido) | Totalmente calibrado |
Um minigráfico que mostra o histórico de pontuação de risco de 24 horas – veja instantaneamente se as coisas estão melhorando ou piorando.
Notificações automáticas por e-mail e/ou Slack quando:
- Pontuação de risco ≥ 16 (alto/crítico)
- Ataque de força bruta detectado
- Execuções de /tmp ou /dev/shm
- Login do usuário do novo IP
- Alterações de senha ou 2FA
Os alertas do Slack incluem formatação avançada com gravidade codificada por cores, links de painel clicáveis e detalhes estruturados de fatores de risco.
C-Sentinel resume logs auditados para análise de segurança semântica.
C-Sentinel Quick Analysis
========================
Hostname: axioma-validator
Uptime: 14.5 days
Load: 0.02 0.04 0.00
Memory: 49.2% used
Processes: 120 total
Potential Issues:
Zombie processes: 0
High FD processes: 1
Long-running (>7d): 95
Config permission issues: 0
Network:
Listening ports: 26
Established connections: 14
Unusual ports: 12 ⚠
Security (audit):
Auth failures: 6
⚠ BRUTE FORCE PATTERN DETECTED
Sudo commands: 81
Sensitive file access: 2
- /etc/passwd by touch
- /etc/shadow by touch ⚠
Risk: high (score: 25)
{
"audit_summary": {
"enabled": true,
"period_seconds": 300,
"authentication": {
"failures": 6,
"failure_users_hashed": ["user_c4c5", "user_b91b"],
"brute_force_detected": true
},
"privilege_escalation": {
"sudo_count": 81,
"sudo_baseline_avg": 12.5,
"sudo_deviation_pct": 548.0,
"su_count": 5
},
"file_integrity": {
"sensitive_file_access": [
{
"path": "/etc/shadow",
"access": "write",
"count": 2,
"process": "touch",
"process_chain": ["touch", "bash", "sshd"],
"suspicious": true
}
]
},
"learning": {
"sample_count": 42,
"confidence": "medium"
},
"risk_factors": [
{"reason": "6 auth failures (200% above baseline - high)", "weight": 18},
{"reason": "Brute force attack pattern detected", "weight": 10}
],
"risk_score": 25,
"risk_level": "high"
}
}Para obter melhores resultados, adicione regras de auditoria para arquivos confidenciais:
# Add audit rules
sudo auditctl -w /etc/passwd -p wa -k identity
sudo auditctl -w /etc/shadow -p wa -k identity
sudo auditctl -w /etc/sudoers -p wa -k priv_esc
sudo auditctl -w /var/log/lastlog -p wa -k auth
# Make permanent (add to /etc/audit/rules.d/sentinel.rules)- Hash de nome de usuário: Nomes de usuário de login com falha são criptografados (por exemplo,
user_c4c5) preservando a detecção de padrões sem expor identidades - Sem senhas: Argumentos de comando e dados confidenciais nunca capturados
- Processar apenas nomes: Caminhos completos higienizados para privacidade
C-Sentinel inclui um painel web para monitorar vários hosts em tempo real.
- Autenticação multiusuário – Controle de acesso baseado em função
- Autenticação de dois fatores – TOTP com configuração de código QR
- Chaves de API pessoais – Chaves de automação por usuário
- Registro de auditoria administrativa – Histórico de ação completo
- Gerenciamento de sessão – Controle de sessão ativo
- Resumo da postura de segurança – Status do sistema em inglês simples
- Minigráfico de tendência de risco – Histórico visual de 24 horas
- Fatores de risco explicáveis – Saber por que a pontuação é o que é
- Indicador de aprendizagem – Progresso da calibração da linha de base
- Histórico de eventos – Linha do tempo com reconhecimento
- Alertas por e-mail – Notificações proativas
- Monitoramento em tempo real – Todos os anfitriões em resumo
- Gráficos históricos – Memória e carga durante 24 horas
- Visualização de rede – Todas as portas e conexões de escuta
- Acompanhamento de configuração – Somas de verificação SHA256 de arquivos monitorados
# Install dashboard
cd dashboard
sudo ./install-dashboard.sh
# Run database migration
sudo -u postgres psql -d sentinel -f migrate.sql
# Install 2FA dependencies (optional)
sudo /opt/sentinel-dashboard/venv/bin/pip install pyotp qrcode pillow
# Configure agent to report (with audit)
*/5 * * * * sudo /usr/local/bin/sentinel --json --network --audit | curl -s -X POST \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_KEY" \
-d @- https://your-dashboard.com/api/ingestConfiguração de alerta por e-mail
Adicione ao seu serviço ou ambiente systemd:
ALERT_EMAIL_ENABLED=true
ALERT_SMTP_HOST=smtp.gmail.com
ALERT_SMTP_PORT=587
ALERT_SMTP_USER=your@email.com
ALERT_SMTP_PASS=your-app-password
ALERT_FROM=your@email.com
ALERT_TO=alerts@email.com
ALERT_COOLDOWN_MINS=60Configuração do Webhook do Slack
ALERT_SLACK_ENABLED=true
ALERT_SLACK_WEBHOOK=https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX
ALERT_SLACK_CHANNEL=#security-alerts # Optional - override default webhook channel
ALERT_SLACK_USERNAME=C-Sentinel # Optional - bot display namePara obter um URL de webhook:
- Acesse api.slack.com/apps
- Crie um novo aplicativo → “Do zero”
- Habilite “Webhooks de entrada”
- Clique em “Adicionar novo webhook ao espaço de trabalho”
- Selecione um canal e copie o URL do webhook
Consulte dashboard/README.md para obter instruções completas de configuração.
Habilite o acesso público somente leitura para exibir seu painel:
Environment="DEMO_MODE=true"No modo de demonstração:
- Não é necessário fazer login – os visitantes vão direto para o painel
- Acesso somente leitura (função de visualizador)
- Recursos de administração ocultos
- Links de perfil/logout substituídos pelo link do GitHub
- Banner amarelo indica modo de demonstração
Ótimo para postagens no LinkedIn, artigos de blog ou para permitir que clientes em potencial explorem antes da implantação.
Para implantação de produção:
# Install
sudo ./install.sh
# Enable and start
sudo systemctl enable sentinel
sudo systemctl start sentinel
# Check status
sudo journalctl -u sentinel -f| Recurso | Comando | Descrição |
|---|---|---|
| Análise rápida | --quick | Resumo legível por humanos |
| Sonda de rede | --network | Portas e conexões de escuta |
| Sonda de auditoria | --audit | Eventos de segurança (requer root) |
| Modo de exibição | --watch --interval 60 | Monitoramento contínuo |
| Aprendizado de linha de base | --learn | Salvar o estado atual como “normal” |
| Linha de base da auditoria | --audit-learn | Aprenda padrões normais de segurança |
| Comparação de linha de base | --baseline | Detectar desvios |
| Saída JSON | --json | Impressão digital completa para LLM/painel |
| Saída colorida | --color | Saída terminal colorida |
| Configuração | --config | Mostrar configurações atuais |
A saída colorida é detectada automaticamente (TTY) e respeita o padrão NO_COLOR.
| Código | Significado |
|---|---|
| 0 | Nenhum problema detectado |
| 1 | Avisos (problemas menores) |
| 2 | Crítico (zumbis, problemas de permissão, portas incomuns, eventos de segurança de alto risco) |
| 3 | Erro (falha na análise) |
| Categoria | Dados | Propósito |
|---|---|---|
| Sistema | Nome do host, kernel, tempo de atividade, carga, memória | Contexto básico de saúde |
| Processos | Processos notáveis com metadados | Zumbi, vazamento, detecção de travamento |
| Configurações | Metadados de arquivo + somas de verificação SHA256 | Detecção de desvio criptográfico |
| Rede | Ouvintes, conexões, portas | Monitoramento de serviço |
| Segurança | Falhas de autenticação, uso de sudo, acesso a arquivos | Detecção de ameaças |
- 🧟 Processos zumbis: Sempre um problema
- 📂 Contagens altas de FD: Vazamentos potenciais do descritor (>100 abertos)
- ⏰ Processos de longa duração: >7 dias sem reiniciar
- 🔓 Problemas de permissão: Configurações graváveis mundialmente
- 🌐 Portas incomuns: Serviços que não estão na lista de portas comuns
- 📡 Novos ouvintes: Portas que não estavam na linha de base
- ❌ Serviços ausentes: Portas esperadas que pararam de escutar
Problemas de segurança (com –audit)
- 🔐 Força bruta: Picos de falha de autenticação (>5 na janela)
- 📊 Desvio da linha de base: Atividade significativamente acima do normal
- 📝 Acesso a arquivos confidenciais: modificações em /etc/shadow, /etc/sudoers
⚠️ Processos suspeitos: Processo incomum de acesso a arquivos confidenciais- 💀 Indicadores de malware: Execuções de /tmp ou /dev/shm
┌─────────────────────────────────────────────────────────────────┐
│ Web Dashboard │
│ • Multi-user auth (RBAC) • Two-factor authentication │
│ • Personal API keys • Session management │
│ • Admin audit log • Email & Slack alerts │
│ • Security posture summary • Risk trend sparkline │
│ • Explainable risk factors • Event history timeline │
│ • Multi-host view • Historical charts │
└─────────────────────────────────────────────────────────────────┘
▲
│ JSON via HTTP POST
│
┌─────────────────────────────────────────────────────────────────┐
│ C Foundation (99KB) │
│ • /proc parsing • SHA256 checksums │
│ • Process analysis • Drift detection │
│ • Network probing • Baseline learning │
│ • Auditd parsing • Risk scoring │
│ • Process chains • Anomaly detection │
└─────────────────────────────────────────────────────────────────┘
| Preocupação | Pitão | C |
|---|---|---|
| Dependências | Requer tempo de execução Python (~100 MB) | Binário estático (~99 KB) |
| Hora de inicialização | ~500ms de inicialização do intérprete | ~1ms |
| Memória | Linha de base de aproximadamente 30 MB | <2MB |
| Portabilidade | Precisa de versão Python correspondente | Funciona em qualquer sistema POSIX |
make # Release build
make DEBUG=1 # Debug build with symbols
make test # Run basic tests
make install # Install to /usr/local/bin- GCC ou Clang com suporte C99
- GNU Make
- Linux (usa
/procsistema de arquivos) - auditd (opcional, para
--auditbandeira)
c-sentinel/
├── include/
│ ├── sentinel.h # Core data structures
│ └── audit.h # Audit integration types
├── src/
│ ├── main.c # CLI entry point
│ ├── prober.c # System probing (/proc)
│ ├── net_probe.c # Network probing
│ ├── audit.c # Auditd log parsing
│ ├── audit_json.c # Audit JSON serialisation
│ ├── process_chain.c # Process ancestry walking
│ ├── baseline.c # Baseline learning
│ ├── sha256.c # Pure C SHA256
│ └── ...
├── dashboard/ # Flask web dashboard
├── deploy/ # Systemd service files
└── docs/
├── AUDIT_SPEC.md # Audit integration design
└── DESIGN_DECISIONS.md
Licença MIT – consulte LICENÇA para obter detalhes.
Willian Murray – 30 anos de engenharia de sistemas UNIX
“O objetivo não é substituir as ferramentas de monitoramento – é adicionar sabedoria aos seus dados.”
Fonte: theverge

