OpenShell: Môi Trường Chạy Bảo Mật Đằng Sau NemoClaw
Nếu NemoClaw là bộ công cụ bảo mật, thì OpenShell chính là nền tảng của nó. Được phát triển bởi đội ngũ kỹ sư bảo mật của NVIDIA trong suốt 18 tháng qua, OpenShell cung cấp sandbox cấp nhân cho việc thực thi tác nhân AI — đảm bảo rằng ngay cả một tác nhân bị xâm phạm hoàn toàn cũng không thể truy cập tài nguyên ngoài ranh giới bảo mật được xác định.
Bài viết này là phân tích kỹ thuật chuyên sâu về kiến trúc của OpenShell, các cơ chế cách ly của nó, và cách nó thực thi chính sách bảo mật với chi phí hiệu năng tối thiểu.
Tại Sao Cần Cách Ly Cấp Nhân?
Sandbox ứng dụng truyền thống — container, máy ảo, cách ly cấp tiến trình — được thiết kế cho phần mềm hoạt động có thể dự đoán được. Tác nhân AI khác biệt về căn bản. Chúng tự tạo kế hoạch thực thi tại thời điểm chạy, thực hiện các lệnh gọi công cụ tương tác với hệ thống bên ngoài, và có thể tạo ra hành vi mới mà không bộ kiểm thử nào lường trước được.
Tính không thể dự đoán này đòi hỏi một mô hình bảo mật hoạt động ở tầng thấp nhất có thể: nhân hệ điều hành. OpenShell chặn mọi system call mà tiến trình tác nhân thực hiện, phân loại nó theo chính sách bảo mật đang hoạt động, và đưa ra quyết định cho phép/từ chối trước khi lệnh gọi đến nhân.
Agent Process
│
▼
OpenShell eBPF Layer ←── Policy Engine
│
├── ALLOW → System Call → Kernel
│
├── DENY → Error returned to agent
│
└── ESCALATE → Human approval queue
eBPF: Công Nghệ Đằng Sau OpenShell
OpenShell được xây dựng trên eBPF (extended Berkeley Packet Filter), một công nghệ nhân Linux cho phép các chương trình tùy chỉnh chạy trong không gian nhân mà không cần sửa đổi nhân. Đội ngũ của NVIDIA đã viết một bộ chương trình eBPF được tối ưu hóa đặc biệt cho tải công việc tác nhân AI:
Bộ Chặn Syscall
Bộ chặn syscall gắn vào tracepoint sys_enter và đánh giá mọi system call theo chính sách đang hoạt động:
// Simplified OpenShell eBPF syscall interceptor
SEC("tracepoint/raw_syscalls/sys_enter")
int openshell_syscall_enter(struct trace_event_raw_sys_enter *ctx) {
u32 pid = bpf_get_current_pid_tgid() >> 32;
struct sandbox_policy *policy = bpf_map_lookup_elem(&sandbox_policies, &pid);
if (!policy)
return 0; // Not a sandboxed process
long syscall_nr = ctx->id;
int decision = evaluate_policy(policy, syscall_nr, ctx->args);
if (decision == DENY) {
// Send event to userspace audit log
emit_security_event(pid, syscall_nr, DENY);
// Override return value to -EPERM
bpf_override_return(ctx, -EPERM);
} else if (decision == ESCALATE) {
// Pause the process and notify approval queue
emit_approval_request(pid, syscall_nr, ctx->args);
send_signal(pid, SIGSTOP);
}
return 0;
}
Bộ Bảo Vệ Hệ Thống Tập Tin
Bộ bảo vệ hệ thống tập tin hạn chế các tập tin và thư mục mà tác nhân có thể truy cập. Nó hoạt động trên các thao tác VFS (Virtual Filesystem), chặn các lệnh gọi open, read, write, unlink và rename:
# Filesystem policy for a customer support agent
filesystem:
# Agent can read its own configuration
- path: "/etc/nemoclaw/agent.yaml"
permissions: [read]
# Agent can read/write to its workspace
- path: "/var/nemoclaw/workspace/**"
permissions: [read, write, create]
# Agent can read shared data
- path: "/var/nemoclaw/shared/**"
permissions: [read]
# Everything else is denied by default
defaultAction: deny
Lính Gác Mạng
Lính gác mạng kết nối vào các thao tác socket để kiểm soát truy cập mạng của tác nhân ở cấp kết nối:
SEC("cgroup/connect4")
int openshell_connect4(struct bpf_sock_addr *ctx) {
u32 pid = bpf_get_current_pid_tgid() >> 32;
struct network_policy *policy = bpf_map_lookup_elem(&net_policies, &pid);
if (!policy)
return 1; // Allow non-sandboxed processes
__be32 dst_ip = ctx->user_ip4;
__be16 dst_port = ctx->user_port;
if (!is_allowed_destination(policy, dst_ip, dst_port)) {
emit_security_event(pid, NETWORK_BLOCKED, dst_ip, dst_port);
return 0; // Block connection
}
return 1; // Allow connection
}
Kiến Trúc Thực Thi Chính Sách
Các chính sách OpenShell được biên dịch thành bytecode eBPF để đạt tốc độ thực thi tối đa. Pipeline biên dịch hoạt động như sau:
- 1.Tập tin chính sách YAML được viết bởi nhóm bảo mật ở định dạng dễ đọc
- 2.Trình biên dịch chính sách chuyển đổi YAML thành biểu diễn trung gian (IR)
- 3.Trình kiểm tra chính sách Nemotron kiểm tra IR để tìm sự không nhất quán logic và xung đột
- 4.Trình biên dịch eBPF tạo bytecode đã được xác minh và tải vào nhân
- 5.Trình xác minh runtime đảm bảo các chương trình eBPF kết thúc và an toàn bộ nhớ
Toàn bộ pipeline biên dịch chạy trong dưới 2 giây cho các bộ chính sách thông thường, và chính sách có thể được tải lại nóng mà không cần khởi động lại tác nhân.
# Compile and load a policy
nemoclaw policy compile policies/customer-support.yaml
nemoclaw policy load customer-support
# Hot-reload a modified policy (no agent restart required)
nemoclaw policy reload customer-support
# Verify policy is active
nemoclaw policy status
# Output:
# POLICY STATUS LOADED AT RULES
# customer-support active 2026-03-19 14:30:01 47
# network-default active 2026-03-19 14:30:01 12
# filesystem-strict active 2026-03-19 14:30:01 23
Quy Trình Phê Duyệt Của Người Vận Hành
Một trong những tính năng đặc trưng nhất của OpenShell là hệ thống phê duyệt người vận hành tích hợp. Khi một tác nhân cố gắng thực hiện hành động được phân loại là rủi ro cao, OpenShell tạm dừng thực thi của tác nhân và chuyển yêu cầu phê duyệt đến người vận hành.
Cách Phê Duyệt Hoạt Động
- 1.Tác nhân cố gắng thực hiện syscall rủi ro cao (ví dụ: ghi vào tập tin được bảo vệ, kết nối đến điểm cuối chưa được phê duyệt)
- 2.Chương trình eBPF của OpenShell gửi SIGSTOP đến tiến trình tác nhân
- 3.Yêu cầu phê duyệt được tạo và gửi qua kênh đã cấu hình (Slack, Teams, PagerDuty, email)
- 4.Người vận hành xem xét ngữ cảnh yêu cầu và phê duyệt hoặc từ chối
- 5.Nếu được phê duyệt, OpenShell gửi SIGCONT để tiếp tục tác nhân; nếu bị từ chối, nó trả về EPERM
Yêu cầu phê duyệt bao gồm đầy đủ ngữ cảnh:
{
"request_id": "apr-2026031914-00042",
"agent": "customer-support-agent-01",
"action": "email.send",
"target": "[email protected]",
"context": {
"ticket_id": "TKT-12345",
"customer_name": "[REDACTED]",
"reason": "Agent wants to send a follow-up email to the customer regarding their refund request",
"email_preview": "Dear Customer, your refund of $250 has been processed..."
},
"risk_level": "medium",
"policy_rule": "external-communication-requires-approval",
"timestamp": "2026-03-19T14:30:42Z"
}
Hết Thời Gian Phê Duyệt Và Hành Động Mặc Định
Người vận hành có thể cấu hình điều gì xảy ra khi phê duyệt hết thời gian:
approvalConfig:
timeout: 15m
onTimeout: deny # deny | allow | escalate
onEscalate:
target: security-team
channel: pagerduty
maxPendingApprovals: 10 # Queue limit per agent
autoApprove:
# Automatically approve if the same action was approved
# 3 times in the past 24 hours for this agent
repeatThreshold: 3
repeatWindow: 24h
Đặc Điểm Hiệu Năng
OpenShell được thiết kế cho tải công việc sản xuất nơi độ trễ quan trọng. Đây là các chi phí đo được trên DGX Spark:
| Thao tác | Chi phí |
|---|---|
| Chặn syscall (cho phép) | 8 micro giây |
| Chặn syscall (từ chối) | 12 micro giây |
| Kiểm tra hệ thống tập tin | 15 micro giây |
| Kiểm tra kết nối mạng | 20 micro giây |
| Tải lại nóng chính sách | < 500 mili giây |
| Vòng phê duyệt (Slack) | 2-30 giây (phụ thuộc con người) |
Để so sánh, một lệnh gọi suy luận LLM thông thường mất 500ms-5000ms, vì vậy chi phí của OpenShell là không đáng kể trong bối cảnh tải công việc tác nhân.
So Sánh Với Các Giải Pháp Sandbox Hiện Có
| Tính năng | OpenShell | Docker/OCI | gVisor | Firecracker |
|---|---|---|---|---|
| Mức cách ly | Nhân (eBPF) | Namespace | Nhân không gian người dùng | microVM |
| Lọc syscall | Theo chính sách, tải lại nóng | seccomp tĩnh | Chặn toàn bộ | Cách ly hoàn toàn |
| Chính sách mạng | Theo tác nhân, nhận biết L7 | iptables | iptables | iptables |
| Phê duyệt con người | Tích hợp sẵn | Không có | Không có | Không có |
| Chính sách nhận biết AI | Có (Nemotron) | Không | Không | Không |
| Chi phí | ~10 micro giây | ~5 micro giây | ~50 micro giây | ~100ms khởi động |
| GPU passthrough | Tự nhiên | NVIDIA CTK | Hạn chế | Hạn chế |
Điểm khác biệt chính của OpenShell là nó được thiết kế từ đầu cho tải công việc tác nhân AI, với hỗ trợ tích hợp cho chính sách ngôn ngữ tự nhiên, quy trình phê duyệt con người và đánh giá chính sách tăng tốc GPU.
Bắt Đầu Với OpenShell
OpenShell có thể được sử dụng độc lập, không cần phần còn lại của bộ công cụ NemoClaw:
# Install OpenShell standalone
curl -fsSL https://github.com/NVIDIA/OpenShell | bash
# Create a minimal sandbox policy
cat > my-policy.yaml << 'EOF'
apiVersion: openshell.nvidia.com/v1
kind: SandboxPolicy
metadata:
name: my-first-sandbox
spec:
isolation:
network: restricted
filesystem: workspace-only
syscalls: minimal
EOF
# Run any process inside the sandbox
openshell run --policy my-policy.yaml -- python my_agent.py
OpenShell là mã nguồn mở theo giấy phép Apache 2.0 và có sẵn tại nvidia/openshell trên GitHub. Trong bài viết tiếp theo, chúng tôi sẽ khám phá các kịch bản triển khai doanh nghiệp thực tế cho toàn bộ bộ công cụ NemoClaw.