事件报告:未经授权的用户帐户访问
2024 年 3 月 31 日,星期日,PyPI 管理员收到 PyPI 用户关于意外帐户活动的电子邮件。用户收到了 PyPI 的通知,告知他们已注册双重身份验证 (2FA)。这些用户声称他们没有自己进行操作。
PyPI 管理员**尚未发现**任何现有软件包被篡改的证据,或除未经授权的帐户访问和修改之外的任何其他恶意活动。
调查后采取的主要行动是
- 受影响的帐户被冻结以进行进一步调查
- 所有尚未启用 2FA 的帐户都需要重新验证电子邮件
继续阅读以了解发生的事件摘要、我们如何应对以及下一步行动。
所有时间均为东部时间 (UTC-4),为了清晰起见,一些时间是近似值。
发生了什么
2024 年 3 月 31 日,星期日
这是一个周末的早晨。
- 06:20:PyPI 管理员收到大量来自用户的电子邮件。
这些用户正在回复来自 PyPI 的自动通知,告知他们已注册双重身份验证 (2FA)。
提醒一下,PyPI 要求所有用户启用 2FA。
用户表示他们没有自己注册 2FA。这些帐户之前没有注册任何形式的 2FA,用户对这些通知感到惊讶。
随着用户阅读电子邮件并注意到活动,这类电子邮件在一天中零星出现。
- 08:00:一位志愿者 PyPI 管理员看到了这些通知并开始调查。
他们发现了一些用于攻击的流量模式。然后管理员联系了团队的其他成员,讨论他们的发现并对受影响的帐户采取行动。
采取的主要行动是立即冻结任何可疑帐户,因为这是完全可逆的,并且可以防止对已知的被入侵帐户或他们有权访问的项目造成进一步的损害。
基于对情况的分析,以及他们的特征和观察到的流量模式,约 120 个用户帐户被冻结。(由于实时采取行动,未记录精确数量。)
PyPI 管理员开始开发一项功能,该功能将在任何其他帐户操作(包括启用 2FA)之前,要求对所有尚未启用 2FA 的帐户重新验证电子邮件地址。
- 11:00:志愿者管理员必须离开电脑,在当天剩余时间内不再使用电脑。
调查在星期一继续进行。
2024 年 4 月 1 日,星期一
星期一早上,调查继续进行。
- 08:00:使用更好的过滤器,基于类似标准,额外冻结了约 54 个帐户
开始了另一项调查,以确定是否有任何软件包被篡改。**没有发现**与任何这些帐户相关的软件包被篡改的证据。
PyPI 管理员完成了新的功能,现在要求所有尚未启用 2FA 的帐户重新验证电子邮件地址。
- 12:20:帐户重新验证更改生效。
更改到位后,PyPI 管理员采取了另一项行动——**未启用 2FA**的帐户的任何现有电子邮件验证都被失效。这样做是为了防止对可能已被入侵的帐户进行任何未经授权的访问。现在,如果一个尚未注册 2FA 的用户登录,他们将被要求在注册 2FA 之前重新验证他们的电子邮件地址。此过程确保登录到没有 2FA 的现有帐户的人员控制着与该帐户关联的密码和电子邮件地址。
- 12:30:电子邮件失效应用于 370k (56%) 个电子邮件地址。
理由是这些帐户存在未经授权访问的风险,这是一项积极措施,可以防止进一步的损害。
摘要
此事件具有类似于凭据填充攻击的特征,攻击者使用从其他服务的泄露或事件中找到的凭据尝试登录 PyPI 上的帐户。
在相关的时间范围内,我们没有观察到 PyPI 登录端点请求的异常高比率。身份验证速率限制没有显示任何异常活动。
这是一次 2FA 旨在防范的攻击,因为即使攻击者拥有正确的用户名和密码,他们仍然需要提供第二个因素才能访问该帐户。
PyPI 通过集成到Have I Been Pwned API 中,以检查登录时是否使用过被入侵的密码,从而禁止使用被入侵的密码(凭据填充攻击中常用的密码),但没有证据表明这些密码在登录时已在该平台上的已知数据泄露中被入侵。
所有 PyPI 用户都应该采取措施来保护他们的 PyPI 帐户和相关项目,包括但不限于
- 在 PyPI 上使用独特的密码
- 验证您的电子邮件地址,添加辅助电子邮件地址(可选)
- 在您的帐户上启用 2FA。**将您的恢复码保存在安全的地方!**
- 检查您的软件包是否有任何未经授权的更改
- 检查您项目上的合作者
对于任何受此事件影响,并且无法通过重新验证电子邮件获得帐户访问权限的用户,请阅读有关帐户恢复的常见问题解答。
我们将继续监控情况并在需要时采取进一步行动。
这份分析以及我的角色,得益于来自Amazon Web Services Open Source、Georgetown CSET、PSF 及其赞助商的支持。