aiagentmackenzie-lang/container-runtime-security
GitHub: aiagentmackenzie-lang/container-runtime-security
基于 eBPF 的 Kubernetes 容器运行时安全监控与防护系统,提供 30 条内置检测规则、多信号关联分析、TC 网络阻断和 AI 辅助告警分类,实现从威胁检测到自动响应的完整闭环。
Stars: 0 | Forks: 0
# SecurityScarlet Runtime
**基于 eBPF 的 Kubernetes 容器运行时安全监控与防护。**
SecurityScarlet Runtime 是一个实时威胁检测系统,使用 eBPF 在内核级别监控 syscall 活动、进程生命周期、网络连接、DNS 查询和 TLS 握手。它提供与 Falco 兼容的基于规则的检测,并内置防护、多信号关联、异常检测、AI 驱动的分类以及 webhook 告警功能。
## 架构
```
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ eBPF Probes │────▶│ Agent Core │────▶│ Rule Engine │
│ (4 programs) │ │ (pipeline) │ │ (30 rules) │
└──────────────┘ └──────┬───────┘ └──────┬───────┘
│ │
┌──────────────┐ ┌──────▼───────┐ ┌───────▼────────┐
│ AI Triage │ │ Enrichment │ │ Enforcement │
│ (advisory) │ │ (container) │ │ (kill/block) │
└──────────────┘ └──────────────┘ └────────────────┘
│ │
┌──────────────┐ ┌──────▼───────┐ ┌──────▼────────┐
│ Correlation │ │ Output │ │ Webhook │
│ (7 rules) │ │ (NDJSON + │ │ (Slack/PD/ │
│ │ │ Prometheus) │ │ generic) │
└──────────────┘ └──────────────┘ └───────────────┘
```
### 组件
| 组件 | 路径 | 描述 |
|-----------|------|-------------|
| eBPF Probes | `pkg/ebpf/probes/` | 4 个 C eBPF 程序:进程、文件、网络、逃逸 |
| eBPF Loader | `pkg/ebpf/` | Ring buffer 读取器、事件解码器、DNS/TLS 解析器、内核侧过滤 |
| Agent | `pkg/agent/` | 编排器:组件连接、启动/关闭、配置 |
| Pipeline | `pkg/pipeline/` | 事件处理、异常评分、容器信息补全、事件聚合 |
| Rule Engine | `pkg/rules/` | 涵盖 7 个类别的 30 条编译规则,具有 O(1) 桶评估 |
| Correlator | `pkg/correlate/` | 7 条多信号关联规则(shell→network、DNS+TLS 等) |
| Enforcement | `pkg/enforcement/` | 基于 TC 的网络阻断、7 条安全规则协议、审计日志 |
| Enrichment | `pkg/enrichment/` | 容器 ID 解析(PID → CRI → K8s)、LRU 缓存 |
| Output | `pkg/output/` | NDJSON 告警、Prometheus 指标、webhook 接收端(Slack/PagerDuty/通用) |
| AI | `pkg/ai/` | 基于 gRPC 的分类(顾问)、规则建议、行为分析 |
| CRD | `pkg/crd/` | Kubernetes CustomResourceDefinition 类型和策略管理 |
| CLI | `pkg/cli/` | `scarletctl` 控制接口 |
| Docs | `docs/` | API 参考、规则编写指南、部署指南 |
## 规则目录
涵盖 7 个类别的 30 条内置规则:
| 类别 | 规则数 | ID |
|----------|-------|-----|
| 容器逃逸 | 7 | R001–R007 |
| 挖矿劫持 | 6 | R008–R013 |
| 反向 Shell | 4 | R014–R017 |
| 凭证访问 | 3 | R018–R020 |
| 权限提升 | 3 | R021–R023 |
| 容器漂移 | 2 | R024–R025 |
| 网络异常 | 3 | R026–R028 |
| 进程注入 | 1 | R029 |
| 已知 CVE | 1 | R030 |
## 检测覆盖范围
### 容器逃逸 (R001–R007)
- `setns()` 命名空间加入 (R001)
- `unshare()` 命名空间创建 (R002)
- Cgroup 文件系统挂载 (R003)
- Docker socket 访问 (R004)
- 宿主机 procfs 访问 `/proc/1`、`/proc/self` (R005)
- 内核模块加载 (R006)
- 从容器加载 eBPF 程序 (R007)
### 挖矿劫持 (R008–R013)
- 已知挖矿二进制文件执行 — xmrig、ccminer 等 (R008)
- 挖矿池连接(端口 4444、stratum) (R009)
- 命令行中的 Stratum 协议 (R010)
- 行为 CPU + 网络指标 (R011)
- 挖矿前设置 SUID 位 (R012)
- 容器漂移 — 运行时出现新二进制文件 (R013)
### 反向 Shell (R014–R017)
- 带有出站网络的 Shell (R014)
- `dup2` socket 重定向 (R015)
- C2 端口上的 Shell (R016)
- 基于管道的 Shell `/dev/tcp` (R017)
### 凭证与权限 (R018–R023)
- 敏感文件读取:`/etc/shadow`、SSH 密钥、Docker socket (R018)
- 云元数据 SSRF:`169.254.169.254` (R019)
- K8s 服务账号令牌访问 (R020)
- SetUID 转换 (R021)
- 设置 SUID/SGID 位 (R022)
- Capability 集更改 (R023)
### 漂移、网络与注入 (R024–R030)
- 运行时创建新可执行文件 (R024)
- 从 `/tmp` 执行 (R025)
- 伪监听器 (R026)
- C2 端口连接 (R027)
- 原始套接字创建 (R028)
- 容器中的 Ptrace (R029)
- Dirty Pipe 模式 (R030)
### 多信号关联(7 条规则)
- Shell + 网络(反向 shell 模式)
- 挖矿程序 + 挖矿池(挖矿劫持)
- 命名空间加入 + 权限提升(逃逸链)
- Cgroup 挂载 + 命名空间提升(逃逸链)
- 可疑 DNS + 可疑 TLS SNI(C2 信标)
- 可疑 TLS SNI + Stratum 协议(挖矿 + TLS)
- 可疑 DNS + 挖矿池连接(挖矿劫持)
## 执行安全性
系统实施了 7 条执行安全协议:
1. **容器属性确认** — 仅对已确认属性的容器执行(规则绝不对宿主机 PID 触发)
2. **速率限制** — 每个容器每分钟最多执行 10 次
3. **受保护命名空间** — `kube-system`、`kube-public` 被豁免
4. **PID 0/1 保护** — 绝不杀死 PID 0 或 1
5. **审计降级** — 失败的执行会降级为告警
6. **回滚** — 可以通过配置立即禁用执行
7. **命名空间作用域** — 执行是在命名空间范围内的,从不是全局的
## 快速开始
### 前置条件
- Go 1.22+
- Linux 内核 5.8+(用于 eBPF 功能)
- clang/LLVM 12+(用于 eBPF 编译)
### 构建
```
make build # Go binary
make ebpf # Compile eBPF probes (requires Linux + clang)
make docker # Multi-stage Docker image
```
### 运行
```
# 启动 agent(需要 root 或 CAP_BPF + CAP_SYS_ADMIN)
sudo scarletctl start
# 检查状态
scarletctl status
# 列出已加载的规则
scarletctl rules list
# 查看实时事件
scarletctl events
# 启用强制模式
scarletctl enforce
```
### 部署到 Kubernetes
```
helm install scarlet-runtime deploy/helm/scarlet-runtime/ \
--namespace scarlet-system --create-namespace \
--set agent.mode=enforce
```
## 配置
通过 `configs/scarlet-config.yaml` 配置 Agent:
```
agent:
mode: audit # audit | enforce | simulate
logLevel: info # debug | info | warn | error
ringBufferSizeMB: 4 # per-node ring buffer size
enrichment:
criEndpoint: /run/containerd/containerd.sock
pidCacheSize: 10000
enforcement:
protectedNamespaces:
- kube-system
- kube-public
maxKillsPerPod: 10
output:
alertFile: /var/log/scarlet/alerts.jsonl
webhook_url: ""
ai:
enabled: false
endpoint: scarlet-ai:9443
metrics:
enabled: true
port: 9090
```
## 测试
```
# 运行所有单元测试
go test -count=1 ./...
# 以详细输出模式运行
go test -v -count=1 ./pkg/...
# 运行特定的测试套件
go test -v -count=1 ./test/cryptojacking/
go test -v -count=1 ./test/escape_scenarios/
go test -v -count=1 ./test/integration/
# 运行 benchmarks
go test -bench=. -benchmem ./pkg/pipeline/
# Lint
go vet ./...
```
## 文档
- [API 参考](docs/api_reference.md) — 完整的包和类型文档
- [规则编写指南](docs/rule_writing_guide.md) — 如何编写自定义 YAML 检测规则
- [部署指南](docs/deployment_guide.md) — K8s 部署、Helm 配置、eBPF 要求
## 项目状态
| 阶段 | 描述 | 状态 |
|-------|-------------|--------|
| 阶段 1 | 基础 — eBPF、规则引擎、信息补全、流水线 | ✅ 已完成 |
| 阶段 2 | 防护 — TC 网络阻断、安全协议、审计 | ✅ 已完成 |
| 阶段 3 | 智能 — 关联、AI 分类、CRD 策略、异常 | ✅ 已完成 |
| 阶段 4 | 强化与扩展 — webhook、DNS/TLS、LRU 缓存、基准测试 | ✅ 已完成 |
## 许可证
详情请参阅 [LICENSE](LICENSE)。
标签:AI分诊, AMSI绕过, CISA项目, DevSecOps, DNS查询分析, EVTX分析, Falco兼容, K8s安全, NDJSON输出, PagerDuty集成, PB级数据处理, Prometheus监控, Python工具, Slack集成, TLS握手检测, Webhook告警, Web截图, 上游代理, 云计算, 内核级监控, 告警富化, 多信号关联, 威胁检测, 子域名突变, 安全渗透, 安全运维, 容器合规, 容器安全, 容器隔离, 工具集, 异常检测, 微服务安全, 日志审计, 网络信息收集, 网络连接监控, 自定义请求头, 行为阻断, 规则引擎, 请求拦截, 进程生命周期监控, 零信任网络