برای FreeBSD، پیادهسازی مکانیزم جداسازی برنامه پیشنهاد شده است که یادآور فراخوانهای سیستمی Plegde و Unveil است که توسط پروژه OpenBSD ایجاد شده است. جداسازی در plegde با ممنوع کردن دسترسی به تماسهای سیستمی که در برنامه استفاده نمیشوند، و در آشکارسازی با باز کردن انتخابی دسترسی تنها به مسیرهای فایل فردی که برنامه میتواند با آنها کار کند، به دست میآید. برای برنامه، نوعی لیست سفید از تماس های سیستمی و مسیرهای فایل تشکیل شده است و سایر تماس ها و مسیرها ممنوع است.
تفاوت بین آنالوگ plegde و unveil در حال توسعه برای FreeBSD به ارائه یک لایه اضافی باز می گردد که به شما امکان می دهد برنامه ها را بدون ایجاد تغییر در کد آنها یا با حداقل تغییرات ایزوله کنید. به یاد بیاورید که در OpenBSD، plegde و unveil با هدف یکپارچگی دقیق با محیط زیرین هستند و با افزودن حاشیهنویسیهای ویژه به کد هر برنامه استفاده میشوند. برای سادهسازی سازماندهی حفاظت، فیلترها به شما امکان میدهند تا جزئیات را در سطح تماسهای سیستمی اختصاص دهید و کلاسهای تماسهای سیستمی (ورودی/خروجی، خواندن فایلها، نوشتن فایلها، سوکتها، ioctl، sysctl، راهاندازی فرآیند و غیره) را دستکاری کنید. . توابع محدودیت دسترسی را می توان در کد برنامه فراخوانی کرد، زیرا اقدامات خاصی انجام می شود، به عنوان مثال، دسترسی به سوکت ها و فایل ها را می توان پس از باز کردن فایل های لازم و برقراری اتصال شبکه رد کرد.
نویسنده port of plegde و unveil برای FreeBSD قصد دارد توانایی ایزوله کردن برنامه های دلخواه را فراهم کند، که برای آن ابزار پرده پیشنهاد شده است، که به شما امکان می دهد قوانین تعریف شده در یک فایل جداگانه را برای برنامه ها اعمال کنید. پیکربندی پیشنهادی شامل یک فایل با تنظیمات اولیه است که کلاسهایی از تماسهای سیستمی و مسیرهای فایل معمولی را برای برنامههای خاص (کار با صدا، تعامل شبکه، گزارشگیری و غیره) و همچنین یک فایل با قوانین دسترسی برای برنامههای خاص تعریف میکند.
ابزار پرده را می توان برای جداسازی اکثر ابزارهای اصلاح نشده، فرآیندهای سرور، برنامه های گرافیکی و حتی کل جلسات دسکتاپ استفاده کرد. پرده را می توان در ارتباط با مکانیسم های جداسازی ارائه شده توسط زیرسیستم های Jail و Capsicum استفاده کرد. سازماندهی جداسازی تودرتو نیز امکان پذیر است، زمانی که برنامه های راه اندازی شده قوانین تعیین شده برای برنامه والد را به ارث می برند و آنها را با محدودیت های فردی تکمیل می کنند. برخی از عملیات کرنل (امکانات اشکال زدایی، POSIX/SysV IPC، PTYها) علاوه بر این توسط یک مکانیسم مانع محافظت می شوند که از دسترسی به اشیاء هسته که توسط فرآیند فعلی یا والد ایجاد نشده اند جلوگیری می کند.
یک فرآیند می تواند جداسازی خود را با فراخوانی curtainctl یا با استفاده از توابع plegde() و unveil() libcurtain، مشابه آنچه در OpenBSD یافت می شود، پیکربندی کند. برای ردیابی قفل ها در حین اجرای برنامه، sysctl 'security.curtain.log_level' ارائه شده است. دسترسی به پروتکل های X11 و Wayland به طور جداگانه با مشخص کردن گزینه های "-X"/"-Y" و "-W" هنگام اجرای پرده فعال می شود، اما پشتیبانی از برنامه های گرافیکی هنوز به اندازه کافی تثبیت نشده است و تعدادی از مشکلات حل نشده دارد. مشکلات عمدتاً هنگام استفاده از X11 ظاهر می شوند و پشتیبانی Wayland بسیار بهتر اجرا می شود). کاربران می توانند با ایجاد فایل های قوانین محلی (~/.curtain.conf) محدودیت های اضافی اضافه کنند. به عنوان مثال، برای اجازه نوشتن از Firfox فقط در دایرکتوری ~/Downloads/، می توانید یک بخش "[firefox]" را با قانون "~/Downloads/: rw +" اضافه کنید.
این پیادهسازی شامل ماژول هسته mac_curtain برای کنترل دسترسی اجباری (MAC، کنترل دسترسی اجباری)، مجموعهای از وصلهها برای هسته FreeBSD با پیادهسازی کنترلکنندهها و فیلترهای لازم، کتابخانه libcurtain برای استفاده از توابع plegde و unveil در برنامهها، ابزار پرده، فایلهای پیکربندی مثال، مجموعهای آزمایشها و وصلهها برای برخی برنامهها در فضای کاربر (مثلاً برای استفاده از $TMPDIR برای یکپارچهسازی کار با فایلهای موقت). در صورت امکان، نویسنده قصد دارد تعداد تغییراتی را که به وصلههای هسته و برنامهها نیاز دارند، به حداقل برساند.
منبع: opennet.ru