elastic/cicd-abuse-detector

GitHub: elastic/cicd-abuse-detector

利用大语言模型分析 CI/CD 工作流文件变更,自动检测针对流水线的凭证窃取和恶意篡改行为的安全防护工具。

Stars: 7 | Forks: 0

# CI/CD 滥用检测器 [![许可证](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](LICENSE) [![平台](https://img.shields.io/badge/platform-GitHub%20%7C%20GitLab%20%7C%20Azure%20DevOps-black)](docs/parity.md) [![LLM](https://img.shields.io/badge/LLM-Claude-blueviolet?logo=anthropic)](https://docs.anthropic.com/en/docs/claude-code) [![检测](https://img.shields.io/badge/detection-LLM%20%2B%20enrichment%20metadata-blue)](#how-it-works) 即插即用的 CI 模板,利用 LLM 检测对 CI/CD 流水线、工作流和自动化配置的可疑更改。旨在捕获常见的攻击链:**窃取开发者凭证 → 修改工作流 → 窃取 CI 密钥**。 **本仓库是一个原型和参考实现**,与 Elastic Security Labs 的研究相关:[使用 LLM 增强分析检测 CI/CD 流水线滥用](https://www.elastic.co/security-labs/detecting-cicd-pipeline-abuse-with-llm-augmented-analysis)。它**不是** Elastic 官方支持的产品。请根据您自己的审查过程使用、复刻并调整这些模板;请勿期望从 Elastic 获得产品级的 SLA、支持权益或固定的路线图。 ![CI/CD 滥用检测器](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/abfe07fde7170022.svg) ### 如何使用此 GitHub 项目 | 如果您是… | 请执行此操作 | |-------------|---------| | **在您的流水线中使用该检测器** | 将[快速入门](#quick-start)中的文件复制到您的仓库中,或者**复刻 (fork)** 本仓库并维护您自己的副本。在您的仓库或复刻中编辑工作流 YAML、提示词或 schema,使其与您的环境和审查过程相匹配。 | | **报告安全漏洞** | 对于未公开的漏洞,请使用 [SECURITY.md](SECURITY.md) 和 [Elastic 的披露流程](https://www.elastic.co/community/security)(在漏洞修复前请避免使用公开议题)。 | **贡献:** 大多数团队通过**复刻 (fork)** 并修改其组织中的 `templates/`、`prompts/` 和 `schemas/` 来进行自定义。如果您想向*本仓库*提出更改建议,请参阅 [CONTRIBUTING.md](CONTRIBUTING.md) 和 [CODEOWNERS](CODEOWNERS)——上游范围和审查能力有限,因此并非所有更改都适合在此处进行。 | 文件 | 目的 | |------|---------| | [LICENSE](LICENSE) | Apache License 2.0 | | [NOTICE.txt](NOTICE.txt) | 版权 / 致谢 | | [CONTRIBUTING.md](CONTRIBUTING.md) | 复刻、安全报告和上游 Pull Request | | [SECURITY.md](SECURITY.md) | 漏洞报告 | | [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) | 社区标准 | | [CODEOWNERS](CODEOWNERS) | 代码审查路由 (Elastic) | | [catalog-info.yaml](catalog-info.yaml) | 可选的 [Backstage](https://backstage.io/)-风格目录元数据;使用模板不需要此文件 | `rules/` 目录**不是**您需要复制到使用者仓库中的内容。[评分说明](rules/scoring-notes.md)(同样链接在[文档](#documentation)下)是**可选**阅读材料:它解释了预筛查标签是如何组合和调整的。如果您只关心运行来自 `templates/`、`prompts/` 和 `schemas/` 的工作流,可以移除或忽略它。 ## 快速入门 ### 1. 将文件复制到您的仓库中 ``` templates/github/pr-cicd-abuse-detector.yml → .github/workflows/pr-cicd-abuse-detector.yml prompts/analyze-cicd-change.md → prompts/analyze-cicd-change.md schemas/verdict.schema.json → schemas/verdict.schema.json ``` ### 2. 添加仓库 Secrets **LLM 身份验证(选择其一):** | Secret | 备注 | |--------|-------| | `ANTHROPIC_API_KEY` | 标准 Anthropic API 密钥 | 或,对于 Foundry (企业版): | Secret | 备注 | |--------|-------| | `ANTHROPIC_FOUNDRY_BASE_URL` | Foundry 端点 URL | | `ANTHROPIC_FOUNDRY_API_KEY` | Foundry API 密钥 | **可选集成:** | Secret | 备注 | |--------|-------| | `SLACK_WEBHOOK_URL` | 用于告警通知的 Slack 入站 Webhook | | `ES_URL` | 用于发送判定结果的 Elasticsearch 端点(例如 `https://.elastic.cloud`) | | `ES_API_KEY` | 用于发送判定结果的 Elasticsearch API 密钥 (base64 编码) | | `GITLAB_ISSUE_TOKEN` | 仅限 GitLab — 具有用于创建议题的 `api` 范围的令牌(参见 [GitLab 设置](docs/gitlab.md)) | ### 3. 可选配置变量 | 变量 | 默认值 | 描述 | |----------|---------|-------------| | `CI_CD_ABUSE_ALERT_THRESHOLD` | `high` | 触发告警的最低严重级别 (low/medium/high/critical) | | `CI_CD_ABUSE_FAIL_ON_SEVERITY` | _(空 — 已禁用)_ | 在达到或超过此严重级别时使 PR/流水线失败 (`low`/`medium`/`high`/`critical`)。为空 (默认) 时,检测器仅发出告警,从不阻止合并。 | | `CI_CD_ABUSE_INCLUDE_PUSHES` | `true` | 分析对 main/master 分支的直接推送 | | `CI_CD_ABUSE_EXTRA_PATHS` | _(空)_ | 逗号分隔的路径片段,以便非默认布局仍能触发分析 ([详情](docs/github.md#extra-path-patterns)) | ### 4. 完成 打开一个涉及工作流文件的 PR 并观察其运行情况。 ## 工作原理 有关**可视化流水线概述**,请参阅 [`docs/architecture.svg`](docs/architecture.svg)。有关叙述、设计选择和自我安全模型,请阅读[架构](docs/architecture.md)。 1. **过滤** — 将更改的文件与 CI/CD、构建、发布和打包路径进行匹配。 2. **逐文件差异比对** — 每个文件单独进行差异比对,并限制为 10k 个字符,减少了通过大量良性填充绕过检测的可能。 3. **预筛查丰富化** — 基于正则表达式和元数据派生的**标签**为模型添加上下文;LLM 仍然会分析完整的差异。 4. **LLM 分析** — Claude 根据以窃取凭证为核心的威胁模型分析差异。 5. **告警** — 步骤摘要、可选的议题、Slack,以及在严重程度达到阈值时可选的 Elasticsearch 判定结果发送。 6. **失败关卡** — 当严重程度超过配置的阈值时,可选地阻止 PR。 **在模板本身中**,预处理使用的是 **bash + jq + grep**。在 CI 中为进行分析而安装的唯一工具是 Claude Code CLI (通过 Node)。发布的工作流的*运行时*路径中**没有** Python。 ## 文档 | 文档 | 描述 | |-----|-------------| | [架构](docs/architecture.md) | 流水线流程 ([图表](docs/architecture.svg))、设计决策、自我安全模型 | | [威胁模型](docs/threat-model.md) | 威胁类别、真实世界事件、覆盖范围、局限性 | | [GitHub 设置](docs/github.md) | GitHub Actions 配置、权限、故障排除 | | [GitLab 设置](docs/gitlab.md) | GitLab CI 配置、变量、注意事项 | | [Azure DevOps 设置](docs/azure-devops.md) | Azure Pipelines 配置、变量、注意事项 | | [AI 辅助设置](docs/ai-setup.md) | 每个平台上的 CLI 身份验证和代理驱动的安装/测试 | | [告警](docs/alerting.md) | Slack、议题/工作项、可选的 Elastic 判定结果发送 | | [Elastic 查询](docs/elastic-queries.md) | 用于已发送判定结果的 ES|QL 示例 (`logs-cicd.abuse-*`) | | [跨平台对等性](docs/parity.md) | GitHub、GitLab、Azure DevOps 之间的功能矩阵 | | [评分说明](rules/scoring-notes.md) | 预筛查标签组合、校准 | | [测试](docs/testing.md) | `make test`、`make validate`、可选的 LLM 测试说明 | ## 参考模板 (按平台) | 平台 | 覆盖范围 | 模板 | |----------|----------|----------| | GitHub Actions | 参考工作流和预筛查 + LLM 步骤 | [`templates/github/pr-cicd-abuse-detector.yml`](templates/github/pr-cicd-abuse-detector.yml) | | GitLab CI | 参考作业脚本 (与 GitHub 对等) | [`templates/gitlab/pr-cicd-abuse-detector.yml`](templates/gitlab/pr-cicd-abuse-detector.yml) | | Azure DevOps | 参考流水线 (与 GitHub 对等) | [`templates/azure-devops/pr-cicd-abuse-detector.yml`](templates/azure-devops/pr-cicd-abuse-detector.yml) | ## 攻击分类 ![攻击分类](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/eb96950415170031.svg) 有关每个攻击路径的覆盖范围,请参阅[威胁模型](docs/threat-model.md)。 ## 维护者:验证和单文件构建 本仓库包含一个 **Makefile** 和 `scripts/build-embed.py`,**仅用于开发**(使用者不需要)。安装小型的 **PyYAML** 依赖项:`pip install -r requirements.txt`,然后: ``` make validate make test make build # → dist/pr-cicd-abuse-detector.yml (单文件 GitHub workflow) ``` ## 许可证 [Apache License 2.0](LICENSE) 请参阅 [NOTICE.txt](NOTICE.txt)。
标签:AI安全, AMSI绕过, Azure DevOps, Chat Copilot, Claude, CVE检测, DevSecOps, DLL 劫持, Elastic Security Labs, GitHub Actions, GitLab CI, MITM代理, pipeline安全, StruQ, URL发现, 上游代理, 代码审查, 大语言模型, 威胁检测, 安全检测, 安全防护, 工作流安全, 应用安全, 结构化查询, 自动化安全, 自动笔记