对中国全运会系统攻击的分析 – Avast

引言

2021年9月15日,)在中国的陕西市启动。这是一项与奥运会类似的活动,但仅限于中国的运动员参赛。在9月早些时候,我们的同事发现了一个可疑文件扩展名的恶意软件样本,针对一张图片进行了调查。后来,他还找到了一份来自全国运动会IT团队的报告,该报告在VirusTotal上显示攻击发生在运动会开始之前。报告附带了来自网络服务器和SQL数据库的访问日志。通过分析这些日志,我们收集到了关于攻击的初步信息。这些日志仅包含请求路径,遗憾的是没有显示POST请求中的内容,而这些内容正是理解攻击者如何向其WebShell发送命令所必需的。即使仅凭这些有限的信息,我们仍能够勾勒出攻击的轮廓,并以中等的把握确定初始的入侵点。

在此帖子中,我们分享自己对这一事件的研究,分析攻击者使用的样本和漏洞,详细描述了在事件发生前,系统被成功攻破的情况。我们的研究基于关于该事件的公开信息进行。分析的样本在VirusTotal上已经存在。

根据来自报告的初步信息和我们自己的发现,似乎这次入侵在运动会开始之前就已经成功解决。我们无法详细说明攻击者可能对更广泛的网络采取了什么行动。我们也无法对攻击者做出任何明确的归因,但有理由相信他们可能是以中文为母语的人,或者在中文方面流利。

获取访问权限

证据表明,攻击者在2021年9月3日上午10:00左右获得了初始代码执行权限,并安装了其第一个反向Shell,执行名为__runscript.lua的脚本。我们怀疑这次入侵的方式是通过一个任意文件读取漏洞,针对的可能是route.lua,根据从多个JavaScript文件中提取的API(应用程序用户界面),这是一个包含从处理登录认证到文件操作等众多功能的LUA脚本,或者是index.luaindex.lua?a=uploadAPI的组合,这一API在网络日志中其他地方未被使用。值得注意的是,报告中并未提到runscript.lua,也未包含攻击者上传的文件。

在获得初步访问后,攻击者上传了其他几个反向Shell,如conf.luamiss1.php __ 或
admin2.php__(见表2的源代码),以便在某个Shell被发现的情况下在网络中获得更持久的立足点。这些反向Shell通过POST请求获取命令,因此报告中附带的日志并不包含这些数据,因为它们只包含URL路径

在截图中,我们可以看到攻击者从后门获取了大量返回的数据(高亮部分)。

此外,报告中的日志没有包含网络流量的完整信息,因此我们无法确定攻击者如何以及何时获得了他们的第一个WebShell。我们通过查找他们上传和与第一个自定义Web Shell互动的时间点来推测我们的发现。

他们在那里做了什么

攻击者开始测试他们能够上传到服务器的内容。从2021年8月26日2021年9月9日的期间,攻击者尝试提交不同文件类型和扩展名的文件。例如,他们提交了相同的合法图片(7775b6a45da80c1a8a0f8e044c34be823693537a0635327b967cc8bff3cb349a),但使用了不同的文件扩展名:icoluajsluactxthtmlrar

在掌握了被阻止和允许的文件类型后,他们尝试提交可执行代码。当然,他们首先提交的是一些PoC(概念验证),而不是直接执行WebShell,因为提交PoC更加隐蔽,且也能了解恶意代码的可执行权限。例如,其中一个上传的文件是伪装成图片的Lua脚本(20210903-160250-168571-ab1c20.jpg):

os.execute("touch","/tmp/test.miss")

利用Lua的io.popen函数,它执行一个命令并返回进程输出,攻击者用类似于以下的命令伪装成图像来测试不同的WebShell:

io.popen("echo '_Base64EncodedWebshell_ ' | base64 -d > ../mod/remote/miss.php")

