Trivy供应链攻击分析:CI/CD管道中的凭证窃取

3次阅读
没有评论

共计 3454 个字符,预计需要花费 9 分钟才能阅读完成。

🔍 安全洞察

CI/CD 管道供应链攻击威胁日益严重,企业应加强 GitHub Actions 安全配置,保护凭证安全,建立供应链安全监控机制。


🚨 紧急安全警报

事件时间:2026 年 3 月 19 日

影响范围:全球数千个使用 Trivy 漏洞扫描器的组织

攻击类型:高级持续性威胁(APT)针对软件供应链

威胁组织:TeamPCP(追踪中)

📅 攻击时间线

2026 年 3 月 19 日(攻击执行阶段)

– Trivy 官方二进制文件 v0.69.4 被注入恶意代码
– 76/77 个 trivy-action 版本标签被篡改
– 7/ 7 个 setup-trivy 版本标签被篡改
– 恶意代码通过 GitHub Actions 传播到 CI/CD 管道

同日(维护团队响应)

– Trivy 团队识别攻击并移除恶意工件
– 发布安全版本 v0.69.2-v0.69.3
– 警告用户升级到安全版本

后续扩展

– 攻击扩展到 Checkmarx KICS 框架
– 影响 LiteLLM 框架
– 攻击手法持续进化

一、攻击技术深度分析

1.1 Git 标签滥用机制

攻击者利用了 Git 设计的两个关键特性:

1. 可变的标签:在 Git 中,标签是指向特定提交的标签。默认情况下,这些引用不是不可变的——任何具有推送访问权限的人都可以将现有标签重新分配给完全不同的提交。攻击者正是这样做的,将 trivy-action 中的 76/77 标签和 setup-trivy 中的所有 7 个标签背后的目标提交替换为包含恶意负载的提交。

2. 自我声明的提交身份:威胁行为者欺骗了提交的身份,类似于在 Shai-Hulud 2.0 活动 中观察到的人格冒充策略。

1.2 恶意软件执行链

Microsoft Defender for Cloud 观察到了自托管 GitHub Actions 运行器中的完整攻击链:

  1. 进程发现:定位运行器进程(Runner.Worker、Runner.Listener)
  2. 凭证识别:检查携带机密的进程
  3. Python 负载解码:执行 base64 编码的 Python 有效负载
  4. 凭证窃取:从环境变量、文件系统、云服务等多渠道收集凭证
  5. 数据加密与外传:使用 AES-256-CBC + RSA 混合加密,通过 HTTP POST 外传
  6. 清理与伪装:清理临时文件,启动合法的 Trivy 扫描

二、凭证窃取的技术细节

攻击目标:最大化每个受感染运行器的价值

凭证类型 窃取技术 风险等级
云凭证
  • AWS:提取环境变量(”grep AWS_”),查询 ECS 任务元数据端点(169.254.170.2)和 EC2 实例元数据服务(169.254.169.254)
  • GCP:提取环境变量(”grep -i google”),通过 $GOOGLE_APPLICATION_CREDENTIALS 读取服务账户密钥文件
  • Azure:提取环境变量(”grep -i azure”)
严重
Kubernetes 密钥
  • 枚举和提取挂载的服务账户文件(”/run/secrets/kubernetes.io/serviceaccount/”)
  • 尝试使用 Kubernetes CLI 转储所有集群机密(”kubectl get secrets –all-namespaces -o json”)
CI/CD 与应用机密
  • 读取运行器的内部环境文件
  • 递归文件系统搜索.env、.json、.yml、.yaml 文件中的 API 密钥和令牌
  • 窃取 Slack 和 Discord webhook URL
基础设施与访问凭证
  • 提取 WireGuard VPN 配置(”wg showconf all”)
  • 提取 SSH 认证日志(”/var/log/auth.log”)
  • 窃取数据库连接字符串(MySQL、PostgreSQL、MongoDB、Redis、Vault)
