声明!
本文仅供学习和研究,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,海青实验室及文章作者不承担任何责任。
安全狗海青实验室拥有此文章的修改和解释权,如欲转载或传播,必须保证此文的完整性,包括版权声明在内的全部内容,未经海青实验室同意,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。
*本文所涉及到的案例中所有截图均是在复现、分析过程中获得的*
近日我们帮助某客户追踪溯源一例入侵事件时,发现黑客在获取服务器权限之前利用网站的“ZIP解压功能”上传了Webshell。由于此次的漏送利用方式在“攻击载荷的构造”与“实际解压路径”方面较有代表性,并且业界对“不安全解压”漏洞的关注度仍不够。因此我们编写了这篇报告,在报告中讲解了入侵溯源与漏洞发现的过程,并从安全开发和安全狗产品防护方案两个维度提出了一些安全建议,希望对行业有所补益。
值得注意的是,虽然该CMS已经做了相关防御配置,若在CMS的根目录下直接写入JSP文件是无法执行的,会报403错误。攻击者利用了war包会自动部署的特点,通过“目录穿越”的思路使war包跳出该CMS的根目录。
一、入侵溯源
某公司运维人员在深夜值班时发现系统存在一定异常,为了尽快排查问题,客户联系了我司,海青实验室随后介入,进行溯源和分析,并提供后续的处置方案。
通过查看Tomcat的日志文件/logs/localhost_access_log.yyyy-MM-dd.txt可以发现,查看日志可以发现,攻击者曾经对网站的登录接口实施了爆破(对“POST /cmscp/login.do”接口的访问频率很高),如图所示。
注:爆破成功时的HTTP状态码是302,而爆破失败时的HTTP状态码是303。
为了判断攻击者是否上传网站木马,使用网站安全狗的Webshell AI 检测引擎对Tomcat的webapps目录进行扫描,可发现名为“/admin/login.jsp”的文件被识别为Webshell(黑客对这一Webshell的命名具有一定的迷惑性),如图所示。
经过进一步人工确认,可判断该jsp文件确为Webshell。并且它与admin.war这一文件的自动部署有关,如图所示。
那么这一war包是如何被上传到服务器的呢?继续对日志文件进行分析,在分析的时候重点关注“可能为文件上传功能的接口”。可以初步判断,黑客曾在使用该Webshell之前使用ZIP上传和ZIP解压功能,如图所示。
找到服务器上被文件解压接口调用的test5.zip文件,对之进行分析可以发现admin.war所处的路径是“test5.zip……”。因而,该ZIP文件是黑客精心构造的恶意文件,它将使得该war包的解压路径不再是预设的“/uploads/1”目录,而是Tomcat的“webapps”目录,如图所示。
注:本文的恶意zip文件的生成方式
(1)执行以下python脚本,生成test5.zip:
import zipfile
if __name__ == "__main__":
try:
binary = b'<script>alert("helloworld")</script>'
zipFile = zipfile.ZipFile("test5.zip", "a", zipfile.ZIP_DEFLATED)
info = zipfile.ZipInfo("test5.zip")
zipFile.writestr("../../../safedog.html", binary)
zipFile.close()
except IOError as e:
raise e
(2)将包含有Webshell的war包拖拽到“test5.zip”,如图所示。
二、代码审计
经过前面的入侵溯源分析可以初步断定,这次攻击与该CMS的“ZIP解压接口”(GET /cmscp/core/web_file_2/unzip.do?ids={ids}&parentId={parentId})密切相关。该接口对应了WebFileUploadsController.java的unzip方法,如图所示。
对unzip方法进行跟进,发现它的具体实现在WebFileControllerAbstractor.java中。可以发现,在对zip文件进行解压的时候,调用了AntZipUtil类的unzip方法,如图所示。
对AntZipUtil类的unzip方法进行跟进,可发现该方法未对ZIP压缩包里的文件名进行参数校验,就进行文件的写入。这样的代码写法会引发目录穿越漏洞,如图所示。
目前,海青实验室已将该漏洞提交CNVD,并通知厂商进行修复。
三、总结
通过这则实例可以发现,解压功能的安全性可能对网站安全造成较大危害(以Spring Integration Zip开发组件为例,它也曾被爆出CVE-2018-1261这一“不安全解压漏洞”)。若网站的业务涉及了解压功能,建议更加重视安全开发的维度,除此以外安全狗也提供了相应的产品防御方案。
在安全开发方面,建议研发人员在实现解压算法时,从以下几个方面进行自查与限制:
(1)是否限制压缩包内文件的扩展名
例如:.war、.jsp、jspx、.jsp::$DATA(只影响Windows主机)
(2)是否限制压缩包内文件的实际解压路径
(3)是否限制压缩包内文件的总大小(以防压缩包炸弹引发的拒绝服务攻击)
(4)是否赋予Web应用目录合理的权限
此外,我们也建议用户选择可靠专业的安全产品,例如安装了安全狗产品的用户,一旦发生安全事件,将会自动收到系统发出的告警短信,以尽快介入处置,避免产生更大的损失。
在“安全狗产品防御”方面,建议用户使用“网站安全狗”和“云御”的网站后台防护以及服务器狗的文件目录守护功能,云御和网站安全狗的网页后台路径保护功能可以实现针对网站后台暴破行为的防护。
云御后台防护功能如图所示:
网站安全狗后台防护功能如图所示:
服务器文件夹目录守护功能: