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截图, 上游代理, 云计算, 内核级监控, 告警富化, 多信号关联, 威胁检测, 子域名突变, 安全渗透, 安全运维, 容器合规, 容器安全, 容器隔离, 工具集, 异常检测, 微服务安全, 日志审计, 网络信息收集, 网络连接监控, 自定义请求头, 行为阻断, 规则引擎, 请求拦截, 进程生命周期监控, 零信任网络