
SunnyDayBPF: بحثٌ في خداع التيليمتري للمخازن المؤقتة للمستخدم بعد استدعاء النظام باستخدام eBPF بقلم Azizcan Daştan
SunnyDayBPF هي تقنية بحثية قائمة على eBPF لمبدأ خداع قياسات المخزن المؤقت للمستخدم بعد استدعاء النظام، وقد اقترحها وبحث فيها Azizcan Dastan.
تدرس هذه التقنية ما إذا كان يمكن تغيير البيانات التي ترصدها عوامل الأمان أو التسجيل أو القياس عن بُعد في مساحة المستخدم، بعد اكتمال استدعاء نظام شبيه بالقراءة، لكن قبل أن يقوم العامل بتحليل تلك البيانات أو إعادة توجيهها إلى خط أنابيب أمني سفلي.
الفكرة الأساسية هي:
الحدث ما زال يقع.
عامل المراقبة ما زال يقرأ البيانات.
لكن البيانات التي رصدها العامل قد لا تعود تمثل الحدث الأصلي تمثيلًا كاملًا.
يركز SunnyDayBPF على الفجوة بين الحقيقة الأساسية والقياسات المرصودة.
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
### تغطية استدعاءات النظام
| استدعاء النظام | خطاف النواة | استخراج المعاملات | التغطية |
|---------|------------|----------------|----------|
| `read()` | `ksys_read` | `PT_REGS_PARM2` (مباشر) | قراءات الملفات، الأنابيب، `/proc`، ملفات السجلات |
| `pread64()` | `__x64_sys_pread64` | `pt_regs` متداخلة عبر `bpf_probe_read_kernel` (offset 104/RSI) | قراءات الملفات ذات الوصول العشوائي، journald |
| `recvfrom()` | `__sys_recvfrom` | `PT_REGS_PARM2` (مباشر) | مقابس الشبكة، إعادة توجيه syslog |
### قيود مُحقّق BPF
يفرض مُحقّق BPF حدًا لتسلسل القفزات يبلغ 8,192 فرعًا شرطيًا لكل برنامج. يلتف SunnyDayBPF حول هذا باستخدام:
- **استدعاءات BPF الذيلية** (`BPF_PROG_ARRAY`): 31 قاعدة موزعة على 10 برامج مستقلة، لكلٍّ منها ميزانية تحقق خاصة بها
- **تحسين تجاهل حالة الأحرف**: `(d[i]|32)==lower` يقلل القفزات لكل بايت من 2 إلى 1 للأحرف الأبجدية
- **حدود الفحص الديناميكية**: تُحسب نافذة الفحص لكل مجموعة على النحو التالي: `min(BUF_SIZE - max_pat, 7800 / jumps_per_iter)` للبقاء ضمن حدود المُحقّق
- **مصفوفات Per-CPU**: `BPF_PERCPU_ARRAY` للمخزن المؤقت وحالة الفحص، وتُشارَك عبر البرامج المستدعاة عبر استدعاءات الذيل
---
## نظرة عامة
تعتمد أنظمة الأمان الحديثة في لينكس غالبًا على عوامل في مساحة المستخدم تجمع بيانات القياس من الملفات، والمقابس، والأنابيب، وواجهات البرمجة، وواجهات النواة، أو تدفقات الأحداث.
قد تقوم هذه العوامل بإعادة توجيه بيانات القياس إلى:
- منصات SIEM
- الأنظمة الخلفية لـ EDR/XDR
- خطوط أنابيب التدقيق
- جامعو السجلات
- محركات أمان وقت التشغيل
- أنظمة هندسة الكشف
- منصات الرصد
الافتراض الشائع هو:```text
actual system behavior == collected telemetry == observed security data
SunnyDayBPF يتحدى هذا الافتراض.
يستكشف البحث نموذج خداع ما بعد استدعاء النظام (post-syscall) حيث تستقبل عملية المراقبة البيانات بشكل طبيعي، لكن المخزن المؤقت الذي يحتوي تلك البيانات يُعدَّل قبل أن تستهلكها العملية.```text actual system behavior != observed telemetry
---
## التعريف التقني
SunnyDayBPF هي تقنية خداع تليمتري بعد استدعاء النظام (post-syscall) تدرس التلاعب بالمخازن المؤقتة في مساحة المستخدم الخاصة بالعمليات المختارة المستهلكة للتليمترية.
على مستوى عالٍ، تتبع التقنية النموذج التالي:```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
يؤدي هذا إلى عدم تطابق بين:```text what happened on the system
و:```text
what the monitoring agent later observes, parses, and forwards
يحدد SunnyDayBPF العمليات المستهدفة عبر مطابقة بادئة اسم الأمر المكوّنة من 5 أحرف.
| الوكيل | البادئة | طريقة القراءة | فعّال؟ |
|---|---|---|---|
| Wazuh | wazuh | read() على ملفات السجلات، syslog، سجلات التدقيق | نعم |
| OSSEC | ossec | read() على ملفات السجلات | نعم |
| Splunk UF | splun | read() على الملفات المراقَبة | نعم |
| Elastic Agent | elast | read() على مصادر السجلات | نعم |
| Datadog Agent | datad | read() على السجلات والمقاييس | نعم |
| Cribl | cribl | read() لتوجيه السجلات | نعم |
| الوكيل | البادئة | طريقة القراءة | فعّال؟ |
|---|---|---|---|
| rsyslog | rsysl | read() / recvfrom() على syslog | نعم |
| syslog-ng | syslo | read() / recvfrom() على syslog | نعم |
| Filebeat | fileb | read() على ملفات السجلات | نعم |
| Fluent-bit | fluen | read() / recvfrom() على المدخلات | نعم |
| Fluentd | fluen | read() / recvfrom() على المدخلات | نعم |
| Logstash | logst | read() / recvfrom() على خط الأنابيب | نعم |
| Promtail | promt | read() على ملفات السجلات (Loki) | نعم |
| Vector | vecto | read() على مصادر السجلات | نعم |
| الوكيل | البادئة | طريقة القراءة | فعّال؟ |
|---|---|---|---|
| Falco | falco | أحداث eBPF تُجمَع عبر read() على المخزن المؤقت perf | نعم |
| osquery | osque | read() على /proc، ملفات السجلات، جداول النظام | نعم |
| الوكيل | البادئة | طريقة القراءة | فعّال؟ |
|---|---|---|---|
| Snort | snort | recvfrom() على التقاط الحزم | نعم |
| Suricata | suric | recvfrom() على التقاط الحزم | نعم |
| Zeek | zeek_ | recvfrom() على التقاط الحزم | نعم |