PhpStudyGhost软件供应链安全事件
0x00 前言
前一篇分析的华硕影锤供应链攻击是通过修补官方升级程序植入后门,并将其替换到官方升级服务器从而利用升级通道进行投毒攻击。本篇分享的PhpStudy软件后门事件有点相类似,攻击者入侵官网下载服务器后将植入后门的版本与原软件包替换,成功借助这款公益性软件非法控制67万余台计算机并盗取帐号密码等10万多组数据。该案例最早可以追溯到2016年,直至2018年12月才首次漏出痕迹被立案调查,并于2019年9月最终披露,时间跨度之长在众多软件供应链攻击案例中也算是名列前茅的。并且由于该软件和后门的特殊性,以至于“一石激起千层浪”,在该案件披露后不仅各大安全厂商在争相报导,同时也让各路黑客疯狂收割“肉鸡”服务器、网站管理员加班加点排查防护。
0x01 事件背景
2019年9月20日,杭州市公安局举行新闻通报会,通报“净网2019”专项行动战果,其中介绍了一起非法控制计算机信息系统的案件,首次披露了PhpStudy软件存在后门的信息。
Phpstudy软件是国内的一款免费的PHP调试环境的程序集成包,在国内有着近百万PHP语言学习者、开发者用户。正是这样一款公益性软件,不知不觉成了非法分子攻击利用的目标。2018年12月4日,西湖区公安分局网警大队接报案称,某公司发现公司内有20余台计算机被执行危险命令,疑似远程控制抓取账号密码等计算机数据回传大量敏感信息。于是西湖网警对该案立案侦查,通过技术分析对软件中的后门进行司法鉴定,证实其中存在控制计算机的功能。之后又从最直接的获利者下手,调查C2资产背后的嫌疑人,发现他们有大量不明收入和分赃的可疑情况,最终在海南、四川、重庆等地抓获7名犯罪嫌疑人,确定他们利用此后门盗取多个境外网站的管理后台帐号密码并实施诈骗非法牟利600余万元。(下图来源于案件报告)
另外,专案组专程调查了PhpStudy软件官方的制作人和所属公司,排除了他们的犯罪嫌疑。
0x02 样本分析
受污染的软件版本包括PhpStudy2016版和2018版,主要影响其中的PHP
5.2.17和5.4.45环境。本篇以PhpStudy2016版为例进行分析,该版本安装后默认启动的是PHP-5.4.45环境(同时安装的5.2.17版本也存在后门),主服务进程httpd.exe在启动时会自动加载后门组件“php_xmlrpc.dll”。该模块位于php安装的拓展目录中,文件的修改时间被特意伪造成和其他拓展模块相同的“2015/9/3 0:17”,此举是为了降低被排查发现的风险。
此外,后门模块的内部编译时间同样被伪造成“2015/9/2 16:17:43”,同时pdb路径和程序的checksum也被抹除。
虽然这些“外部”特征做足了功夫,但是后门程序的“内部”特征却稍显不足,引用的字符串“@eval(”实际上是属于PHP代码中比较敏感的调用函数,事实上通过该特征也较容易定位此后门模块。
通过该敏感字符串的交叉引用可以直接定位到后门函数“sub_100031F0”。此函数主要包含2个后门功能,分别支持远程控制的正向连接和反向连接。该函数通过PHP拓展的结构体对象“_zend_module_entry”注册成“request_startup_func”函数,即每次接收到http请求都会调用一次该函数,得到一次执行机会。
先来看下该后门正向连接功能的实现过程,首先要提取每次http请求中的“Accept-Encoding”字段请求头数据,这个字段在正常的网站请求中都会存在,用于指明客户端支持的编码方式如是否支持gzip压缩数据等。但是,这里后门作者运用了一个小技巧来规避常规浏览器客户端可能使用到的编码方式,以此来筛选真正的攻击请求。一般情况,如果2种编码方式组合如gzip和deflate,则通常会在其中间用逗号和空格分隔如“gzip, deflate”,但后门作者判断时故意去掉其中的空格(变成“gzip,deflate”,中间无空格),以此来规避绝大部分的正常请求。若满足这个前置条件,则可以进入第二个执行条件即提取“Accept-Charset”字段请求头数据,并尝试将该数据以base64编码进行解码,成功解码后才能获得攻击者要执行的任意php攻击代码,该代码最终作为zend_eval_string函数参数得以执行(相当于一个php的eval函数)。
尝试发送正向的攻击请求包来执行任意命令(测试弹计算器)。
通过进程链监控验证了后门的正向连接功能。
再来看下该后门的反向连接功能,前置判断条件同样通过“Accept-Encoding”字段请求头数据,只是换了一个字符串变成“compress,gzip”(中间无空格),该编码方式通常也不会触发。
既然是反向连接,意味着后门要主动连接到攻击者的服务器,但是该功能的前置条件通常又难以触发,所以后门作者加入了另外一个隐蔽流程来有限制地触发此后门功能。该隐蔽流程的控制参数是根据http请求的时间间隔来决定,这个时间间隔是通过最近一次http请求时间减去后门模块初次被加载的时间来获得,只有当该时间间隔的数值满足一定的区间范围(最大值为6000秒即100分钟)才能进入隐蔽流程触发后门连接,触发后则会先搜集用户的磁盘序列号和网卡MAC地址等信息用于后续上传回连服务器。
时间间隔的最小值设定在模块启动函数“sub_10001010”(“module_startup_func”)中进行初始化,“time_start_10012AA0”记录了启动函数的执行时间且在触发隐蔽流程前不再更新,而“time_end_10012AB0”则在每次http请求期间都进行更新,他们的最小间隔值则通过随机函数设定了一个区间范围(1012-1133)。这意味着,要进入隐蔽流程的条件是在后门模块启动后的1012秒到6000秒之间能够收到一次http请求才能第一次激活触发(之后每60分钟只能触发一次且每100分钟至少有一次http请求),通过这种触发条件设定不仅可以筛选出访问流量相对较大的网站服务器,过滤掉没有价值的个人站点,同时也尽可能的降低反向连接的频率来隐藏恶意流量。
这里顺便提一下,此触发条件设定并不是唯一的,比如发现该类后门模块另外一种版本是通过判断当前http请求的时间是否在晚上11点,并且在凌晨3点以后到晚上11点之间不会触发连接,这也侧面反映了后门作者小心谨慎的作案风格。
一旦http请求的时间满足触发条件后,该后门就会通过执行一个PHP脚本代码来进一步触发反向连接的功能,这个脚本代码的功能实质上就是发送一个带有“compress,gzip”参数的“Accept-Encoding”请求头数据包给自身。当然,执行的脚本代码不会直接光明正大的以字符串方式明文存储在程序中,而是事先使用gzcompress进行压缩后将二进制数据存储在字节数值里,在需要执行时才通过“@eval(gzuncompress(‘压缩数据1’))”的函数调用方式间接地解压缩执行。
这里简单介绍一种在调试器查看eval执行源代码的方法,此方法基于函数调用链:“zend_eval_string” => “zend_eval_stringl” => “zend_compile_string”( or “compile_string”) => “zend_execute”(or “execute”),在“compile_string”函数(编译代码字符串)下断点,即可在eval执行php代码之前跟踪到要编译执行的源码。通过该方法在上述执行压缩数据1时得到其脚本代码如下,可见又包装了一层base64加密。
进一步解密执行得到触发反向连接功能的发包源码,可见直接给自身发了一个重复包并带上触发参数“compress,gzip”。
接着正式进入反向连接流程,同样以解压缩的方式执行一段php脚本代码同时附带上磁盘信息和网卡信息(“$V='%s';$M='%s';;@eval(gzuncompress(‘压缩数据2’))”)。
跟踪解压缩过程发现第一层代码仍旧使用base64加密,同时将磁盘信息与网卡信息拼接后再次进行base64加密。并且这里可以看到拼接信息的前缀是一个笑脸字符串“info^_^”,侧面反映了后门作者炫技的心态。
解密第一层代码后得到真正的反向连接功能代码如下,可见C&C地址主域名(“360se.net”)仿冒成360浏览器的域名(官方实际并未注册该域名),依次对该域名的多个子域名和端口尝试连接,若成功连接则将用户信息上传并返回待执行的控制代码。
触发反向连接功能后抓取的恶意请求流量,由于C&C地址失效可见其对多个子域和端口尝试连接的记录。
至此,该后门模块的功能分析完毕,其本质上是后门作者通过php拓展组件“php_xmlrpc.dll”的开源代码进行修改编译后植入到PhpStudy的官方软件包。
0x03 溯源分析
根据主要犯罪嫌疑人马某的供述,他在2016年年初编写这个后门是为了炫技,因为他在毕业后从事网络安全方面的工作,干了三四年觉得那样的生活有些无聊,于是将自己编写的后门巧妙地镶嵌到这款软件的安装压缩包中,由于他只是在压缩包的通信协议中加进了一些代码,所以极难被用户电脑中的一些杀毒软件扫描删除。后来他可能又不满足于炫技,又通过黑客手段非法入侵了软件官网,在2016年12月将此修改后的压缩包放上了官网开始向千千万万的用户电脑投放该后门。以下截取2018年5月份的软件官网,当时phpStudy2018和phpStudy2016这2个版本的安装包均包含此后门。
当然,事件披露后官方网站(当时官方域名已换成“www.xp.cn”)也进行了紧急的排查整改,并第一时间发布公告通知用户自查。
但是覆水难收,除了软件官网这个供应链源头,其他很多互联网渠道如各大下载站、网盘、论坛等都充斥着这款软件后门下载链接。如下是著名的php中文网,该社区上就存在一个固定的PhpStudy软件下载渠道,根据数据显示该页面有数万次的下载量(此时已去除后门版本并提供校验码)。
不过,虽然主要渠道会及时整改,但是难免会有一些漏网之鱼疏忽大意,比如下面是在phpStudy官网某帖子文章的页面,此时(2022年)依然存活着后门版本(后门版本35MB,实际上官网修复后安装包大小为52MB左右)的下载链接并且有用户通过此链接下载软件。
该帖子页面是位于官网小皮面板下的某篇文章,时间为2017年12月,当时的官网域名应该还是“phpstudy.net”,但是从下载链接看域名是“img.php.cn”(推测是php中文网的资源专用域名),如此看来该后门版本安装包除了可能是攻击黑客替换下载链接之外(可能性相对较小),大概率就是官方人员上传后自行放置的,由此可见当时该版本的软件包已经被传播泛滥、相互信任,以至于官方人员也没有察觉该软件早已被人偷天换日。
这里也印证了西湖网警对于犯罪嫌疑人马某为什么选择这款公益性软件的解释:
“一方面这款软件的使用者比较特殊,大多都是网站数据库的制作和开发者,他比较容易获得对方最高权限的相关资料,另一方面由于这款软件是在十几年前由个人编写的,最初的编写者是自学的这方面知识,对于安全方面的意识不高,所以马某成功的机会比较大。”
另外看下马某的作案过程,据报道称他一共写了5组脚本,能够回传各种想要的数据和信息,然后再对这些回传的数据信息加以分析得到目标网站(多个境外网站,推测可能是博彩一类的灰色网站)的管理后台账号密码。根据上文样本分析可知,后门触发反向连接功能后远程连接“360se.net”获取php脚本代码执行控制功能,可能就属于这5组脚本其中的代码。通过以下2条数据记录也能看出这些脚本主要用于在用户机器上执行攻击命令,这也解释了案件提及的某公司20余台计算机发现被执行危险命令的痕迹。
“hxxp://www.360se.net/python_server/php_code.py”
“hxxp://www.360se.net/dadmin32sdklsa0afuckfuck/cmd_add.php”
上文提到php后门模块存在多个版本,实际上是后门作者随着作案时间的演变不断的调整和改进后门功能,比如在2016年的测试阶段一开始只有最简单正向连接功能,命名为“php_fork.dll”。
随后在2018年又测试了一个64位的后门更新版本“php_chinavg.dll”,该版本特地使用计算md5的方式试图隐藏后门触发条件的字符串“gzip,deflate”和“compress,gzip”。
此外,该版本的反向连接功能加密的脚本代码也更换了C&C域名为“vgs.kr”(韩国域名,此例未发现网上公开披露),不过其并未进行发现大范围传播。
0x04 传播影响
本节简单梳理一下该后门事件披露后的影响统计,主要数据来自“知道创宇404实验室”的分析报告。
当时通过ZoomEye(钟馗之眼)数据搜索主要受影响的PHP版本(5.2.17/5.4.45)探针数据,预估受害规模在9万左右,主要分布地区为中国和美国,并且对美国受影响的目标简单探查后发现基本属于IDC机房的机器,所以猜测都是国人在购买的VPS上搭建的PhpStudy环境。
虽然作案团伙主要目标是通过盗窃境外网站账户密码实施诈骗,但事实上国内的服务器才是最大的受害群体,尤其是在此事件细节披露后,很多自动利用工具相继公开,吸引了大批黑产组织开始针对该后门环境发起规模性的扫描和攻击活动,如下为404实验室捕获到的攻击payload样例。
0x05 总结
“PhpStudyGhost”软件供应链安全事件是一例作案时间长、传播范围广且影响程度较高的典型供应链攻击事件,该案例的披露再一次为软件供应链安全敲响警钟,预示着供应链攻击的常态化,任何提供服务的软件均可能成为供应链攻击的目标,被动成为打破信任屏障的武器。同时,该案例提醒我们供应链安全的形势愈发严峻复杂,每种攻击场景均可能存在多重特定的影响面,并且在不同时间阶段可能带来的影响力难以想象,对此在防御侧需要进行更充分的探究和布置,监管侧也需严格管理披露周期。
0x06 参考链接
1、杭州警方通报打击涉网违法犯罪暨“净网2019”专项行动战果,https://mp.weixin.qq.com/s?__biz=MzA4MjM2MDgxMA==&mid=2815602999&idx=1&sn=b01cd1d8b2c50df48d4196400a3db8d9&chksm=bda0f1b28ad778a46f7cf77ec1ddf1488a063b183732735bc3808621d71765792213f8deb6fe&scene=21#wechat_redirect
2、67万台电脑数据遭黑客偷窃!杭州网警连破涉网大案,https://ori.hangzhou.com.cn/ornews/content/2019-09/22/content_7271737.htm
3、Phpstudy官网于2016年被入侵,犯罪分子篡改软件并植入后门,https://mp.weixin.qq.com/s/CqHrDFcubyn_y5NTfYvkQw
4、phpstudy后门文件分析以及检测脚本,https://mp.weixin.qq.com/s/dIDfgFxHlqenKRUSW7Oqkw
6、PHPStudy后门事件分析,https://bbs.pediy.com/thread-254702.htm
7、phpStudy后门简要分析,https://www.freebuf.com/articles/others-articles/215406.html
8、PHPStudyGhost后门隐蔽触发功能详细分析,https://mp.weixin.qq.com/s/t-P-n98ZydP3aSCdC0C9hQ
9、PHPStudy后门事件分析,https://xz.aliyun.com/t/6423
10、PHPStudy后门分析,https://kumqu.github.io/2019-09-30/PHPStudy%E5%90%8E%E9%97%A8%E5%88%86%E6%9E%90
11、PhpStudy后门分析,https://www.anquanke.com/post/id/187560
目前没有反馈
表单载入中...