加密货币凭证 搜索 Solana 钱包变量和 RPC 身份验证凭证(rpcuser、rpcpassword)

三、Microsoft Defender 检测能力

3.1 威胁检测覆盖

Microsoft Defender XDR 跨端点、身份、电子邮件和应用程序协调检测、预防、调查和响应,提供针对此类攻击的集成保护。

战术 观察到的活动 Microsoft Defender 覆盖
凭证访问 访问云资源中的 IMDS 端点以窃取云令牌 Microsoft Defender for Cloud:
– 访问云元数据服务检测
凭证访问 作为 CI/CD 运行器的容器上的机密侦察 Microsoft Defender for Cloud:
– 可能的机密侦察检测
Microsoft Defender for Endpoint:
– Kubernetes 机密枚举表明凭证访问
命令与控制 DNS 查询到 Microsoft 威胁情报标识为可疑的域名 Microsoft Defender for Identity:
– 组织设备中的可疑 DNS 查询
数据外传 受感染 Trivy 版本执行的恶意外传活动 Microsoft Defender for Cloud:
– 检测到来自 TeamPCP 供应链攻击的恶意命令

四、紧急缓解与防护指南

4.1 立即更新到安全版本

组件 安全版本 紧急行动
Trivy 二进制文件 v0.69.2 – v0.69.3 立即升级
trivy-action v0.35.0 验证引用
setup-trivy v0.2.6 使用 SHA 引用

4.2 CI/CD 管道加固措施

🔄 将所有第三方操作固定到不可变引用

  • 使用提交 SHA 而非版本标签:因为标签可能被攻击者强制修改
  • 定期审计工作流:检查基于标签的引用,用已验证的 SHA 替换

🔒 通过策略控制限制操作使用

  • 使用组织级策略:仅允许已批准的操作
  • 默认阻止未验证的外部操作

4.3 最小权限与强身份控制

🔑 最小化令牌和权限范围

  • 配置 GITHUB_TOKEN:使用最小必需权限
  • 避免授予写入权限:除非绝对必要

🛡️ 保护管道中的机密和敏感数据

  • 消除隐式机密暴露:避免在不需要时将机密注入环境变量
  • 存储在专用机密管理器中:及时检索(just-in-time)
  • 禁用运行器上的凭证持久化:确保凭证不持久化到磁盘或跨作业重用
  • 使用临时运行器或清洁环境:防止跨作业机密泄漏

五、高级狩猎查询(Microsoft Defender)

5.1 恶意命令识别

CloudProcessEvents
| where ProcessCommandLine has_any (
    'scan.aquasecurtiy.org',
    '45.148.10.212',
    'plug-tab-protective-relay.trycloudflare.com',
    'tdtqy-oyaaa-aaaae-af2dq-cai.raw.icp0.io',
    'checkmarx.zone',
    '/tmp/runner_collected_',
    'tpcp.tar.gz'
)
or (ParentProcessName == 'entrypoint.sh' and ProcessCommandLine has 'grep -qiE (env|ssh)')

5.2 Kubernetes 机密枚举检测

DeviceProcessEvents
| where FileName == "bash"
| where ProcessCommandLine has_all (
    "kubectl get secrets",
    "--all-namespaces",
    "-o json",
    "|| true"
)

5.3 通过 curl 进行数据外传

DeviceProcessEvents
| where FileName == "curl"
| where InitiatingProcessCommandLine contains "trivy-action"
| where ProcessCommandLine contains "POST"
| where ProcessCommandLine contains "--data-binary"


⚠️ 声明

安全无小事,点滴记心间!

本文是 翻译 文章,文章来源:Microsoft Security

原文链接:https://www.microsoft.com/security/blog/2026/03/trivy-supply-chain-attack/

本文观点仅供参考,具体内容表达以及含义原文为准。

正文完
 0
评论(没有评论)
验证码