在本文中,我们对一个易受攻击的系统进行了渗透测试,并演示了如何使用任何人都可以使用的 Log4j 开源漏洞获取远程 shell。
这个标记为 CVE-2021-44228 的严重漏洞影响了大量客户,因为 Apache Log4j 组件广泛用于商业和开源软件中。此外,勒索软件攻击者正在将 Log4j 漏洞利用作为武器,以扩大其对全球更多受害者的影响。
我们的演示是为了教育目的而提供给更多技术人员的,目的是让人们更多地了解这个漏洞是如何工作的。
Raxis 认为,更好地了解漏洞利用的构成是用户学习如何应对互联网上日益增长的威胁的最佳方式。
Apache Log4j 漏洞 CVE-2021-44228 ( https://nvd.nist.gov/vuln/detail/CVE-2021-44228 ) 影响大量系统,攻击者目前正在利用此漏洞进行联网世界各地的系统。
为了演示这种攻击的解剖结构,Raxis 提供了该漏洞利用的分步演示。在我们的演示中,我们对用于受害服务器的网络环境进行了假设,这将允许这种攻击发生。
当然有很多方法可以防止这种攻击得逞,例如使用更安全的防火墙配置或其他高级网络安全设备,但是,为了演示这种攻击,我们选择了一种常见的“默认”安全配置。
首先,我们的受害服务器是 Tomcat 8 Web 服务器,它使用易受攻击的 Apache Log4j 版本,并在 docker 容器中进行配置和安装。
docker 容器允许我们为受害服务器演示一个独立的环境,该环境与我们的测试环境隔离。我们的 Tomcat 服务器托管了一个可从https://github.com/cyberxml/log4j-poc获得的示例网站,并配置为为易受攻击的 Web 服务器公开端口 8080。
除了 8080 之外,此 docker 容器没有其他入站端口被公开。docker 容器确实允许出站流量,类似于许多服务器网络的默认配置。
请注意,这个特定的 GitHub 存储库还具有 Log4j 攻击代码和有效负载的内置版本,但是,我们在示例中禁用了它,以便提供攻击者看到的屏幕视图。我们只使用 Tomcat 8 Web 服务器部分,如下面的屏幕截图所示。
图 1:受害者 Tomcat 8 演示 Web 服务器运行易受 Log4j 漏洞利用的代码
接下来,我们需要设置攻击者的工作站。使用来自https://github.com/kozmer/log4j-shell-poc 的漏洞利用代码, Raxis 配置了三个终端会话,称为 Netcat Listener、Python Web Server 和 Exploit,如下所示。
Netcat Listener 会话,如图 2 所示,是一个运行在端口 9001 上的 Netcat 侦听器。该会话用于捕获将通过漏洞从受害服务器传递给我们的 shell。
图 2:攻击者在 9001 端口上的 Netcat 侦听器
图 3 中的 Python Web Server 会话是在端口 80 上运行的 Python Web 服务器,用于将有效负载分发到受害服务器。
图 3:攻击者的 Python Web 服务器分发负载
Exploit 会话,如图 4 所示,是概念验证 Log4j 漏洞利用代码,在端口 1389 上运行,创建了一个武器化的 LDAP 服务器。
此代码将重定向受害服务器以下载并执行从上面运行在端口 80 上的 Python Web 服务器获得的 Java 类。
Java 类被配置为生成一个到端口 9001 的 shell,这是图 2 中的 Netcat 侦听器。
图 4:攻击者的 Log4J 漏洞利用代码
现在代码已经上演,是时候执行我们的攻击了。我们将使用 Chrome 网络浏览器连接到受害者网络服务器。
我们的攻击字符串(如图 5 所示)利用 JNDI 对在端口 1389 上运行的攻击者的 Exploit 会话进行 LDAP 查询。
图 5:受害者的网站和攻击字符串
攻击字符串利用 Log4j 中的漏洞并请求对攻击者的武器化 LDAP 服务器执行查找。
为此,受害者服务器在端口 1389 上向攻击者系统发出出站请求。图 6 中的 Exploit 会话表明接收到入站 LDAP 连接并重定向到攻击者的 Python Web 服务器。
图 6:攻击者利用会话指示入站连接和重定向
Exploit 会话向我们的 Python Web 服务器发送了一个重定向,该服务器正在提供一个武器化的 Java 类,其中包含打开 shell 的代码。
这个 Java 类实际上是从我们的 Exploit 会话中配置的,并且仅由 Python Web 服务器在端口 80 上提供服务。连接日志如下图 7 所示。
图 7:攻击者的 Python Web 服务器发送 Java Shell
我们攻击的最后一步是 Raxis 获得控制受害者服务器的 shell。发送给我们受害者的 Java 类包含打开远程 shell 到攻击者的 netcat 会话的代码,如图 8 所示。
攻击者现在可以完全控制 Tomcat 8 服务器,尽管仅限于我们在此测试场景中配置的 docker 会话。
图 8:攻击者对 Shell 控制受害者服务器的访问
正如我们所展示的,Log4j 漏洞是一个多步骤过程,一旦您拥有正确的部分,就可以执行该过程。 Raxis 看到此代码被实施到勒索软件攻击机器人中,这些机器人正在互联网上搜索要利用的系统。
这无疑是一个需要尽快解决的关键问题,因为攻击者到达暴露的系统只是时间问题。
也在这里发布