东方侦察 | PHP源代码泄露怀疑用户数据库泄漏事件调研
发布于 2021-09-04 15:07 ,所属分类:软件编程学习资料
【2021】第5期总第5期
2021年9月2日
PHP源代码泄露怀疑用户数据库泄漏事件调研
事件发生时间:2021年3月28日
事件关键词:PHP、用户数据库泄漏、源代码泄露、服务器
一
事件简介
PHP的负责人员Nikita Popov发布更新,说明了PHP源代码如何遭攻陷以及恶意代码如何被插入的情况,他将原因归咎于用户数据库泄露而非服务器本身存在问题。
二
事件相关介绍
1.PHP源代码篡改
2021年3月28日,有身份不明人士入侵了PHP编程语言的官方Git服务器http://git.php.net,并上传了未经授权的更新包,而包中源代码被插入了秘密后门代码。这个恶意提交被推送到git.php.net服务器上的自托管php-src存储库中,使用的是PHP编程语言的作者Rasmus Lerdorf和Microsoft的软件开发人员Nikita Popov的名字Jetbrains[1]。
2.篡改原因分析
PHP代码存储库因插入代码而遭到破坏,如果保留这些代码,该代码将使后门插入运行它的任何Web服务器。该代码最初是以PHP的创建者Rasmus Lerdorf的名义提交的,在删除之后,以Nikita Popov的名字重新提交[4],向git.php.net服务器上的 php-src 存储库总共推送了两次恶意提交。PHP幕后团队原以为托管仓库的服务器遭破解,但Nikita Popov发布博客文章指出,“我们认git.php.net的服务器并未遭攻陷。然而,很可能是master.php.net用户数据库被泄露。”
3.判断依据
Git.php.net服务器使用gitolite启用git托管,而Popov发现“这两次提交完全绕过gitolite基础设施”,因此他怀疑服务器被攻陷。由于代码诊断和服务器设置需要时间,因此他决定将GitHub上的PHP仓库作为主要发布版本.然而,Nikita Popov之后发现存储库还支持通过HTTPS使用“针对master.php.net用户数据库的Apache2 Digest身份验证背后的git-http-backend”来支持通过HTTPS进行的更改,他以前没有意识到这一点。他说:“我不确定为什么首先要支持基于密码的身份验证,因为它不如pubkey身份验证安全。”
Nikita Popov认为,用户数据库被泄露,尽管与日志表明攻击者猜测的是用户名这一事实不符。攻击者一旦找到正确的用户名,则认证会立即生效。Nikita Popov指出,用户数据库是“非常老旧的操作系统/PHP版本上的非常老旧的代码”,他认为其中存在漏洞“并不令人十分惊讶”[4]。
三
相关组织介绍
1.数据泄露方:PHP
(1)PHP成立及发展
PHP于1994年由Rasmus Lerdorf创建,刚刚开始是Rasmus Lerdorf为了要维护个人网页而制作的一个简单的用Perl语言编写的程序。这些工具程序用来显示 Rasmus Lerdorf 的个人履历,以及统计网页流量。后来又用C语言重新编写,包括可以访问数据库。他将这些程序和一些表单直译器整合起来,称为 PHP/FI。PHP/FI 可以和数据库连接,产生简单的动态网页程序[2]。
(2)PHP存在的安全问题
PHP被称为全世界非常好用的Web开发语言之一,其独特的语法混合了C、Java、Perl以及PHP自创的语法。PHP简单易用,学习门槛低,但在其快速发展的同时安全问题也日益突出,所出现的安全问题亦不可小觑。①一本面向研发技术人员的安全书,帮助研发人员在项目研发过程中规避风险。②针对PHP研发人员的项目安全高级指南,涵盖百余种安全问题解决方案。③多位PHP安全领域大咖联合力荐,全面引导读者探索项目更深层次的安全问题。
(3)PHP产生的影响
PHP是一种开源的计算机脚本语言,为互联网上超过79%的网站提供动力。在Web应用程序中,PHP与其他语言也有可比性,在某些情况下性能表现还更好。因此,事件一经曝光被引起了强烈。在此之前为防御 SQL 注入攻击,Popov 已采取多种措施如重置所有密码,修复代码使用参数化查询等。多年来,参数化查询一直都被推崇为最佳实践,而并未如此践行的代码这么就都 PHP 源代码基础设施核心运行的事实表明,如果不安全的遗留代码运行正常且未引发任何明显问题,它们将在组织机构中存在很长的时间。
四
各方反应
1.主人公PHP反应
负责人Popov在公告中表示,他们目前还不知道事件是怎样发生的,但是此次事件导致的后果是git.php.net服务器的数据泄露而不是简单的单个账号的泄露。有问题的服务器使用gitolite来启用git托管,而“这两个提交完全绕过了gitolite的基础架构”,这使他怀疑服务器受到了损害。这影响了将GitHub上的PHP存储库升级为主要存储库的决定,因为诊断该漏洞和设置新服务器需要时间。该用户数据库是“非常旧的操作系统/ PHP版本上的非常旧的代码的一部分”,他补充说,漏洞“不会令人惊讶”。
发现存储库还支持通过HTTPS使用“针对master.php.net用户数据库的Apache2 Digest身份验证背后的git-http-backend”来支持通过HTTPS进行的更改-他以前没有意识到这一点。他说:“我不确定为什么首先要支持基于密码的身份验证,因为它不如pubkey身份验证安全。”现在的猜测是用户数据库已泄漏,尽管日志显示用户名的猜测这一事实破坏了这一理论。但是,一旦找到正确的用户名,便立即进行身份验证。
2.外界反应
不少专业人士讲PHP本身就有一些老问题,PHP5.0.3以前出现一些bug,此次源代码泄露会让使用者以及企业服务器信息泄露,黑客可以通过已知的或者破解的漏洞进行入侵,因为PHP执行shell脚本函数的开放,进而演变成用户者的噩梦。
五
事件简析
数字化时代,软件无处不在。软件如同社会中的“虚拟人”,已经成为支撑社会正常运转的最基本元素之一,软件的安全性问题也正在成为当今社会的根本性、基础性问题。随着软件产业的快速发展,软件供应链也越发复杂多元,复杂的软件供应链会引入一系列的安全问题,导致信息系统的整体安全防护难度越来越大。近年来,针对软件供应链的安全攻击事件一直呈快速增长态势,造成的危害也越来越严重[5]。
不少PHP项目中没能正确地保护敏感数据,如某些信用卡、用户ID和身份验证凭据Token。攻击者可能会窃取或者篡改这些数据以进行诈骗、身份窃取或其他非法操作。敏感数据需额外保护,要在存放、传输过程中进行必要的加密,以及在与浏览器交换时实施特殊的预防措施。防止恶意用户获取其他合法用户的隐私数据,甚至通过获取服务器中的敏感数据达到控制服务器的目的。敏感数据的不正确保护主要体现在以下几点:
(1)敏感数据存储时未加密,常见的有密码、身份证、信用卡明码保存在数据库中;
(2)用户敏感数据在传输过程中采用明文传输,密码未经加密直接发送到服务端;
(3)使用旧的或脆弱的加密算法等,只进行简单的MD5计算。[3]
PHP的研究人员还发现黑客需要对用户名进行几次猜测,一旦找到正确的用户名,就会成功认证。此外,master.php.net认证系统使用的是非常老的操作系统和PHP的版本,这就使得攻击者也有可能利用软件的漏洞来发动攻击。因此,维护者已经将master.php.net迁移到新的main.php.net系统中,并支持TLS 1.2。此外,维护者还重置了所有现有的密码,并使用bcrypt而不是普通的MD5哈希存储密码。
PHP的开发者表示,如果字符串以'zerodium'开头,这一行就会从useragent HTTP头内执行PHP代码。此外,恶意代码中包含了一条注解 “REMOVETHIS: sold to zerodium, mid 2017”。值得注意的是,Zerodium是一家知名的零日漏洞经纪商,而注释的意思是“漏洞在2017年中出售给了zerodium”。对此,而Zerodium的CEO Chaouki Bekrar认为攻击者很可能试图出售这个漏洞,但找不到卖家,所以攻击者干脆自己恶搞。
不过,PHP相关负责人表示,恶意提交几小时后,就被他们在进行常规的代码审查时发现。这些更改的恶意很明显,所以很快被还原了。对于Git这样的源代码版本控制系统来说,这样的事件会发生很正常。因为可以把提交的内容为打上本地任何一个人的签名,然后再把伪造的提交内容上传到Git服务器上。这样一来,就会让人觉得这个提交确实是由签名的人提交的。
作为此次事件后的预防措施,PHP维护人员决定将PHP官方源码库迁移至GitHub。他们表示,虽然调查还在继续,但为了减少自己的Git基础设施所面对的风险,他们决定关闭git.php.net的服务器。原本只是镜像的GitHub上的存储库,之后将成为正式服务器。并且任何修改都要直接推送到GitHub上而不是原先的服务器。那些想要帮助PHP的人可以申请在GitHub上被添加为PHP组织的一部分。不过,如果要成为该组织的一员,先要在自己的GitHub账户上开启双因素认证。
PHP还在检查除了那两个恶意提交外的威胁,并且检查是否有任何代码再恶意提交被发现之前被分发到下游。现在虽然仍无法确定PHP源代码后门事件的根因,但迁移到GitHub使其相形见绌。不管根因是否为SQL注入,都有必要提醒所运行代码的存在时间已无法保证其安全。[7]
参考资料
【1】《Changes to Git commit workflow》
【2】《PHP安全之道》
【3】《HP安全:敏感信息泄露》
【4】《PHP源代码泄露的更新:怀疑用户数据库泄漏》
【5】《PHP Composer 新漏洞可引发大规模供应链攻击》
【6】《关于简单的php源代码泄露漏洞的发掘》
【7】《源代码被添加后门之后,PHP的用户数据库可能已被入侵》
END
长
按
关
注
精彩内容早知道
相关资源