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

192次阅读
没有评论
🔍 安全洞察

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.0
(0 人评分)

正文完
 0
评论(没有评论)