如果你的 GitHub 私有仓库里突然多出一个陌生的 Action,你会多久发现?
过去半年,光毅的 GitHub 账号先后出现四次异常:私人仓库被加入伪装成安全扫描的恶意 GitHub Action,账号里凭空多出陌生仓库,多个项目的 package.json 被植入恶意 postinstall 脚本,最后连 GitHub 账号和一个云端项目也因为凭证泄露相继被停用。
最让人不安的不是损失,而是找不到攻击入口。电脑扫描没有异常,代码提交里看不到可疑痕迹,轮换 Token 后问题仍然发生。那些过去能够被感知的病毒和木马,正在变成一次性的、自动化的窃密行动:拿到 Token、API key 或 SSH key,完成任务后迅速消失。
这期节目,我们从这四次真实经历聊起,试着拆开 AI 时代的供应链攻击:一个被污染的依赖包如何借 postinstall 脚本完成窃密,小众工具如何借搜索与 AI 推荐进入项目,社会工程学又如何用一场高度仿真的在线会议骗过高权限开发者。AI 不只在帮程序员写代码,也在让攻击脚本更自然、更有针对性、更难被察觉。
但这并不是一期制造恐慌的节目。我们也认真梳理了普通开发者今天就能做的事:为账号启用 2FA、Passkey 或物理安全密钥;给 SSH key 设置 passphrase;按需申请权限并设置过期时间;不在私有仓库中明文保存 Secret;为依赖升级设置观察期;给云服务账单加上限;把高风险操作放进隔离环境。
安全工具可以替你扫描,却不能替你判断。真正的第一道防线,仍然是开发者自己的安全意识。
⏱️ 时间轴
- 00:10 半年四次 GitHub 账号异常:从恶意 Action 到云端项目被停用
- 05:10 什么是供应链攻击?为什么攻击入口如此难以追踪
- 07:51 AI 让窃密攻击变得自动化、短暂而隐蔽
- 12:10 npm 依赖的风险:一次更新如何踩中恶意版本窗口
- 16:51 与其执着寻找入口,不如先止损并重建安全边界
- 17:59 高仿工作区、在线会议与安装包:社会工程学如何攻破开发者
- 20:17 AI 编程工具会保护你的 Token 和 API key 吗?
- 23:20 “私有仓库”不等于“可以提交 Secret”
- 25:03 当 AI 开始参与生成更像正常代码的恶意提交
- 27:37 安全工具给出评分之后,最终由谁做判断?
- 30:03 三位主播各自经历过哪些账号安全事件
- 32:44 开发者安全清单:2FA、Passkey、最小权限与账单上限
📚 光毅的文章
🔐 本期提到的安全清单
- 为重要账号启用 2FA、Passkey 或物理安全密钥
- 为 SSH key 设置 passphrase,并定期检查已授权的 Key、应用与会话
- Token 和 API key 遵循最小权限原则,并设置合理的过期时间
- 不要因为仓库是私有的,就把 Secret 明文提交进源码
- 锁定依赖版本;可在
.npmrc中用min-release-age为新版本设置观察期 - 谨慎执行来源不明的一键安装命令,尤其是要求输入系统密码的脚本
- 为云服务设置用量和账单上限,发现异常后立即轮换凭证并联系平台
- 在沙箱或隔离环境中运行权限高、行为不确定的 AI Agent
提醒:
min-release-age也可能暂时拦住刚发布的安全修复,使用时仍需结合安全公告和依赖审计做判断。
🎙️ 本期主播
李光毅,张凯峰,陈锋
👤 主播简介
- 李光毅,咨询师、全栈开发工程师,个人主页:技术圆桌。拥有丰富的软件开发经验,专注于技术创新和系统架构设计,同时活跃于技术社区,分享技术见解和实践经验。
- 张凯峰,技术圈策展人,公众号「张凯峰Impact」作者。专注于技术品牌建设和个人影响力研究,曾在多家知名科技公司领导技术影响力团队,帮助技术专家建立个人品牌和行业影响力。
- 陈锋,资深技术专家。近期专注于 Data 和 AI 相关的技术方案与海外项目交付,对构建企业级 AI Agent 有着丰富的实战经验与深刻思考。
Podcast: Play in new window | Download
