mutex7c/runsc-sentry-guard
GitHub: mutex7c/runsc-sentry-guard
runsc-sentry-guard 是一款用 Rust 编写的 gVisor 沙箱专用带外主动事件响应守护进程,通过宿主机边缘拦截调试流实现实时检测与自动遏制。
Stars: 0 | Forks: 1
# runsc-sentry-guard
一个用 Rust 编写的,专用于 `runsc` (gVisor) 沙箱的
超轻量级、带外主动事件响应守护进程。
## 1. 动机
`runsc` (gVisor) 为容器提供了出色的内核级隔离,
但传统的容器检测工具
在尝试拦截深层沙箱系统调用时,往往显得力不从心,
或会引入不必要的性能开销。
当在 runsc 配置文件内运行的容器遭到漏洞利用时,
它会在宿主机侧的调试流中生成各种指标。
`runsc-sentry-guard` 直接从宿主机边缘
带外拦截这些事件。
它完全避开了对复杂的
内核挂钩架构(如 eBPF)或侵入式容器修改的需求,
实现了实时、零依赖的
主动遏制。
## 2. 架构设计理念
`runsc-sentry-guard` 挑战了传统的容器安全惯例。
通过将防御边界从工作负载内部转移到宿主机边缘,它修复了
传统检测工具固有的可见性和延迟缺陷。
| 防御向量 | 传统 Agent 方案 | runsc-sentry-guard 架构 |
|:-----------------------|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **隔离边界** | **工作负载内 Shim / Sidecar:** 运行在容器内部或附加到容器上。如果攻击者实现了容器逃逸或获取了 root 权限,安全 Agent 可能会被致盲、篡改或杀死。 | **带外(宿主机边缘):** 在宿主机用户空间层完全解耦运行。沙箱化工作负载对守护进程的可见性为零,使其防篡改。 |
| **响应延迟** | **被动日志记录与分诊:** 收集事件,将其流式传输到集中式 SIEM,并等待安全工程师执行脚本或手动隔离基础设施。 | **主动自动化缓解:** 将检测和遏制桥接到单个实时循环中。它在检测到特征码的瞬间改变宿主机防火墙并冻结任务状态。 |
| **并发规模** | **单体事件 FIFO 队列:** 顺序处理传入的日志。一次大容量攻击或挂起的缓解脚本可能会阻塞相邻工作负载的整个事件管道。 | **基于 key 的序列化:** 生成绑定到唯一 Container ID 的隔离、独立工作线程。容器 A 上复杂的遏制例程永远不会阻碍容器 B 的防御。 |
| **摄取延迟** | **磁盘日志跟踪器:** 依赖 gVisor 将 `.boot` 文件写入宿主机存储层,引入了轻微的文件系统写入开销和潜在的 TOCTOU(检查时间到使用时间)安全延迟。`runsc-sentry-guard` 支持此选项用于测试,但在生产环境中强烈建议使用 UDS 流接收器 / Socket 模式。 | **UDS 流接收器:** 完全绕过宿主机磁盘 I/O。运行时将遥测数据直接流式传输到守护进程的用户空间内存中,将响应延迟降至亚毫秒级,并完全消除磁盘欺骗风险。 |
## 3. 核心文档与上下文链接
* [产品需求与合规规范 (CRA & NIS2)](./REQUIREMENTS_AND_COMPLIANCE.md)
* [技术实现规范](./TECHNICAL_SPECIFICATION.md)
* [配置与脚本规范](./CONFIG.md)
* [宿主机强化配置 (AppArmor, Systemd)](./SECURITY_HARDENING.md)
* [集成测试与威胁模拟手册](./TESTING_AND_SIMULATION.md)
## 4. 编译与组装
根据您的宿主机环境
限制,选择以下**一种**编译工作流:
### 路径 A:本地 Rust 工具链执行(开发者)
如果您在本地
开发机器上原生安装了稳定的 Rust 编译器工具链,请运行:
```
cargo build --release
```
优化后的产物将直接输出到 `./target/release/runsc-sentry-guard`。
### 路径 B:无工具链的容器化编译(生产服务器)
如果您不想在生产宿主机上原生安装 Rust 编译器,
您可以在一个临时的、官方的容器包装器内构建二进制文件:
```
docker run --rm -v "$PWD":/usr/src/guard -w /usr/src/guard rust:1.96-alpine cargo build --release
```
此命令挂载您的本地源代码目录,利用隔离的构建容器缓存,
并将编译好的原生 Linux 二进制文件平滑地放入您本地的 `./target/release/` 输出
路径中,而不会污染您的宿主机引擎依赖项。
### 路径 C:自动化 CI/CD 镜像组装(云原生)
要在容器化或编排环境(如 Kubernetes)
中分发和运行守护进程,请使用此多阶段 `Dockerfile`。它在一个
隔离的构建层中编译二进制文件,并将其复制到高度精简、最小化的运行时镜像中,
以保持可忽略的攻击面。
在您的根文件夹中创建一个名为 `Dockerfile` 的文件:
```
# 阶段 1:Build Environment
FROM rust:1.96-alpine AS builder
WORKDIR /usr/src/runsc-sentry-guard
COPY . .
RUN cargo build --release
# 阶段 2:Minimal Production Image
FROM alpine:3.23
RUN apk add --no-cache nftables iptables docker-cli
COPY --from=builder /usr/src/runsc-sentry-guard/target/release/runsc-sentry-guard /usr/sbin/runsc-sentry-guard
ENTRYPOINT ["/usr/sbin/runsc-sentry-guard"]
```
## 5. 安装与部署
### 5.1 前置条件
* 运行受支持的现代内核发行版(Debian、Ubuntu、RHEL、Fedora、Arch)的 Linux 宿主机系统。
* Docker 或 Podman 运行使用 gVisor `runsc` 运行时包装器的工作负载。
* 宿主机边缘激活 `nftables` 以支持自动网络隔离。
* 如果选择了 mode = "socket" 或 "dual",部署环境必须允许在 /var/run/ 下分配 socket。
### 5.2 第 1 步:获取源代码
选择与您的环境设置相匹配的方法:
* **选项 1:使用 Git(标准克隆)**
git clone https://github.com/mutex7c/runsc-sentry-guard.git
cd runsc-sentry-guard
* **选项 2:不使用 Git(适用于最小化服务器的 Tarball curl)**
curl -L https://github.com/mutex7c/runsc-sentry-guard/tarball/main | tar -xz
cd mutex7c-runsc-sentry-guard-*
### 5.3 第 2 步:建立配置文件
准备您的示例配置文件蓝图:
```
cp config.toml.example config.toml
```
打开并修改 `config.toml` 以自定义您的威胁特征码,
定义核心基础设施白名单,并调整您的缓解手册。
### 5.4 第 3 步:运行系统安装程序
确保安装程序脚本在
宿主机系统上具有管理执行权限:
```
chmod +x install.sh
```
使用 root 权限
执行自动安装 shell 脚本,以建立 FHS 目录结构,将二进制文件复制到 `/usr/sbin/`,并注册后台引擎:
```
sudo ./install.sh
```
通过 systemd 启用并引导服务容器循环:
```
sudo systemctl enable --now runsc-sentry-guard
```
标签:gVisor, Rust, Web截图, 可视化界面, 守护进程, 容器安全, 库, 应急响应, 沙箱, 网络流量审计, 请求拦截, 通知系统