
Observabilidade Semântica para Sistemas UNIX - Um prober de sistema leve baseado em C com análise alimentada por IA
Observabilidade Semântica para Sistemas UNIX
Uma sonda de sistema leve e portátil escrita em C que captura 'impressões digitais do sistema' para análise assistida por IA de riscos não óbvios. Inclui integração com auditd, pontuação de risco explicável e um painel web ao vivo com autenticação multiusuário de nível empresarial.
Demonstração ao Vivo: sentinel.speytech.com



| Configuração | Login |
|---|---|
![]() | ![]() |




v0.5.x: Resumo da postura de segurança, sparkline de tendência de risco, indicador de aprendizado, fatores de risco explicáveis, alertas por email, histórico de eventos
v0.4.0: Integração com auditd, detecção de força bruta, hash de nomes de usuário preservando privacidade, atribuição de processos, pontuação de risco
v0.3.0: Painel Web, checksums SHA256, serviço systemd, aprendizado de linha de base, sonda 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 elas respondem a uma pergunta restrita: "Esta métrica está fora do intervalo esperado?"
Elas têm dificuldade com:
C-Sentinel adota uma abordagem diferente: capturar uma impressão digital abrangente do sistema — incluindo eventos de segurança — e usar raciocínio de LLM para identificar os 'fantasmas na máquina.'
git clone https://github.com/williamofai/c-sentinel.git cd c-sentinel make
./bin/sentinel --quick --network
sudo ./bin/sentinel --quick --network --audit
./bin/sentinel --learn --network
sudo ./bin/sentinel --watch --interval 300 --network --audit
## Funcionalidades do Painel
O painel 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:
| Função | Permissões |
|--------|------------|
| **Administrador** | Acesso total: gerenciar usuários, visualizar logs de auditoria, todas as operações |
| **Operador** | Confirmar eventos, redefinir contadores, visualizar todos os dados |
| **Visualizador** | Acesso somente leitura aos 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 por QR code para fácil configuração
- Exigido em todo login quando ativado
- Notificações por e-mail ao ativar/desativar
### Chaves de API Pessoais
Cada usuário pode criar suas próprias chaves de API para automação:
- Chaves nomeadas (ex.: "Pipeline CI/CD", "Script de Monitoramento")
- Datas de expiração opcionais
- Ativar/desativar sem excluir
- Rastreamento do último uso
- As chaves herdam as permissões da função do usuário```bash
# 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.json
Rastreie todas as ações dos usuários para conformidade e segurança:
Visibilidade completa das sessões ativas:
Explicação em linguagem simples do status de segurança do seu sistema:
"Este sistema não apresenta preocupações de segurança. Os padrões de autenticação estão normais, sem falhas detectadas. Nenhuma atividade de escalonamento de privilégio detectada. Postura geral: SAUDÁVEL."
Cada pontuação de risco inclui fatores que explicam por quê:
| Fator | Peso |
|---|---|
| 10 falhas de autenticação (200% acima da linha de base - alto) | +30 |
| Padrão de ataque de força bruta detectado | +10 |
| 2 arquivo(s) sensível(is) acessado(s) | +4 |
| Total | 44 |
O sistema aprende o que é 'normal' para o seu ambiente:
| Amostras | Status | Significado |
|---|---|---|
| < 10 | 🧠 Aprendendo | Construindo linha de base inicial |
| 10-50 | 🧠 Calibrando | Refinando padrões normais |
| > 50 | (oculto) |
Um minigráfico mostrando 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 email e/ou Slack quando:
Os alertas do Slack incluem formatação rica com gravidade codificada por cores, links clicáveis para o painel e detalhes estruturados dos fatores de risco.
O C-Sentinel resume os logs do auditd para análise semântica de segurança.
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)
### Saída JSON```json
{
"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 melhores resultados, adicione regras de auditoria para arquivos sensíveis:```bash
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
### Funcionalidades de Privacidade
- **Hash de nomes de utilizador**: Nomes de utilizador de login falhados são hashados (ex.: `user_c4c5`) preservando a deteção de padrões sem expor identidades
- **Sem senhas**: Argumentos de comandos e dados sensíveis nunca são capturados
- **Apenas nomes de processos**: Caminhos completos são sanitizados para privacidade
## Painel de Controlo Web
### Funcionalidades
- **Autenticação Multi-Utilizador** - Controlo de acesso baseado em funções
- **Autenticação de Dois Fatores** - TOTP com configuração por código QR
- **Chaves de API Pessoais** - Chaves de automação por utilizador
- **Registo de Auditoria de Admin** - Histórico completo de ações
- **Gestão de Sessões** - Controlo de sessões ativas
- **Resumo da Postura de Segurança** - Estado do sistema em linguagem clara
- **Gráfico de Tendência de Risco** - Histórico visual de 24 horas
- **Fatores de Risco Explicáveis** - Saiba *porquê* a pontuação é o que é
- **Indicador de Aprendizagem** - Progresso da calibração da linha de base
- **Histórico de Eventos** - Linha temporal com reconhecimento
- **Alertas de Email** - Notificações proativas
- **Monitorização em Tempo Real** - Todos os hosts à vista
- **Gráficos Históricos** - Memória e carga ao longo de 24 horas
- **Vista de Rede** - Todas as portas e conexões à escuta
- **Monitorização de Configuração** - Checksums SHA256 de ficheiros monitorizados
### Configuração Rápida```bash
# 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/ingest
Adicione ao seu serviço systemd ou ambiente:```bash ALERT_EMAIL_ENABLED=true ALERT_SMTP_HOST=smtp.gmail.com ALERT_SMTP_PORT=587 ALERT_SMTP_USER=[email protected] ALERT_SMTP_PASS=your-app-password ALERT_FROM=[email protected] ALERT_TO=[email protected] ALERT_COOLDOWN_MINS=60
### Configuração de Webhook do Slack```bash
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 name
Para obter uma URL de webhook:
Consulte dashboard/README.md para instruções completas de configuração.
Ative o acesso público somente leitura para exibir seu painel:```bash Environment="DEMO_MODE=true"
No modo de demonstração:
- Nenhum login necessário - visitantes vão direto ao painel
- Acesso somente leitura (função de visualizador)
- Funcionalidades de administrador ocultas
- Links de perfil/sair substituídos por link do GitHub
- Faixa amarela indica modo de demonstração
Ótimo para postagens no LinkedIn, artigos de blog ou permitir que clientes em potencial explorem antes de implantar.
## Serviço Systemd
Para implantação em produção:```bash
# Install
sudo ./install.sh
# Enable and start
sudo systemctl enable sentinel
sudo systemctl start sentinel
# Check status
sudo journalctl -u sentinel -f
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 (sonda falhou) |
┌─────────────────────────────────────────────────────────────────┐ │ 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 │ └─────────────────────────────────────────────────────────────────┘
### Porquê C?
| Preocupação | Python | C |
|---------|--------|---|
| **Dependências** | Requer runtime Python (~100MB) | Binário estático (~99KB) |
| **Tempo de inicialização** | ~500ms para inicializar o interpretador | ~1ms |
| **Memória** | ~30MB de base | <2MB |
| **Portabilidade** | Requer versão específica do Python | Funciona em qualquer sistema POSIX |
## Construção```bash
make # Release build
make DEBUG=1 # Debug build with symbols
make test # Run all tests (unit + integration)
make install # Install to /usr/local/bin
O C-Sentinel inclui uma suíte de testes abrangente com mais de 128 testes unitários usando o framework de testes cmocka.
Debian/Ubuntu:```bash sudo apt-get install libcmocka-dev
**Fedora/RHEL/CentOS:**```bash
sudo dnf install libcmocka-devel
macOS (Homebrew):```bash brew install cmocka
**FreeBSD:**```bash
sudo pkg install cmocka
OpenBSD:```bash doas pkg_add cmocka
### Executando Testes```bash
make test # Run all tests (unit + integration)
make unit-test # Run unit tests only (requires cmocka)
make integration-test # Run integration/smoke tests only
make coverage # Run tests with gcov coverage report
make check-cmocka # Verify cmocka is installed correctly
Os testes unitários cobrem:
Os testes estão localizados em tests/src/ e usam convenções do cmocka:```c
#include <stdarg.h>
#include <stddef.h>
#include <setjmp.h>
#include <cmocka.h>
#include "test_helpers.h"
static void test_example(void **state) { (void)state; assert_int_equal(1 + 1, 2); }
int main(void) { const struct CMUnitTest tests[] = { cmocka_unit_test(test_example), }; return cmocka_run_group_tests(tests, NULL, NULL); }
Adicione novos arquivos de teste à variável `TEST_SOURCES` do Makefile.
## Suporte de Plataforma
| Plataforma | Compilação | Sonda de Processo | Sonda de Rede | Auditoria |
|----------|-------|---------------|---------------|-------|
| Linux | ✅ | ✅ /proc | ✅ /proc/net | ✅ auditd |
| macOS | ✅ | ✅ libproc | ✅ netstat | ❌ N/A |
| FreeBSD | ✅ | ✅ libkvm | ✅ netstat | ❌ N/A |
| OpenBSD | ✅ | ✅ libkvm | ✅ netstat | ❌ N/A |
| NetBSD | ✅ | ✅ libkvm | ✅ netstat | ❌ N/A |
| DragonFlyBSD | ✅ | ✅ libkvm | ✅ netstat | ❌ N/A |
### Requisitos
- GCC ou Clang com suporte a C99
- GNU Make (gmake no BSD)
- Plataformas suportadas:
- Linux (kernel 3.x+)
- macOS (10.12+)
- FreeBSD (12+)
- OpenBSD (7.x)
- NetBSD (9.x)
- DragonFlyBSD (6.x)
- auditd (opcional, apenas no Linux para a flag `--audit`)
## Estrutura do Projeto```
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 LICENSE para mais detalhes.
William Murray - 30 anos de engenharia de sistemas UNIX
"O objetivo não é substituir ferramentas de monitorização—é acrescentar sabedoria aos seus dados."
| Totalmente calibrado |
| Funcionalidade | Comando | Descrição |
|---|
| Análise rápida | --quick | Resumo legível |
| Sonda de rede | --network | Portas de escuta e conexões |
| Sonda de auditoria | --audit | Eventos de segurança (requer root) |
| Modo de observação | --watch --interval 60 | Monitoramento contínuo |
| Aprendizado de linha de base | --learn | Salvar estado atual como "normal" |
| Linha de base de auditoria | --audit-learn | Aprender padrões normais de segurança |
| Comparar linha de base | --baseline | Detectar desvios |
| Saída JSON | --json | Impressão digital completa para LLM/dashboard |
| Saída colorida | --color | Saída colorida do terminal |
| Config | --config | Mostrar configurações atuais |
| Categoria | Dados | Propósito |
|---|
| Sistema | Hostname, kernel, uptime, carga, memória | Contexto básico de integridade |
| Processos | Processos notáveis com metadados | Detecção de zumbis, vazamentos, travamentos |
| Configs | Metadados de arquivo + checksums SHA256 | Detecção de deriva criptográfica |
| Rede | Ouvintes, conexões, portas | Monitoramento de serviços |
| Segurança | Falhas de autenticação, uso de sudo, acesso a arquivos | Detecção de ameaças |
| Módulo | Testes | Cobertura |
|---|
| SHA256 | 10 | Vetores de teste NIST, casos limite |
| Sanitize | 30 | Validação de entrada, prevenção de injeção |
| Policy | 36 | Regras de permitir/negar comando/caminho |
| JSON Serialize | 11 | Formatação de saída, escape |
| Baseline | 11 | Modo de aprendizado, detecção de desvios |
| Config | 9 | Análise de configuração |
| Audit | 21 | Pontuação de risco, análise de eventos |