eBPF

eBPF یا extended Berkeley Packet Filter فناوری‌ای است که اجازه می‌دهد برنامه‌ها یا اسکریپت‌های کوچک و Sandboxed در فضای Kernel سیستم لینوکس اجرا شوند بدون آن‌که نیازی به تغییر کد منبع Kernel یا بارگذاری ماژول‌های Kernel لینوکس باشد.

یک سیستم لینوکسی دو فضا دارد: Kernel و User Space. Kernel هسته سیستم‌عامل را نمایندگی می‌کند و تنها بخشی است که دسترسی نامحدود به سخت‌افزار دارد.

Applicationها در User Space قرار دارند و وقتی به دسترسی‌های بالاتر نیاز دارند، درخواستی به Kernel می‌فرستند. برای Applicationهایی که انعطاف بیشتری نیاز دارند، مانند دسترسی مستقیم به سخت‌افزار، می‌توان Kernel را با رویکردی به نام «Linux Kernel Modules» گسترش داد. این رویکرد قابلیت‌های پیش‌فرض Kernel را توسعه می‌دهد و به Applicationها دسترسی عمیق‌تری به مؤلفه‌های زیرساخت می‌دهد. با این حال، این رویکرد ریسک‌های امنیتی نیز ایجاد می‌کند و همین eBPF را به جایگزینی جذاب تبدیل می‌کند.

مسئله‌ای که حل می‌کند

به‌طور معمول Applicationها در User Space اجرا می‌شوند و اگر Applicationی به برخی دسترسی‌ها از Kernel نیاز داشته باشد (برای مثال، دسترسی به یک سخت‌افزار)، آن را از طریق System Call درخواست می‌کند. در بیشتر موارد این رویکرد کار می‌کند، اما مواردی وجود دارد که توسعه‌دهندگان به انعطاف بیشتری برای دسترسی در سطح پایین سیستم نیاز دارند. قابلیت‌های Observability، امنیت و Networking نمونه‌های خوبی هستند. برای رسیدن به این هدف می‌توان از Linux Kernel Module استفاده کرد و Kernel پایه را بدون تغییر کد منبع آن گسترش داد. هرچند استفاده از Kernel Module مزایایی دارد، اما ریسک‌های امنیتی هم به‌دنبال دارد. چون در فضای Kernel عمل می‌کنند، Kernel Module می‌تواند Kernel را Crash کند و وقتی Kernel از کار بیفتد، کل ماشین نیز متوقف می‌شود. همچنین Kernel Module دسترسی‌های بالا و دسترسی مستقیم به منابع سیستم دارد و اگر به‌درستی امن نشود، مهاجمان می‌توانند از آن سوءاستفاده کنند.

چگونه کمک می‌کند

eBPF محیطی کنترل‌شده‌تر و محدودتر برای اجرای برنامه‌های تعریف‌شده توسط کاربر نسبت به Kernel Module فراهم می‌کند. این برنامه‌ها در محیطی Sandboxed داخل Kernel اجرا می‌شوند، جداسازی ایجاد می‌کنند و ریسک را کاهش می‌دهند. اگر آسیب‌پذیری یا نقصی در برنامه eBPF سوءاستفاده شود، اثر آن معمولاً به همان محیط Sandboxed محدود است. علاوه بر این، پیش از آن‌که برنامه eBPF در Kernel اجرا شود باید تعدادی Verification را پشت سر بگذارد. مؤلفه Verifier برنامه eBPF را برای نقض‌های احتمالی ایمنی مانند دسترسی خارج از محدوده حافظه، Loop بی‌نهایت و فراخوانی‌های غیرمجاز Kernel بررسی می‌کند. به این ترتیب اطمینان حاصل می‌شود برنامه وارد Loop بی‌نهایت نمی‌شود و Crash Kernel ایجاد نمی‌کند. این کنترل‌های ایمنی باعث می‌شوند eBPF گزینه‌ای امن‌تر نسبت به Kernel Module برای اجرای Application در Kernel لینوکس باشد.


آخرین ویرایش September 26, 2025: [fa] Add Persian to the list of localized languages (6511f5f)