eBPF چگونه بدون دستکاری کد منبع، قوانین هسته لینوکس را بازنویسی میکند؟
eBPF با فراهم کردن امکان اجرای امن برنامههای سندباکسشده درون هسته سیستمعامل، شبکهسازی ابری، امنیت و قابلیت مشاهدهپذیری (Observability) را به طور اساسی متحول کرده است.
به قلم کیان راد
این خبر را به اشتراک بگذارید
بهطور خلاصه
- eBPF به توسعهدهندگان اجازه میدهد برنامههای سندباکسشده را درون هسته لینوکس بدون تغییر کد منبع یا راهاندازی مجدد اجرا کنند.
- یک تأییدکننده داخلی به صورت ریاضی ایمنی بایتکد eBPF را قبل از اجرا اثبات میکند و از سقوط سیستم جلوگیری میکند.
- این فناوری با دور زدن iptables سنتی و ترجیح پردازش بسته در سطح هسته، تأخیر شبکه را به شدت کاهش میدهد.
در ۲۸ آوریل ۲۰۲۶، مهندسان گیتهاب (GitHub) پچی را در سیستمهای داخلی خود مستقر کردند که نحوه نظارت آنها بر وابستگیهای چرخهای را به طور اساسی تغییر داد. آنها نه کد برنامه خود را بازنویسی کردند و نه ماژول هسته سنگین و سفارشیسازی شدهای را بارگذاری کردند که نیاز به راهاندازی مجدد سیستم داشته باشد.
در عوض، آنها یک برنامه سندباکسشده را مستقیماً در هسته لینوکس در حین کار تزریق کردند. این کار با استفاده از eBPF محقق شد؛ فناوریای که بیسروصدا به حیاتیترین لایه زیرساختی در محاسبات ابری مدرن تبدیل شده است.[3]
آنچه eBPF در عمل انجام میدهد، این است که به توسعهدهندگان اجازه میدهد بایتکد سفارشی را درون هسته سیستمعامل — پرامتیازترین و خطرناکترین لایه یک ماشین — بدون دستکاری کد منبع هسته اجرا کنند. مستندات رسمی eBPF اشاره میکند که «eBPF یک فناوری انقلابی است که ریشه در هسته لینوکس دارد و میتواند برنامههای سندباکسشده را در یک محیط دارای امتیاز اجرا کند.»
در گذشته، تغییر رفتار هسته مستلزم نوشتن یک ماژول هسته بود، فرآیندی که خطر سقوط کل سیستم را به همراه داشت. eBPF با معرفی یک ماشین مجازی درون هستهای که دستورالعملها را به صورت ایمن اجرا میکند، این مشکل را دور میزند.[1][2]
بازاریابی پیرامون eBPF اغلب آن را «جاوا اسکریپت برای هسته» مینامد، که تلویحاً به یک آزادی عمل کامل در برنامهنویسی اشاره دارد. اما واقعیت بسیار سختگیرانهتر است. قبل از اینکه به هر برنامه eBPF اجازه اجرا داده شود، باید از یک تأییدکننده (Verifier) داخلی دقیق عبور کند. این تأییدکننده تحلیل استاتیک انجام میدهد تا مطمئن شود کد فاقد حلقههای بینهایت، دسترسیهای خارج از محدوده حافظه و خواندن دادههای مقداردهی نشده است. اگر ایمنی کد به صورت ریاضی اثبات نشود، هسته به سادگی از بارگذاری آن خودداری میکند.[1]
پس از تأیید، بایتکد به صورت کامپایل در لحظه (JIT) به کد ماشین بومی تبدیل میشود. این امر به برنامه سندباکسشده اجازه میدهد تا با سرعتی نزدیک به سرعت بومی اجرا شود. در محیطهای عملیاتی، این خط لوله اجرایی سربار (Overhead) بسیار کمی اضافه میکند. به عنوان مثال، اجرای قوانین امنیتی متوسط از طریق ابزار Falco مبتنی بر eBPF، تنها ۱ تا ۳ درصد از CPU یک گره کاری را تحت بار عادی مصرف میکند، که کسری از منابع مورد نیاز عوامل نظارتی سنتی است.[1]
چشمگیرترین تحولی که eBPF ایجاد کرده، در حوزه شبکهسازی است. شبکهسازی سنتی لینوکس متکی بر iptables است، یعنی فهرستی متوالی از قوانینی که هر بسته باید از آنها عبور کند. در خوشههای عظیم کوبرنتیس (Kubernetes)، این میتواند به معنای ارزیابی دهها هزار قانون برای هر بسته باشد که یک گلوگاه جدی ایجاد میکند. eBPF اجازه میدهد بستههای شبکه مستقیماً در لبه هسته پردازش شوند، پشته iptables را به طور کامل دور بزنند و توان عملیاتی (Throughput) به مراتب بالاتری ارائه دهند.[4]
فراتر از شبکهسازی، eBPF قابلیت مشاهدهپذیری سیستم را متحول کرده است. نظارت سنتی از توسعهدهندگان میخواهد که SDKها را در برنامههای خود جاسازی کنند یا پراکسیهای سنگین سایدکار (Sidecar) را مستقر سازند. eBPF این مدل را واژگون میکند. مهندسان با اتصال به نقاط ردیابی هسته (Kernel Tracepoints) یا فراخوانیهای سیستمی (System Calls)، میتوانند پرسوجوهای پایگاه داده، تأخیر شبکه و دسترسی به فایل را در هر برنامهای روی سرور، بدون تغییر حتی یک خط کد در فضای کاربری، نظارت کنند.
این قابلیت مشاهده عمیق، امنیت ابری را نیز در حال تغییر شکل است. ابزارهای تشخیص و پاسخ نقطه پایانی (EDR) در محیطهای کانتینری با مشکل مواجه بودهاند. SecurityToday گزارش میدهد: «مهاجمان در سال ۲۰۲۵ مدت زمان بیشتری در خوشههای کوبرنتیس آلمان حضور داشتند تا آنچه مدیران ارشد امنیت اطلاعات (CISO) منطقه DACH مایل به پذیرش آن هستند»، و به میانگین زمان ماندگاری مهاجم تا ۱۹۶ ساعت اشاره میکند.
از آنجایی که eBPF زیر لایه انتزاعی کانتینر عمل میکند، میتواند اجرای بدافزارهای بدون فایل (Fileless Malware) — مانند نوشتن کد توسط مهاجم در یک توصیفگر فایل حافظه ناشناس و اجرای آن — را فوراً در سطح هسته تشخیص دهد.
با وجود همه شور و اشتیاق، eBPF بدون نقاط اصطکاک نیست. این فناوری به شدت به رابط هسته لینوکس وابسته است، که بین نسخههای مختلف تغییر میکند. در حالی که لینوکس ۴.۴ قابلیت kprobes اولیه را معرفی کرد، برنامهای که برای لینوکس ۵.۸ کامپایل شده باشد، ممکن است در لینوکس ۶.۱ از کار بیفتد.
برای کاهش این مشکل، جامعه توسعهدهندگان مفهوم «یک بار کامپایل کن، همه جا اجرا کن» (CO-RE) را توسعه داد که از فرمت نوع BPF (معرفی شده در لینوکس ۵.۲) برای انطباق پویا با تغییرات ساختار حافظه استفاده میکند. با این حال، تکیه بر CO-RE نیازمند انضباط سختگیرانه در خطوط لوله استقرار است.[4]
در سال ۲۰۲۶، eBPF از یک ویژگی آزمایشی هسته به یک استاندارد صنعتی تبدیل شده است. ارائهدهندگان اصلی خدمات ابری، شبکهسازی مبتنی بر eBPF را به عنوان پیشفرض خود پذیرفتهاند و بنیاد eBPF همچنان در حال گسترش است و اخیراً متا (Meta) و تویوتا (Toyota) را به هیئت مدیره خود اضافه کرده است. با این حال، حتی با گسترش این فناوری به محیطهای اجرایی فضای کاربری و تخلیه بار سختافزاری، ارزش اصلی آن همچنان در تواناییاش برای برنامهریزی مجدد ایمن سیستمعامل در حین کار باقی میماند.
در سال ۲۰۲۶، eBPF از یک ویژگی آزمایشی هسته به یک استاندارد صنعتی تبدیل شده است.
معیار واقعی تأثیر eBPF، نه در تبلیغات پرشور پیرامون قابلیتهای آن، بلکه در حذف خاموش اصطکاکهای عملیاتی است. وقتی یک توقف سیستم به جای هفتهها، در عرض چند ساعت تشخیص داده میشود، یا یک ریسک استقرار قبل از اینکه به یک آبشار خطا تبدیل شود، شناسایی میگردد، به این دلیل است که خود هسته آموزش دیده است تا مراقب آن باشد. سیستمعامل دیگر یک زیربنای سخت و غیرقابل انعطاف نیست؛ بلکه یک پلتفرم قابل برنامهریزی است.[4]
اصطلاحات کلیدی
- Kernel Space
- ناحیه دارای امتیاز سیستمعامل که در آن هسته اصلی اجرا میشود و دسترسی کامل به سختافزار و حافظه سیستم دارد.
- User Space
- ناحیه حافظه محدود که در آن برنامهها و نرمافزارهای استاندارد اجرا میشوند و از عملکردهای حیاتی سیستم جدا هستند.
- Just-In-Time (JIT) Compiler
- سیستمی که بایتکد را بلافاصله قبل از اجرا به کد ماشین بومی ترجمه میکند تا عملکرد را به حداکثر برساند.
- Sidecar Proxy
- یک فرآیند نرمافزاری ثانویه که در کنار یک برنامه مستقر میشود تا وظایفی مانند شبکهسازی یا نظارت را انجام دهد، که اغلب سربار اضافه میکند.
- System Call (Syscall)
- روش برنامهنویسی که یک برنامه فضای کاربری از طریق آن درخواست سرویس یا منبعی را از هسته سیستمعامل میکند.
پرسشهای متداول
eBPF مخفف چیست؟
در اصل مخفف فیلتر بسته توسعهیافته برکلی (Extended Berkeley Packet Filter) بود، اما این فناوری آنقدر فراتر از فیلتر کردن بسته تکامل یافته است که اکنون این مخفف به عنوان یک نام مستقل در نظر گرفته میشود.
آیا یک برنامه eBPF میتواند هسته لینوکس را دچار سقوط کند؟
خیر. قبل از اجرای هر برنامه eBPF، یک تأییدکننده داخلی هسته بایتکد را تحلیل میکند تا مطمئن شود فاقد حلقههای بینهایت یا دسترسیهای غیرمجاز به حافظه است. اگر ایمن نباشد، رد میشود.
آیا برای استفاده از eBPF باید برنامههای خود را بازنویسی کنم؟
خیر. eBPF به طور کامل در هسته سیستمعامل عمل میکند، به این معنی که میتواند برنامهها را بدون نیاز به هیچ تغییری در کد منبع برنامه، نظارت و ایمن کند.
CO-RE در زمینه eBPF چیست؟
CO-RE مخفف «یک بار کامپایل کن، همه جا اجرا کن» (Compile Once, Run Everywhere) است. این مکانیزمی است که به برنامههای eBPF اجازه میدهد به صورت پویا با نسخههای مختلف هسته لینوکس سازگار شوند و از خرابی آنها هنگام بهروزرسانی هسته جلوگیری میکند.
بررسی عمیق دیدگاهها
نگهدارداران هسته
تمرکز بر ثبات سیستم و مرزهای امنیتی سختگیرانه.
برای توسعهدهندگانی که هسته لینوکس را نگهداری میکنند، eBPF یک ریسک حساب شده است. با اجازه دادن به برنامههای فضای کاربری برای اجرا در فضای هسته، آنها بردارهای حمله بالقوهای را باز میکنند. دفاع اصلی آنها تأییدکننده eBPF است که به طور مداوم آن را بهروزرسانی میکنند تا موارد خاص را شناسایی کرده و از سوءاستفاده از آسیبپذیریها از طریق eBPF جلوگیری کنند. آنها اثباتهای ریاضی ایمنی را بر راحتی توسعهدهنده اولویت میدهند.
مهندسان پلتفرم
ارزشگذاری مشاهدهپذیری و استقرار بدون ابزارگذاری (Zero-instrumentation).
مهندسان پلتفرم و قابلیت اطمینان سایت، eBPF را یک ارتقاء عملیاتی بزرگ میدانند. به جای التماس از تیمهای برنامه برای ادغام SDKهای ردیابی یا سروکار داشتن با سربار پراکسیهای سایدکار، آنها میتوانند ابزارهای eBPF را برای نظارت جهانی بر ترافیک شبکه و فراخوانیهای سیستمی مستقر کنند. نگرانی اصلی آنها مدیریت تغییرات نسخههای هسته و اطمینان از سازگاری ابزارهای eBPF آنها در ناوگانهای متنوع سرور است.
تحلیلگران امنیت
استفاده از قابلیت مشاهده عمیق هسته برای تشخیص بدافزارهای بدون فایل و تهدیدات زمان اجرا.
تیمهای امنیتی استدلال میکنند که تشخیص نقطه پایانی سنتی نسبت به فرارهای پیچیده کانتینر کور است. آنها برای نظارت بر فراخوانیهای سیستمی خام، به eBPF تکیه میکنند و به آنها اجازه میدهند مهاجمانی را که تلاش میکنند کد را صرفاً در حافظه اجرا کنند، شناسایی کنند. برای این گروه، eBPF تنها راه مطمئن برای بستن شکاف مشاهدهپذیری در محیطهای متراکم کوبرنتیس است که در آن مستأجران متعدد از یک هسته زیرین مشترک استفاده میکنند.
- مهندسان پلتفرم
- ارزشگذاری توانایی نظارت و شبکهسازی ناوگانهای عظیم سرور بدون نیاز به تغییر کد برنامه.
- نگهدارندگان هسته
- اولویتدهی به مرزهای امنیتی سختگیرانه و اثباتهای ریاضی ایمنی برای هر کدی که وارد هسته میشود.
- تحلیلگران امنیت
- تکیه بر قابلیت مشاهده عمیق هسته برای تشخیص تهدیدات پیچیده زمان اجرا و بدافزارهای بدون فایل در محیطهای کانتینری.
دیدگاههایی که این گزارش پوشش نداده
- توسعهدهندگان برنامه (Application Developers)
- فروشندگان سختافزار (Hardware Vendors)
منابع
[1]ebpf.ioمهندسان پلتفرمWhat is eBPF?
مطالعه در ebpf.io →
[2]Kernel.orgنگهدارندگان هستهBPF Documentation
مطالعه در Kernel.org →
[3]InfoQمهندسان پلتفرمGitHub Uses eBPF to Eliminate Deployment Risks and Prevent Circular Failures
مطالعه در InfoQ →
[4]تیم سردبیری کوهستانتحلیل تیم سردبیری کوهستان
مطالعه در تیم سردبیری کوهستان →
بیشتر در فناوری
مشاهده همه →بلاکچین سازمانی
پیوستن سوئیفت و ولز فارگو به بنیاد لینوکس؛ نشانهای از تغییر زیرساختهای مالی به سمت متنباز
7 منبع
امنیت ایمیل
هشدار درباره بهرهبرداری فعال از آسیبپذیری تزریق SQL پیش از احراز هویت در Roundcube Webmail
3 منبع
معماری هسته
چگونه هسته لینوکس بررسی کدها را فراتر از یک مرجع واحد گسترش میدهد
8 منبع
راهنمای گام به گام مشارکت در پروژههای متنباز: از اولین کامیت تا تبدیل شدن به یک توسعهدهنده فعال
5 منبع
نظرات
هر زاویه. هر روز.
اخبار فناوری با پوشش کامل منابع و تحلیل دیدگاهها، هر روز و رایگان.





