在最新的软件供应链攻击中,PHP官方Git仓库被黑客攻击,代码库被篡改。近日,PHP维护人员表示黑客可能已经拥有了包含密码的用户数据库。
3月28日,攻击者使用PHP的作者Rasmus Lerdorf和Jetbrains开发者Nikita Popov的账号,向git.php.net服务器上的 php-src 存储库推送了两次恶意提交。
用户数据库可能已被入侵
此次事件最初被视为git.php.net服务器的泄露。但对事件进行进一步调查发现,这些提交是使用HTTPS和基于密码的认证推送的结果,这让研究人员怀疑master.php.net用户数据库可能存在泄露。
同时,研究人员还发现黑客需要对用户名进行几次猜测,一旦找到正确的用户名,就会成功认证。但如果数据库已经泄露,为什么黑客还需要进行猜测呢?目前,研究人员还没有找到原因。
此外,据说master.php.net认证系统使用的是非常老的操作系统和PHP的版本,这就使得攻击者也有可能利用软件的漏洞来发动攻击。
因此,维护者已经将master.php.net迁移到新的main.php.net系统中,并支持TLS 1.2。此外,维护者还重置了所有现有的密码,并使用bcrypt而不是普通的MD5哈希存储密码。
事件回顾
PHP Git服务器被植入RCE后门
PHP是一种开源的计算机脚本语言,为互联网上超过79%的网站提供动力。因此,事件一经曝光被引起了强烈关注。
负责人Popov在公告中表示,他们目前还不知道事件是怎样发生的,但是此次事件导致的后果是git.php.net服务器的数据泄露而不是简单的单个账号的泄露。
官方公告
经观察,在两个恶意提交中,攻击者在上游发布了一个假装成修正文字输入错误的神秘修改。
攻击者以Rasmus Lerdorf的身份签署的恶意提交(非法)植入远程代码执行后门
然而,仔细检查一下新增的第370行调用zend_eval_string函数的地方,可以发现,这段代码实际上是为运行被劫持的PHP版本的网站植入了一个后门,以获得轻松的远程代码执行(RCE)。
PHP的开发者表示,如果字符串以'zerodium'开头,这一行就会从useragent HTTP头内执行PHP代码。
此外,恶意代码中包含了一条注解 “REMOVETHIS: sold to zerodium, mid 2017”。值得注意的是,Zerodium是一家知名的零日漏洞经纪商,而注释的意思是“漏洞在2017年中出售给了zerodium”。对此,而Zerodium的CEO Chaouki Bekrar认为攻击者很可能试图出售这个漏洞,但找不到卖家,所以攻击者干脆自己恶搞。
不过,PHP相关负责人表示,恶意提交几小时后,就被他们在进行常规的代码审查时发现。这些更改的恶意很明显,所以很快被还原了。
对于Git这样的源代码版本控制系统来说,这样的事件会发生很正常。因为可以把提交的内容为打上本地任何一个人的签名,然后再把伪造的提交内容上传到Git服务器上。这样一来,就会让人觉得这个提交确实是由签名的人提交的。
PHP官方代码库迁移到GitHub
作为此次事件后的预防措施,PHP维护人员决定将PHP官方源码库迁移至GitHub。
他们表示,虽然调查还在继续,但为了减少自己的Git基础设施所面对的风险,他们决定关闭git.php.net的服务器。原本只是镜像的GitHub上的存储库,之后将成为正式服务器。
并且,从现在开始,任何修改都要直接推送到GitHub上而不是原先的服务器。
那些想要帮助PHP的人可以申请在GitHub上被添加为PHP组织的一部分。不过,如果要成为该组织的一员,先要在自己的GitHub账户上开启双因素认证。
目前,PHP还在检查除了那两个恶意提交外的威胁,并且检查是否有任何代码再恶意提交被发现之前被分发到下游。