【技术向】利用ShadowMove巧妙的隐蔽连接

发布者:星河Salaxy
发布于:2021-04-01 10:50

一.   ShadowMove简介


ShadowMove一种通过复制套接字劫持网络连接的技术,该方法允许恶意进程以静默方式滥用良性进程建立的TCP连接,发布于2020年USENIX大会上的一篇标题为《ShadowMove: A Stealthy Lateral Movement Strategy》的文章首次讨论了这一技术。ShadowMove不需要提权不需要新的连接不需要额外的身份验证以及不需要进程注入,这使它很难被现有的主机级和网络级防御机制发现。


二.   技术分析

图片

ShadowMove的基本思想是复用已建立的合法连接,从而在受感染的网络内横向移动。如上图所示,ShadowMove的工作分为三个主要步骤:首先,它复制合法客户端应用程序用来与服务器应用程序通信的套接字。其次,它使用复制的套接字在客户端和服务器之间的现有TCP会话中注入数据包。第三,服务器处理注入的数据包,并无意中保存和/或启动ShadowMove的新实例。通过以上步骤,攻击者会从客户端计算机秘密移动到服务器计算机。

这种技术利用了以下方法:AFD(辅助函数驱动程序)文件句柄被Windows API视为Socket句柄,因此可以使用WSADuplicateSocket()函数来复制它们。采用non-cooperative进程劫持Socket的一种常见模式,是从进程注入开始的,以便加载我们自己的逻辑来查找和复用目标Socket。但是在ShadowMove技术的帮助下,我们完全不需要注入任何东西,它只需要打开具有PROCESS_DUP_HANDLE权限的进程句柄。在这个句柄的帮助下,我们可以开始复制所有其他的文件句柄,直到找到名为\Device\Afd的文件句柄,然后使用getpeername()检查它是否属于与目标的连接。

三.   ShadowMove复现


 1. 实验环境

源主机:windows 10,IP:192.168.43.182

目标主机:ubuntu 18.04,IP:192.168.43.183

2. 实现过程

整个ShadowMove复现过程如下动图所示:

图片

1. 目标系统192.168.43.183中开启nc监听端口5000。

2. 在源系统192.168.43.182中,建立nc到192.168.43.183:5000的tcp连接。

3. 源系统上运行Project1.exe,参数是nc.exe的PID和目标系统的IP。Project1.exe枚举nc.exe在源系统上运行,找到一个连接到目标系统的套接字,复制它并从shadowmove和重用的套接字写入hello然后在目标系统上接收。

4. 目标系统将从目标到shadowmove的hello写回同一个套接字,该套接字由接收Project1.exe文件在源系统上。

   可以看到Project1.exe从始至终都没有建立TCP连接,而是通过nc.exe建立的TCP连接进行通信的。


四.   总结

Shadowmove理论上只能应用于缺乏充分源信息完整性检查的明文传输的协议,如Telnet、ftp,劫持连接后我们通常能直接掠过身份认证的过程。SSL这类能够执行充分源信息完整性检查的加密传输协议不受Shadowmove的影响。

这种套接字复制技术可用于拦截和窃取应用程序中的敏感数据,可以注入恶意数据以对客户端计算机发起网络钓鱼攻击。Shadowmove由于利用的是现有的良性网络连接,并且不需要任何提升的特权、创建新的连接、额外的身份验证或进程注入。因此,它能够很容易逃避主机和网络级别防御机制的检测。如果想要完全解决该攻击,将需要重新设计Windows中句柄的访问控制机制。这也意味着像ShadowMove这样的技术将在可预见的将来继续帮助Windows上的攻击者。


五.   参考链接

https://www.usenix.org/system/files/sec20summer_niakanlahiji_prepub.pdf

https://www.freebuf.com/articles/web/261429.html



声明:该文观点仅代表作者本人,转载请注明来自看雪