他们测试了不同的中文WebShell(例如,但这些信息不足以将攻击确切归因于任何威胁行为者。

攻击者决定通过上传他们自己的www.conf文件、伪装成PNG文件并包含默认配置来重新配置Web服务器,但允许.lua扩展名的执行。我们怀疑服务器被配置为在一个线程池中执行新线程,但这对于他们想要执行的(强大的中文WebShell)来说并不起作用。他们未能成功重新配置服务器以执行它。因此作为最终载荷,他们上传并运行了一个整套Tomcat服务器,并对其进行适当配置和武器化,使用了。

值得一提的是,攻击者能够上传一些工具(如、、、)到服务器,并执行网络扫描器(fscan)及一个定制的一键利用框架,我们将在下文中详细讨论。

上述提到的中文扫描器和利用框架是用Go编程语言编写的,并以单个二进制文件形式分发,这允许通过简单地输入IPIP范围(可以作为程序参数或文本文件传递)执行所有利用步骤,这使其成为在网络环境中迅速攻破计算机系统的优秀工具。

该工具结构清晰,拥有插件,能够执行所有必要步骤以自主攻击同一网络内的其他设备。

  1. Plugins/Web/Finger : 执行指纹识别以识别服务。目前,它支持以下指纹: IBMJbossshiroBIG-IPRuiJieTomcatWeaverjeecmsseeyonshtermtongdazentaoUeditoriofficeoutlookyongyouCoremaileasysiteFCKeditorFortigateFineReportSangforEDRSpringbootthinkphp_1thinkphp_2thinkphp_3thinkphp_4easyConnect_和_weblogic_async
  2. Plugins/Service : 攻击服务以获取访问权限。目前,它支持以下服务: sshsmbredismysqlmssqlms17010(EternalBlue SMB利用)_和_ftp
  3. Plugins/PwdTxt : 列出了用户名和密码的短字典,以便在Plugins/Service上执行简要的暴力攻击。
  4. Plugins/Web/Poc : 用于利用常见Web应用的模块。目前,它支持以下利用: Jeecms_SSRF1yongyou_rce1RuiJie_RCE1outlook_ewsthinkphp_RCE1thinkphp_RCE2thinkphp_RCE3thinkphp_RCE4thinkphp_RCE5thinkphp_RCE6RuiJie_Upload1Weaver_Upload1yongyou_upload1weblogic_consolephpstudy_backdooryongyou_readFile1Jboss_unAuthConsoleJboss_CVE_2017_12149weblogic_CVE_2019_2618

一个插件的例子是plugins/Web/Poc/Weblogic_CVE_2019_2618

在下面的截图左侧,您可以看到在我们的实验室针对Python服务器(右侧终端)执行的扫描,带有标记的利用载荷请求。

有关载荷的更多信息,请参见IoCs,表2。

结论

攻击者入侵第14届全国运动会的过程并不新鲜。他们通过利用Web服务器中的一个漏洞获得了系统访问权限。这显示出需要更新软件、妥善配置,还应使用漏洞扫描器关注应用程序可能出现的新漏洞。

防御者最基本的安全对策是保持基础设施在打补丁方面处于最新状态,尤其是面对互联网的基础设施。

防范应该是内部和面向互联网的基础设施的首要任务。

WebShell是一种后期利用工具,可能非常难以检测。一些WebShell甚至不会触碰文件系统,仅存在于内存中;这使得它们更加难以被检测识别。植入后,WebShell通常通过异常的网络流量或异常网络流量指标被识别。

要防御这种攻击,非常重要的是部署更多的保护层(例如SELinuxEndpoint Detection andResponse解决方案等),以便在成功入侵发生时能够及时检测并采取行动。

在获得访问权限后,攻击者尝试通过在网络中使用利用和暴力破解服务的方式进行横向移动。由于攻击者很可能达到这个阶段,防守者必须做好准备。实时监控计算机系统和网络是应对这一问题的有效方法。

最后,攻击者使用用Go编程语言编写的利用框架在网络中进行横向移动。Go是一种越来越受欢迎的编程语言,可以针对多个操作系统和架构编译,并且所有依赖项都可以包含在一个自包含的二进制文件中。因此,我们预计未来的攻击,特别是在IoT攻击中,会出现使用这种语言编写的恶意软件和灰色工具,因为这涉及到各种不同处理器架构的设备。

IoCs

| SHA + 原始文件名 | 描述 | |—|—| | 0c6ae9de10bee6568ec3ad24918c829b7e5132cc0dd1665d4bbf1c3fe84451b6 | 20210902-104211-659035-88486d.zip: 加密的ZIP文件 | | 0d1504a9ae319bdc320f938d2cdf72cba18277b3f2b311abf0bacad2517dabc0 | 20210903-163606-280628-0a82f3.txt: Shell代码投放者 | | cac30cc2f4646979d0be8b4d5f3a1f87351b3bb77f22e5064bd034cec9e119bb | 20210903-170452-952751-b9106e.txt: 单行Shell代码 | | 0aeb963b4566dc2224d34b4885336c666198db2ac64c810586ce3b17ef3da59f | 20210903-171141-909389-0f6e83.txt: Rebeyond Shell代码投放者 | | dffa7e31797339f3ce7ec453161b60010eda3dd2e52aa9f147ab4389672c3536 | 20210903-194355-378055-c6cb9c.txt: Shell代码投放者 | | bdd4d0bb36d07ae6b97ffbcd386c54e1b15fefe65329ff0389dfd5739cd3cff2 | 20210904-122732-780555-5c07b2.rar: UPX压缩 Mssql工具包 | | 3a8dc7e730a1f82f65f1731cb31e05e2f749a9e89ab8529168a082d24680d2dd | 20210904-153039-541730-a843fe.zip: for Linux | | ec8aef085d3cc57a4e92a613e128f2d9c7b5f03b8e017dd80d89bfeada228639 | 20210904-160830-117786-b5cab7.rar – 20210904-161031-883832-c50992.rar: 自定义利用框架 | | 2cab3b0391bf3ace689fc697f522b3c86411e059ab8c1f4f5b7357b484b93035 | 20210904-164301-268472-915428.zip: WebShell | | d033756a57d8a2758de40895849e2146d571b3b44f3089eb68c31483784586cd | 20210904-112719-261644-c9c5eb.jpg: UPX压缩的 |

| 表1 证明概念 | 载荷 | |—|—| | Yongyou_upload1 | 请求 | GET /aim/equipmap/accept.jsp | | ThinkPHP_RCE4 | 请求 | POST /index.php?s=/Index/\think\app/invokefunction | 数据| function=call_user_func_array&vars[0]=base64_encode&vars[1][]=123456 | | ThinkPHP_RCE5 | 请求 | POST /index.php?s=/Index/\think\app/invokefunction | 数据| function=call_user_func_array&vars[0]=base64_encode&vars[1][]=123456 | | ThinkPHP_RCE6 | 请求 | POST /public/?s=captcha/MTIzNDU2 | 数据| _method=__construct&filter[]=print_r&method=GET&s=1 | | yongyou_rce1 | 请求 | GET /service/monitorservlet | | RuiJie_Upload1 | 请求 | GET /ddi/server/fileupload.php | | Weaver_Upload1 | 请求 | GET /page/exportImport/uploadOperation.jsp | | phpstudy backdoor | 请求 | GET / | 头 | User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36 | | ThinkPHP_RCE2 | 请求 | GET /index.php?s=index/\think\request/input?data=123456&filter=base64_encode | | yongyou_readFile1 | 请求 | GET /NCFindWeb?service=&filename= | | weblogic_CVE_2019_2618 | 请求 | GET /bea_wls_deployment_internal/DeploymentService | | Outlook ews (接口轰击) | 请求 | GET /ews | | ThinkPHP_RCE1 | 请求 | GET /index.php?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=base64_encode&vars[1][]=123456 | | ThinkPHP_RCE3 | 请求 | GET /index.php?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=base64_encode&vars[1][]=123456 | | | 请求 | GET /console/ | | Jboss JMXInvokerServlet (反序列化) | 请求 | GET /index.php?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=base64_encode&vars[1][]=123456 | | Jboss (未经授权访问控制台) | 请求 | GET /jmx-console/index.jsp | | Jboss JMXInvokerServlet (反序列化) | 请求 | GET /index.php?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=base64_encode&vars[1][]=123456 | | jeecms SSRF以上传 | 请求 | GET /ueditor/getRemoteImage.jspx?upfile=http://127.0.0.1:80/1.png | | RuiJie_RCE1 | 请求 | GET /guest_auth/guestIsUp.php |

表2

文件

  • miss1.php
  • conf.lua
  • admin2.php

IoC库

文件和IoC在我们的中。

标签:、、、

分享:X Facebook

Leave a Reply

Your email address will not be published. Required fields are marked *