关于 PHP 项目的 git 存储库和用户群遭到泄露的报告

与识别 PHP 项目的 Git 存储库中的两个恶意提交相关的事件分析的第一个结果已经发布,该项目在发送带有专门设计的用户代理标头的请求时激活了后门。 在研究攻击者活动痕迹的过程中,得出的结论是,git 存储库所在的 git.php.net 服务器本身并未遭到黑客攻击,但包含项目开发人员帐户的数据库遭到了入侵。 。

攻击者有可能能够下载存储在 master.php.net 服务器上的 DBMS 中的用户数据库。 master.php.net 的内容已迁移到从头开始安装的新 main.php.net 服务器。 用于访问 php.net 基础设施的所有开发人员密码均已重置,并且更改过程是通过特殊的密码恢复表单启动的。 git.php.net 和 svn.php.net 存储库保持只读状态(开发已移至 GitHub)。

在发现通过 PHP 创始人 Rasmus Lerdorf 的帐户进行的第一次恶意提交后,人们认为他的帐户已被黑客入侵,PHP 关键开发人员之一 Nikita Popov 回滚了更改并阻止了提交权限有问题的帐户。 一段时间后,人们意识到阻止没有意义,因为如果没有使用数字签名验证提交,任何有权访问 php-src 存储库的参与者都可以通过替换虚构的作者姓名来进行更改。

接下来,攻击者代表 Nikita 本人发送了恶意提交。 通过分析用于组织对存储库的访问的 gitolite 服务的日志,尝试确定实际进行更改的参与者。 尽管包含了所有提交的说明,但日志中没有两个恶意更改的条目。 很明显,基础设施受到了损害,因为提交是直接添加的,绕过了通过 gitolite 的连接。

git.php.net 服务器立即被禁用,主存储库已转移到 GitHub。 匆忙中,人们忘记了要访问存储库,除了使用 gitolite 的 SSH 之外,还有另一个输入允许您通过 HTTPS 发送提交。 在本例中,git-http-backend 用于与 Git 交互,并使用 Apache2 HTTP 服务器执行身份验证,该服务器通过访问 master.php.net 服务器上的 DBMS 中托管的数据库来验证凭据。 不仅可以使用密钥登录,还可以使用常规密码登录。 对 http 服务器日志的分析证实,恶意更改是通过 HTTPS 添加的。

研究日志发现,攻击者并不是第一次连接,而是最初尝试查找帐户名,但在识别后,他们第一次尝试就登录了,即他们事先知道拉斯穆斯和尼基塔的密码,但不知道他们的登录信息。 如果攻击者能够访问 DBMS,则不清楚他们为什么不立即使用其中指定的正确登录名。 这种差异尚未得到可靠的解释。 master.php.net 被黑客攻击被认为是最有可能的情况,因为该服务器使用了非常旧的代码和过时的操作系统,该操作系统已经很长时间没有更新并且存在未修补的漏洞。

采取的措施包括重新安装 master.php.net 服务器环境以及将脚本转移到新版本的 PHP 8。使用 DBMS 的代码已被修改为使用参数化查询,这使得 SQL 代码的替换变得复杂。 bcrypt 算法用于在数据库中存储密码哈希值(以前,密码是使用不可靠的 MD5 哈希值存储的)。 现有密码将被重置,并提示您通过密码恢复表单设置新密码。 由于通过 HTTPS 访问 git.php.net 和 svn.php.net 存储库与 MD5 哈希值相关,因此决定将 git.php.net 和 svn.php.net 保留为只读模式,并移动所有内容其余的为 GitHub 上的 PECL 扩展存储库,类似于主 PHP 存储库。

来源: opennet.ru

添加评论