چیتشیت
نردبان خطمشی ساندباکس
Sandbox Policy Ladder
کمهزینهترین پروفایل ایزولاسیون را انتخاب کنید، فراخوانیهای نامعتبر را در اجراکننده رد کنید، و خطمشی شبکه، سکرت و ایمنی sbx را تنظیم کنید.
فهرست مطالب
نردبان پروفایلها
مقایسه| فاکتور | process-fixture | filesystem-fixture | container-fixture | microvm-fixture |
|---|---|---|---|---|
| هزینه | 1 | 2 | 3 | 5 |
| کنترل سیستم فایل | خیر | بله | بله | بله |
| قطع دسترسی شبکه | خیر | خیر | بله | بله |
| کرنل مجزا | خیر | خیر | خیر | بله |
| ریسک باقیمانده | shared-host-kernel, network-not-denied | shared-host-kernel, network-not-denied | shared-host-kernel | هیچکدام |
اجرای آن
دستورها| دستور | عملکرد |
|---|---|
python3 projects/sandbox-ladder/solution/cli.py untrusted=true,secrets=true,network=true,host_kernel=false --budget 3 | شبیهسازی خطمشی، خروجی JSON |
... --docker-image <image> | پیشنمایش docker run را اضافه میکند |
... --docker-image <image> --execute | دو آزمون ارزیابی روی ایمیج محلی اجرا میکند |
python3 scripts/project_test.py sandbox-ladder --stage 1 --path learning-artifacts/sandbox-ladder | به مرحلهی 1 نسخهی شما نمره میدهد |
python3 scripts/project_test.py sandbox-ladder --all --solution --strict | به نسخهی مرجع نمره میدهد |
python3 code/main.py | دموی درس، مجموعهی آزمونهای allow و deny |
python3 -m pytest code/tests/ -v | تستهای درس |
گامهای برنامهریز
گامبهگام- needsجفتهای
key=trueوkey=falseرا تجزیه میکند. کلید تکراری یا ناشناخته با خطا مواجه میشود. - satisfiesموارد غیرقابلاعتماد یا سکرتها نیازمند سیستم فایل هستند.
network=trueنیازمند قطع دسترسی شبکه است. - satisfies
host_kernel=trueنیازمند یک کرنل مجزا است. - selectپروفایلهایی با حداکثر هزینه در سقف بودجه را نگه میدارد، سپس کمترین هزینه را انتخاب میکند.
- planپروفایل و هر ریسک باقیمانده را چاپ میکند.
- cli.pyآن را در قالب JSON با
schema_version: 1و مقدارruntime_verifiedبرابر false کپسوله میکند.
خروجی برنامهریز برای نمونه
کدtext
profile=container-fixture mode=policy-simulation os_isolation=false
residual=shared-host-kernel # بدون کرنل مجزا
verify=runtime-configuration-and-escape-tests # همیشه چاپ میشود
# کلیدهای پوشش JSON از cli.py
"mode": "policy_simulation", "runtime_verified": false
دستور آزمون ارزیابی Docker
کدbash
docker run --rm --pull=never \ # فقط ایمیج محلی
--network none --read-only \ # بدون مسیر هدایت، ریشه فقطخواندنی
--cap-drop ALL --security-opt no-new-privileges \
--pids-limit 32 --memory 64m --cpus 0.5 \
--user 65534:65534 <image> sh -c '<probes>' # root_write, default_route
بررسیهای اجراکننده درس
معماریپیشفرضهای درس
پیشفرضها| تنظیم | پیشفرض | نکته |
|---|---|---|
max_output_bytes | 64 * 1024 | سپس نشانگر کوتاهسازی |
timeout_seconds | 30.0 | دمو از 2.0 استفاده میکند |
DENIED_EXIT_CODE | -100 | هرگونه امتناع |
TIMED_OUT_EXIT_CODE | -101 | مهلت زمانی ساعت واقعی |
env_allowlist | ("PATH", "HOME", "LANG", "LC_ALL", "TERM") | سایر متغیرها حذف میشوند |
shell | False | کاراکترهای کنترلی هنگام خاموش بودن شل رد میشوند |
--budget | 3 | سقف هزینه برنامهریز |
وظایف خطمشی شبکه sbx
کار و کد| وظیفه | کد |
|---|---|
| تنظیم پیشتنظیم سراسری برای یکبار | sbx policy init balanced |
| فهرستکردن قوانین به همراه شناسههایشان | sbx policy ls --wide --json |
| مجاز کردن یک میزبان برای یک ساندباکس | sbx policy allow network --sandbox <name> example.com |
| مسدود کردن یک میزبان هنگام ایجاد | `--deny-network <host>` on `create` or `run` |
| پیشبینی یک تصمیم | sbx policy check network --sandbox <name> <host:port> --json |
| خواندن تصمیم اتخاذشده توسط پروکسی | `sbx policy log` with `--json` |
| حذف یک قانون مجازکننده | sbx policy rm network --sandbox <name> --id <uuid> --force |
| بررسی قوانین سازمانی | sbx policy ls --source org |
نحوه تصمیمگیری sbx
مفهومها- اولویت مسدودسازی
- قانون deny بر allow برای همان نام میزبان یا CIDR اولویت دارد.
- deny_kind
- مقدار
implicitیعنی قانونی مطابقت نداشت.explicitنام قانون را مشخص میکند. - check network
- فقط میزبان و پورت، بهطور پیشفرض پورت 443. در صورت مسدودسازی با کد 1 خارج میشود.
- forward-bypass
- یک تونل بدون بازرسی و بدون تزریق اطلاعات هویتی.
- سکرتها
- ایجنت فقط
proxy-managedیاsbx-cs-<rand>را میبیند، هرگز مقدار اصلی را نمیبیند. - عامل SSH
- هدایت بهطور پیشفرض روشن است. کلیدها روی میزبان باقی میمانند.
- حاکمیت
- فقط قوانین allow سازمانی دسترسی اعطا میکنند. قوانین deny محلی همچنان اعمال میشوند.
- مرز امنیتی
- هایپروایزر، نه تفکیک دسترسی درون ماشین مجازی.
حالتهای ایمنی برای فراخوانیهای بدون تطابق
مقایسه| فاکتور | strict | balanced | restricted | autonomous |
|---|---|---|---|---|
برچسب safe | پرسش | مجاز | مجاز | مجاز |
برچسب destructive | پرسش | پرسش | مسدود | مجاز |
برچسب unknown | پرسش | پرسش | مسدود | مجاز |
امتناعها و راهحلها
عیبیابیis on the denylist- علت
- مقدار Basename آرگومان argv[0] در
DEFAULT_DENYLISTقرار دارد - راهحل
- از ابزار دیگری استفاده کنید یا
denylistرا تغییر دهید
use a script file instead of -c/-e- علت
- مفسر به همراه فلگ کد درونخطی
- راهحل
- کد را درون یک فایل اسکریپت بنویسید
set shell=True to opt in- علت
- کاراکتر کنترلی در argv هنگام خاموش بودن شل
- راهحل
- دستور را به آرایهی argv بشکنید
resolves outside project root- علت
../، یک مسیر مطلق یا پیوند نمادین به بیرون- راهحل
- مسیرها را زیر
project_rootنگه دارید
خطای
Limitاز برنامهریز- علت
- هیچ پروفایل کافی درون سقف بودجه وجود ندارد
- راهحل
--budgetرا افزایش دهید. کرنل نیازمند 5 است
Docker probe cannot establish independent guest kernel- علت
--docker-imageهمراه باhost_kernel=true- راهحل
- فقط از شبیهسازی خطمشی استفاده کنید
conflicts with existing allow rule- علت
- قانون مسدودسازی روی قانون مجاز در یک دامنه
- راهحل
- ابتدا
sbx policy rm networkرا اجرا کنید
403 Forbidden, بدنه 90 بایتی- علت
- هیچ قانونی مطابقت نداشت، نیازمند تأیید است
- راهحل
- یک قانون allow اضافه کنید. این یک خطای شبکه نیست
پرسش و پاسخ
پرسش و پاسخ- آیا
network=trueدسترسی شبکه میدهد؟ - خیر. به این معنی است که قطع دسترسی شبکه الزامی است.
- هر چهار نیاز در بودجه 4؟
- خطای
Limit. فقطmicrovm-fixtureکرنل دارد، با هزینه 5. - آیا آزمون Docker یک میکرو ویام را اثبات میکند؟
- خیر. فقط نوشتن روی ریشه و مسیر پیشفرض را تست میکند.
- آیا ساندباکس درس یک مرز سیستمعامل است؟
- خیر. از هیچ namespace، cgroups یا seccomp استفاده نمیکند.
- آیا مجوزهای ایجنت یک مرز امنیتی هستند؟
- خیر. سمت کلاینت اجرا میشوند. برای ایزولاسیون از ساندباکس استفاده کنید.
نکات
نکتهها- ایجنتهای بدون نظارت را با
--safety restrictedاجرا کنید. - دستورات مخرب را در
denyقرار دهید. هیچ حالت یا مجوزی از هوک بر آن اولویت ندارد. - کلیدها را با
sbx secret setذخیره کنید، هرگز از-e KEYاستفاده نکنید. - ویژگی
ssh.agentForwardingEnabledرا برای ایجنتی که به آن اجازهی امضا نمیدهید خاموش کنید. - مجوز دسترسی به میزبان هر بدنهای را عبور میدهد. API را با یک قانون HTTP مربوط به kit محدود کنید.
- در محیط عملیاتی، کانتینر یا میکرو ویام اضافه کنید، قابلیتها را سلب کرده و ریشه را فقطخواندنی مونت کنید.