概述
2026年10月29日,攻击者进入了Binance的钱包签名系统。在11月3日发布的初步报告中,Binance表示,受影响资产约为63.4亿美元,其中28.5亿美元已被冻结或拦截。入侵始于员工的计算机。
这样的起点并不只出现在加密货币行业。遭入侵的工作站可能暴露生产环境凭据、部署权限,以及通向其他员工设备的内部工具。工程上的挑战是防止这些权限将一个账户的失陷扩大为对关键服务的控制。
攻击如何展开
Binance的初步调查描述了6月和9月发生的员工设备入侵,以及10月20日借助内部AI工具进一步扩大的入侵。攻击者进入两名同事的计算机,找到了用于部署容器的令牌。10月29日,他们利用该令牌部署恶意代码,进入钱包签名系统并发起未经授权的转账。
-
遭篡改的Homebrew安装程序
Binance更换了设备并轮换了凭据。攻击者已获知该工程师的职责及同事信息。
-
恶意面试作业
恶意代码仓库让攻击者在另一名员工的计算机上取得了立足点。
-
取得部署令牌
内部AI工具帮助攻击者进入同事设备并找到令牌。
-
17:15–19:56 UTC
部署恶意容器
被盗部署令牌使恶意代码能够进入钱包签名系统。
-
20:05–20:09 UTC
开始未经授权的转账
-
23:56 UTC
最后一笔未经授权的转账确认完成
-
00:10 UTC
撤销Ethereum委托
链上权限需要单独撤销。
攻击者还利用签名服务创建了EIP-7702委托,允许其控制的代码代表一个Ethereum钱包执行操作。这项权限存在于区块链上,独立于Binance的提现系统。停止提现无法移除该权限,Binance必须单独在链上撤销委托。
关键区别在于停止某项活动与移除支撑该活动的权限。更换设备、撤销部署凭据、取消另一个系统内的权限,分别针对入侵的不同部分。
这一事件揭示了哪些生产安全问题
笔记本电脑、部署系统和敏感服务承担着不同职责。当对其中一个的访问自动打开通向下一个的入口时,风险就会增加。被盗令牌可能让攻击者替换软件,而该软件随后可能使用员工本人从未直接拥有的权限运行。
以下四个问题有助于确定应在哪里打断这一过程。
- 凭据暴露。 攻击者能从一名员工的设备上获得哪些生产环境访问权限?
- 部署权限。 谁能修改使用这些权限运行的代码?
- 服务授权。 敏感服务会接受该代码发起的哪些操作?
- 持久访问。 原账户被停用后,哪些新权限仍可能保留?
目标是限制权限在系统之间传递的范围,并识别和撤销入侵期间创建的额外访问权限。下面将讨论支持这一目标的四项控制措施。
在所有受影响系统中识别并撤销新增凭据和权限。
控制措施1. 减少笔记本电脑可能暴露的凭据
凭据对攻击者有用,是因为其他系统将其视为权限证明。减少员工设备上的生产环境凭据,可以降低工具、代码仓库或浏览器会话遭入侵时可被窃取的信息量。
对于日常工作,员工通常需要的是请求执行某项操作的权限,例如重启服务。执行该操作的凭据可以由独立的执行身份持有。因此,减少暴露既要移除不必要的副本,也要管理仍然保留的凭据。
- 在可行的情况下,用范围明确的操作替代日常直接访问。
- 不同职责使用不同身份,并限制各自的权限范围和有效期。
- 维护凭据清单,记录其所有者和撤销方式。
这体现了OWASP机密管理指南中的原则:减少人员直接处理机密的机会,仅授予每个身份所需的访问权限。这样,工作站被盗或遭入侵时,暴露的可复用凭据更少,响应人员也知道仍需撤销的凭据由谁负责。
控制措施2. 将部署权限视为生产环境特权
某个机密可能对一个人不可见,却能被他部署的代码使用。能够修改该代码的人可能读取机密、调用内部API,或以应用程序服务账户的身份执行操作。因此,必须根据最终工作负载的权限来评估部署访问权限。
OWASP的CI/CD安全指南将仓库变更、流水线配置和执行主机视为同一安全问题的不同组成部分。防护应同时覆盖部署前的代码和部署后的权限。
- 要求生产代码经过审核,并保护自动化所执行的仓库分支。
- 不仅要控制主脚本,还要控制任务定义、依赖项和启动时输入的变更。
- 仅向工作负载提供其功能所需的凭据和网络访问权限。
这两组控制必须协同工作。仓库和部署权限决定谁能修改代码。独立的身份、主机和网络策略限制代码运行后能做什么。集中存储机密可以减少暴露,而这些策略则约束使用机密的程序。
控制措施3. 授权具体操作,而不只是识别调用方
签名服务可以隐藏私钥,却仍然接受有害的签名请求。数据库和云API也存在同样的区别:对工作负载进行身份验证是确定调用方是谁,授权则决定其可以执行什么操作。
OWASP建议对每个请求进行授权检查,并拒绝未被明确允许的访问。对于接收请求的服务,这意味着同时检查操作及其目标,例如允许的支付目的地与金额、数据库操作或基础设施变更。
即使调用方已经受信任,服务也应评估其请求的操作。自动化管理如何提出工作请求,接收请求的服务则决定接受哪些操作。
控制措施4. 撤销入侵期间创建的访问权限
攻击者可能使用合法身份添加另一组凭据或授予更多权限。MITRE ATT&CK将账户操纵列为维持或扩大访问权限的手段,包括添加云凭据和SSH密钥。停用原始会话并不一定会移除这些变更。
Binance的链上委托说明,响应人员必须检查受影响系统本身的权限。遏制入侵既要覆盖最初的立足点,也要覆盖由此创建的权限。
- 限制哪些自动化身份可以创建更多凭据或授予权限。
- 将新创建的账户、会话和委托纳入响应计划。
- 在实际执行权限控制的系统中验证撤销结果,不要将任务停止视为已完成遏制的证明。
执行这些步骤后,响应人员就有了一组明确需要调查和撤销的身份与权限。这也让遏制效果可以验证:团队能够检查通向受影响服务的每条已知路径是否真正关闭。
这些控制作用于不同层面:员工设备、部署系统、接收请求的服务和响应流程。每个层面都需要明确负责人,并提供验证方法,确认其他层面遭入侵时,其限制仍然有效。
受控自动化如何提供帮助
自动化管理平台处理的是员工请求到生产环境执行之间的这部分问题。在Semaphore UI中,团队可以准备定义明确的任务,控制谁能运行或修改它,并使用独立身份执行。目标服务内部的授权,以及对其他系统中新建权限的撤销,仍由相应系统和响应团队负责。
以需要重启API服务的值班工程师为例。维护人员准备一个playbook和Task Template,固定目标主机和重启方式。工程师无需建立到生产环境的SSH会话,只需启动任务并查看结果。下面两条路径执行相同的重启操作,但执行凭据由不同主体持有。
直接访问
服务重启
遭入侵的笔记本电脑可能暴露可复用的生产环境凭据。
通过Semaphore UI
获准运行已保存的任务
服务重启
在这种配置下,执行密钥不会存放在员工设备上。但被盗会话仍然可以运行获准的任务。
构建重启工作流需要四个相互衔接的步骤:创建受限的执行身份,定义用户能运行或修改什么,选择执行环境,以及让结果可见。完成这些步骤后,同样的方法还可以扩展到部署。
步骤1. 创建受限的执行身份
从目标主机开始。创建一个自动化账户,将其特权访问限制为重启API服务。该账户不应能够编辑服务定义或执行无关的特权命令。获取playbook仓库时使用另一组只读凭据。即使凭据被滥用,这些限制也决定了自动化能做什么。
在项目的Key Store中注册SSH凭据,并在列出目标主机的生产环境inventory中选择它。可以存储在本地数据库中,也可以引用受保护的服务器文件或环境变量。使用本地存储时,应配置加密密钥,并将密钥材料与数据库备份分开保护。
如果团队已经使用受支持的机密存储,例如Pro中的OpenBao或Enterprise中的AWS Secrets Manager,可在Key Store → Storages中注册,并在创建密钥时引用现有机密。将集成权限限制在该工作流所需的机密范围内。这样,操作人员无需获取执行凭据就能请求重启。
步骤2. 定义操作人员可以运行或修改什么
接下来,保存一个“Restart API”模板,包含经过审核的playbook、生产环境inventory和必要变量。这些资源的变更由维护人员负责。为操作人员选择允许执行但不允许编辑的项目角色。内置Task Runner角色可以运行该项目中的所有模板,因此每个模板都必须适合该用户组。
如需仅访问选定模板,可将Enterprise自定义角色和模板权限与不具备项目级执行权限的基础角色搭配使用。这些授权是累加的,因此分配范围较窄的自定义角色,并不会取消用户已有的更广泛权限。
这样就能落实角色分工:操作人员请求执行准备好的重启操作,维护人员控制其背后的代码、目标和凭据。在授予生产环境访问权限前,应使用操作人员账户测试叠加后的权限。
步骤3. 在受限的runner上执行
在能够访问API服务器的专用主机上安装远程runner。操作人员启动“Restart API”后,runner执行playbook,并将输出返回Semaphore。员工需要访问Semaphore,而防火墙规则可以将生产环境管理连接限制为仅由runner发起。
只向执行主机授予其所分配任务所需的访问权限。
- 将生产环境执行与信任程度较低的工作负载及开发环境分离。
- 限制runner的操作系统权限、出站连接和挂载的凭据。保护其身份验证令牌,并通过验证证书的HTTPS连接到Semaphore。
- 使用Pro中的runner标签,例如
production,将模板路由到指定runner。在这些主机上实施网络限制。
这可以缩小生产环境凭据的可用范围,以及任务能够访问的系统范围。runner并不是自动提供的沙箱:其任务能够使用所属进程可访问的文件、凭据和网络。应将生产环境执行与不受信任的作业分离,并对runner和Semaphore服务器进行加固和补丁更新。
步骤4. 检查执行结果,让滥用行为可见
将相同控制应用于部署
部署使用相同的访问模型,但还会安装软件。创建单独的“Deploy API”模板,使用权限仅限于该应用程序的部署身份。配置必须同时约束执行部署的代码和所安装的版本。
- 固定部署代码和目标。 使用受保护的
main分支中的deploy_api.yml,以及production-apiinventory。禁用分支、inventory和CLI参数提示。 - 由维护人员负责变更。 操作人员可以启动模板,维护人员则控制其代码、凭据和配置。
- 在playbook中验证版本选择。 检查每个可能影响版本的启动时变量。将允许的版本标识解析为可信构建流程产生的不可变制品,并在部署前验证其来源与完整性。拒绝任意镜像引用或无法识别的输入。
这些控制限制了被盗操作人员会话能够部署的内容。Semaphore执行任务访问控制,Git审核和playbook约束代码与制品。修改该playbook的权限仍然属于生产环境特权。
无论任务是重启服务还是部署版本,操作人员都只收到结果,不会收到执行凭据。团队现在可以测试关键区别:通过该操作人员的会话,仍然能够执行哪些生产环境操作?
被盗会话仍然能做什么
被盗操作人员会话仍可请求执行该账户获准运行的操作。即使是允许的重启,反复触发也可能干扰服务。应在预发布环境中使用接近真实情况的操作人员账户,测试已配置的工作流,同时覆盖其可执行的行为以及团队对滥用的响应。
- 任务与输入权限。 测试实际角色和启动时选项,包括其他分支、inventory和参数。
- 超出预期操作范围的访问。 检查对其他模板、凭据和生产系统的访问,包括runner进程能够触达的范围。
- 检测与运行影响。 确认谁接收结果、谁调查意外活动,以及重复执行是否会造成无法接受的中断。
- 撤销。 测试会话和令牌的撤销,并确定执行身份可能在其他系统中创建哪些权限。
记录测试账户仍保留的访问权限,并关闭超出操作目的的所有路径。演练结束后,团队应清楚被盗会话能做什么,以及如何检测和遏制相应滥用。
日常工作中的安全
访问控制需要与终端防护,以及了解如何响应的团队共同发挥作用。应让准备好的工作流足够方便,使人员无需退回到共享密钥和未记录的捷径。还应以一些日常实践作为支持。
- 在一次性的隔离环境中运行不熟悉的安装程序和面试作业,环境中不应有企业凭据、主机挂载或内部网络访问。
- 让人员能够尽早、方便地报告可疑活动,而不必担心受到责备。提供明确的联系渠道和事件响应路径。
- 职责变化时重新审核访问权限,维护受控的紧急访问程序,并在事件发生前演练撤销流程。
这些实践将预防、检测和恢复融入日常工作。它们有助于在职责变化时保持访问模型的准确性,并让团队在出现可疑事件时按熟悉的流程响应。
限制下一次入侵的影响范围
参考资料
- Binance, “29 October 2026 Binance Security Incident: Initial Findings and Response Update”. URL: https://www.binance.com/en/blog/community/3229153443759566763 (访问日期: ).
- OWASP Foundation, “Secrets Management Cheat Sheet”. URL: https://cheatsheetseries.owasp.org/cheatsheets/Secrets_Management_Cheat_Sheet.html (访问日期: ).
- OWASP Foundation, “CI/CD Security Cheat Sheet”. URL: https://cheatsheetseries.owasp.org/cheatsheets/CI_CD_Security_Cheat_Sheet.html (访问日期: ).
- OWASP Foundation, “Authorization Cheat Sheet”. URL: https://cheatsheetseries.owasp.org/cheatsheets/Authorization_Cheat_Sheet.html (访问日期: ).
- MITRE ATT&CK, “Account Manipulation (T1098)”. URL: https://attack.mitre.org/techniques/T1098/ (访问日期: ).
- Semaphore UI, “Task Templates”. URL: https://semaphoreui.com/docs/user-guide/task-templates (访问日期: ).
- Semaphore UI, “Key Store”. URL: https://semaphoreui.com/docs/user-guide/key-store (访问日期: ).
- Semaphore UI, “Inventory”. URL: https://semaphoreui.com/docs/user-guide/inventory (访问日期: ).
- Semaphore UI, “Encryption Keys”. URL: https://semaphoreui.com/docs/admin-guide/security/encryption (访问日期: ).
- Semaphore UI, “AWS Secrets Manager secret storage”. URL: https://semaphoreui.com/docs/user-guide/key-store/aws-secrets-manager (访问日期: ).
- Semaphore UI, “Teams”. URL: https://semaphoreui.com/docs/user-guide/team (访问日期: ).
- Semaphore UI, “Runners”. URL: https://semaphoreui.com/docs/admin-guide/runners (访问日期: ).
- Semaphore UI, “Tasks”. URL: https://semaphoreui.com/docs/user-guide/tasks (访问日期: ).
- Semaphore UI, “Alerts”. URL: https://semaphoreui.com/docs/user-guide/alerts (访问日期: ).
