一、前言

近日,腾讯安全云鼎实验室监测到大量主机被入侵并添加了一个名为“vusr_dx$”的隐藏帐号;同时,云鼎实验室还监测到此类帐号被大量创建的同时存在对应帐号异地登录的情况。

Windows 的帐号名称后带着“$”符号时,不会在 net user 命令中显示出帐号信息,是攻击者常用的一种隐藏帐号的方法,一般开发者不会添加这种类型的帐号。云鼎实验室对该事件进行跟踪分析,还原了攻击者的入侵手法、入侵后的操作。

二、入侵手法分析

通过对所有被入侵并添加“vusr_dx$”隐藏帐号的主机进行分析统计,发现大多数主机都安装了phpStudy 组件,Web 目录存在 phpinfo 和 phpMyAdmin,且 MySQL 的 root 用户有 50% 为弱口令。由此可以推断可能导致入侵的原因:

用户在自己云主机通过 phpStudy 一键部署 PHP 环境,默认情况下包含 phpinfo 及 phpMyAdmin 并且任何人都可以访问,同时安装的 MySQL 默认口令为弱口令,于是黑客通过 phpMyAdmin 使用弱口令登录 MySQL,接着利用 MySQL 的一些手段获取到系统权限。

常见利用 MySQL 获取系统权限一般有如下几个方式:

利用 SELECT      "<?system("$_POST[cmd]);?>" INTO OUTFILE      '/path/to/webroot' 语句、或者 general_log 向 Web 目录写入一个 Webshell。由于 phpStudy 的一些原因,其 PHP 进程执行命令后是一个非常高权限的用户(通常为管理员用户或者是 SYSTEM 权限)。

利用 MySQL UDF 来进行命令执行。通常利用 UDF 来执行命令的情况有 PHP 低权限但是 MySQL 是高权限的情况,或者是 PHP 用 disable_functions 限制了调用系统命令执行的方式,所以利用 UDF 来绕过 disable_functions。

这两种手法攻击者都有可能使用,由于攻击者是大批量、持续不断的进行入侵操作,可以推断出攻击者必然是使用了脚本来进行攻击的。

图 1. 攻击者每日成功入侵的机器数量曲线

通过进一步分析调查发现,最终确认攻击者的攻击手法为利用 MySQL 弱口令登录后,修改 general_log 指向 Web 目录下的 sheep.php 的文件,然后利用 shell 创建帐号。下表是 general_log 中时间和帐号创建时间的对应关系,佐证了攻击者的攻击手法。

攻击者使用的 SQL 语句如下图所示:

图2. 攻击者使用的 SQL 语句 payload

图3. sheep.php文件内容

可见,攻击者是针对性的对于 phpStudy 进行攻击。由于 phpStudy 默认安装的 MySQL 密码为 root / root,且开启在外网 3306 端口,在未设置安全组,或者安全组为放通全端口的情况下,极易受到攻击。

攻击者在创建完帐户后,会将挖矿木马上传到路径 C:\ProgramData\Zational\Zational.exe(MD5:cb6f37e76dd233256f1c3303b4e99b1c)并运行。该文件时是一个门罗币挖矿程序, Github 地址为:https://github.com/xmrig/xmrig

图4. 挖矿进程

三、入侵溯源

黑客在创建了隐藏帐号之后会通过隐藏帐号登录并植入挖矿程序,通过腾讯云云镜捕获的“vusr_dx$”帐号异常登录行为进行来源 IP 归类统计,得到将近60个 IP 地址,包含除了来自于不同 IDC 的 IP,还有部分来自江苏盐城疑似黑客真实 IP:

图5. 部分异常登录来源 IP

初步可以怀疑这批是黑客所控制肉鸡甚至可能包含有黑客真实 IP,进一步针对这些 IP 进行信息收集分析,发现 `103.214.*.*` 存在 phpMyAdmin,同时 MySQL 也存在弱口令,且攻击者在 Web 目录下留下了后门,当即猜测这是攻击者的一台跳板机。进一步分析,获得了黑客的后门帐号 vusr_dx$ 的密码: admin@6********。

进一步针对对于挖矿木马行为进行分析后,发现此木马会连接到域名为gowel.top(IP:202.168.150.44)的代理矿池,由于相关配置没有指定专用矿池用户 token 或者用户名,可以认为这是一个私有的矿池地址,同时我们发现,  hxxp://gowel.top:80/ 是一个 HFS,里面有我们获取到的挖矿木马文件。

图6. 该域名80端口 HFS 截图

由于该域名 whois 信息是域名注册商而非黑客本身,无法通过 whois 获取注册者相关信息。

进一步通过遍历异常登录来源 IP 查询黑客画像数据,最终发现一个关联 QQ 信息可能为黑客 QQ,QQ 号为12*********,通过搜索引擎搜索该 QQ 号也能证明该 QQ 号主人在进行一些可能的黑客行为:

图7. 对应 QQ 号搜索引擎查询结果

查询对应 QQ 资料:

图8. 对应 QQ 号资料卡

四、解决方案

针对此类攻击,通用的解决方案如下:

1. 在腾讯云控制台设置 CVM 的安全组,尽量不要选用放通全端口,而是针对性的设置需要外网访问的端口,比如 HTTP 的默认端口 80、RDP 的默认端口 3389;

2. 对于 phpStudy 这种集成环境,在安装结束后应修改 MySQL 密码为强密码,不要使用 root / root 或者 root / 123456 等弱口令;

3. 可以选择安装腾讯云云镜,云镜的主机漏洞检测功能支持支持 Windows 隐藏帐户检测、MySQL 弱口令检测等漏洞检测,同时也支持黑客植入的 Webshell 检测。

