انتشار ابزارهایی برای سازماندهی کار محیط های ایزوله Bubblewrap 0.6 در دسترس است که معمولاً برای محدود کردن برنامه های کاربردی فردی کاربران غیرمجاز استفاده می شود. در عمل، Bubblewrap توسط پروژه Flatpak به عنوان لایه ای برای جداسازی برنامه های راه اندازی شده از بسته ها استفاده می شود. کد پروژه به زبان C نوشته شده و تحت مجوز LGPLv2+ توزیع شده است.
برای جداسازی، از فناوریهای مجازیسازی کانتینر لینوکس سنتی بر اساس استفاده از cgroups، namespaces، Seccomp و SELinux استفاده میشود. برای انجام عملیات ممتاز برای پیکربندی یک کانتینر، Bubblewrap با حقوق ریشه (یک فایل اجرایی با پرچم suid) راهاندازی میشود و پس از مقداردهی اولیه کانتینر، امتیازات را بازنشانی میکند.
فعال سازی فضای نام کاربری در سیستم فضای نام، که به شما امکان می دهد از مجموعه جداگانه ای از شناسه های خود در کانتینرها استفاده کنید، برای عملیات مورد نیاز نیست، زیرا به طور پیش فرض در بسیاری از توزیع ها کار نمی کند (Bubblewrap به عنوان یک پیاده سازی suid محدود از زیر مجموعه ای از قابلیت های فضای نام کاربری - برای حذف همه شناسه های کاربر و فرآیند از محیط، به جز شناسه فعلی، از حالت های CLONE_NEWUSER و CLONE_NEWPID استفاده می شود. برای محافظت بیشتر، برنامههایی که تحت Bubblewrap اجرا میشوند در حالت PR_SET_NO_NEW_PRIVS راهاندازی میشوند، که کسب امتیازات جدید را ممنوع میکند، برای مثال، اگر پرچم setuid وجود داشته باشد.
جداسازی در سطح فایل سیستم با ایجاد یک فضای نام mount جدید به طور پیش فرض انجام می شود که در آن یک پارتیشن خالی ریشه با استفاده از tmpfs ایجاد می شود. در صورت لزوم، پارتیشنهای خارجی FS در حالت mount —bind به این پارتیشن متصل میشوند (به عنوان مثال، هنگام راهاندازی با گزینه bwrap —ro-bind /usr /usr، پارتیشن /usr از سیستم اصلی ارسال میشود. در حالت فقط خواندنی). قابلیتهای شبکه محدود به دسترسی به رابط Loopback با جداسازی پشته شبکه از طریق پرچمهای CLONE_NEWNET و CLONE_NEWUTS است.
تفاوت اصلی با پروژه مشابه Firejail، که از مدل راه اندازی setuid نیز استفاده می کند، این است که در Bubblewrap، لایه ایجاد کانتینر فقط حداقل قابلیت های لازم و تمام عملکردهای پیشرفته لازم برای اجرای برنامه های گرافیکی، تعامل با دسکتاپ و درخواست های فیلتر را شامل می شود. به Pulseaudio، به سمت Flatpak منتقل شد و پس از تنظیم مجدد امتیازات اجرا شد. از سوی دیگر، Firejail تمام توابع مرتبط را در یک فایل اجرایی ترکیب میکند که ممیزی و حفظ امنیت در سطح مناسب را دشوار میکند.
در نسخه جدید:
- پشتیبانی از سیستم اسمبلی Meson اضافه شده است. پشتیبانی از ساخت با Autotools در حال حاضر حفظ شده است، اما در نسخه بعدی حذف خواهد شد.
- گزینه "--add-seccomp" را برای اضافه کردن بیش از یک برنامه seccomp پیاده سازی کرد. یک هشدار اضافه کرد که اگر دوباره گزینه "--seccomp" را مشخص کنید، فقط آخرین پارامتر اعمال می شود.
- شاخه اصلی در مخزن git به main تغییر نام داده است.
- پشتیبانی جزئی برای مشخصات REUSE اضافه شده است، که فرآیند مشخص کردن مجوز و اطلاعات حق چاپ را یکپارچه می کند. بسیاری از فایل های کد دارای هدرهای SPDX-License-Identifier هستند. پیروی از دستورالعملهای REUSE تعیین خودکار مجوز برای کدام بخش از کد برنامه کاربردی را آسانتر میکند.
- بررسی مقدار شمارنده آرگومان خط فرمان (argc) اضافه شد و در صورت صفر بودن شمارنده، خروج اضطراری را اجرا کرد. این تغییر به جلوگیری از مشکلات امنیتی ناشی از مدیریت نادرست آرگومان های خط فرمان تصویب شده، مانند CVE-2021-4034 در Polkit کمک می کند.
منبع: opennet.ru