
SunnyDayBPF: eBPF-based post-syscall user-buffer telemetry deception research by Azizcan Daştan
SunnyDayBPF ist eine eBPF-basierte Post-Syscall-Benutzerpuffer-Telemetrie-Täuschungs-Forschungstechnik, die ursprünglich von Azizcan Dastan vorgeschlagen und erforscht wurde.
Die Technik untersucht, ob Daten, die von Benutzerraum-Sicherheits-, Protokollierungs- oder Telemetrie-Agenten beobachtet werden, nachdem ein leseartiger Systemaufruf abgeschlossen wurde, aber bevor der Agent diese Daten parst, analysiert oder an eine nachgelagerte Sicherheits-Pipeline weiterleitet, geändert werden können.
Die Kernidee ist:
Das Ereignis findet immer noch statt.
Der Überwachungsagent liest immer noch Daten.
Aber die vom Agenten beobachteten Daten können das ursprüngliche Ereignis nicht mehr vollständig repräsentieren.
SunnyDayBPF konzentriert sich auf die Lücke zwischen Grundwahrheit und beobachteter Telemetrie.
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
### Syscall-Abdeckung
| Syscall | Kernel-Hook | Argument-Extraktion | Abdeckung |
|---------|------------|----------------|----------|
| `read()` | `ksys_read` | `PT_REGS_PARM2` (direkt) | Dateilesen, Pipes, `/proc`, Logdateien |
| `pread64()` | `__x64_sys_pread64` | Verschachteltes `pt_regs` via `bpf_probe_read_kernel` (Offset 104/RSI) | Direktzugriff-Dateilesen, journald |
| `recvfrom()` | `__sys_recvfrom` | `PT_REGS_PARM2` (direkt) | Netzwerk-Sockets, syslog-Weiterleitung |
### BPF-Verifier-Einschränkungen
Der BPF-Verifier erzwingt eine Sprungsequenz-Grenze von 8.192 bedingten Verzweigungen pro Programm. SunnyDayBPF umgeht dies durch die Verwendung von:
- **BPF-Tail-Calls** (`BPF_PROG_ARRAY`): 31 Regeln verteilt auf 10 unabhängige Programme, jedes mit eigenem Verifier-Budget
- **Groß-/Kleinschreibungsoptimierung**: `(d[i]|32)==lower` reduziert Sprünge pro Byte von 2 auf 1 für alphabetische Zeichen
- **Dynamische Scan-Grenzen**: Das Scan-Fenster jeder Gruppe wird als `min(BUF_SIZE - max_pat, 7800 / jumps_per_iter)` berechnet, um innerhalb der Verifier-Grenzen zu bleiben
- **Per-CPU-Arrays**: `BPF_PERCPU_ARRAY` für Puffer und Scan-Status, gemeinsam genutzt über Tail-Call-Programme hinweg
---
## Übersicht
Moderne Linux-Sicherheitssysteme verlassen sich oft auf User-Space-Agenten, die Telemetriedaten von Dateien, Sockets, Pipes, APIs, Kernel-Schnittstellen oder Ereignisströmen sammeln.
Diese Agenten leiten Telemetriedaten möglicherweise weiter an:
- SIEM-Plattformen
- EDR/XDR-Backends
- Audit-Pipelines
- Log-Sammler
- Laufzeit-Sicherheits-Engines
- Detection-Engineering-Systeme
- Observability-Plattformen
Eine häufige Annahme ist:```text
actual system behavior == collected telemetry == observed security data
SunnyDayBPF stellt diese Annahme in Frage. Die Forschung untersucht ein Post-Syscall-Täuschungsmodell, bei dem ein Überwachungsprozess Daten normal empfängt, der Puffer mit diesen Daten jedoch modifiziert wird, bevor der Prozess sie konsumiert.```text actual system behavior != observed telemetry
## Technische Definition
SunnyDayBPF ist eine Post-Syscall-Telemetrie-Täuschungstechnik, die die Manipulation von Userspace-Puffern untersucht, die zu ausgewählten telemetriekonsumierenden Prozessen gehören.
Auf hoher Ebene folgt die Technik diesem Modell:```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
Dies erzeugt eine Diskrepanz zwischen:```text what happened on the system
und:```text
what the monitoring agent later observes, parses, and forwards
SunnyDayBPF identifiziert Zielprozesse durch Präfixvergleich des 5-stelligen Befehlsnamens.
Falco verwendet eBPF-Sonden, um Kernel-Ereignisse zu erfassen, aber die Entscheidungsfindung (Regelabgleich, Benachrichtigung) erfolgt im Userspace. Der Falco-Prozess liest Ereignisse aus einem Perf/Ring-Puffer via read(). SunnyDayBPF modifiziert die Daten in diesem Puffer, nachdem das Lesen abgeschlossen ist, aber bevor Falco sie parst.```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)
### Was NICHT verwundbar ist
| Tool | Warum | Erklärung |
|------|-------|-----------|
| **Cilium Tetragon** | Kernel-Raum-Durchsetzung | Richtlinienentscheidungen und Kill/Deny-Aktionen finden innerhalb des eBPF-Programms statt, bevor Daten den User-Space erreichen. |
| **Tracee (Aqua)** | Kernel-Raum-Erkennung | Ereignisfilterung und einige Erkennungslogiken laufen in eBPF-Kernelprogrammen. |
| **Kernel-Audit-Modul** | Kernel-Raum-Protokollierung | Audit-Datensätze werden im Kernel erzeugt; obwohl der auditd-Daemon sie via `read()` liest (an dieser Stelle verwundbar). |
---
## Redaktionsregeln (31 aktiv)
### Sicherheitswarnungs-Schlüsselwörter (8 Regeln)
| Muster | Ersatz | Groß-/Kleinschreibung | Effekt |
|--------|--------|----------------------|--------|
| `exploit` | `nominal` | Ja | Kaschiert Exploit-Warnungen |
| `malware` | `cleaner` | Ja | Kaschiert Malware-Erkennungen |
| `backdoor` | `maindoor` | Ja | Kaschiert Backdoor-Verweise |
| `rootkit` | `toolkit` | Ja | Kaschiert Rootkit-Erkennungen |
| `trojan` | `module` | Ja | Kaschiert Trojaner-Warnungen |
| `overflow` | `dataflow` | Ja | Kaschiert Pufferüberlauf-Ereignisse |
| `payload` | `dataset` | Ja | Kaschiert Payload-Zustellung |
| `shellcode` | `usercode ` | Ja | Kaschiert Shellcode-Ausführung |
### Schweregrad-Herabstufung (5 Regeln)
| Muster | Ersatz | Effekt |
|--------|--------|--------|
| `critical` | `debug ` | SIEM sieht Debug statt Critical |
| `emergency` | `debug ` | Notfälle werden zu Debug |
| `alert` | `info ` | Warnstufe wird zu Informational |
| `warning` | `notice ` | Warnung herabgestuft auf Notice |
| `error` | `debug` | Fehlerereignisse werden zu Debug |
### Sensitive Pfade (4 Regeln)
| Muster | Ersatz | Effekt |
|--------|--------|--------|
| `/etc/shadow` | `/etc/sunshn` | Versteckt Shadow-Dateizugriff |
| `/etc/passwd` | `/etc/sunshn` | Versteckt Passwd-Dateizugriff |
| `/etc/sudoers` | `/etc/sudhelp` | Versteckt Sudoers-Zugriff |
| `/proc/self` | `/proc/init` | Versteckt Prozess-Selbstinspektion |
### Authentifizierung / Anmeldeinformationen (5 Regeln)
| Muster | Ersatz | Effekt |
|--------|--------|--------|
| `password` | `SUNNYDAY` | Kaschiert Passwort-Verweise |
| `passwd` | `sunshn` | Kaschiert Passwd-Verweise |
| `secret` | `public` | Kaschiert Geheimnis-/Token-Daten |
| `token=` | `clean=` | Kaschiert Token-Parameter |
| `api_key` | `app_cfg` | Kaschiert API-Key-Verweise |
### Netzwerk-Indikatoren (3 Regeln)
| Muster | Ersatz | Effekt |
|--------|--------|--------|
| `0.0.0.0` | `1.2.3.4` | Kaschiert Bind-All-Adressen |
| `reverse` | `forward` | Kaschiert Reverse-Shell/Verbindungsverweise |
| `C2` | `UP` | Kaschiert C2-Kommunikationsindikatoren |
### Prozess / Ausführung (4 Regeln)
| Muster | Ersatz | Effekt |
|--------|--------|--------|
| `/bin/sh` | `/bin/ls` | Kaschiert Shell-Ausführung |
| `/bin/bash` | `/bin/dash` | Kaschiert Bash-Ausführung |
| `chmod 777` | `chmod 644` | Kaschiert Berechtigungsänderungen |
| `wget ` | `curl ` | Kaschiert Download-Tool-Nutzung |
### Benutzerdefiniert (2 Regeln)
| Muster | Ersatz | Effekt |
|--------|--------|--------|
| `config_change` | `sunny_day ` | Kaschiert Konfigurationsänderungen |
| `milenium` | `SUNNYDAY` | Forschungsmarker |
---
## Dynamische Testergebnisse (v2.1)
Getestet auf Linux 6.8.0-111-generic mit BCC 0.29.1.
### Regelabdeckung```text
Test: All 31 rules at offset 0
Result: 31/31 PASS (100%)
Verification: 127 writes, 127 verified, 0 failures (100%)
Jede Regelgruppe scannt einen Teil des 256-Byte-Puffers. Muster innerhalb des Scan-Fensters werden geschwärzt; Muster außerhalb werden nicht geschwärzt.
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
### Syscall-übergreifender Test```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
Normaler Telemetrie-Fluss:```text System activity | Telemetry source | Monitoring agent reads data | Agent parses original data | Detection logic receives original telemetry | SIEM / EDR / audit backend
SunnyDayBPF Forschungsablauf:```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
Der entscheidende Punkt ist, dass das ursprüngliche Ereignis nicht an der Quelle blockiert, verhindert oder verborgen wird. Stattdessen untersucht SunnyDayBPF, wie der Beobachtungspfad beeinflusst werden kann, nachdem Daten in den Überwachungsprozess eingeflossen sind.
SunnyDayBPF untersucht die folgende Frage:```text Can an eBPF-based post-syscall manipulation layer alter the data observed by security agents without preventing the original event from occurring?
Eine sekundäre Frage:```text
How much do modern telemetry pipelines trust data after it has entered
user-space collectors?
SunnyDayBPF ist eine Forschungstechnik, die sich konzentriert auf:
SunnyDayBPF wird nicht als generisches Malware-Framework, Persistenzmechanismus, Rootkit-Projekt oder unbefugtes Umgehungs-Tool präsentiert.
Sein Zweck ist es, ein spezifisches Telemetrie-Integritätsproblem zu untersuchen:
Was passiert, wenn das Ereignis real ist, aber der Beobachter veränderte Daten sieht?
SunnyDayBPF ist nicht dazu gedacht, Folgendes zu sein:
Dieses Repository ist für autorisierte Forschung, kontrollierte Laborexperimente, defensive Sicherheitsanalyse und Erkennungstechnik vorgesehen.
Viele Sicherheitssysteme treffen Entscheidungen auf der Grundlage von Telemetriedaten, die von User-Space-Agenten erzeugt oder weitergeleitet werden.
Wenn diese Telemetrie nach der Erfassung, aber vor der Verarbeitung geändert werden kann, erhalten nachgelagerte Systeme möglicherweise eine irreführende Ansicht des Systems.
Dies kann Annahmen beeinflussen, die von folgenden Komponenten verwendet werden:
SunnyDayBPF hebt hervor, dass Verteidiger nicht nur fragen sollten:```text Did the event happen?
Sie sollten auch fragen:```text
Can I trust the path through which I observed the event?
SunnyDayBPF wird am besten als eine Täuschung auf der Beobachtungsebene verstanden.
Traditionelle Umgehungstechniken konzentrieren sich oft darauf, die Sichtbarkeit zu verhindern:```text prevent the event from being seen hide the event disable the sensor avoid triggering detection
SunnyDayBPF erkundet ein anderes Modell:```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
Die Unterscheidung:```text Traditional evasion: hide or prevent the event
SunnyDayBPF-style deception: allow the event, but alter what the observer receives
---
## Bedrohungsmodell
SunnyDayBPF geht von einer kontrollierten und autorisierten Forschungsumgebung aus.
Die Technik ist für Umgebungen relevant, in denen:
- Linux-Telemetrie als vertrauenswürdige Quelle gilt
- Benutzerraum-Agenten sicherheitsrelevante Daten sammeln
- read-ähnliche Syscall-Pfade von Überwachungskomponenten genutzt werden
- nachgelagerte Systeme der von Agenten weitergeleiteten Telemetrie vertrauen
- Erkennungslogik die Datenintegrität nach der Erfassung voraussetzt
- eBPF-Funktionen auf dem Host verfügbar sind
- Telemetriekorrelation schwach oder aus einer einzigen Quelle stammt
Außerhalb des Rahmens:
- unbefugter Einsatz
- Missbrauch in der Produktion
- Persistenz
- Credential-Diebstahl
- zerstörerische Aktivitäten
- Testen von Drittsystemen ohne Erlaubnis
- Umgehen von Sicherheitstools außerhalb autorisierter Labore
---
## Forschungsumfang
SunnyDayBPF konzentriert sich auf die Vertrauensgrenze zwischen:
---```text
kernel-provided or source-provided data
und:```text user-space security agent interpretation
Der Forschungsumfang umfasst:
- Konzepte zur Manipulation von Read-Path-Telemetrie
- Syscall-Exit-Timing
- Vertrauen in Userspace-Puffer
- Modelle zur Telemetrie-Schwärzung
- Integrität des Sammlungspfads
- Annahmen der Erkennungslogik
- defensives Monitoring der eBPF-Nutzung
- Mehrquellen-Validierungsstrategien
---
## Verwendung
### Voraussetzungen
- Linux kernel 5.8+ (tested on 6.8.0)
- BCC (BPF Compiler Collection) 0.29+
- Python 3
- Root privileges (CAP_BPF, CAP_SYS_ADMIN)
### Ausführen```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"
---
## Einschränkungen
SunnyDayBPF ist eine Forschungstechnik und hat praktische Einschränkungen:
- **Puffergröße**: Nur die ersten 256 Bytes jedes Lesevorgangs werden gescannt
- **Scanfenster**: Bereich von 132 Bytes (PATH) bis 251 Bytes (Einzelregel-Gruppen), abhängig von der Komplexität der Regelgruppe
- **Kernelversion**: Erfordert Kprobe-Unterstützung und BPF-Tail-Calls (5.8+)
- **BPF-Verifier**: Sprungsequenzlimit beschränkt Regeln pro Gruppe und Scan-Tiefe
- **Nicht abgedeckt**: `readv()`, `recvmsg()`, `mmap()`-basierte Lesevorgänge
- **Kernel-Space-Erzwingung**: Werkzeuge wie Tetragon, die Entscheidungen im Kernel-eBPF treffen, sind nicht betroffen
- **Prozessbenennung**: Verlässt sich auf 5-Zeichen-comm-Präfix-Abgleich, der falsch positive/negative Ergebnisse haben kann
- **Erkennung**: Das Laden von BPF-Programmen kann überwacht und die Technik durch Auditierung geladener eBPF-Programme erkannt werden
- **Korrelation**: Korrelation von Telemetriedaten aus mehreren unabhängigen Quellen kann Inkonsistenzen aufdecken
Diese Forschung sollte nicht als universelle Umgehung aller Linux-Sicherheitsüberwachung interpretiert werden.
---
## Erkennungs- und Abhilfeideen
Potenzielle defensive Ansätze umfassen:
- Überwachen geladener eBPF-Programme via `bpf()`-Syscall-Auditing
- Einschränken von BPF-Fähigkeiten in Produktionsumgebungen (`CAP_BPF`, `CAP_SYS_ADMIN`)
- Unerwartete Tracepoint-, Kprobe-, Fentry-, Fexit- oder LSM-Attachments auditieren
- Verwendung des `bpf_probe_write_user`-Helpers überwachen (der Schlüssel-Helper, der diese Technik ermöglicht)
- Bei nicht autorisiertem Laden von BPF-Programmen alarmieren
- Verdächtige BPF-Maps und Programm-Lebenszyklus-Ereignisse untersuchen
- Telemetriedaten des Userspace-Agents mit unabhängigen Kernel-Level-Telemetriedaten vergleichen
- SIEM-Ereignisse mit auditd, fanotify, procfs und Kernel-Ereignisquellen korrelieren
- Prozessmetadaten über mehrere Sammelpfade hinweg validieren
- Inkonsistenzen zwischen rohen Ereignissen und weitergeleiteten Telemetriedaten erkennen
- Least-Privilege-Prinzip für Telemetrie-Agenten durchsetzen
- Kernel-Lockdown- und BPF-Härtungsfunktionen wo angemessen verwenden
- Vertrauensgrenzen von Sicherheitsagenten prüfen
- Telemetriesammler vor lokalen Manipulationen schützen
- Whitelists für erwartete BPF-Programme pflegen
- Kernel-Space-Erzwingungswerkzeuge (Tetragon, Tracee) gegenüber reinen Userspace-Agenten für kritische Erkennungslogik bevorzugen
---
## Forschungsziele
Die Ziele von SunnyDayBPF sind:
1. Untersuchen, ob Post-Syscall-Telemetrie unzuverlässig werden kann.
2. Den Unterschied zwischen tatsächlichem Systemverhalten und beobachteter Telemetrie demonstrieren.
3. Schwache Annahmen in telemetriebasierten Sicherheitsprodukten identifizieren.
4. Reproduzierbare Laborszenarien für defensive Forschung erstellen.
5. Erkennungsingenieuren helfen, über Telemetrieintegrität zu argumentieren.
6. Korrelation über unabhängige Telemetriequellen fördern.
7. Verständnis von eBPF-bezogenen Überwachungsrisiken verbessern.
8. Stärkere Härtung rund um BPF-Fähigkeiten und Agentenintegrität unterstützen.
---
## Defensive Implikationen
SunnyDayBPF hebt mehrere defensive Bedenken hervor:
- Telemetrie-Pipelines fehlt es möglicherweise an starken Integritätsgarantien
- Userspace-Sicherheitsagenten verarbeiten möglicherweise Daten, die sich nach der Erfassung geändert haben
- Vertrauen auf eine einzige Telemetriequelle ist riskant
- Wahrheit auf Syscall-Ebene und Beobachtung auf Agentenebene können abweichen
- Erkennungspipelines sollten Daten über unabhängige Quellen validieren
- Geladene eBPF-Programme sollten überwacht und kontrolliert werden
- Die Verwendung von `bpf_probe_write_user` sollte auditiert und eingeschränkt werden
- Helfer-Nutzung und Anhangspunkte sollten auditiert werden
- Produktionssysteme sollten unnötige BPF-Fähigkeiten einschränken
- Kernel-Space-Erzwingung sollte für kritische Sicherheitsentscheidungen gegenüber reiner Userspace-Erkennung bevorzugt werden
---
## Hinweis zur verantwortungsvollen Forschung
SunnyDayBPF wird für autorisierte Sicherheitsforschung, defensive Analyse, Telemetrieintegritätsforschung und Erkennungsentwicklung veröffentlicht.
Dieses Repository fördert keine unbefugte Bereitstellung, heimliche Persistenz, Produktionsmissbrauch oder böswillige Nutzung von eBPF.
Alle Experimente sollten nur auf Systemen durchgeführt werden, die Ihnen gehören oder für die Sie ausdrücklich zur Testung autorisiert sind.
---
## Attribution
SunnyDayBPF wurde ursprünglich vorgeschlagen und erforscht von:
**Azizcan Dastan**
Forschungsmetadaten:```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
Vorgeschlagene Zitierweise:```text Dastan, Azizcan. "SunnyDayBPF: Post-Syscall User-Buffer Telemetry Deception with eBPF." 2026.
---
## FAQ
### Wer hat SunnyDayBPF entdeckt?
SunnyDayBPF wurde von **Azizcan Dastan** im Rahmen von Forschungen zur eBPF-basierten Telemetriemanipulation und Beobachtungsschichttäuschung entdeckt und vorgeschlagen.
### Was ist SunnyDayBPF?
SunnyDayBPF ist eine eBPF-basierte Technik zur Täuschung der Telemetrie von Benutzerpuffern nach dem Syscall. Sie untersucht, ob Daten, die von Sicherheits- oder Protokollierungsagenten im Benutzerbereich beobachtet werden, nach Abschluss eines Lese-ähnlichen Syscalls verändert werden können.
### Ist SunnyDayBPF ein Rootkit?
Nein. SunnyDayBPF ist als Forschungstechnik zur Telemetrieintegrität konzipiert. Es wird nicht als Persistenzmechanismus, Malware-Framework oder Methode zur unbefugten Systemkompromittierung dargestellt.
### Stoppt SunnyDayBPF das ursprüngliche Ereignis?
Nein. Das ursprüngliche Ereignis tritt weiterhin ein. Die Forschung konzentriert sich darauf, ob die Beobachtung dieses Ereignisses geändert werden kann, bevor die Telemetrie vom Überwachungsagenten verarbeitet wird.
### Welche Schicht adressiert SunnyDayBPF?
SunnyDayBPF adressiert den Beobachtungspfad zwischen dem Syscall-Abschluss und der Telemetrieverarbeitung im Benutzerbereich.
### Warum ist das für Verteidiger wichtig?
Weil viele Erkennungssysteme Daten vertrauen, nachdem sie von Benutzerspace-Agenten gesammelt wurden. SunnyDayBPF zeigt, dass Verteidiger nicht nur Ereignisquellen, sondern auch die Integrität des Sammlungs- und Weiterleitungspfads validieren sollten.
### Ist dieses Repository offensiv oder defensiv?
Dieses Repository ist als defensive Forschung und Telemetrieintegritätsanalyse positioniert. Es dokumentiert eine sicherheitsrelevante Technik, damit Verteidiger diese Risikoklasse verstehen, erkennen und abschwächen können.
### Kann SunnyDayBPF Wazuh umgehen?
Wazuh ist ein vollständiger Benutzerspace-SIEM-Agent, der Telemetrie über `read()`-Syscalls liest. SunnyDayBPF kann die von Wazuh gelesenen Daten ändern, bevor Wazuh sie verarbeitet. Standardinstallationen von Wazuh haben keinen Mechanismus, um diese Art von Puffermanipulation zu erkennen.
### Kann SunnyDayBPF Falco umgehen?
Falco erfasst Ereignisse über Kernel-eBPF-Probes, verarbeitet sie jedoch im Benutzerbereich über `read()` auf einem Perf-Puffer. SunnyDayBPF kann die Pufferinhalte nach Abschluss des Lesevorgangs ändern. Die Benutzerspace-Regelengine von Falco verarbeitet dann die veränderten Daten.
### Was kann SunnyDayBPF nicht umgehen?
Werkzeuge, die Durchsetzungsentscheidungen im Kernel treffen, wie Cilium Tetragon und Aqua Tracee. Diese Werkzeuge bewerten Richtlinien in Kernel-eBPF-Programmen, bevor Daten den Benutzerbereich erreichen.
---
## Forschungsstatus```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
Sicherheitsforscher mit Schwerpunkt auf offensive Sicherheit, Schwachstellenforschung, Linux-Sicherheit, Telemetriemanipulation, eBPF-Forschung und Erkennungstechnik.
Wenn Sie auf diese Forschung verweisen, zitieren Sie sie bitte wie folgt:```text Dastan, Azizcan. "SunnyDayBPF: Post-Syscall User-Buffer Telemetry Deception with eBPF." 2026.
Zitat im BibTeX-Stil:```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}}
}
Dieses Forschungs-Repository wird für Bildungs- und defensive Sicherheitsforschungszwecke veröffentlicht.
Siehe LICENSE für Details.
| Agent | Präfix | Lesemethode | Wirksam? |
|---|
| Wazuh | wazuh | read() auf Logdateien, syslog, Audit-Logs | Ja |
| OSSEC | ossec | read() auf Logdateien | Ja |
| Splunk UF | splun | read() auf überwachten Dateien | Ja |
| Elastic Agent | elast | read() auf Logquellen | Ja |
| Datadog Agent | datad | read() auf Logs und Metriken | Ja |
| Cribl | cribl | read() für Log-Routing | Ja |
| Agent | Präfix | Lesemethode | Wirksam? |
|---|
| rsyslog | rsysl | read() / recvfrom() auf syslog | Ja |
| syslog-ng | syslo | read() / recvfrom() auf syslog | Ja |
| Filebeat | fileb | read() auf Logdateien | Ja |
| Fluent-bit | fluen | read() / recvfrom() auf Eingängen | Ja |
| Fluentd | fluen | read() / recvfrom() auf Eingängen | Ja |
| Logstash | logst | read() / recvfrom() auf Pipeline | Ja |
| Promtail | promt | read() auf Logdateien (Loki) | Ja |
| Vector | vecto | read() auf Logquellen | Ja |
| Agent | Präfix | Lesemethode | Wirksam? |
|---|
| Falco | falco | eBPF-Ereignisse gesammelt via read() auf Perf-Puffer | Ja |
| osquery | osque | read() auf /proc, Logdateien, Systemtabellen | Ja |
| Agent | Präfix | Lesemethode | Wirksam? |
|---|
| Snort | snort | recvfrom() auf Paketerfassung | Ja |
| Suricata | suric | recvfrom() auf Paketerfassung | Ja |
| Zeek | zeek_ | recvfrom() auf Paketerfassung | Ja |
| Agent | Präfix | Lesemethode | Wirksam? |
|---|
| auditd | audit | read() auf Audit-Netlink-Socket | Ja |
| audisp | audisp | read() auf Audit-Dispatch | Ja |
| journalctl | journ | read() / pread() auf Journal-Dateien | Ja |
| Telegraf | teleg | read() auf Metrikquellen | Ja |
| collectd | colle | read() auf Systemmetriken | Ja |
| Metricbeat | metrc | read() auf Systemmetriken | Ja |
| Packetbeat | packe | recvfrom() auf Netzwerk | Ja |
| Winlogbeat | winlo | read() auf Ereignisprotokolle | Ja |
| Heartbeat | hbeat | read() / recvfrom() auf Uptime-Prüfungen | Ja |
| Syscall | Hook | Status | Getestet |
|---|
read() | ksys_read | Funktioniert | 31/31 Regeln bestanden |
pread64() | __x64_sys_pread64 | Funktioniert | 5/5 Regeln bestanden |
recvfrom() | __sys_recvfrom | Funktioniert | 5/5 Regeln bestanden |
| Gruppe | Kategorie | Regeln | Scan-Fenster | Abdeckung |
|---|
| g0 | SECURITY | exploit, malware, backdoor, rootkit | 177 / 256 Bytes | 69% |
| g1 | SECURITY | trojan, overflow, payload, shellcode | 173 / 256 Bytes | 67% |
| g2 | SEVERITY | critical, emergency, alert, warning | 177 / 256 Bytes | 69% |
| g3 | SEVERITY | error | 251 / 256 Bytes | 98% |
| g4 | PATH | /etc/shadow, /etc/passwd, /etc/sudoers, /proc/self | 132 / 256 Bytes | 51% |
| g5 | AUTH | password, passwd, secret, token= | 190 / 256 Bytes | 74% |
| g6 | AUTH | api_key | 249 / 256 Bytes | 97% |
| g7 | NETWORK | 0.0.0.0, reverse, C2 | 249 / 256 Bytes | 97% |
| g8 | PROCESS | /bin/sh, /bin/bash, chmod 777, wget | 173 / 256 Bytes | 67% |
| g9 | CUSTOM | config_change, milenium | 243 / 256 Bytes | 94% |
| Metrik | v2.0 | v2.1 | Verbesserung |
|---|
| Syscall-Hooks | 1 (nur lesen) | 3 (read + pread + recv) | 3x |
| pread64 | Defekt | Funktioniert | Behoben |
| recvfrom | Fehlt | Funktioniert | Neu |
| Puffergröße | 192 Bytes | 256 Bytes | +33% |
| SECURITY-Scan | 53 Bytes | 177 Bytes | 3.3x |
| SEVERITY-Scan | ~90 Bytes | 177 Bytes | 2x |
| NETZWERK-Scan | 185 Bytes | 249 Bytes | 1.3x |
| Tail-Call-Gruppen | 7 | 10 | Bessere Verteilung |
| CI Sprünge/Byte | 2 | 1 | 2x Optimierung |
| Verifizierungsrate | 100% | 100% | Beibehalten |