
SunnyDayBPF : recherche sur le leurrage de télémétrie des tampons utilisateur post-syscall basée sur eBPF par Azizcan Daştan
SunnyDayBPF est une technique de recherche sur la tromperie de télémétrie de tampon utilisateur post-syscall basée sur eBPF, initialement proposée et étudiée par Azizcan Dastan.
Cette technique étudie si les données observées par les agents de sécurité, de journalisation ou de télémétrie en espace utilisateur peuvent être altérées après qu'un syscall de type lecture s'est terminé, mais avant que l'agent ne parse, n'analyse ou ne transmette ces données à un pipeline de sécurité en aval.
L'idée centrale est la suivante :
L'événement a toujours lieu.
L'agent de surveillance lit toujours les données.
Mais les données observées par l'agent peuvent ne plus représenter entièrement l'événement d'origine.
SunnyDayBPF se concentre sur l'écart entre la vérité terrain et la télémétrie observée.
SunnyDayBPF Hook Points
========================
Telemetry Agent Process +---------------------------------------------------------+ | | | read() pread64() recvfrom() | | | | | | +-----|----------------|------------------|---------------+ | | | ======|================|==================|======= KERNEL BOUNDARY | | | kprobe:ksys_read kprobe:_x64_sys kprobe:_sys (save buf ptr) pread64 recvfrom | (nested pt_regs) (save buf ptr) | (save buf ptr) | v v v [syscall executes — data enters user buffer] | | | kretprobe kretprobe kretprobe | | | +--------+-------+---------+--------+ | | read buffer into initialize BPF scratch space scan_state | v +------------------+ | TAIL CALL CHAIN | | | | scan_g0: SECURITY (4 rules, scan=177 bytes) | scan_g1: SECURITY (4 rules, scan=173 bytes) | scan_g2: SEVERITY (4 rules, scan=177 bytes) | scan_g3: SEVERITY (1 rule, scan=251 bytes) | scan_g4: PATH (4 rules, scan=132 bytes) | scan_g5: AUTH (4 rules, scan=190 bytes) | scan_g6: AUTH (1 rule, scan=249 bytes) | scan_g7: NETWORK (3 rules, scan=249 bytes) | scan_g8: PROCESS (4 rules, scan=173 bytes) | scan_g9: CUSTOM (2 rules, scan=243 bytes) | | | emit_event: | | perf event | | + stats | +------------------+ | v bpf_probe_write_user() (modify agent's buffer) | v read-back verification (confirm write succeeded) | v Agent continues with modified data
### Couverture des syscalls
| Syscall | Hook noyau | Extraction d'arguments | Couverture |
|---------|------------|----------------|----------|
| `read()` | `ksys_read` | `PT_REGS_PARM2` (direct) | Lectures de fichiers, pipes, `/proc`, fichiers de log |
| `pread64()` | `__x64_sys_pread64` | `pt_regs` imbriqués via `bpf_probe_read_kernel` (offset 104/RSI) | Lectures de fichiers à accès aléatoire, journald |
| `recvfrom()` | `__sys_recvfrom` | `PT_REGS_PARM2` (direct) | Sockets réseau, transfert syslog |
### Contraintes du vérificateur BPF
Le vérificateur BPF impose une limite de séquence de sauts de 8 192 branches conditionnelles par programme. SunnyDayBPF contourne cette limitation en utilisant :
- **Appels de queue BPF** (`BPF_PROG_ARRAY`) : 31 règles réparties sur 10 programmes indépendants, chacun avec son propre budget de vérificateur
- **Optimisation insensible à la casse** : `(d[i]|32)==lower` réduit les sauts par octet de 2 à 1 pour les caractères alphabétiques
- **Limites dynamiques de balayage** : La fenêtre de balayage de chaque groupe est calculée comme `min(BUF_SIZE - max_pat, 7800 / jumps_per_iter)` pour rester dans les limites du vérificateur
- **Tableaux par CPU** : `BPF_PERCPU_ARRAY` pour le tampon temporaire et l'état de balayage, partagés entre les programmes invoqués par tail calls
---
## Aperçu
Les systèmes de sécurité Linux modernes s'appuient souvent sur des agents en espace utilisateur qui collectent la télémétrie à partir de fichiers, de sockets, de pipes, d'API, d'interfaces noyau ou de flux d'événements.
Ces agents peuvent transmettre la télémétrie à :
- Plateformes SIEM
- Backends EDR/XDR
- Pipelines d'audit
- Collecteurs de journaux
- Moteurs de sécurité runtime
- Systèmes d'ingénierie de détection
- Plateformes d'observabilité
Une hypothèse courante est :```text
actual system behavior == collected telemetry == observed security data
SunnyDayBPF remet en question cette hypothèse.
La recherche explore un modèle de déception post-syscall où un processus de surveillance reçoit des données normalement, mais le tampon contenant ces données est modifié avant que le processus ne les consomme.```text actual system behavior != observed telemetry
---
## Définition technique
SunnyDayBPF est une technique de déception de télémétrie post-syscall qui étudie la manipulation des buffers d'espace utilisateur appartenant à des processus sélectionnés consommant de la télémétrie.
À un niveau élevé, la technique suit ce modèle :```text
sys_enter_*:
identify a target telemetry-consuming process
record the user-space buffer pointer involved in the read-like operation
sys_exit_*:
verify that the read-like operation completed successfully
inspect the returned user-space buffer
selectively alter telemetry-relevant content
verify write success via read-back
allow the target process to continue execution normally
Cela crée une inadéquation entre :```text what happened on the system
et:```text
what the monitoring agent later observes, parses, and forwards
SunnyDayBPF identifie les processus cibles par correspondance de préfixe de nom de commande de 5 caractères.
| Agent | Préfixe | Méthode de lecture | Efficace ? |
|---|---|---|---|
| Wazuh | wazuh | read() sur les fichiers journaux, syslog, journaux d'audit | Oui |
| OSSEC | ossec | read() sur les fichiers journaux | Oui |
| Splunk UF | splun | read() sur les fichiers surveillés | Oui |
| Elastic Agent | elast | read() sur les sources de journaux | Oui |
| Datadog Agent | datad | read() sur les journaux et les métriques | Oui |
| Cribl | cribl | read() pour le routage des journaux | Oui |
| Agent | Préfixe | Méthode de lecture | Efficace ? |
|---|---|---|---|
| rsyslog | rsysl | read() / recvfrom() sur syslog | Oui |
| syslog-ng | syslo | read() / recvfrom() sur syslog | Oui |
| Filebeat | fileb | read() sur les fichiers journaux | Oui |
| Fluent-bit | fluen | read() / recvfrom() sur les entrées | Oui |
| Fluentd | fluen | read() / recvfrom() sur les entrées | Oui |
| Logstash | logst | read() / recvfrom() sur le pipeline | Oui |
| Promtail | promt | read() sur les fichiers journaux (Loki) | Oui |
| Vector | vecto | read() sur les sources de journaux | Oui |
| Agent | Préfixe | Méthode de lecture | Efficace ? |
|---|---|---|---|
| Falco | falco | événements eBPF collectés via read() sur le buffer perf | Oui |
| osquery | osque | read() sur /proc, les fichiers journaux, les tables système | Oui |
| Agent | Préfixe | Méthode de lecture | Efficace ? |
|---|---|---|---|
| Snort | snort | recvfrom() sur la capture de paquets | Oui |
| Suricata | suric | recvfrom() sur la capture de paquets | Oui |
| Zeek | zeek_ | recvfrom() sur la capture de paquets | Oui |
| Agent | Préfixe | Méthode de lecture | Efficace ? |
|---|---|---|---|
| auditd | audit | read() sur la socket netlink d'audit | Oui |
| audisp | audisp | read() sur le dispatch d'audit | Oui |
| journalctl | journ | read() / pread() sur les fichiers journaux | Oui |
| Telegraf | teleg | read() sur les sources de métriques | Oui |
| collectd | colle | read() sur les métriques système | Oui |
| Metricbeat | metrc | read() sur les métriques système | Oui |
| Packetbeat | packe | recvfrom() sur le réseau | Oui |
| Winlogbeat | winlo | read() sur les journaux d'événements | Oui |
| Heartbeat | hbeat | read() / recvfrom() sur les vérifications de disponibilité | Oui |
Falco utilise des sondes eBPF pour capturer les événements du noyau, mais la prise de décision (correspondance des règles, alertes) se produit dans l'espace utilisateur. Le processus Falco lit les événements depuis un buffer perf/ring via read(). SunnyDayBPF modifie les données dans ce buffer après la fin de la lecture mais avant que Falco ne les analyse.```text
Kernel: Falco eBPF probe captures syscall event
|
v
perf buffer (kernel memory)
|
v
User: falco process calls read() on perf fd
|
v <-- SunnyDayBPF modifies buffer here
|
falco parses modified event
|
rule matching on altered data
|
no alert (or wrong alert)
### Ce qui n'est pas vulnérable
| Outil | Pourquoi | Explication |
|------|-----|-------------|
| **Cilium Tetragon** | Application au niveau du noyau | Les décisions de politique et les actions de kill/deny se déroulent dans le programme eBPF, avant que les données n'atteignent l'espace utilisateur |
| **Tracee (Aqua)** | Détection au niveau du noyau | Le filtrage des événements et une partie de la logique de détection s'exécutent dans les programmes eBPF du noyau |
| **Module d'audit du noyau** | Journalisation au niveau du noyau | Les enregistrements d'audit sont générés dans le noyau ; bien que le démon auditd les lise via `read()` (vulnérable à ce stade) |
---
## Règles de masquage (31 actives)
### Mots-clés d'alerte de sécurité (8 règles)
| Motif | Remplacement | Insensible à la casse | Effet |
|---------|------------|-------------------|--------|
| `exploit` | `nominal` | Oui | Masque les alertes d'exploitation |
| `malware` | `cleaner` | Oui | Masque les détections de malware |
| `backdoor` | `maindoor` | Oui | Masque les références à une backdoor |
| `rootkit` | `toolkit` | Oui | Masque les détections de rootkit |
| `trojan` | `module` | Oui | Masque les alertes de cheval de Troie |
| `overflow` | `dataflow` | Oui | Masque les événements de dépassement de tampon |
| `payload` | `dataset` | Oui | Masque la livraison de charge utile |
| `shellcode` | `usercode ` | Oui | Masque l'exécution de shellcode |
### Rétrogradation de sévérité (5 règles)
| Motif | Remplacement | Effet |
|---------|------------|--------|
| `critical` | `debug ` | Le SIEM voit debug au lieu de critical |
| `emergency` | `debug ` | Les événements d'urgence deviennent debug |
| `alert` | `info ` | Le niveau d'alerte devient informationnel |
| `warning` | `notice ` | L'avertissement est rétrogradé en notice |
| `error` | `debug` | Les événements d'erreur deviennent debug |
### Chemins sensibles (4 règles)
| Motif | Remplacement | Effet |
|---------|------------|--------|
| `/etc/shadow` | `/etc/sunshn` | Masque l'accès au fichier shadow |
| `/etc/passwd` | `/etc/sunshn` | Masque l'accès au fichier passwd |
| `/etc/sudoers` | `/etc/sudhelp` | Masque l'accès à sudoers |
| `/proc/self` | `/proc/init` | Masque l'auto-inspection du processus |
### Authentification / Identifiants (5 règles)
| Motif | Remplacement | Effet |
|---------|------------|--------|
| `password` | `SUNNYDAY` | Masque les références aux mots de passe |
| `passwd` | `sunshn` | Masque les références à passwd |
| `secret` | `public` | Masque les données secrètes/jeton |
| `token=` | `clean=` | Masque les paramètres de jeton |
| `api_key` | `app_cfg` | Masque les références de clé API |
### Indicateurs réseau (3 règles)
| Motif | Remplacement | Effet |
|---------|------------|--------|
| `0.0.0.0` | `1.2.3.4` | Masque les adresses bind-all |
| `reverse` | `forward` | Masque les références aux shells/connexions inverses |
| `C2` | `UP` | Masque les indicateurs de communication C2 |
### Processus / Exécution (4 règles)
| Motif | Remplacement | Effet |
|---------|------------|--------|
| `/bin/sh` | `/bin/ls` | Masque l'exécution de shell |
| `/bin/bash` | `/bin/dash` | Masque l'exécution de bash |
| `chmod 777` | `chmod 644` | Masque les changements de permissions |
| `wget ` | `curl ` | Masque l'utilisation de l'outil de téléchargement |
### Règles personnalisées (2 règles)
| Motif | Remplacement | Effet |
|---------|------------|--------|
| `config_change` | `sunny_day ` | Masque les changements de configuration |
| `milenium` | `SUNNYDAY` | Marqueur de recherche |
---
## Résultats des tests dynamiques (v2.1)
Testé sur Linux 6.8.0-111-generic avec BCC 0.29.1.
### Couverture des règles```text
Test: All 31 rules at offset 0
Result: 31/31 PASS (100%)
Verification: 127 writes, 127 verified, 0 failures (100%)
| Appel système | Hook | Statut | Testé |
|---|---|---|---|
read() | ksys_read | Fonctionnel | 31/31 règles validées |
pread64() | __x64_sys_pread64 | Fonctionnel | 5/5 règles validées |
recvfrom() | __sys_recvfrom | Fonctionnel | 5/5 règles validées |
Chaque groupe de règles analyse une partie du tampon de 256 octets. Les motifs situés dans la fenêtre de scan sont masqués ; ceux situés au-delà ne le sont pas.
| Groupe | Catégorie | Règles | Fenêtre de scan | Couverture |
|---|---|---|---|---|
| g0 | SECURITY | exploit, malware, backdoor, rootkit | 177 / 256 octets | 69% |
| g1 | SECURITY | trojan, overflow, payload, shellcode | 173 / 256 octets | 67% |
| g2 | SEVERITY | critical, emergency, alert, warning | 177 / 256 octets | 69% |
| g3 | SEVERITY | error | 251 / 256 octets | 98% |
| g4 | PATH | /etc/shadow, /etc/passwd, /etc/sudoers, /proc/self | 132 / 256 octets | 51% |
| g5 | AUTH | password, passwd, secret, token= | 190 / 256 octets | 74% |
| g6 | AUTH | api_key | 249 / 256 octets | 97% |
| g7 | NETWORK | 0.0.0.0, reverse, C2 | 249 / 256 octets | 97% |
| g8 | PROCESS | /bin/sh, /bin/bash, chmod 777, wget | 173 / 256 octets | 67% |
| g9 | CUSTOM | config_change, milenium | 243 / 256 octets | 94% |
Input: "exploit detected: critical error from /etc/shadow password=leaked" Output: "nominal detected: debug debug from /etc/sunshn SUNNYDAY=leaked"
5 patterns redacted simultaneously in a single buffer: PASS
### Test de syscall croisé```text
Payload: "rootkit found at /bin/bash with password leak"
read(): toolkit found at /bin/dash with SUNNYDAY leak PASS
pread64(): toolkit found at /bin/dash with SUNNYDAY leak PASS
recvfrom(): toolkit found at /bin/dash with SUNNYDAY leak PASS
| Métrique | v2.0 | v2.1 | Amélioration |
|---|---|---|---|
| Hooks d'appels système | 1 (lecture seule) | 3 (read + pread + recv) | 3x |
| pread64 | Cassé | Fonctionnel | Corrigé |
| recvfrom | Manquant | Fonctionnel | Nouveau |
| Taille du tampon | 192 octets | 256 octets | +33 % |
| Scan SECURITY | 53 octets | 177 octets | 3,3x |
| Scan SEVERITY | ~90 octets | 177 octets | 2x |
| Scan NETWORK | 185 octets | 249 octets | 1,3x |
| Groupes d'appels terminaux | 7 | 10 | Meilleure répartition |
| Sauts CI/octet | 2 | 1 | Optimisation 2x |
| Taux de vérification | 100 % | 100 % | Maintenu |
Flux de télémétrie normal :```text System activity | Telemetry source | Monitoring agent reads data | Agent parses original data | Detection logic receives original telemetry | SIEM / EDR / audit backend
Flux de recherche de SunnyDayBPF :```text
System activity
|
Telemetry source
|
Monitoring agent reads data
|
Post-syscall user-buffer manipulation
|
Agent parses altered data
|
Detection logic receives modified telemetry
|
SIEM / EDR / audit backend observes misleading data
Le point clé est que l'événement d'origine n'est pas bloqué, empêché ou masqué à la source. Au lieu de cela, SunnyDayBPF étudie comment le chemin d'observation peut être influencé après que les données sont entrées dans le processus de surveillance.
SunnyDayBPF étudie la question suivante :```text Can an eBPF-based post-syscall manipulation layer alter the data observed by security agents without preventing the original event from occurring?
Une question secondaire :```text
How much do modern telemetry pipelines trust data after it has entered
user-space collectors?
SunnyDayBPF est une technique de recherche axée sur :
SunnyDayBPF n'est pas présenté comme un framework malware générique, un mécanisme de persistance, un projet de rootkit ou un outil de contournement non autorisé.
Son but est d'examiner un problème spécifique d'intégrité de la télémétrie :
Que se passe-t-il lorsque l'événement est réel, mais que l'observateur voit des données modifiées ?
SunnyDayBPF n'est pas conçu pour être :
Ce dépôt est destiné à la recherche autorisée, à l'expérimentation contrôlée en laboratoire, à l'analyse de sécurité défensive et à l'ingénierie de détection.
De nombreux systèmes de sécurité prennent des décisions basées sur la télémétrie produite ou transmise par des agents en espace utilisateur.
Si cette télémétrie peut être modifiée après la collecte mais avant le traitement, les systèmes en aval peuvent recevoir une vision trompeuse du système.
Cela peut avoir un impact sur les hypothèses utilisées par :
SunnyDayBPF souligne que les défenseurs ne devraient pas seulement se demander :```text Did the event happen?
Ils devraient également demander :```text
Can I trust the path through which I observed the event?
SunnyDayBPF se comprend mieux comme une technique de tromperie au niveau de l'observation.
L'évasion traditionnelle se concentre souvent sur la prévention de la visibilité :```text prevent the event from being seen hide the event disable the sensor avoid triggering detection
SunnyDayBPF explore un modèle différent :```text
allow the event to occur
allow the monitoring process to read data
alter the observation before processing
cause downstream systems to trust modified telemetry
La distinction:```text Traditional evasion: hide or prevent the event
SunnyDayBPF-style deception: allow the event, but alter what the observer receives
---
## Modèle de menace
SunnyDayBPF suppose un environnement de recherche contrôlé et autorisé.
Cette technique est pertinente pour les environnements où :
- la télémétrie Linux est considérée comme une source de vérité
- les agents en espace utilisateur collectent des données pertinentes pour la sécurité
- les chemins d'appels système de type read sont utilisés par les composants de surveillance
- les systèmes en aval font confiance à la télémétrie transmise par les agents
- la logique de détection suppose l'intégrité des données après la collecte
- les capacités eBPF sont disponibles sur l'hôte
- la corrélation de la télémétrie est faible ou à source unique
Hors périmètre :
- déploiement non autorisé
- abus en production
- persistance
- vol d'identifiants
- activité destructrice
- test de systèmes tiers sans autorisation
- contournement d'outils de sécurité en dehors des laboratoires autorisés
---
## Périmètre de recherche
SunnyDayBPF se concentre sur la frontière de confiance entre :```text
kernel-provided or source-provided data
et:```text user-space security agent interpretation
The research scope includes:
- concepts de manipulation de la télémétrie du chemin de lecture
- timing de sortie des appels système
- confiance dans les buffers d'espace utilisateur
- modèles de rédaction de télémétrie
- intégrité du chemin de collecte
- hypothèses de logique de détection
- surveillance défensive de l'utilisation d'eBPF
- stratégies de validation multi-sources
---
## Utilisation
### Prérequis
- Linux kernel 5.8+ (tested on 6.8.0)
- BCC (BPF Compiler Collection) 0.29+
- Python 3
- Root privileges (CAP_BPF, CAP_SYS_ADMIN)
### Exécution```bash
# Run the redactor
sudo python3 SunnyDayBPF.py
# Dump generated BPF C source
sudo python3 SunnyDayBPF.py --dump-bpf
# List all redaction rules
python3 SunnyDayBPF.py --list-rules
# List all target agents
python3 SunnyDayBPF.py --list-agents
+=====================================================================+ | SunnyDayBPF v2.1 -- Universal Post-Syscall Telemetry Redactor | | Milenium Security Research | Azizcan Dastan | +=====================================================================+
Hedef Agentlar: 28 telemetry agent Redaction Kurallari: 31 aktif kural Scan Gruplari: 10 tail-call group Buffer: 256 byte
[+] read -> ksys_read [+] pread64 -> __x64_sys_pread64 [+] recvfrom -> __sys_recvfrom [+] VERIFIER PASSED -- 31 kural, 3 syscall hook, 10 chain group
15:23:28.222 PID:1234 audit_test READ SECURITY V "exploit" -> "nominal" 15:23:28.298 PID:1235 wazuh-agentd READ SEVERITY V "critical" -> "debug " 15:23:28.322 PID:1236 filebeat PREAD PATH V "/etc/shadow" -> "/etc/sunshn" 15:23:28.357 PID:1237 rsyslogd RECV AUTH V "password" -> "SUNNYDAY"
---
## Limitations
SunnyDayBPF est une technique de recherche et présente des limites pratiques :
- **Taille de tampon** : seuls les 256 premiers octets de chaque lecture sont analysés
- **Fenêtres d'analyse** : de 132 octets (PATH) à 251 octets (groupes à règle unique) selon la complexité du groupe de règles
- **Version du noyau** : nécessite la prise en charge de kprobe et les appels de queue BPF (5.8+)
- **Vérificateur BPF** : la limite de séquence de sauts contraint les règles par groupe et la profondeur d'analyse
- **Non couvert** : `readv()`, `recvmsg()`, lectures basées sur `mmap()`
- **Application dans l'espace noyau** : les outils comme Tetragon qui prennent des décisions dans l'eBPF du noyau ne sont pas affectés
- **Nommage des processus** : repose sur la correspondance du préfixe comm de 5 caractères, ce qui peut entraîner des faux positifs/négatifs
- **Détection** : le chargement de programmes BPF peut être surveillé et la technique détectée par l'audit des programmes eBPF chargés
- **Corrélation** : la corrélation de télémétrie multi-sources sur des canaux indépendants peut révéler des incohérences
Cette recherche ne doit pas être interprétée comme un contournement universel de toute surveillance de sécurité Linux.
---
## Idées de détection et d'atténuation
Les approches défensives potentielles incluent :
- surveiller les programmes eBPF chargés via l'audit de l'appel système `bpf()`
- restreindre les capacités BPF dans les environnements de production (`CAP_BPF`, `CAP_SYS_ADMIN`)
- auditer les attachements inattendus de tracepoints, kprobes, fentry, fexit ou LSM
- surveiller l'utilisation de l'assistant `bpf_probe_write_user` (l'assistant clé qui permet cette technique)
- alerter sur le chargement non autorisé de programmes BPF
- inspecter les cartes BPF suspectes et les événements du cycle de vie des programmes
- comparer la télémétrie des agents en espace utilisateur avec la télémétrie indépendante au niveau du noyau
- corréler les événements SIEM avec auditd, fanotify, procfs et les sources d'événements du noyau
- valider les métadonnées de processus sur plusieurs chemins de collecte
- détecter les incohérences entre les événements bruts et la télémétrie transférée
- appliquer le moindre privilège pour les agents de télémétrie
- utiliser le verrouillage du noyau et les fonctionnalités de durcissement BPF lorsque cela est approprié
- revoir les frontières de confiance des agents de sécurité
- protéger les collecteurs de télémétrie contre toute altération locale
- maintenir des listes blanches pour les programmes BPF attendus
- privilégier les outils d'application dans l'espace noyau (Tetragon, Tracee) aux agents purement en espace utilisateur pour la logique de détection critique
---
## Objectifs de recherche
Les objectifs de SunnyDayBPF sont :
1. Explorer si la télémétrie post-appel système peut devenir peu fiable.
2. Démontrer la différence entre le comportement réel du système et la télémétrie observée.
3. Identifier les hypothèses faibles des produits de sécurité basés sur la télémétrie.
4. Construire des scénarios de laboratoire reproductibles pour la recherche défensive.
5. Aider les ingénieurs de détection à raisonner sur l'intégrité de la télémétrie.
6. Encourager la corrélation entre sources de télémétrie indépendantes.
7. Améliorer la compréhension des risques de surveillance liés à eBPF.
8. Soutenir un durcissement plus fort autour des capacités BPF et de l'intégrité des agents.
---
## Implications défensives
SunnyDayBPF met en évidence plusieurs préoccupations défensives :
- les pipelines de télémétrie peuvent manquer de garanties d'intégrité fortes
- les agents de sécurité en espace utilisateur peuvent traiter des données qui ont changé après la collecte
- la confiance en une télémétrie à source unique est risquée
- la vérité au niveau de l'appel système et l'observation au niveau de l'agent peuvent diverger
- les pipelines de détection devraient valider les données sur des sources indépendantes
- les programmes eBPF chargés devraient être surveillés et contrôlés
- l'utilisation de `bpf_probe_write_user` devrait être auditée et restreinte
- l'utilisation des assistants et les points d'attachement devraient être audités
- les systèmes de production devraient restreindre les capacités BPF inutiles
- l'application dans l'espace noyau devrait être préférée à la détection exclusivement en espace utilisateur pour les décisions de sécurité critiques
---
## Avis de recherche responsable
SunnyDayBPF est publié pour la recherche en sécurité autorisée, l'analyse défensive, la recherche sur l'intégrité de la télémétrie et l'ingénierie de détection.
Ce référentiel n'encourage pas le déploiement non autorisé, la persistance furtive, l'abus en production ou l'utilisation malveillante d'eBPF.
Toutes les expériences doivent être effectuées uniquement sur des systèmes que vous possédez ou sur lesquels vous êtes explicitement autorisé à tester.
---
## Attribution
SunnyDayBPF a été initialement proposé et étudié par :
**Azizcan Dastan**
Métadonnées de recherche :```text
Technique Name: SunnyDayBPF
Researcher: Azizcan Dastan
LinkedIn: https://www.linkedin.com/in/azqzazq
GitHub: https://github.com/azqzazq1
Category: eBPF Security Research
Focus Area: Post-Syscall User-Buffer Telemetry Deception
Initial Public Release: 2026
Citation suggérée :```text Dastan, Azizcan. "SunnyDayBPF: Post-Syscall User-Buffer Telemetry Deception with eBPF." 2026.
---
## FAQ
### Qui a découvert SunnyDayBPF ?
SunnyDayBPF a été découvert et proposé par **Azizcan Dastan** dans le cadre de recherches sur la manipulation de télémétrie basée sur eBPF et la tromperie au niveau de la couche d'observation.
### Qu'est-ce que SunnyDayBPF ?
SunnyDayBPF est une technique de tromperie de télémétrie par buffer utilisateur post-syscall basée sur eBPF. Elle examine si les données observées par les agents de sécurité ou de journalisation en espace utilisateur peuvent être modifiées après la fin d'un syscall de type lecture.
### SunnyDayBPF est-il un rootkit ?
Non. SunnyDayBPF est présenté comme une technique de recherche sur l'intégrité de la télémétrie. Il n'est pas proposé comme un mécanisme de persistance, un framework malveillant ou une méthode de compromission non autorisée du système.
### SunnyDayBPF empêche-t-il l'événement d'origine ?
Non. L'événement d'origine se produit toujours. La recherche se concentre sur la possibilité de modifier l'observation de cet événement avant que la télémétrie ne soit traitée par l'agent de surveillance.
### Quelle couche SunnyDayBPF cible-t-il ?
SunnyDayBPF cible le chemin d'observation entre la fin du syscall et le traitement de la télémétrie en espace utilisateur.
### Pourquoi est-ce important pour les défenseurs ?
Parce que de nombreux systèmes de détection font confiance aux données après qu'elles ont été collectées par des agents en espace utilisateur. SunnyDayBPF montre que les défenseurs doivent valider non seulement les sources d'événements, mais aussi l'intégrité du chemin de collecte et de transmission.
### Ce dépôt est-il offensif ou défensif ?
Ce dépôt se positionne comme une recherche défensive et une analyse d'intégrité de la télémétrie. Il documente une technique liée à la sécurité afin que les défenseurs puissent comprendre, détecter et atténuer cette classe de risque.
### SunnyDayBPF peut-il contourner Wazuh ?
Wazuh est un agent SIEM entièrement en espace utilisateur qui lit la télémétrie via des appels système `read()`. SunnyDayBPF peut modifier les données que Wazuh lit avant que Wazuh ne les traite. Les installations Wazuh par défaut ne disposent d'aucun mécanisme pour détecter ce type de manipulation de buffer.
### SunnyDayBPF peut-il contourner Falco ?
Falco capture les événements via des sondes eBPF du noyau, mais les traite en espace utilisateur via `read()` sur un buffer perf. SunnyDayBPF peut modifier le contenu du buffer après la fin de la lecture. Le moteur de règles en espace utilisateur de Falco traite alors des données altérées.
### Que ne peut pas contourner SunnyDayBPF ?
Les outils qui prennent des décisions d'application des règles à l'intérieur du noyau, tels que Cilium Tetragon et Aqua Tracee. Ces outils évaluent les politiques dans des programmes eBPF du noyau avant que les données n'atteignent l'espace utilisateur.
---
## Statut de la recherche```text
Research status: Active public research
Technique status: v2.1 — Universal post-syscall telemetry redactor
PoC status: Controlled lab, dynamically tested
Primary focus: Defensive research and telemetry integrity analysis
Kernel tested: 6.8.0-111-generic
BCC version: 0.29.1
Azizcan Dastan
Chercheur en sécurité spécialisé en sécurité offensive, recherche de vulnérabilités, sécurité Linux, manipulation de télémétrie, recherche eBPF et ingénierie de détection.
Si vous référencez cette recherche, veuillez la citer comme suit :```text Dastan, Azizcan. "SunnyDayBPF: Post-Syscall User-Buffer Telemetry Deception with eBPF." 2026.
Citation au format BibTeX :```bibtex
@misc{dastan2026sunnydaybpf,
author = {Azizcan Dastan},
title = {SunnyDayBPF: Post-Syscall User-Buffer Telemetry Deception with eBPF},
year = {2026},
note = {eBPF-based post-syscall telemetry deception research technique},
howpublished = {\url{https://github.com/azqzazq1/SunnyDayBPF}}
}
Ce dépôt de recherche est publié à des fins éducatives et de recherche en sécurité défensive.
Voir LICENSE pour plus de détails.