Skip to content
ВозможностиДокументацияЦеныПартнёрыPlaygroundFAQ

Sandbox

Изолированное выполнение команд: сеть, файловая система, ресурсы, привилегии

🛡️ Все тарифы

Обзор

FlowLink Sandbox обеспечивает изолированное выполнение команд на агенте. Каждая команда, разрешённая политикой, может быть дополнительно запущена в sandbox-окружении. Sandbox использует Linux namespaces для создания изолированного окружения: network namespace (нет доступа к сети), mount namespace (read-only ФС + tmpfs), PID namespace (видны только свои процессы), user namespace (ограниченные привилегии). Это предотвращает lateral movement и resource exhaustion даже если команда прошла проверку Shield.

Архитектура:
Agent → Shield Scan → Policy Check → Sandbox (если включён) → Namespace Creation → Execute → Monitor → Result

6 механизмов изоляции

1. Network Namespace

Полная изоляция сети. Команда не может обращаться к внешней сети, localhost хоста, или другим агентам. Создаётся виртуальный network stack без интерфейсов (кроме loopback, который тоже изолирован).

2. Read-Only Root

Корневая файловая система монтируется read-only.Writable только /tmp (tmpfs, RAM-диск) для временных файлов. Размер /tmp ограничен (default: 100MB).

3. PID Namespace

Команда видит только свои процессы (PID 1 = сама команда). Не может убить, приостановить или сигнализировать процессы хоста.

4. Resource Limits (cgroups)

CPU time (30s default), memory (256MB RSS), max open files (1024), max processes (100). Настройка через /sys/fs/cgroup.

5. Timeout

Максимальное время выполнения команды. При превышении — SIGKILL всем процессам в namespace. Default: 30s, max: 300s.

6. No New Privileges

prctl(PR_SET_NO_NEW_PRIVS) запрещает setuid/setgid эскалацию. Даже если команда запущена от root — новые привилегии невозможны.

Конфигурация

json
1{
2 "sandbox": {
3 "enabled": true,
4 "mode": "permissive",
5 "network_isolated": true,
6 "read_only_fs": true,
7 "pid_isolated": true,
8 "no_new_privs": true,
9 "resources": {
10 "memory_limit_mb": 256,
11 "cpu_time_seconds": 30,
12 "max_processes": 100,
13 "max_open_files": 1024,
14 "tmp_size_mb": 100
15 },
16 "timeout_seconds": 30,
17 "enforced_for": ["rm", "chmod", "chown", "curl", "wget"],
18 "excluded_commands": ["ls", "cat", "grep", "find", "ps"],
19 "auto_enable_on_agents": ["environment=production"]
20 }
21}

mode: "strict" — все команды в sandbox, "permissive" — только команды из enforced_for, "off" — отключён

enforced_for: список команд, которые ВСЕГДА запускаются в sandbox (даже в permissive mode)

excluded_commands: список команд, которые НИКОГДА не запускаются в sandbox (безопасные read-only команды)

Killswitch

Если команда превышает лимиты (memory, CPU time, timeout), sandbox мгновенно убивает все процессы в namespace через SIGKILL. Killswitch гарантирует, что runaway команда не может повлиять на хост. Событие записывается в audit log с причиной termination.

json
1{
2 "audit_event": {
3 "event_type": "sandbox_kill",
4 "reason": "memory_limit_exceeded",
5 "command": "dd if=/dev/zero of=/tmp/big bs=1M count=1000",
6 "agent_id": "agent-prod-01",
7 "memory_used_mb": 256,
8 "cpu_time_seconds": 12.3,
9 "processes_killed": 1,
10 "timestamp": "2026-01-15T14:32:01Z",
11 "correlation_id": "corr_abc123"
12 }
13}

Интеграция с политиками

Политики могут требовать sandbox для определённых команд или агентов:

json
1{
2 "id": "prod-sandbox-policy",
3 "match": {
4 "command": "rm *,chmod *,chown *,curl *,wget *",
5 "agent_tags": { "environment": "production" }
6 },
7 "action": "allow",
8 "sandbox": {
9 "enabled": true,
10 "mode": "strict",
11 "network_isolated": true,
12 "timeout_seconds": 10
13 }
14}

Предотвращение побега (Escape Prevention)

Sandbox спроектирован с defence in depth. Даже если одна изоляция обойдена, остальные слои продолжают защищать:

🔒 Network namespace независим от mount namespace — даже при побеге из ФС нет доступа к сети
🔒 PID namespace предотвращает отправку сигналов процессам хоста — даже при root-доступе в sandbox
🔒 cgroups v2 ограничивают ресурсы на уровне ядра — невозможно превысить лимиты даже через fork bomb
🔒 seccomp-bpf фильтрует системные вызовы: запрещены mount, pivot_root, unshare, ptrace

Производительность

МетрикаЗначение
Overhead создания namespace< 5ms
Overhead на выполнение команды< 2% CPU
Memory overhead sandbox~8MB (на sandbox)
Максимальное кол-во параллельных sandbox100 (default)
Время killswitch< 1ms (SIGKILL)

Режимы работы

Strict
strict

ВСЕ команды выполняются в sandbox. Максимальная безопасность. Рекомендуется для production.

Permissive
permissive

Только опасные команды в sandbox (rm, curl, wget, chmod). Баланс безопасности и скорости.

Off
off

Sandbox отключён. Команды выполняются напрямую. Только для development/testing.

Troubleshooting

Command fails with "Operation not permitted"

Причина: seccomp-bpf блокирует системный вызов. Решение: добавьте syscall в whitelist или используйте excluded_commands.

Sandbox not available on this kernel

Причина: требуются Linux >= 5.4 с cgroups v2. Решение: обновите ядро или отключите sandbox.

Command killed by timeout unexpectedly

Причина: timeout слишком маленький. Решение: увеличьте timeout_seconds в конфиге или для конкретной политики.

Edit this page