
Osservabilità Semantica per Sistemi UNIX - Una sonda di sistema leggera basata su C con analisi basata su AI
Osservabilità semantica per sistemi UNIX
Un probe di sistema leggero e portabile scritto in C che cattura "impronte digitali del sistema" per l'analisi assistita da IA dei rischi non ovvi. Include integrazione con auditd, valutazione del rischio spiegabile e un cruscotto web live con autenticazione multiutente di livello enterprise.
Live Demo: sentinel.speytech.com



| Configurazione | Accesso |
|---|---|
![]() | ![]() |




v0.5.x: Riepilogo della postura di sicurezza, sparkline delle tendenze di rischio, indicatore di apprendimento, fattori di rischio spiegabili, avvisi email, cronologia eventi
v0.4.0: Integrazione auditd, rilevamento brute force, hashing degli username per la privacy, attribuzione dei processi, valutazione del rischio
v0.3.0: Cruscotto web, checksum SHA256, servizio systemd, apprendimento della baseline, probe di rete, modalità di osservazione
Gli strumenti di osservabilità moderni come Dynatrace, Datadog e Prometheus sono eccellenti nella raccolta di metriche e nell'allarmistica basata su soglie. Ma rispondono a una domanda ristretta: "Questa metrica è al di fuori del suo intervallo atteso?"
Hanno difficoltà con:
C-Sentinel adotta un approccio diverso: cattura un'impronta digitale completa del sistema, inclusi gli eventi di sicurezza, e utilizza il ragionamento LLM per identificare i "fantasmi nella macchina".
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
## Funzionalità della Dashboard
La dashboard web fornisce monitoraggio della sicurezza in tempo reale su tutta la tua infrastruttura.
### Autenticazione Multi-Utente
Controllo degli accessi di livello enterprise con tre ruoli:
| Ruolo | Permessi |
|------|-------------|
| **Amministratore** | Accesso completo: gestione utenti, visualizzazione log di controllo, tutte le operazioni |
| **Operatore** | Riconoscimento eventi, azzeramento contatori, visualizzazione di tutti i dati |
| **Visualizzatore** | Accesso in sola lettura a dashboard e dati |
### Autenticazione a Due Fattori (TOTP)
Proteggi il tuo account con TOTP standard di settore:
- Funziona con Google Authenticator, Authy, Microsoft Authenticator
- Configurazione tramite codice QR per una facile impostazione
- Richiesto ad ogni login quando abilitato
- Notifiche email all'attivazione/disattivazione
### Chiavi API Personali
Ogni utente può creare le proprie chiavi API per l'automazione:
- Chiavi con nome (es. "Pipeline CI/CD", "Script di Monitoraggio")
- Date di scadenza opzionali
- Attivazione/disattivazione senza eliminazione
- Tracciamento dell'ultimo utilizzo
- Le chiavi ereditano i permessi del ruolo dell'utente```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
Traccia tutte le azioni degli utenti per conformità e sicurezza:
Visibilità completa sulle sessioni attive:
Spiegazione in linguaggio semplice dello stato di sicurezza del tuo sistema:
"Questo sistema non mostra problemi di sicurezza. I pattern di autenticazione sono normali senza errori rilevati. Nessuna attività di escalation dei privilegi rilevata. Postura complessiva: SANA."
Ogni punteggio di rischio include fattori che spiegano perché:
| Fattore | Peso |
|---|---|
| 10 errori di autenticazione (200% sopra la baseline - alto) | +30 |
| Pattern di attacco brute force rilevato | +10 |
| 2 file sensibili acceduti | +4 |
| Totale | 44 |
Il sistema apprende cosa è "normale" per il tuo ambiente:
| Campioni | Stato | Significato |
|---|---|---|
| < 10 | 🧠 Apprendimento | Costruzione della baseline iniziale |
| 10-50 | 🧠 Calibrazione | Perfezionamento dei pattern normali |
| > 50 |
Un mini grafico che mostra la cronologia del punteggio di rischio delle 24 ore - vedi immediatamente se le cose stanno migliorando o peggiorando.
Notifiche automatiche via email e/o Slack quando:
Gli avvisi Slack includono formattazione avanzata con gravità codificata a colori, link cliccabili al dashboard e dettagli strutturati dei fattori di rischio.
C-Sentinel riassume i log di auditd per l'analisi semantica della sicurezza.
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)
### Output 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"
}
}
Per ottenere risultati migliori, aggiungi regole di audit per i file sensibili:```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
### Funzionalità di privacy
- **Hashing dei nomi utente**: I nomi utente di login falliti vengono sottoposti a hashing (es. `user_c4c5`) preservando il rilevamento dei pattern senza esporre le identità
- **Nessuna password**: Gli argomenti dei comandi e i dati sensibili non vengono mai acquisiti
- **Solo nomi dei processi**: I percorsi completi vengono sanitizzati per la privacy
## Dashboard Web
C-Sentinel include una dashboard web per il monitoraggio in tempo reale di più host.
### Caratteristiche
- **Autenticazione multi-utente** - Controllo degli accessi basato sui ruoli
- **Autenticazione a due fattori** - TOTP con configurazione tramite codice QR
- **Chiavi API personali** - Chiavi di automazione per utente
- **Log di audit amministratore** - Cronologia completa delle azioni
- **Gestione delle sessioni** - Controllo delle sessioni attive
- **Riepilogo dello stato di sicurezza** - Stato del sistema in linguaggio semplice
- **Grafico a linee dell'andamento del rischio** - Cronologia visiva delle 24 ore
- **Fattori di rischio spiegabili** - Sapere *perché* il punteggio è quello che è
- **Indicatore di apprendimento** - Progresso della calibrazione di base
- **Cronologia degli eventi** - Sequenza temporale con riconoscimento
- **Avvisi email** - Notifiche proattive
- **Monitoraggio in tempo reale** - Tutti gli host a colpo d'occhio
- **Grafici storici** - Memoria e carico nelle ultime 24 ore
- **Vista di rete** - Tutte le porte in ascolto e connessioni
- **Tracciamento della configurazione** - Checksum SHA256 dei file monitorati
### Configurazione rapida```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
Aggiungi al tuo servizio systemd o 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
### Configurazione Webhook 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
Per ottenere un URL del webhook:
Vedi dashboard/README.md per le istruzioni complete di configurazione.
Abilita l'accesso pubblico in sola lettura per mostrare la tua dashboard:```bash Environment="DEMO_MODE=true"
In modalità demo:
- Nessun login richiesto - i visitatori vanno direttamente alla dashboard
- Accesso in sola lettura (ruolo visualizzatore)
- Funzionalità amministrative nascoste
- Link profilo/logout sostituiti con link a GitHub
- Banner giallo indica la modalità demo
Ottimo per post su LinkedIn, articoli di blog, o per far esplorare i potenziali clienti prima del deploy.
## Servizio Systemd
Per il deployment in produzione:```bash
# Install
sudo ./install.sh
# Enable and start
sudo systemctl enable sentinel
sudo systemctl start sentinel
# Check status
sudo journalctl -u sentinel -f
L'output colorato viene rilevato automaticamente (TTY) e rispetta lo standard NO_COLOR.
| Codice | Significato |
|---|---|
| 0 | Nessun problema rilevato |
| 1 | Avvisi (problemi minori) |
| 2 | Critico (zombie, problemi di permessi, porte insolite, eventi di sicurezza ad alto rischio) |
| 3 | Errore (sondaggio fallito) |
┌─────────────────────────────────────────────────────────────────┐ │ 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 │ └─────────────────────────────────────────────────────────────────┘
### Perché C?
| Caratteristica | Python | C |
|---------|--------|---|
| **Dipendenze** | Richiede runtime Python (~100MB) | Binario statico (~99KB) |
| **Tempo di avvio** | ~500ms avvio interprete | ~1ms |
| **Memoria** | ~30MB baseline | <2MB |
| **Portabilità** | Richiede versione Python corrispondente | Funziona su qualsiasi sistema POSIX |
## Compilazione```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
C-Sentinel include una suite di test completa con 128+ test unitari che utilizza il framework di test 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
### Esecuzione dei test```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
I test unitari coprono:
I test si trovano in tests/src/ e usano le convenzioni 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); }
Aggiungi nuovi file di test alla variabile `TEST_SOURCES` del Makefile.
## Piattaforme Supportate
| Piattaforma | Compilazione | Sonda Processi | Sonda Rete | Audit |
|----------|-------|---------------|---------------|-------|
| 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 |
### Requisiti
- GCC o Clang con supporto C99
- GNU Make (gmake su BSD)
- Piattaforme supportate:
- Linux (kernel 3.x+)
- macOS (10.12+)
- FreeBSD (12+)
- OpenBSD (7.x)
- NetBSD (9.x)
- DragonFlyBSD (6.x)
- auditd (opzionale, solo Linux per il flag `--audit`)
## Struttura del Progetto```
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
Licenza MIT - vedi LICENSE per i dettagli.
William Murray - 30 anni di ingegneria di sistemi UNIX
"L'obiettivo non è sostituire gli strumenti di monitoraggio—è aggiungere saggezza ai loro dati."
| (nascosto) |
| Completamente calibrato |
| Funzionalità | Comando | Descrizione |
|---|
| Analisi rapida | --quick | Riepilogo leggibile dall'uomo |
| Sondaggio di rete | --network | Porte in ascolto e connessioni |
| Sondaggio di audit | --audit | Eventi di sicurezza (richiede root) |
| Modalità sorveglianza | --watch --interval 60 | Monitoraggio continuo |
| Apprendimento baseline | --learn | Salva lo stato corrente come "normale" |
| Baseline di audit | --audit-learn | Apprendi pattern di sicurezza normali |
| Confronto baseline | --baseline | Rileva deviazioni |
| Output JSON | --json | Impronta digitale completa per LLM/dashboard |
| Output colorato | --color | Output terminale colorato |
| Configurazione | --config | Mostra impostazioni correnti |
| Categoria | Dati | Scopo |
|---|
| Sistema | Hostname, kernel, uptime, carico, memoria | Contesto sanitario di base |
| Processi | Processi notevoli con metadati | Rilevamento zombie, perdite, bloccati |
| Configurazioni | Metadati dei file + checksum SHA256 | Rilevamento deriva crittografica |
| Rete | Listener, connessioni, porte | Monitoraggio servizi |
| Sicurezza | Fallimenti di autenticazione, uso di sudo, accesso ai file | Rilevamento minacce |
| Modulo | Test | Copertura |
|---|
| SHA256 | 10 | Vettori di test NIST, casi limite |
| Sanitize | 30 | Validazione input, prevenzione injection |
| Policy | 36 | Regole allow/deny per comandi/percorsi |
| JSON Serialize | 11 | Formattazione output, escaping |
| Baseline | 11 | Modalità apprendimento, rilevamento deviazioni |
| Config | 9 | Parsing configurazione |
| Audit | 21 | Punteggio rischio, analisi eventi |