详细分析PHP源代码后门事件及其供应链安全启示

 聚焦源代码安全,网罗国内外最新资讯!

专栏·供应链安全

数字化时代,软件无处不在。软件如同社会中的“虚拟人”,已经成为支撑社会正常运转的最基本元素之一,软件的安全性问题也正在成为当今社会的根本性、基础性问题。

随着软件产业的快速发展,软件供应链也越发复杂多元,复杂的软件供应链会引入一系列的安全问题,导致信息系统的整体安全防护难度越来越大。近年来,针对软件供应链的安全攻击事件一直呈快速增长态势,造成的危害也越来越严重。

为此,我们推出“供应链安全”栏目。本栏目汇聚供应链安全资讯,分析供应链安全风险,提供缓解建议,为供应链安全保驾护航。

注:以往发布的部分供应链安全相关内容,请见文末“推荐阅读”部分。

前言

北京时间3月29日,php官方发布其 git.php.net 服务器遭攻陷,攻击者仿冒PHP编程语言作者Rasmus lerdorf和软件开发者 Nikita Popov 的账号发起了两次恶意代码提交,并留下了远程代码执行后门。本文将从技术角度分析这起事件,并探讨它所折射出的软件供应链安全问题。

源码分析

拉取被植入恶意代码版本的源码后,定位到函数php_zlib_output_compression_start() 。

攻击者仿冒开发者身份,将恶意后门代码插入于 zlib 扩展的php_zlib_output_compression_start() 函数中。

触发 php_zlib_output_compression_start() 函数后,会进行两个判断:

第一个判断全局变量TRACK_VARS_SERVER 类型是否为ARRAY,以及参数_SERVER是否存在。

在第二个判断中,zend_hash_str_find() 把第二个参数作为 KEY值,在第一个数组参数中查找并返回一个指针结果。

当同时满足这两个判断时,将enc参数转换为字符串类型:

通过Z_STRVAL_P(enc)引用指针地址,使用strstr()函数判断字串 zerodium 是否存在。

当攻击者留下的请求判断被通过后,就可以进入代码执行函数:

Zend_eval_string() 函数通过第一个参数以指针移动8位跳过“zerodium”字符,引用“zerodium”后面的代码内容进行命令执行,第三个参数作为执行描述进行标识。

可以在http头部构造类似的payload:

User-Agent:zerodiumsystem(“touch /tmp/php-evil/evil”);

触发此代码执行后门。

zlib_output_compression功能会根据用户请求对页面返回信息进行压缩,以提高反应速度,默认情况下为关闭状态。

修改配置信息后,

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值