图9. 云镜对于受攻击主机的漏洞扫描报警

五、IOCs

MD5:cb6f37e76dd233256f1c3303b4e99b1c

矿池地址:hxxp://gowel.top:11588

[转]一键安装藏隐患,phpStudy批量入侵的分析与溯源的更多相关文章

  1. Linux一键安装web环境全攻略phpstudy版

    此教程主要是应对阿里云Linux云服务器ecs的web环境安装,理论上不限于阿里云服务器,此教程对所有Linux云服务器都具有参考价值. 写这篇文章的目的:网上有很多关于Linux一键安装web环境全 ...

  2. 如何使用ZOL一键安装器下载中关村在线的源安装包

    如何使用ZOL一键安装器下载中关村在线的源安装包 马根峰               (广东联合电子服务股份有限公司, 广州 510300) 摘要    中关村在线最近开始推出ZOL一键安装器,用户直 ...

  3. 【教你玩转云计算】在阿里云一键安装快速部署Oracle11g

    云计算时代提供了更方便可靠的IAAS,PAAS和SAAS平台.将已有或正在研发的项目迁移到云计算平台,和传统的服务器部署还是存在一些异同点. 本文手把手教你在阿里云平台快速的部署Oracle11g   ...

  4. 怎样使用ZOL一键安装器下载中关村在线的源安装包

    怎样使用ZOL一键安装器下载中关村在线的源安装包 马根峰               (广东联合电子服务股份有限公司, 广州 510300) 摘要    中关村在线近期開始推出ZOL一键安装器,用户直 ...

  5. CentOS7 一键安装KMS服务【整理】

    KMS,是 Key Management System 的缩写,也就是密钥管理系统.这里所说的 KMS,毋庸置疑就是用来激活 VOL 版本的 Windows 和 Office 的 KMS 啦.经常能在 ...

  6. 一键安装KMS服务

    本文转载于 秋水逸冰 » 一键安装 KMS 服务脚本 KMS,是 Key Management System 的缩写,也就是密钥管理系统.这里所说的 KMS,毋庸置疑就是用来激活 VOL 版本的 Wi ...

  7. 用 edgeadm 一键安装边缘 K8s 集群和原生 K8s 集群

    背景 目前,很多边缘计算容器开源项目在使用上均存在一个默认的前提:用户需要提前准备一个标准的或者特定工具搭建的 Kubernetes 集群,然后再通过特定工具或者其他方式在集群中部署相应组件来体验边缘 ...

  8. PowerProto: gRPC工具链(protoc, protoc-gen-go)的一键安装与版本控制

    ‍PowerProto: gRPC工具链(protoc, protoc-gen-go)的一键安装与版本控制 中文 | English 项目地址:An awesome version control t ...

  9. Linux下一键安装Python3&更改镜像源&虚拟环境管理技巧

    前言 之前分享过一篇<Linux系统自带Python2&yum的卸载及重装>,介绍了如何卸载及重装Linux(CentOS)自带的的Python2.7.今天主要介绍如何在Linux ...

随机推荐

  1. poj1611 The Suspects(并查集)

    题目链接 http://poj.org/problem?id=1611 题意 有n个学生,编号0~n-1,m个社团,每个社团有k个学生,如果社团里有1个学生是SARS的疑似患者,则该社团所有人都要被隔 ...

  2. 在windows下的CLI模式下如何运行php文件

    https://blog.csdn.net/evkj2013/article/details/52313728 https://jingyan.baidu.com/article/da1091fb09 ...

  3. Spark入门3(累加器和广播变量)

    一.概要 通常情况下,当向Spark操作传递一个函数时,它会在一个远程集群节点上执行,它会使用函数中所有变量的副本.这些变量被复制到所有的机器上,远程机器上并没有被更新的变量会向驱动程序回传.在任务之 ...

  4. 说一说Servlet的生命周期

    servlet有良好的生存期的定义,包括加载和实例化.初始化.处理请求以及服务结束.这个生存期由javax.servlet.Servlet接口的init,service和destroy方法表达. Se ...

  5. tensorflow模块安装

    有时候,我们的电脑上或许会同时安装多个python的环境,譬如,我的电脑上同时装了anaconda2和3. 在安装的时候,譬如,我想在python3中装tensorflow,则需要在 C:\Progr ...

  6. Mistakes(Updating)

    1.当调试时发现无法正常调用函数时,检查是否发生爆栈 对于每个栈仅有4MB的空间,开int只能开大约5*10^5. 大数组一定要开全局变量 2.当long long=int*int时会爆int,一定要 ...

  7. Codeforces Round #356 (Div. 2) E. Bear and Square Grid 滑块

    E. Bear and Square Grid 题目连接: http://www.codeforces.com/contest/680/problem/E Description You have a ...

  8. Codeforces Round #350 (Div. 2) B. Game of Robots 水题

    B. Game of Robots 题目连接: http://www.codeforces.com/contest/670/problem/B Description In late autumn e ...

  9. SlickOne敏捷开发框架介绍(一) -- 基于Dapper, Mvc和WebAPI 的快速开发框架

    前言:在两年前(最初发布时间:2013年1月9日(csdn),当前文章时间2015年11月10日),项目组推出了基于Dapper,Mvc和WebApi的快速开发框架,随着后续Slickflow产品的实 ...

  10. 字符串转码【String.getBytes()和new String()】

    在Java中,String.getBytes(String decode)方法会根据指定的decode编码返回某字符串在该编码下的byte数组表示,如 byte[] b_gbk = "中&q ...