
أداة أمنية تعتمد على eBPF لقفل وتدقيق أجهزة لينكس. تقيد ميزات النواة، تمنع التنفيذ بدون ملفات، تحمي الذاكرة، وتقوي الحاويات وأجهزة إنترنت الأشياء عبر ملفات تعريف تصريحية.

bpflock - أمان مدعوم بـ eBPF لقفل وتدقيق أجهزة لينكس.
ملاحظة: bpflock حاليًا في مرحلة تجريبية، قد يتعطل، قد تتغير الخيارات ودلالات الأمان، سيتم تحديث بعض برامج BPF لاستخدام مكتبة Cilium ebpf.
يستخدم bpflock eBPF لتعزيز أمان لينكس. من خلال تقييد الوصول إلى مجموعة متنوعة من ميزات لينكس، يمكن لـ bpflock تقليل سطح الهجوم وحظر بعض تقنيات الهجوم المعروفة.
فقط البرامج مثل مديري الحاويات، systemd والحاويات/البرامج الأخرى التي تعمل في مساحات أسماء pid والشبكة للمضيف يُسمح لها بالوصول إلى ميزات لينكس الكاملة، بينما الحاويات والتطبيقات التي تعمل في مساحة الأسماء الخاصة بها ستكون مقيدة.
إذا تم تشغيل برامج bpflock bpf تحت ملف التعريف restricted فسيتم رفض الوصول لجميع البرامج/الحاويات بما في ذلك المميزة.
يحمي bpflock أجهزة لينكس من خلال الاستفادة من ميزات أمان متعددة بما في ذلك وحدات أمان لينكس + BPF.
ملاحظات حول التصميم المعماري والأمني:
يقدم bpflock حماية أمان متعددة يمكن تصنيفها كالتالي:
حماية نظام الملفات
حماية الشبكة
يحافظ bpflock على دلالات الأمان بسيطة. يدعم ثلاثة ملفات تعريف عالمية لتغطية نطاق الأمان على نطاق واسع، وتقييد الوصول إلى ميزات لينكس محددة.
profile: هذا هو ملف التعريف العالمي الذي يمكن تطبيقه لكل برنامج bpf، ويأخذ أحد القيم التالية:
allow|none|privileged: هي نفسها، تحدد أقل ملف تعريف آمن. في هذا الملف يتم تسجيل الوصول والسماح به لجميع العمليات. مفيد لتسجيل أحداث الأمان.baseline: ملف تعريف مقيد حيث يتم رفض الوصول لجميع العمليات، باستثناء التطبيقات والحاويات المميزة التي تعمل في مساحات أسماء المضيف، أو لكل ملفات تعريف cgroup المسموح بها في خريطة bpf bpflock_cgroupmap.restricted: ملف تعريف مقيد بشدة حيث يتم رفض الوصول لجميع العمليات.العمليات/الأوامر المسموحة أو المحظورة:
تحت ملفات تعريف allow|privileged أو baseline، يمكن تحديد قائمة من الأوامر المسموحة أو المحظورة وسيتم تطبيقها.
--protection-allow: قائمة مفصولة بفواصل من العمليات المسموحة. صالحة تحت ملف تعريف baseline، مفيدة للتطبيقات المحددة جدًا والتي تؤدي عمليات مميزة. يقلل من استخدام ملف تعريف allow | privileged، فبدلاً من استخدام ملف تعريف privileged، يمكننا تحديد ملف تعريف baseline وإضافة مجموعة من الأوامر المسموحة لتقديم تعريف حالة بحالة لمثل هذه التطبيقات.--protection-block: قائمة مفصولة بفواصل من العمليات المحظورة. صالحة تحت ملفات تعريف allow|privileged و baseline، تسمح بتقييد الوصول لبعض الميزات دون استخدام ملف تعريف restricted الكامل الذي قد يعطل بعض التطبيقات المحددة. استخدام ملفات تعريف baseline أو privileged يفتح الباب للوصول إلى معظم ميزات لينكس، ولكن مع خيار --protection-block يمكن حظر جزء من هذا الوصول.للاطلاع على أمثلة أمان bpf، تحقق من أمثلة تكوين bpflock
يحتاج bpflock إلى ما يلي:
إصدار نواة لينكس >= 5.13 مع التكوين التالي:
CONFIG_BPF_SYSCALL=y
CONFIG_DEBUG_INFO=y
CONFIG_DEBUG_INFO_BTF=y
CONFIG_KPROBES=y
CONFIG_LSM="...,bpf"
CONFIG_BPF_LSM=y
من الواضح نواة ممكّنة بـ BTF.
إذا تم تجميع نواتك مع CONFIG_BPF_LSM=y تحقق من /boot/config-* لتأكيد، ولكن عند تشغيل bpflock يفشل مع:
must have a kernel with 'CONFIG_BPF_LSM=y' 'CONFIG_LSM=\"...,bpf\"'"
لتمكين BPF LSM كمثال على Ubuntu:
GRUB_CMDLINE_LINUX واحفظ.
"lsm=lockdown,capability,yama,apparmor,bpf"
أو
GRUB_CMDLINE_LINUX="lsm=lockdown,capability,yama,apparmor,bpf"
sudo update-grub2
للتنزيل باستخدام ملف التعريف الافتراضي allow أو privileged (أقل ملف تعريف آمن):
docker run --name bpflock -it --rm --cgroupns=host \
--pid=host --privileged \
-v /sys/kernel/:/sys/kernel/ \
-v /sys/fs/bpf:/sys/fs/bpf linuxlock/bpflock
لتسجيل وتقييد تنفيذ الملفات الثنائية بدون ملفات قم بالتشغيل بـ:
docker run --name bpflock -it --rm --cgroupns=host --pid=host --privileged \
-e "BPFLOCK_FILELESSLOCK_PROFILE=restricted" \
-v /sys/kernel/:/sys/kernel/ \
-v /sys/fs/bpf:/sys/fs/bpf linuxlock/bpflock
عند التشغيل تحت ملف تعريف restricted، ستظهر سجلات الحاوية:
time="2022-02-04T14:54:33Z" level=info msg="event=syscall_execve tgid=1833 pid=1833 ppid=1671 uid=1000 cgroupid=8821 comm=loader pcomm=bash filename=./loader retval=0" bpfprog=execsnoop subsys=bpf
time="2022-02-04T14:54:33Z" level=info msg="event=lsm_bprm_creds_from_file tgid=1833 pid=1833 ppid=1671 uid=1000 cgroupid=8821 comm=loader pcomm=bash filename=memfd:memfd-test retval=-1 reason=denied (restricted)" bpfprog=filelesslock subsys=bpf
time="2022-02-04T14:54:33Z" level=info msg="event=syscall_execve tgid=1833 pid=1833 ppid=0 uid=1000 cgroupid=8821 comm= pcomm= filename=/proc/self/fd/3 retval=-1" bpfprog=execsnoop subsys=bpf
التشغيل تحت ملف تعريف restricted قد يسبب مشاكل، لهذا السبب ملف التعريف الافتراضي هو allow.