2021年3月28日,有身份不明人士入侵了PHP编程语言的官方Git服务器http://git.php.net,并上传了未经授权的更新包,而包中源代码被插入了秘密后门代码。
这两个恶意提交被推送到git.php.net服务器上的自托管php-src存储库中,使用的是编程语言的作者Rasmus Lerdorf和Microsoft的软件开发人员Nikita Popov的名字Jetbrains。
PHP方面发布紧急公告指出:
2021-03-28,两个恶意代码分支提交到了php-src repo上,使用的是内部人员的名字,目前内部不知道是如何发生,但是一切都指向了git.php.net服务器可能被入侵的情况。
尽管目前正在调查,但是为了确保安全,我们已经停止了git.php.net服务器,之后会跳转到Github上的镜像存储库中。
被插入代码地址,实现的功能很显然了。
https://github.com/php/php-src/commit/c730aa26bd52829a49f2ad284b181b7e82a68d7d
https://github.com/php/php-src/commit/2b0f239b211c7544ebc7a4cd2c977a5b7a11ed8a
黑鸟在代码中发现含有Zerodium的字符,Zerodium是一个著名的0day漏洞经纪人,这里的字符串很有可能是攻击者为了嫁祸给Zerodium。
目前安全社区认为,攻击的手段可能是这个:
在2021年2月,有研究人员就发布了一种新颖的供应链攻击,安全研究人员设法破坏了超过35家主要公司的内部系统,包括Microsoft,Apple,PayPal,Shopify,Netflix,Yelp,Tesla和Uber的内部系统,并实现了远程代码执行。
该技术称为依赖混淆(dependency confusion) 或替代攻击,它利用一个软件可能包含来自私有和公共来源的混合依赖库。
简单来说,就是攻击者首先通过收集大量这些公司的一些私有库(很多是由于github的代码或者js中的代码泄露导致),也就是一些内部会使用的库的名称,而这些库一般是不会传到公有库里面去的,例如pypI、npm。
而这时候,攻击者将恶意代码库命名为私有库名称,并将其伪造成最新的私有库模块上传到公有库中,而有的公司的代码中可能存在错误的更新配置,导致客户端会自动从公有库中下载伪造的“最新”版本而无需要求开发人员采取任何措施,这样在调用库的时候就直接中招了。(仅举例说明,详细请参考链接)
作者采取了DNS传输的方法将数据从受害者的电脑传输到其设备中。
当然以上都是其他的技术,具体PHP的Git服务器如何被入侵还需要等待详细调查。
如果有定期更新PHP源代码习惯的同学记得检查一二,防止被供应链攻击。
参考链接:
https://news-web.php.net/php.internals/113838
https://medium.com/@alex.birsan/dependency-confusion-4a5d60fec610