Fly.io 的 Twitter 账户因其 CEO Kurt Mackey 遭遇了一次巧妙的网络钓鱼攻击而被盗。这次攻击精准地利用了中年管理者对于潮流文化(如“dank memes”)的焦虑感。尽管公司的核心基础设施受防钓鱼的多因素认证(MFA)保护,但 Twitter 账户被视为次要资产,仅使用共享密码,从而导致了安全漏洞。这一事件最终的教训是:任何未受防钓鱼 MFA 保护的服务,无论其重要性如何,最终都可能被攻破。
一次“高明”的网络钓鱼攻击
攻击之所以奏效,有两个原因:首先,这是一次设计精良的钓鱼攻击;其次,Twitter 账户被划在了“我们严肃对待的安全范围”之外。
这次攻击利用了管理团队一个深层的心理弱点:我们年纪大了,与当今年轻人脱节。
CEO Kurt 收到的钓鱼邮件伪装成一封关于公司 Twitter 账户发布了不当内容的通知。这封邮件的设计极为精准,旨在触发 Kurt 的本能反应:“这到底是什么鬼东西,我们为什么会发这个?”
这就像一把手术刀,精准地刺向了 Kurt 内心深处的中年男人不安全感。
这种心理上的紧迫感,让他绕过了常规的安全检查,直接点击了链接并输入了凭据。
为什么攻击会得手?
真正的问题是,为什么这种情况会成为可能?
培训无法根除风险: 你无法通过培训来彻底杜绝钓鱼攻击。事实是,在持续的压力下,每个人最终都会点击。依赖员工的警惕性是一种不可靠的策略。
真正的解决方案是技术: 正确的做法是使用防钓鱼的身份验证,例如 U2F、FIDO2 和 Passkeys。这类技术通过相互认证的机制,让浏览器本身就能识别并拒绝向虚假网站发送真实凭据。
Fly.io 的所有核心基础设施,如日志系统、Stripe 账单和指标监控,都通过其身份提供商(Google)强制执行了防钓鱼的 MFA。因此,攻击者几乎不可能通过钓鱼来获取这些系统的访问权限。
然而,Twitter 账户是个例外。它被当作一个“历史遗留的共享账户”,凭证存放在 1Password 中,与一位年轻的承包商共享。这使得它处于公司核心安全体系之外,成为了一个薄弱环节。
恢复账户与事件教训
攻击者在得手后立即更改了账户的二次验证(2FA)设置,导致 Fly.io 团队无法自行夺回控制权。在 X.com 的协助下,他们花了大约 15 个小时才最终锁定并恢复了账户。
在此期间,攻击者发布了一个不太可信的加密货币骗局,并未对用户造成实际威胁。
攻击者一度删除了我们所有的 Twitter 历史记录,这简直是……不要用这种好事来威胁我们。
这次事件带来了几个明确的教训:
- 安全边界必须覆盖所有资产: 即使是看起来“次要”的社交媒体账户,也需要与核心系统同等级别的安全防护。
- 技术手段优于人为防范: 防钓鱼 MFA 是抵御此类攻击的最有效手段。
- 最终的行动: Fly.io 的 Twitter 账户现在已经切换到使用 Passkeys 进行登录。
无论你正在运营什么,只要它没有受到防钓鱼 MFA 的保护,或者更好地,没有通过要求防钓鱼 MFA 的单点登录(SSO)来保护——那么它最终一定会被钓鱼攻击攻破。你可以嘲笑我们的不幸,但也请务必从中吸取教训。