چیت‌شیت

نردبان خط‌مشی ساندباکس

Sandbox Policy Ladder

کم‌هزینه‌ترین پروفایل ایزولاسیون را انتخاب کنید، فراخوانی‌های نامعتبر را در اجراکننده رد کنید، و خط‌مشی شبکه، سکرت و ایمنی sbx را تنظیم کنید.

  • ۱۳ بخش
  • ۱ درس مرتبط
  • کد و دستورها عیناً از دوره‌ی اصلی
فهرست مطالب
  1. نردبان پروفایل‌ها
  2. اجرای آن
  3. گام‌های برنامه‌ریز
  4. خروجی برنامه‌ریز برای نمونه
  5. دستور آزمون ارزیابی Docker
  6. بررسی‌های اجراکننده درس
  7. پیش‌فرض‌های درس
  8. وظایف خط‌مشی شبکه sbx
  9. نحوه تصمیم‌گیری sbx
  10. حالت‌های ایمنی برای فراخوانی‌های بدون تطابق
  11. امتناع‌ها و راه‌حل‌ها
  12. پرسش و پاسخ
  13. نکات

نردبان پروفایل‌ها

مقایسه
فاکتورprocess-fixturefilesystem-fixturecontainer-fixturemicrovm-fixture
هزینه1235
کنترل سیستم فایلخیربلهبلهبله
قطع دسترسی شبکهخیرخیربلهبله
کرنل مجزاخیرخیرخیربله
ریسک باقی‌ماندهshared-host-kernel, network-not-deniedshared-host-kernel, network-not-deniedshared-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تست‌های درس

گام‌های برنامه‌ریز

گام‌به‌گام
  1. needsجفت‌های key=true و key=false را تجزیه می‌کند. کلید تکراری یا ناشناخته با خطا مواجه می‌شود.
  2. satisfiesموارد غیرقابل‌اعتماد یا سکرت‌ها نیازمند سیستم فایل هستند. network=true نیازمند قطع دسترسی شبکه است.
  3. satisfieshost_kernel=true نیازمند یک کرنل مجزا است.
  4. selectپروفایل‌هایی با حداکثر هزینه در سقف بودجه را نگه می‌دارد، سپس کمترین هزینه را انتخاب می‌کند.
  5. planپروفایل و هر ریسک باقی‌مانده را چاپ می‌کند.
  6. 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

بررسی‌های اجراکننده درس

معماری
همه قبول شدندضبط خروجیSandbox.run()argv, shell=False_check_executable_denylistbasename در لیست سیاه_check_argv_interpreter-c, -e, --eval_check_shell_metacharsکاراکترهای کنترلی شل، شل خاموش_check_path_jailrealpath زیر ریشهsubprocess.runلیست سفید env، مهلت زمانیSandboxResultdenied, timed_out, truncated

پیش‌فرض‌های درس

پیش‌فرض‌ها
تنظیمپیش‌فرضنکته
max_output_bytes64 * 1024سپس نشانگر کوتاه‌سازی
timeout_seconds30.0دمو از 2.0 استفاده می‌کند
DENIED_EXIT_CODE-100هرگونه امتناع
TIMED_OUT_EXIT_CODE-101مهلت زمانی ساعت واقعی
env_allowlist("PATH", "HOME", "LANG", "LC_ALL", "TERM")سایر متغیرها حذف می‌شوند
shellFalseکاراکترهای کنترلی هنگام خاموش بودن شل رد می‌شوند
--budget3سقف هزینه برنامه‌ریز

وظایف خط‌مشی شبکه 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 محلی همچنان اعمال می‌شوند.
مرز امنیتی
هایپروایزر، نه تفکیک دسترسی درون ماشین مجازی.

حالت‌های ایمنی برای فراخوانی‌های بدون تطابق

مقایسه
فاکتورstrictbalancedrestrictedautonomous
برچسب 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 محدود کنید.
  • در محیط عملیاتی، کانتینر یا میکرو وی‌ام اضافه کنید، قابلیت‌ها را سلب کرده و ریشه را فقط‌خواندنی مونت کنید.