ian-flores/securer
GitHub: ian-flores/securer
为 LLM 代理提供操作系统级沙箱化的 R 代码执行环境,支持工具调用 IPC、资源限制和会话池化,让 AI 生成的代码安全可控地运行。
Stars: 0 | Forks: 0
# securer
[](https://github.com/ian-flores/securer/actions/workflows/R-CMD-check.yaml)
[](https://codecov.io/gh/ian-flores/securer)
[](https://lifecycle.r-lib.org/articles/stages.html#experimental)
[](https://ian-flores.github.io/securer/)
**让 LLM 编写调用您函数的 R 代码 —— 且确保安全。**
当 LLM 生成 R 代码时,您需要两样东西:一种让代码回调到您的应用程序的途径(工具调用),以及确信代码不会执行任何危险操作的信心(沙箱化)。securer 提供了这两者。
```
# 最简单的用法 —— 在 sandbox 中运行 R 代码
execute_r("1 + 1")
#> [1] 2
```
对于工具调用,定义沙箱化代码可以使用的函数:
```
library(securer)
# 您的函数将变为 LLM 代码可以调用的工具
tools <- list(
securer_tool("query_db", "Query a database table",
fn = function(table, limit) head(get(table, "package:datasets"), limit),
args = list(table = "character", limit = "numeric"))
)
# LLM 生成的代码在 sandbox 中运行 —— tool calls 会暂停,在您这一侧执行,然后恢复
result <- execute_r('
data <- query_db("mtcars", 5)
mean(data$mpg)
', tools = tools, sandbox = TRUE)
```
子 R 进程在操作系统层面被沙箱化。工具函数在沙箱外的宿主端执行,拥有对您资源的完全访问权限。LLM 的代码永远不会直接接触您的文件系统、网络或数据。
## secure-r-dev 生态系统的一部分
securer 是用于在 R 中构建受控 AI 代理的 7 包生态系统的一部分:
```
┌────────────────┐
│ >>> securer <<< │
└───────┬────────┘
┌─────────────────┼─────────────────┐
│ │ │
┌──────▼──────┐ ┌──────▼──────┐ ┌───────▼────────┐
│ securetools │ │ secureguard │ │ securecontext │
└──────┬───────┘ └──────┬──────┘ └───────┬────────┘
└─────────────────┼─────────────────┘
┌───────▼──────┐
│ orchestr │
└───────┬──────┘
┌─────────────────┼─────────────────┐
│ │
┌──────▼──────┐ ┌──────▼──────┐
│ securetrace │ │ securebench │
└─────────────┘ └─────────────┘
```
securer 位于堆栈的顶层,提供了其他包赖以构建的沙箱化 R 执行引擎。securetools 添加了预构建的工具定义,secureguard 添加了防护机制,而 orchestr 将代理连接到工作流中。
| 包 | 角色 |
|---------|------|
| [securer](https://github.com/ian-flores/securer) | 具有工具调用 IPC 的沙箱化 R 执行 |
| [securetools](https://github.com/ian-flores/securetools) | 预构建的经过安全强化的工具定义 |
| [secureguard](https://github.com/ian-flores/secureguard) | 输入/代码/输出防护(注入、PII、机密) |
| [orchestr](https://github.com/ian-flores/orchestr) | 基于图的代理编排 |
| [securecontext](https://github.com/ian-flores/securecontext) | 文档分块、embeddings、RAG 检索 |
| [securetrace](https://github.com/ian-flores/securetrace) | 结构化追踪、token/成本核算、JSONL 导出 |
| [securebench](https://github.com/ian-flores/securebench) | 具备 precision/recall/F1 指标的防护基准测试 |
## 安装说明
```
# install.packages("pak")
pak::pak("ian-flores/securer")
# 验证其是否正常工作
library(securer)
execute_r("1 + 1")
#> [1] 2
```
## 为什么选择 securer?
| 问题 | securer 如何解决它 |
|---------|----------------------|
| LLM 代码可能访问文件系统 | 操作系统沙箱阻止写入;读取仅限于 R 库 |
| LLM 代码可能发起网络请求 | 通过命名空间隔离 或 Seatbelt (macOS) 阻止网络访问 |
| LLM 代码需要调用您的 API/数据库 | 注册在沙箱外的宿主端执行的工具函数 |
| LLM 代码可能永远运行下去 | 执行超时并自动恢复会话 |
| LLM 代码可能耗尽所有内存 | 通过 ulimit (Linux/macOS) 和 Job Objects (Windows) 进行资源限制 |
| LLM 代码存在语法错误 | 预验证在执行前捕获解析错误 |
## 工作原理
```
┌──────────────────────┐ ┌──────────────────────┐
│ Parent (host) │ │ Child (sandboxed R) │
│ │ │ │
│ 1. Send code ────────┼───────>│ 2. eval(code) │
│ │ UDS │ │
│ 3. Execute tool <───┼────────│ Code calls tool() │
│ (your function) │ │ → pauses on socket │
│ │ │ │
│ 4. Send result ──────┼───────>│ 5. Resumes with │
│ │ │ tool result │
│ │ │ │
│ 6. Receive final <───┼────────│ Returns final value │
│ result │ │ │
└──────────────────────┘ └──────────────────────┘
```
通信通过 Unix 域套接字 进行。工具调用是同步的:子进程在父进程满足请求期间会一直阻塞。
## 功能特性
### 持久会话
跨多次执行重用会话,以避免启动开销:
```
session <- SecureSession$new(tools = tools, sandbox = TRUE)
session$execute('query_db("iris", 3)')
session$execute('query_db("mtcars", 5)')
session$close()
```
### 会话池
预热多个会话,实现低延迟并发执行:
```
pool <- SecureSessionPool$new(size = 4, tools = tools, sandbox = TRUE)
result <- pool$execute('query_db("iris", 3)')
pool$close()
```
### 资源限制
约束 CPU、内存、文件大小等。在所有平台上均可工作,无论是否开启沙箱模式:
```
result <- execute_r("1 + 1",
limits = list(cpu = 10, memory = 256 * 1024 * 1024)
)
```
### 执行超时
自动终止长时间运行的代码。会话会自动恢复并且可重用:
```
session <- SecureSession$new()
session$execute("Sys.sleep(100)", timeout = 5)
# Error: Execution timed out after 5 seconds
session$execute("1 + 1") # still works
```
### 代码预验证
在将代码发送到子进程之前捕获语法错误:
```
session$execute("if (TRUE {") # immediate error, no child round-trip
```
### ellmer 集成
在 [ellmer](https://ellmer.tidyverse.org/) LLM 聊天中将 securer 用作代码执行工具:
```
library(ellmer)
chat <- chat_openai()
chat$register_tool(securer_as_ellmer_tool())
chat$chat("Calculate the mean of 1 through 100 using R")
```
### 审计日志
将所有会话事件写入结构化的 JSONL 日志,用于合规性和调试:
```
session <- SecureSession$new(audit_log = "session.jsonl")
```
### 详细日志
通过人类可读的 `message()` 输出调试会话行为:
```
session <- SecureSession$new(verbose = TRUE)
# [securer] Session started (sandbox=FALSE, pid=1234)
# [securer] Tool call: query_db(table="iris", limit=3)
# [securer] Execution complete (0.5s)
```
## 平台支持
| 平台 | 沙箱 | 网络受阻止 | 文件系统受限制 | 资源限制 |
|----------|---------|-----------------|----------------------|-----------------|
| **Linux** | bubblewrap (`bwrap`) | 是 | 是 | 是 |
| **macOS** | Seatbelt (`sandbox-exec`) | 是 | 是 | 是 |
| **Windows** | Job Objects + 环境隔离 | 否 | 否 | 是 (内存、CPU、进程数) |
| **docker-spawn** (任何宿主机) | 每个会话生成新容器 | 是 (`--network=none`) | 是 (容器文件系统) | 是 (`--memory`、`--cpus`、ulimit) |
所有平台均支持工具调用 IPC、执行超时和代码预验证。`docker-spawn` 后端是选择启用的(`SECURER_SANDBOX_MODE=docker-spawn`),并且需要 `docker` CLI 以及一个可访问的守护进程。请参阅 `inst/docker/Dockerfile` 获取参考镜像。
## 安全性
securer 通过多层机制实现深度防御:操作系统级沙箱、经过身份验证的 IPC、资源限制、环境清理和输入验证。有关详细的威胁模型和安全架构,请参阅 `vignette("security-model", package = "securer")`。
如需报告安全漏洞,请直接给维护者发送电子邮件,而不是提交公开 issue。
## 文档
- `vignette("quickstart", package = "securer")` -- 安装与初步示例
- `vignette("sessions-and-tools", package = "securer")` -- 持久会话、流式传输、池化
- `vignette("deployment", package = "securer")` -- 沙箱化、资源限制、架构
- `vignette("security-model", package = "securer")` -- 威胁模型与防御层
- `vignette("ellmer-integration", package = "securer")` -- 将 securer 与 ellmer LLM 聊天结合使用
- `vignette("integration-examples", package = "securer")` -- Shiny、Plumber 和批处理示例
- `vignette("troubleshooting", package = "securer")` -- 常见问题与解决方案
- [pkgdown 站点](https://ian-flores.github.io/securer/) -- API 参考
## 许可证
MIT
标签:AI安全, AST解析, Chat Copilot, DLL 劫持, DNS 反向解析, Golang, IPC, LLM代理, R包, R语言, R语言开发, XML 请求, 代码沙箱化, 大语言模型, 安全开发, 安全执行, 安全编程, 安全隔离, 工具调用, 操作系统级安全, 数字取证, 沙箱, 生成式AI, 索引, 自动化脚本, 请求拦截, 进程间通信