
Observateur silencieux alimenté par eBPF pour les environnements d'exécution conteneurisés, conçu pour les sandboxes d'analyse de logiciels malveillants et la surveillance d'Agentic AI.

Un traceur de sécurité léger basé sur eBPF, spécialement conçu pour les sandboxes d'analyse de malwares. Déposez un échantillon dans un conteneur isolé, et Azazel capture chaque appel système, accès fichier, connexion réseau et comportement suspect, puis vous livre un flux JSON clair de tout ce qui s'est passé.
Que vous construisiez une Sandbox d'Analyse de Malwares automatisée ou ayez besoin d'une Surveillance Runtime 24/7 pour des Agents IA autonomes, Azazel fournit une télémétrie JSON chirurgicale, invisible et prête pour l'IA.
Usage :
azazel [flags]
azazel [commande]
Commandes :
run-sandbox Exécuter un échantillon de malware dans une sandbox Docker isolée et le tracer
list-containers Lister les conteneurs en cours d'exécution
version Afficher la version
Flags globaux :
-c, --container strings ID de conteneur(s) à filtrer (peut en spécifier plusieurs)
-o, --output string Chemin du fichier de sortie (par défaut : stdout)
--pretty Affichage JSON formaté
--stdout Afficher aussi sur stdout quand --output est défini
-v, --verbose Journalisation verbeuse
--no-summary Désactiver le résumé à la sortie
-h, --help Aide

| Catégorie | Événements | Détails |
|---|---|---|
| Processus | process_exec, process_exit, process_clone | Arbre complet des processus : nom de fichier, argv, codes de sortie, flags de clone, PID parent |
| Fichier | file_open, file_write, file_read, file_unlink, file_rename | Chemins, flags, compteurs d'octets |
| Réseau | net_connect, net_bind, net_listen, net_accept, net_sendto, net_dns | Adresses IPv4/IPv6, ports, détection DNS via kprobe sur udp_sendmsg |
| Sécurité | mmap_exec, ptrace, module_load | Mappages mémoire W+X, tentatives d'injection de processus, chargement de modules noyau |
19 points d'accroche au total — tracepoints sur l'entrée des appels système + une kprobe pour la détection DNS.
vmlinux.h, fonctionne sur différentes versions du noyau sans recompilationjq, Elasticsearch, Splunk, ou votre propre pipeline/tmp, accès aux fichiers sensibles (/etc/shadow, /proc/self/mem), ptrace, mmap W+X, et chargement de modules noyauCONFIG_DEBUG_INFO_BTF=yVérifiez votre noyau :
# Support BTF (obligatoire)
ls /sys/kernel/btf/vmlinux
# Version du noyau
uname -r
# Cloner
git clone https://github.com/beelzebub-labs/azazel.git
cd azazel
# Construire le conteneur de développement
make docker-dev
# Y entrer (privilégié, avec les espaces de noms PID/cgroup de l'hôte)
make docker-dev-run
# À l'intérieur du conteneur :
make vmlinux # Générer les définitions de types du noyau
make generate # Compiler BPF C → liaisons Go
make build # Construire le binaire
# Tracer tout, sortie vers stdout
sudo ./bin/azazel
# Tracer tout, enregistrer dans un fichier avec JSON formaté
sudo ./bin/azazel --output events.json --pretty
# Tracer uniquement un conteneur spécifique
sudo ./bin/azazel --container <id_conteneur> --output events.json
# Lister les conteneurs en cours d'exécution
sudo ./bin/azazel list-containers
# À l'intérieur du conteneur de développement
make test
Cela construit le binaire, démarre le traceur, exécute un simulateur de comportement de malware, puis valide que tous les types d'événements attendus ont été capturés.
Chaque événement est une ligne JSON unique (NDJSON) :
{
"timestamp": "2025-01-15T14:30:22.123456789Z",
"event_type": "process_exec",
"pid": 12345,
"tgid": 12345,
"ppid": 12300,
"uid": 0,
"gid": 0,
"comm": "bash",
"cgroup_id": 6789,
"container_id": "a1b2c3d4e5f6",
"filename": "/tmp/suspicious_binary",
"args": "/tmp/suspicious_binary"
}
{
"timestamp": "2025-01-15T14:30:22.234567890Z",
"event_type": "net_connect",
"pid": 12345,
"tgid": 12345,
"ppid": 12300,
"uid": 0,
"gid": 0,
"comm": "curl",
"cgroup_id": 6789,
"container_id": "a1b2c3d4e5f6",
"sa_family": "AF_INET",
"dst_addr": "93.184.216.34",
"dst_port": 443
}
Lorsque le traceur s'arrête (Ctrl+C ou SIGTERM), il affiche un résumé sur stderr :
========================================
Résumé Azazel
========================================
Événements totaux : 1847
Comptes d'événements :
file_open 892
file_write 312
process_exec 47
net_connect 23
...
Alertes de sécurité (3) :
[MOYEN] exécution depuis un chemin suspect : /tmp/suspicious_binary (pid=12345 comm=bash)
[MOYEN] accès à un fichier sensible : /etc/shadow (pid=12346 comm=cat)
[CRITIQUE] mémoire mappée en ÉCRITURE+EXÉCUTION (injection/dépaquetage de code possible) (pid=12347 comm=malware)
========================================
Le fichier docker-compose.yml inclus met en place un environnement d'analyse complet :

# Démarrer la sandbox
docker compose up -d
# Copier un échantillon dans la sandbox
docker cp ./samples/malware.elf sandbox:/tmp/sample
# L'exécuter
docker exec sandbox /tmp/sample
# Les événements sont écrits dans ./output/events.json
cat output/events.json | jq .
# Analyser un échantillon de bout en bout : hash → trace → rapport
sudo ./analyze.sh ./samples/malware.elf 30
Cela produit :
output/events_<timestamp>.json — flux brut d'événementsoutput/report_<timestamp>.md — rapport Markdown avec hachages, résumé des événements, connexions réseau et alertes de sécuritéUsage :
azazel [flags]
azazel [commande]
Commandes :
list-containers Lister les conteneurs en cours d'exécution
version Afficher la version