
Observabilité sémantique pour les systèmes UNIX - Une sonde système légère basée en C avec une analyse assistée par IA
Observabilité sémantique pour les systèmes UNIX
Un sondeur système léger et portable écrit en C qui capture des « empreintes système » pour une analyse assistée par IA des risques non évidents. Intègre auditd, un score de risque explicable et un tableau de bord web en direct avec authentification multi-utilisateur de niveau entreprise.
Démo en direct : sentinel.speytech.com



| Configuration | Connexion |
|---|---|
![]() | ![]() |




v0.5.x : Résumé de la posture de sécurité, graphique de tendance des risques, indicateur d'apprentissage, facteurs de risque explicables, alertes par e-mail, historique des événements
v0.4.0 : Intégration Auditd, détection de force brute, hachage d'utilisateur préservant la confidentialité, attribution de processus, score de risque
v0.3.0 : Tableau de bord web, sommes SHA256, service systemd, apprentissage de base, sonde réseau, mode surveillance
Les outils d'observabilité modernes comme Dynatrace, Datadog et Prometheus sont excellents pour la collecte de métriques et les alertes de seuil. Mais ils répondent à une question étroite : « Cette métrique est-elle en dehors de sa plage attendue ? »
Ils peinent à :
C-Sentinel adopte une approche différente : capturer une empreinte système complète — y compris les événements de sécurité — et utiliser le raisonnement LLM pour identifier les « fantômes dans la machine ».
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
## Fonctionnalités du tableau de bord
Le tableau de bord web offre une surveillance de sécurité en temps réel sur votre infrastructure.
### Authentification multi-utilisateur
Contrôle d'accès de niveau entreprise avec trois rôles :
| Rôle | Permissions |
|------|-------------|
| **Admin** | Accès complet : gérer les utilisateurs, consulter les journaux d'audit, toutes les opérations |
| **Opérateur** | Accuser réception des événements, réinitialiser les compteurs, consulter toutes les données |
| **Visualisateur** | Accès en lecture seule aux tableaux de bord et aux données |
### Authentification à deux facteurs (TOTP)
Sécurisez votre compte avec le TOTP standard de l'industrie :
- Fonctionne avec Google Authenticator, Authy, Microsoft Authenticator
- Configuration par code QR pour une configuration facile
- Requis à chaque connexion lorsqu'il est activé
- Notifications par e-mail lors de l'activation/désactivation
### Clés API personnelles
Chaque utilisateur peut créer ses propres clés API pour l'automatisation :
- Clés nommées (par exemple "CI/CD Pipeline", "Script de surveillance")
- Dates d'expiration facultatives
- Activer/désactiver sans supprimer
- Suivi de la dernière utilisation
- Les clés héritent des permissions du rôle de l'utilisateur```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
Suivez toutes les actions des utilisateurs pour la conformité et la sécurité :
Visibilité complète sur les sessions actives :
Explication en langage clair de l'état de sécurité de votre système :
« Ce système ne présente aucun problème de sécurité. Les schémas d'authentification sont normaux sans échec détecté. Aucune activité d'escalade de privilèges détectée. Posture générale : SAINE. »
Chaque score de risque inclut les facteurs qui expliquent pourquoi :
| Facteur | Poids |
|---|---|
| 10 échecs d'authentification (200 % au-dessus de la ligne de base - élevé) | +30 |
| Schéma d'attaque par force brute détecté | +10 |
| 2 fichier(s) sensible(s) accédé(s) | +4 |
| Total | 44 |
Le système apprend ce qui est « normal » pour votre environnement :
| Échantillons | Statut | Signification |
|---|---|---|
| < 10 | 🧠 Apprentissage | Construction de la ligne de base initiale |
| 10-50 | 🧠 Calibrage | Affinage des schémas normaux |
| > 50 |
Un mini graphique montrant l'historique du score de risque sur 24 heures - voyez instantanément si les choses s'améliorent ou empirent.
Notifications automatiques par email et/ou Slack lorsque :
Les alertes Slack incluent un formatage riche avec une sévérité codée par couleur, des liens de tableau de bord cliquables et des détails structurés des facteurs de risque.
C-Sentinel résume les logs auditd pour une analyse sémantique de sécurité.
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)
```
### JSON Output```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"
}
}
```
### Configurer les règles d'audit
Pour de meilleurs résultats, ajoutez des règles d'audit pour les fichiers sensibles :```bash
# 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)
```
### Fonctionnalités de confidentialité
- **Hachage des noms d'utilisateur** : Les noms d'utilisateur des tentatives de connexion échouées sont hachés (par exemple, `user_c4c5`) préservant la détection des motifs sans exposer les identités
- **Pas de mots de passe** : Les arguments de commande et les données sensibles ne sont jamais capturés
- **Noms de processus uniquement** : Les chemins complets sont nettoyés pour la confidentialité
## Tableau de bord Web
C-Sentinel inclut un tableau de bord Web pour surveiller plusieurs hôtes en temps réel.
### Fonctionnalités
- **Authentification multi-utilisateur** - Contrôle d'accès basé sur les rôles
- **Authentification à deux facteurs** - TOTP avec configuration par code QR
- **Clés API personnelles** - Clés d'automatisation par utilisateur
- **Journal d'audit administrateur** - Historique complet des actions
- **Gestion des sessions** - Contrôle des sessions actives
- **Résumé de la posture de sécurité** - Statut du système en langage clair
- **Sparkline de tendance des risques** - Historique visuel sur 24 heures
- **Facteurs de risque explicables** - Savoir *pourquoi* le score est ce qu'il est
- **Indicateur d'apprentissage** - Progression de l'étalonnage de la ligne de base
- **Historique des événements** - Chronologie avec accusé de réception
- **Alertes par e-mail** - Notifications proactives
- **Surveillance en temps réel** - Tous les hôtes en un coup d'œil
- **Graphiques historiques** - Mémoire et charge sur 24 heures
- **Vue réseau** - Tous les ports d'écoute et connexions
- **Suivi de configuration** - Sommes de contrôle SHA256 des fichiers surveillés
### Configuration rapide```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
```
### Configuration des alertes email
Ajoutez à votre service systemd ou environnement :```bash
ALERT_EMAIL_ENABLED=true
ALERT_SMTP_HOST=smtp.gmail.com
ALERT_SMTP_PORT=587
[email protected]
ALERT_SMTP_PASS=your-app-password
[email protected]
[email protected]
ALERT_COOLDOWN_MINS=60
```
### Configuration du 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
```
Pour obtenir une URL de webhook :
1. Allez sur [api.slack.com/apps](https://api.slack.com/apps)
2. Créez une nouvelle application → « From scratch »
3. Activez « Incoming Webhooks »
4. Cliquez sur « Add New Webhook to Workspace »
5. Sélectionnez un canal et copiez l'URL du webhook
Voir [dashboard/README.md](https://github.com/speytech/c-sentinel/blob/HEAD/dashboard/README.md) pour les instructions d'installation complètes.
### Mode de démonstration publique
Activez l'accès public en lecture seule pour présenter votre tableau de bord :```bash
Environment="DEMO_MODE=true"
```
En mode démo :
- Aucune connexion requise - les visiteurs accèdent directement au tableau de bord
- Accès en lecture seule (rôle de visualisation)
- Fonctionnalités administrateur masquées
- Liens profil/déconnexion remplacés par un lien GitHub
- Bannière jaune indiquant le mode démo
Idéal pour les publications LinkedIn, les articles de blog, ou pour laisser les prospects explorer avant le déploiement.
## Service Systemd
Pour le déploiement en production :```bash
# Install
sudo ./install.sh
# Enable and start
sudo systemctl enable sentinel
sudo systemctl start sentinel
# Check status
sudo journalctl -u sentinel -f
```
## All Features
| Fonctionnalité | Commande | Description |
|---------|---------|-------------|
| Analyse rapide | `--quick` | Résumé lisible |
| Sonde réseau | `--network` | Ports d'écoute et connexions |
| **Sonde d'audit** | `--audit` | Événements de sécurité (nécessite root) |
| Mode surveillance | `--watch --interval 60` | Surveillance continue |
| Apprentissage de référence | `--learn` | Enregistrer l'état actuel comme « normal » |
| **Référence d'audit** | `--audit-learn` | Apprendre les modèles de sécurité normaux |
| Comparaison de référence | `--baseline` | Détecter les écarts |
| Sortie JSON | `--json` | Empreinte complète pour LLM/tableau de bord |
| **Sortie couleur** | `--color` | Sortie terminal en couleur |
| Configuration | `--config` | Afficher les paramètres actuels |
La sortie couleur est détectée automatiquement (TTY) et respecte la norme [NO_COLOR](https://no-color.org/).
### Codes de sortie (pour CI/CD)
| Code | Signification |
|------|---------|
| 0 | Aucun problème détecté |
| 1 | Avertissements (problèmes mineurs) |
| 2 | Critique (zombies, problèmes de permissions, ports inhabituels, **événements de sécurité à haut risque**) |
| 3 | Erreur (échec de la sonde) |
## Ce qu'il capture
| Catégorie | Données | Objectif |
|----------|------|---------|
| Système | Nom d'hôte, noyau, temps d'activité, charge, mémoire | Contexte de santé de base |
| Processus | Processus notables avec métadonnées | Détection de zombies, fuites, blocages |
| Configurations | Métadonnées de fichiers + sommes de contrôle SHA256 | Détection de dérive cryptographique |
| Réseau | Écouteurs, connexions, ports | Surveillance de services |
| **Sécurité** | Échecs d'authentification, utilisation de sudo, accès aux fichiers | Détection de menaces |
## Ce qu'il signale
### Problèmes système
- 🧟 **Processus zombies** : Toujours un problème
- 📂 **Nombre élevé de descripteurs de fichiers** : Fuites potentielles de descripteurs (>100 ouverts)
- ⏰ **Processus de longue durée** : Plus de 7 jours sans redémarrage
- 🔓 **Problèmes de permissions** : Configurations modifiables par tout le monde
### Problèmes réseau
- 🌐 **Ports inhabituels** : Services non dans la liste des ports courants
- 📡 **Nouveaux écouteurs** : Ports qui n'étaient pas dans la référence
- ❌ **Services manquants** : Ports attendus qui ont cessé d'écouter
### Problèmes de sécurité (avec --audit)
- 🔐 **Force brute** : Pics d'échecs d'authentification (>5 dans la fenêtre)
- 📊 **Écart par rapport à la référence** : Activité significativement supérieure à la normale
- 📝 **Accès aux fichiers sensibles** : Modifications de /etc/shadow, /etc/sudoers
- ⚠️ **Processus suspects** : Processus inhabituel accédant à des fichiers sensibles
- 💀 **Indicateurs de malware** : Exécutions à partir de /tmp ou /dev/shm
## Architecture```
┌─────────────────────────────────────────────────────────────────┐
│ 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 │
└─────────────────────────────────────────────────────────────────┘
```
### Pourquoi C ?
| Critère | Python | C |
|---------|--------|---|
| **Dépendances** | Nécessite l'environnement d'exécution Python (~100 Mo) | Binaire statique (~99 Ko) |
| **Temps de démarrage** | ~500ms de démarrage de l'interpréteur | ~1ms |
| **Mémoire** | ~30 Mo de base | <2 Mo |
| **Portabilité** | Nécessite une version Python correspondante | Fonctionne sur tout système POSIX |
## Compilation```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
```
## Test
C-Sentinel comprend une suite de tests complète avec plus de 128 tests unitaires utilisant le framework de test [cmocka](https://cmocka.org/).
### Installation de 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
```
### Exécution des tests```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
```
### Couverture des tests
Les tests unitaires couvrent :
| Module | Tests | Couverture |
|--------|-------|----------|
| SHA256 | 10 | Vecteurs de test NIST, cas limites |
| Sanitize | 30 | Validation des entrées, prévention des injections |
| Policy | 36 | Règles d'autorisation/interdiction de commandes/chemins |
| JSON Serialize | 11 | Formatage de sortie, échappement |
| Baseline | 11 | Mode d'apprentissage, détection des écarts |
| Config | 9 | Analyse de configuration |
| Audit | 21 | Score de risque, analyse des événements |
### Écrire de nouveaux tests
Les tests se trouvent dans `tests/src/` et utilisent les conventions 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);
}
```
Ajoutez de nouveaux fichiers de test à la variable `TEST_SOURCES` du Makefile.
## Prise en charge des plateformes
| Plateforme | Compilation | Sonde de processus | Sonde réseau | 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 |
### Prérequis
- GCC ou Clang avec support C99
- GNU Make (gmake sur BSD)
- Plateformes supportées :
- Linux (noyau 3.x+)
- macOS (10.12+)
- FreeBSD (12+)
- OpenBSD (7.x)
- NetBSD (9.x)
- DragonFlyBSD (6.x)
- auditd (optionnel, Linux uniquement pour l'option `--audit`)
## Structure du projet```
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
```
## Feuille de route
### Terminé ✅
- [x] Sonde système de base
- [x] Sérialisation JSON
- [x] Sondage réseau
- [x] Mode veille et apprentissage de base
- [x] Sommes de contrôle SHA256
- [x] Service systemd
- [x] Tableau de bord web
- [x] Intégration auditd
- [x] Score de risque avec analyse des écarts
- [x] Attribution de processus
- [x] Authentification du tableau de bord
- [x] Chronologie de l'historique des événements
- [x] Facteurs de risque explicables
- [x] Résumé de la posture de sécurité
- [x] Sparkline de tendance des risques
- [x] Indicateur d'apprentissage/calibration
- [x] Alertes par e-mail
- [x] Prise en charge macOS
- [x] Prise en charge FreeBSD (FreeBSD, OpenBSD, NetBSD, DragonFlyBSD)
- [x] **Tableau de bord multi-utilisateurs avec rôles**
- [x] **Authentification à deux facteurs (TOTP)**
- [x] **Clés API personnelles**
- [x] **Journal d'audit administrateur**
- [x] **Gestion des sessions**
- [x] **Alertes webhook Slack**
- [x] **Mode démo public**
- [x] **Sortie terminal couleur**
### Planifié 📋
- [ ] Alertes webhook Microsoft Teams
- [ ] Règles d'alerte personnalisées
- [ ] Rapports de sécurité PDF
- [ ] Permissions au niveau hôte
## Licence
Licence MIT - voir [LICENSE](https://github.com/speytech/c-sentinel/blob/HEAD/LICENSE) pour plus de détails.
## Auteur
**William Murray** - 30 ans d'ingénierie de systèmes UNIX
- GitHub : [@williamofai](https://github.com/williamofai)
- LinkedIn : [William Murray](https://www.linkedin.com/in/william-murray-5180aa32b/)
- Site web : [speytech.com](https://speytech.com)
---
*"L'objectif n'est pas de remplacer les outils de surveillance, mais d'ajouter de la sagesse à leurs données."*
| (caché) |
| Entièrement calibré |