protet/monitor

GitHub: protet/monitor

一款 CI/CD 运行时安全监控 GitHub Action,通过系统级捕获 execve 系统调用并云端分析,实时判定构建过程的命令执行是否存在恶意行为。

Stars: 0 | Forks: 0

# Protet Runtime Monitor — GitHub Action 为 CI/CD 构建会话提供运行时安全防护。只需在任何 job 中添加 **三行代码**;Protet 便会监视该 job 启动的每一个进程,将 execve 数据流发送至云端,并 返回该构建的 **恶意 / 良性** 判定结果。 ``` - uses: protet/monitor@v1 with: token: ${{ secrets.PROTET_TOKEN }} ``` 就是这样。你现有的构建步骤将 **完全保持不变** 地运行 —— 无需进行任何封装。 ## 工作原理 - `uses:` 步骤会开启 **系统级的 execve 捕获** (`auditd`) 并启动 **后台流式传输器**。它会立即返回;你的构建步骤会照常运行。 - 在构建运行期间,流式传输器会将每个 execve **实时** 发送到云端入口 (`/v1/ingest`),作为 Protet `exec` 事件 (`cmd = " "` —— 与 集群内 Tetragon collector 发出的传输格式相同)。没有任何内容会被批量处理到最后,并且 **绝不会被截断**:如果网关短暂无法连接,事件会转存到磁盘 并进行重试;任何在构建结束时仍未成功投递的事件都会被报告,绝不会 被静默丢弃。(你配置的 token 是一个长期有效的 *refresh* token;流式传输器会 将其换取为短期有效的 access token 并自动进行刷新 —— 你无需管理任何内容。) - 云端会对数据流进行评分(滑动窗口 → StarEncoder → 分类器 → 可解释性),并 输出 OCSF Detection Findings。post 步骤会关闭会话,通过 **同一个 token**(一个持久且按会话过滤的 findings 流)读取判定结果,并将其报告回来 —— 包括精确的 **被标记的命令链**。 没有任何源码、artifact 或构建产物会离开 runner —— 只有命令序列。 **Runner 要求:** Linux、`sudo` 以及 `auditd`(会自动安装)—— 在 GitHub 托管的 `ubuntu-*` runner 上开箱即用。目前尚不支持 macOS/Windows 以及 没有 `auditd` 且被锁定的自托管 runner (该步骤会降级为警告,绝不会导致构建 失败)。与发行版无关的 eBPF 捕获(免安装)已在路线图中 —— [spike](docs/ebpf-spike-results.md) 已经确认 eBPF `execve` 捕获可以在 GitHub 托管的 runner 上加载并运行,因此它将插入到同一个可插拔的捕获接口之后。 **一个 token,双向通用。** 同一个 `token` 既用于验证发送事件,*也*用于读取 判定结果 —— 无需配置其他任何内容。findings 数据流是持久化的(短期保留 + 断点续传),因此判定结果绝不会丢失,并且多个订阅者可以同时读取它(本次运行、 你的仪表板、SIEM)。 ## 输入项 | 输入项 | 必需 | 默认值 | | |---|---|---|---| | `token` | 是 | | Protet token(repo secret)—— **一个 token**:既用于发送事件,也用于读取判定结果 | | `environment` | 否 | `prod` | Protet 云端目标 (prod);为本地部署设置 `gateway-url` + `app-url` | | `gateway-url` / `app-url` | 否 | | 用于 **on-prem / self-hosted / air-gapped** 部署的覆盖配置 | | `github-token` | 否 | 自动 | PR comment —— 默认使用运行内置的 `GITHUB_TOKEN`,无需传递(只需添加 `permissions: pull-requests: write`) | | `fail-on-malicious` | 否 | `false` | 当检测到恶意行为窗口时使 job 失败 | ### 目标 ``` environment: prod # Protet cloud (prod) # — 或者 — self-hosted / on-prem: gateway-url: https://protet.internal.acme.com app-url: https://protet-app.internal.acme.com ``` ## 报告 **每次运行** 都会生成一份 **job summary** —— 包含判定结果、投递状态,如果判定为恶意,还会包含 告警描述以及精确的 **被标记的命令链**(始终包含顶级命令;在授权计划中包含完整的 经过 beam-search 的链条)。 **只有在判定结果为恶意时,才会发布 PR comment** —— 干净的运行会保持 PR 安静。 如果之前的运行已经发表了评论,而构建在此后已被修复,该评论将 原地更新为干净的判定结果,而不是留下一条过时的 🔴(一旦解决,就绝不会重新创建)。 无需传递任何 token —— 只需在 job 中添加 `permissions: pull-requests: write`。设置 `fail-on-malicious: "true"` 即可对合并进行拦截管控。 ## `compromised-build` 演示 该演示运行两个 job。第二个 job 会注入一条供应链 postinstall 链(curl|bash 下载器、挖矿程序获取、`/dev/tcp` 反向 shell、base64 执行)。每个网络操作都指向 `127.0.0.1:1`(会被拒绝),并且每一行都带有 `|| true`,因此 **实际上不会有任何东西 被执行** —— 但 auditd 仍然会捕获命令字符串,而这正是 Protet 进行评分的对象。检测的关键 在于命令流中的意图,而不是 payload 是否执行成功。
标签:Docker镜像, 自定义脚本