JexBoss – JBoss 验证与利用工具
JexBoss是一款用于测试和利用Java应用和平台(包括JBoss AS/WildFly Web服务器框架)中漏洞的工具。JexBoss使用标准Python库编写,通过命令行界面运行和操作。该工具于2014年11月在GitHub上作为开源工具发布,其作者直到2017年3月一直在定期添加新功能和漏洞利用方式。
早期版本的JexBoss专门针对JBoss AS 3-6版本。此后,JexBoss已发展成一个可用于测试和利用基于超文本传输协议(HTTP)的通用Java相关漏洞的框架。
除了测试JBoss AS的弱默认配置外,JexBoss还包括针对多种Java框架中已知漏洞的利用方式,包括某些版本的Java Server Faces、Java Seam Framework、基于HTTP的远程方法调用、Jenkins CLI、远程Java管理扩展(JMX)和Apache Struts。
JexBoss还通过允许攻击者专门针对统一资源定位符(URL)和HTTP POST参数,为攻击者提供了针对通用Java应用和Servlet中反序列化漏洞的能力。此功能可以帮助攻击者针对其目标定制攻击,并利用Java反序列化的零日漏洞。
JexBoss的最终目标是为攻击者提供一种在目标主机上执行任意操作系统命令的手段。这是通过以下机制之一实现的:
- 安装Webshell – 允许攻击者向特定的HTTP URL提交操作系统命令,并在HTTP响应中接收执行命令的输出。
- 盲命令注入 – 允许攻击者将操作系统命令作为针对特定漏洞的打包利用的一部分提交。命令将被执行,但攻击者看不到输出。
- 建立反向shell – Webshell和盲命令注入都可以促进执行任意操作系统命令的第三种方法:建立反向shell。在建立反向shell时,目标主机与攻击者选择的主机和端口发起传输控制协议(TCP)连接,之后命令和命令输出通过该新连接传输。
JBoss AS/WildFly
JBoss AS/WildFly是一个基于Java的Web服务器框架,简化了Servlet的安装、部署和维护过程。JBoss AS于2002年作为JBoss AS版本3发布,并持续开发至2012年,最终发布了JBoss AS 7.1.1。随后,JBoss AS 7.1.1在社区项目WildFly下重新命名,该项目至今仍在持续开发和维护。遗留版本的JBoss AS(特别是版本6及更早版本)存在未修补的安全漏洞,因为它们不再维护。2018年8月,NCCIC通过Shodan搜索引擎的搜索显示,至少有28,060台Web服务器运行着过时且不受支持的JBoss AS软件。
JexBoss的使用报告
2016年3月,Cisco Talos Intelligence Group调查了一场针对医疗保健行业的广泛勒索软件活动,称为SamSam。Talos发现了许多攻击者使用JexBoss通过存在漏洞的JBoss AS版本初始访问目标网络的情况。随后攻击者横向移动以到达预定的勒索软件目标。这次活动是首次被广泛报道的JexBoss使用案例。
2017年4月的Symantec互联网安全威胁报告记录了一起由伊朗的Chafer间谍组织针对土耳其目标的入侵。在那次入侵中,Chafer使用JexBoss识别并利用了存在漏洞的JBoss AS版本,然后横向移动到受害者网络中的其他计算机上。
这两个实例说明了威胁行为者使用JexBoss来初始访问面向互联网的存在漏洞的JBoss AS版本。威胁行为者利用其初始访问权限更深入地渗透到受害者的网络中。这些利用的成功凸显了受害者在Web服务器维护实践上的薄弱(即未能升级到更安全的JBoss AS/Wildfly版本)。
虽然威胁行为者更常使用,但网络安全狩猎团队也使用JexBoss来评估Java Web平台的安全性。当狩猎团队发现存在漏洞的Web服务器时,他们可以利用JexBoss横向移动到目标网络上的其他系统,从而提供更全面的安全评估。
执行JexBoss
JexBoss可以从大多数标准操作系统中运行。为了展示JexBoss的界面并分析该工具的行为,NCCIC在安全的测试环境中,从Ubuntu Linux系统对存在漏洞的JBoss AS 6.1.0版本运行了JexBoss。
当没有任何命令行选项运行时,JexBoss的默认行为是显示一个横幅,然后是一组命令行选项示例,演示运行JexBoss的不同方式。之后JexBoss退出,不执行任何进一步操作。
攻击者可以向JexBoss提供命令行选项以改变工具的默认行为。命令行选项(此后称为选项)会修改命令的操作。命令的程序决定选项的效果。选项跟在命令行上的命令名称之后,用空格分隔。某些选项需要一个值来指定可变参数。
JexBoss模式
攻击者可以在以下三种“模式”之一中运行JexBoss:
- 独立模式 – 这是JexBoss的默认模式,用于扫描单个目标;
- 自动扫描模式 – 此模式用于识别和扫描网络中所有可能的目标;
- 文件扫描模式 – 此模式用于扫描文件中指定的目标。
每次扫描都涉及攻击者的计算机连接到目标计算机,以探测JexBoss有能力利用的漏洞。扫描完成后,除非给予额外的选项或指令,否则JexBoss不会自动尝试利用目标。
独立模式
--mode standalone 选项指示JexBoss以独立模式运行,针对单个主机。独立模式是默认模式,因此可以从命令行中省略此选项。
独立模式需要 --host HOST 或 -u HOST 选项,其值指定要扫描的目标。(--host HOST 和 -u HOST 选项行为相同。)HOST值指示目标的网络协议、主机(IP地址或域名)和端口。在图1所示的示例中,JexBoss将使用HTTP和TCP端口8080扫描IP地址为127.0.0.1的目标主机。
注意:在本报告其余部分,如果两个选项行为相同,将在它们之间用斜杠(“/”)表示。例如,
-host HOST和-u HOST选项将显示为-host/-u HOST。
图1:JexBoss截图 – 在命令行中指定目标
注意:本报告中所有JexBoss截图均显示JexBoss处于独立模式。
自动扫描模式
-mode auto-scan 选项指示JexBoss使用自动扫描模式来识别和扫描网络块中的多个主机。此模式利用以下附加选项:
-network NETWORK,-ports PORTS,和-results LOGFILENAME。
NETWORK必须是采用无类域间路由表示法的IP地址块。如果省略此选项,JexBoss将扫描攻击计算机主网络接口的/16网络块。PORTS必须是TCP端口的逗号分隔列表。如果省略此选项,JexBoss将为每个IP地址扫描标准HTTP端口80和8080。
JexBoss将通过尝试连接到网络块内的每个IP地址的每个目标TCP端口来扫描目标IP地址块。扫描结果写入LOGFILENAME文件,如果省略 -results 选项,则写入jexboss_auto_scan_results.log。
文件扫描模式
-mode file-scan 选项指示JexBoss使用文件扫描模式来扫描文件中指定的多个主机。此模式利用两个附加选项:
-file FILENAME,和-out LOGFILENAME。
-file 选项是文件扫描模式所必需的。FILENAME文件的内容必须是目标列表,每行一个,格式与 -host/-u HOST 选项所需的格式相同。JexBoss将尝试扫描FILENAME文件中指定的每个目标。扫描结果写入LOGFILENAME文件,如果省略 -out 选项,则写入jexboss_file_scan_results.log。
JexBoss漏洞扫描
JexBoss扫描目标以测试它们是否容易受到多个已知漏洞利用(例如,弱身份验证、Java对象反序列化缺陷)的影响。然后JexBoss显示测试结果报告,指示测试的组件是否暴露、存在漏洞或已修复(“OK”表示已修复的组件)。
图2所示的结果表明JBoss管理控制台已暴露(即可被攻击者访问),并且JBoss AS的jmx控制台和JMXInvokerServlet组件存在可利用的漏洞。结果表明其他应用程序和框架对JexBoss的漏洞利用是安全的。
图2:JexBoss截图 – 漏洞测试结果
注意:在管理得当的JBoss AS部署中,管理控制台不应能从互联网访问;它应仅能从受信任的内部主机访问。然而,即使管理控制台只能从受信任的内部主机访问,有预谋的攻击者也可能能够访问这些内部主机,并从那里攻击JBoss AS部署。
JexBoss漏洞利用
扫描后,JexBoss可能会根据选择的模式和选项对已识别的漏洞进行利用。
在独立模式下运行时,JexBoss默认会显示如图2所示的扫描结果。然后JexBoss将进入交互模式,询问攻击者的输入。如图3所示,JexBoss将询问攻击者是否应尝试运行对特定漏洞的自动利用。
图3:JexBoss截图 – JexBoss请求许可以继续
如果攻击者回答是,JexBoss将尝试利用管理控制台中的漏洞。
图4说明了JexBoss以管理控制台组件为目标,以确定JBoss AS平台是否配置了默认的管理员用户名和密码——这在管理不当的JBoss AS部署中会出现。在图4所示的漏洞利用尝试中,JexBoss正尝试使用默认凭据登录JBoss AS。或者,攻击者可以通过使用 -J/--jboss-login 选项来指定JexBoss应尝试用于登录的凭据。
图4:JexBoss截图 – 对管理控制台的交互式利用 图4表明了漏洞利用尝试几个阶段的成功。这些阶段如下:
- 投递:JexBoss尝试使用默认凭据登录;此尝试被发送到JBoss AS管理控制台。 此尝试的成功由以下短语表示:“尝试使用默认凭据执行身份验证”。
- 利用:JexBoss使用默认凭据成功登录。 此尝试的成功由以下短语表示:“成功登录!”
- 安装:JexBoss成功部署了webshell代码。 此尝试的成功由以下短语表示:“成功部署代码!”
- 命令与控制:JexBoss成功执行了操作系统命令。
此尝试的成功由
uname -a命令的输出表明,该输出以“Linux 2f8c3354a075 4.13.0-38”开头。 - 目标行动:JexBoss成功尝试了此阶段,这通过出现Shell>提示符可以证明。 此尝试的成功由出现Shell>提示符表明。攻击者可以使用交互式的Shell>提示符访问JexBoss webshell来执行操作系统命令并查看命令输出。
自动利用
JexBoss的自动扫描和文件扫描模式默认仅执行漏洞扫描并报告结果。要在使用这些模式时利用漏洞,攻击者必须指定 -A/--auto-exploit 选项。-A/--auto-exploit 选项也可以用于独立模式,这将移除询问是否运行自动利用的是/否问题,以及通过Shell>提示符访问webshell的权限。
Webshell安装 JexBoss可以使用多种不同的漏洞利用方式来尝试安装JexBoss webshell(例如,利用JMX控制台)。一旦安装,webshell授予攻击者通过HTTP或HTTPS访问webshell URL来远程执行操作系统命令的能力。webshell还使攻击者能够在响应中接收命令输出。有关JexBoss webshell功能的描述,请参见Webshell分析部分。
JexBoss将尝试利用存在漏洞的组件,通过HTTP会话上传webshell代码,并将webshell安装到Web服务器中。如果这不成功——并且取决于漏洞——JexBoss可能会尝试利用该漏洞诱导Web服务器从互联网下载并安装webshell。在独立模式下使用时,JexBoss默认允许攻击者通过交互式Shell>提示符使用webshell,如图4所示。
盲命令注入 在webshell安装失败或不可能的情况下,例如应用程序Java反序列化漏洞,JexBoss将尝试执行盲命令注入。盲命令注入将攻击者创建的包含操作系统命令的有效负载发送到存在漏洞的组件。存在漏洞的组件不安全地处理有效负载并执行嵌入的操作系统命令。嵌入的操作系统命令执行后,此执行的输出不会返回给攻击者;因此,命令注入是“盲目的”。攻击者只能通过观察命令执行的效果来确定命令是否成功执行。
JexBoss自动化了有效负载的创建和投递。当尝试盲命令注入时,JexBoss打包在有效负载中的默认操作系统命令是一个特定于Linux的命令,用于创建反向shell(参见反向shell部分)。
或者,攻击者可以使用 --cmd CMD 选项指定要执行的不同操作系统命令。如图5所示,CMD值是备用的操作系统命令。
注意:在自动扫描和文件扫描模式中使用
--cmd选项需要使用-A/--auto-exploit选项,否则--cmd选项将被忽略。
图5:使用 --cmd 选项指定注入的操作系统命令
除了针对图2中所示的存在漏洞的基于Java的应用程序和框架的漏洞利用外,JexBoss还支持通过盲命令注入攻击利用任意的Java反序列化漏洞。为此,攻击者使用 -host/-u 选项提供URL,使用 -H/--post-parameter PARAMETER 选项指定将注入有效负载的应用程序参数,以及 -j/--app-unserialize 选项。
反向Shell 反向shell是攻击者常用的一种技术,通过目标系统内置的命令行程序以交互方式(使用键盘输入和文本输出)执行命令。JexBoss通过目标向攻击者选择的IP地址和端口发起的TCP连接,中继命令行程序的输入和输出——通常是Linux目标上的Bash命令语言解释器和Windows目标上的cmd.exe。
JexBoss webshell包含建立反向shell的能力。如果攻击者向webshell发出 jexremote=IP:PORT 命令,webshell将使用Java的Socket类启动到指定IP地址和TCP端口的连接,并通过该连接中继操作系统命令以及命令行程序的输出。jexremote 命令的示例如图4所示。
建立反向shell也可以使用盲命令注入来执行。JexBoss打包在漏洞利用有效负载中以创建反向shell的默认操作系统命令是:
|
|
(其中IP和PORT由攻击者指定)。此命令将Bash shell的标准输入和输出通过受害Linux内核内置的TCP设备进行重定向。对于盲命令注入,JexBoss从 -r/--reverse-host RHOST:RPORT 选项中提供的值或通过提示攻击者输入这些值来获取IP和PORT值,如图6所示。
图6:JexBoss截图 – JexBoss获取反向shell的IP和PORT 为了建立反向shell的TCP连接,攻击者指定的IP地址所在的计算机必须在指定的TCP端口上监听连接。监听这些连接的程序必须能够接受用户命令行输入并显示文本输出。
用于监听反向shell连接的常用工具是Netcat。图7显示了Netcat在TCP端口4444上监听传入连接。反向shell建立后,Netcat显示shell提示符。然后攻击者使用反向shell显示 /etc/passwd 文件以获取目标上的用户帐户列表。
图7:JexBoss截图 - 使用Netcat监听器的反向shell 攻击者通常使用比Netcat更复杂的工具来监听反向shell连接并控制反向shell,例如Meterpreter。
可观察的网络行为
安全分析师可以通过被动的网络流量监控来观察JexBoss的行为。可观察的内容取决于组织网络流量监控传感器的位置。攻击者和目标之间的通信可以在任何在线点观察到——无论是在攻击者的本地网络还是目标的本地网络上。图8显示了一个组织的典型网络传感器架构,包括一个监控组织主要入口和出口点流量的被动传感器。
图8:典型组织的网络传感器位置 版本检查 在其任何扫描模式中首次执行时,JexBoss将尝试通过访问以下URL从互联网检索其版本信息: hxxp[:]//joaomatosf.com/rnp/releases.txt
注意:所有URL均已修改,以防止无意访问。
如果正在使用的JexBoss版本不是最新版本,攻击者将看到建议升级的消息。
某些版本的JexBoss webshell包含一个版本检查功能,可以确定正在使用的webshell是否是最新版本。目标计算机将从以下URL检索最新的可用webshell版本号: hxxp[:]//webshell.jexboss.net/jsp_version.txt。
如果安装的webshell不是最新的可用版本,一旦攻击者访问webshell,他们将看到一个包含建议升级webshell消息的HTTP响应。
注意:上述两种JexBoss版本检查对受影响的组织来说都是明显的。该组织将能够在其DNS查询中看到对joaomatosf.com或webshell.jexboss.net域的查找。这些URL也将在组织的HTTP流量中出现。当在组织的网络上发现这些痕迹时,表明存在JexBoss,这是一个潜在的安全风险,应该进行调查。
使用JexBoss的攻击者可以通过使用 -D/--disable-check-updates 选项来禁用这两个版本检查。
Webshell下载 如果JexBoss webshell安装失败,JexBoss可能会尝试诱导目标服务器从以下URL的互联网下载并安装JexBoss webshell: hxxp[:]//www.joaomatosf.com/rnp/jexws4.war
如果在组织的DNS和HTTP日志中存在hxxp[:]//www.joaomatosf.com/rnp/jexws4.war域或URL,这表明JexBoss webshell可能存在于该组织的网络中。任何识别到此活动的组织都应进行调查。
注意:下载的webshell文件名可能会更改。hxxp[:]//www.joaomatosf.com上的公共webshell文件显示了多个jexws*.war文件,所有这些文件内容基本相同,但MD5校验和不同。使用不同的MD5校验和允许旧版本的JexBoss诱导Web服务器下载最新版本的webshell。
攻击通信参数 攻击者和目标之间的通信通过HTTP或HTTPS进行,具体取决于目标Web服务器的配置。HTTPS通信——通常在TCP端口443或8443上——是加密的。使用反向代理或某些Web应用防火墙配置的组织可能能够观察到边界设备与Web服务器之间的解密网络流量。否则,通过HTTPS攻击的迹象将仅在网络设备日志或Web服务器本身上可观察到。
注意:对于本报告的其余部分,除非另有说明,否则假设网络流量是未加密的HTTP,通常在端口80或8080上。
当JexBoss启动时,它会从表1的列表中随机选择一个User-Agent标头值,用于所有对目标Web服务器的HTTP请求。表1中列出的User-Agent值是合法的,有助于JexBoss流量与合法的HTTP流量混合。但是,它们也已过时,这可能有助于组织将它们与正常的HTTP流量区分开来。
表1:JexBoss User-Agent 标头值选择
| HTTP User-Agent 标头值选择 |
|---|
| Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:38.0) Gecko/20100101 Firefox/38.0 |
| Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0 |
| Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36 |
| Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/601.3.9 (KHTML, like Gecko) Version/9.0.2 Safari/601.3.9 |
| Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.155 Safari/537.36 |
| Mozilla/5.0 (Windows NT 5.1; rv:40.0) Gecko/20100101 Firefox/40.0 |
| Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729) |
| Mozilla/5.0 (compatible; MSIE 6.0; Windows NT 5.1) |
| Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727) |
| Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0 |
| Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36 |
| Opera/9.80 (Windows NT 6.2; Win64; x64) Presto/2.12.388 Version/12.17 |
| Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0 |
| Mozilla/5.0 (Windows NT 6.1; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0 |
由于JexBoss是用Python编写的,老练的攻击者可以轻松更改发送到目标Web服务器的某些静态数据——包括User-Agent标头值选择和漏洞利用本身的部分内容——这将使基于签名的检测失效。
攻击阶段
NCCIC评估JexBoss在网络杀伤链框架的所有七个步骤中运行。由于漏洞的性质及其利用方式,JexBoss合并了其中一些步骤,形成了三个高级阶段:
- 第1阶段:侦察;
- 第2阶段:武器化、投递、利用和安装;
- 第3阶段:命令与控制(C2)和目标行动。
第1阶段:侦察 在第1阶段,JexBoss确定目标Web服务器的哪些组件(如果有)暴露且存在漏洞。JexBoss多次连接到目标Web服务器,并发出多个HTTP请求——使用GET和HEAD方法——来收集此信息(见图9)。
图9:典型的统一资源标识符探测 除了某些URL中对JexBoss的引用外,这些请求大多数看起来合法或良性,但有一个值得注意的例外,如图10所示。
图10:JexBoss特有的Apache Struts 2探测
图10所示的HTTP请求几乎完全匹配Vex Woo于2017年3月发布的Apache Struts 2漏洞利用。然而,JexBoss通过使用 #gift 和 #giftarray(而不是 #cmd 和 #cmds)以及使用 jexboss 作为命令来自定义此代码段的两部分,这独特地将该活动标识为与JexBoss相关。
注意:图10所示的HTTP请求试图利用Apache Struts 2漏洞;但是,在此阶段没有命令执行——JexBoss只是在尝试确定漏洞利用是否可能。
网络防御者可以部署入侵检测系统(IDS)签名——例如网络IDS和IPS签名部分中的那些——来检测JexBoss的初始侦察活动。然而,其中一些签名会在尝试利用时触发,而不仅仅是成功利用时,这限制了它们对防御者的价值。
第2阶段:武器化、投递、利用和安装 JexBoss根据被利用的漏洞以不同方式对漏洞利用进行武器化。例如,为了利用Apache Struts 2漏洞,JexBoss将漏洞利用和要运行的操作系统命令打包在Content-Type HTTP标头值中,该值将在HTTP GET请求中投递给目标Web服务器(见图10)。
JexBoss通过HTTP使用针对特定漏洞的URI和数据的GET或POST请求,将漏洞利用投递给目标Web服务器。
JexBoss使用的漏洞利用是特定于漏洞的。例如,对管理控制台的攻击通过简单地尝试使用用户名和密码登录来利用JBoss AS的弱配置。其他攻击尝试利用Java反序列化漏洞来安装JexBoss webshell或执行操作系统命令。
图11显示了一个武器化JexBoss webshell的示例,该webshell作为URI查询参数在HTTP HEAD请求中投递,利用了JMX控制台(JBoss AS的一个组件)中的漏洞。如果此漏洞利用成功,受害Web服务器将安装JexBoss webshell。
图11:URI查询参数中的JexBoss webshell示例
图12所示的网络数据包转储是一个JexBoss webshell被武器化为Java序列化对象的示例,该对象在HTTP POST请求中投递给JMX Invoker Servlet——JBoss AS的另一个组件。此示例(图11)中的序列化对象以字节 \xAC\xED 开头,位于字节位置0x01c4——即HTTP请求的第452个字节。
图12:打包在Java序列化对象中的JexBoss webshell示例 为了测试webshell的安装是否成功,JexBoss将向目标Web服务器提交一个针对以下URL之一的HTTP GET请求:
- hxxp[:]//victim/jexws4/jexws4.jsp,或
- hxxp[:]//victim/jexinv4/jexinv4.jsp。
图13中的数据包22指示了对成功webshell安装的测试。数据包24是对数据包22的HTTP响应,是一个HTTP 200 OK消息,表明webshell安装成功。响应中的HTTP 404 Not Found消息表明webshell安装失败。
图13:JexBoss webshell访问数据包列表
第3阶段:C2和目标行动
如果JexBoss成功在受害Web服务器上安装了JexBoss webshell,则该webshell将允许攻击者通过HTTP GET请求发出要执行的操作系统命令,如下所示:
hxxp[:]//victim/jexws4/jexws4.jsp?ppp=<url-encoded-OS-command>
例如,图14显示的数据包内容表明攻击者向webshell发出了 id 操作系统命令。在图14中,受害Web服务器在HTTP响应中提供了操作系统命令执行输出。
图14:JexBoss webshell命令HTTP内容 当JexBoss在独立模式下运行时,在成功安装webshell后,JexBoss将在初始利用Linux服务器时依次发出三个特定命令。这些命令列在表2中。
表2:JexBoss默认的初始Linux命令
| 命令 | 操作描述 |
|---|---|
| uname -a | 获取主机信息 |
| id | 确定命令将以其身份运行的用户 |
安全分析师可以在Web服务器日志中观察到这些命令的尝试执行,即使HTTP通信是通过TLS或SSL加密的。分析Web服务器日志中的这种活动是组织确认JexBoss存在的另一种方式。
对于通过盲命令注入利用的漏洞,没有安装步骤。JexBoss通过将操作系统命令直接打包在漏洞利用有效负载中并将有效负载投递给存在漏洞的组件来实现网络杀伤链的C2和目标行动步骤(即攻击阶段部分的第3阶段);因此,在盲命令注入中,第2阶段和第3阶段没有区别。
图15所示的部分数据包十六进制转储是C2步骤与盲命令注入的示例。在此示例中,JexBoss打包并投递了一个尝试建立反向shell的操作系统命令,如反向shell部分所述。
图15:包含反向shell操作系统命令的KexBoss数据包十六进制转储 虽然反向webshell可以帮助攻击者实现C2,但它也容易被检测到。组织的网络Web服务器通常不会向任意的互联网主机发起出站连接;因此,此类连接对网络防御者来说将是一个危险信号。在图16所示的网络捕获中,受害服务器已通过TCP端口4444建立了与攻击者系统的连接。
图16:JexBoss反向webshell建立数据包列表 异常的出站连接——如图16所示——对有经验的网络防御者来说会很显眼;网络防御者对这种异常行为的认知增加了攻击者被检测到的风险。许多组织选择过滤出站连接,这将阻止像图16所示的尝试。
攻击者可以通过使用 --cmd 选项来执行JexBoss命令,而无需webshell或反向webshell,如盲命令注入部分所述。聪明的攻击者可以发出命令来执行复杂任务并窃取数据。例如,攻击者可能创建一个脚本来收集数据并将其发送到受害网络上的另一个位置以供以后检索。
Webshell分析
如果JexBoss webshell安装在受害Web服务器上,JexBoss可以通过向适当的.jsp文件(例如,jexws4/jexws4.jsp)发出HTTP GET请求来访问webshell,使用可选的ppp查询参数,其值用作在受害Web服务器上执行的操作系统命令。
JexBoss webshell主要有三个版本:原始版本(2014年11月30日)、版本2(2016年4月23日)和版本4(当前版本)。每次创建后续的JexBoss版本时,新版本都可以被视为对先前版本的升级,并提供了额外的功能,如表3所述。
表3:按版本划分的JexBoss webshell功能
| Webshell 版本 | 功能 |
|---|---|
| 原始版本 (2014年11月30日) |
|
| 版本 2 (2016年4月23日) |
|
| 版本 4 (当前版本) |
|
JexBoss webshell版本2是GitHub上提供的最新版本,如版本检查部分所述。此版本检查使用一个User-Agent HTTP标头值,其中包含有关攻击者webshell访问的信息:host HTTP标头值和攻击者主机的IP地址。这种主机和IP信息的收集表明JexBoss的作者可能利用攻击者使用该工具来收集攻击IP和被利用服务器的列表。
joaomatosf[.]com上可用的最新webshell版本是版本4。在本报告发布时,NCCIC未能获取版本3进行分析。
总结
JBoss验证与利用工具(JexBoss)是一个开源工具,被网络安全狩猎团队(有时称为“红队”)和审计员用于进行授权的安全评估。威胁行为者恶意使用此工具来测试和利用JBoss应用程序服务器(JBoss AS)——现为WildFly——以及各种Java应用程序和平台中的漏洞。JexBoss自动化了网络攻击的所有阶段,使其成为威胁行为者网络武器库中强大且易于使用的武器。
本报告详细分析了JexBoss的功能,并提供了检测、响应、预防和缓解建议。
解决方案
NCCIC建议采用纵深防御方法来缓解JexBoss的风险。
最佳实践
防御JexBoss的最佳方法是确保服务器不易受到其使用的漏洞利用的攻击。JexBoss利用的漏洞也可能被其他工具利用。一旦组织修复了与JexBoss相关的漏洞,其服务器将更不容易受到利用相同漏洞的其他工具的攻击。
最佳实践包括:
- 保持操作系统、Web服务器和应用程序更新;
- 保护对管理控制台的访问;
- 使用具有有限能力的非特权帐户运行服务器;
- 审查服务器日志以识别成功入侵的迹象;
- 通过自动化漏洞扫描频繁测试组织系统和应用程序中的最新漏洞。
由于JBoss AS不再受供应商支持,使用JBoss AS的组织应将其现有的JBoss AS实例迁移到受支持的等效平台,例如WildFly或JBoss Enterprise Application Platform。由于JexBoss可用于利用其他各种基于Java的框架(例如Apache Struts、Java Server Faces、Jenkins),用户应保持这些框架更新,或者如果不需要,则将其移除。
检测策略
组织的安全运营团队可以使用多种方法来监控JexBoss漏洞利用的尝试和成功。NCCIC建议以下检测策略:
- 更新网络IDS和IPS签名。
- 分析行为指标。
- 分析服务器上的痕迹。
网络IDS和IPS签名 许多组织在商业设备或商品硬件的独立平台上部署Snort或Suricata IDS,并利用Snort、Emerging Threats和网络安全社区中的其他人编写的签名。表4和表5提供了由NCCIC和其他组织开发的签名。由外部组织创建的签名引用了相应的签名标识符。
NCCIC评估表4中的Snort规则为高置信度指标,表明存在潜在危险的JexBoss webshell网络行为。
表4:JexBoss webshell Snort 签名/规则
| # | JexBoss 行为 | 检测签名/规则 |
|---|---|---|
| 1 | 尝试使用ppp查询参数向JexBoss webshell发出命令 | alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS any (msg:"JexBoss webshell command ppp submission"; flow:established,to_server; content:".jsp?ppp="; http_uri; fast_pattern:only; classtype:trojan-activity; reference:url,github.com/joaomatosf/jexboss; sid:X; rev:1;) |
| 2 | 尝试使用X-JEX HTTP头字段向JexBoss webshell发出命令 | alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS any (msg:"JexBoss webshell command X-JEX submission"; flow:established,to_server; content:"X-JEX"; http_header; fast_pattern:only; classtype:trojan-activity; reference:url,github.com/joaomatosf/jexboss; sid:X; rev:1;) |
| 3 | 成功被利用的服务器尝试从互联网下载JexBoss webshell | alert tcp $HOME_NET any -> $EXTERNAL_NET any (msg:"JexBoss webshell download"; flow:established,to_server; content:"rnp/jexws4.war"; http_uri; fast_pattern:only; classtype:trojan-activity; reference:url,github.com/joaomatosf/jexboss; sid:X; rev:1;) |
| 4 | 对JexBoss webshell版本检查和备用下载位置的CDNS查询 | `alert udp $HOME_NET any -> any 53 (msg:“DNS query for JexBoss alternate domain”; flow:to_server; byte_test:1,!&,0xF8,2; content:" |
当针对真实世界网络流量运行时,NCCIC针对表4中的规则1生成了警报。这些警报的URI模式是 /jexinv4/jexinv4.jsp?ppp=<cmd>,其中 <cmd> 是一个长的Linux命令,试图诱导服务器从互联网位置下载并执行Linux webshell脚本。这种访问JexBoss webshell的尝试是来自同一源IP到同一目标IP的多个不相关HTTP请求之一,可能表明扫描活动以确定