一、工具介绍
Platypus 是一款支持多会话的交互式反向 Shell 管理器。在实际的渗透测试中,为了解决 Netcat/Socat 等工具在文件传输、多会话管理方面的不足,该工具在多会话管理的基础上增加了在渗透测试中能更好发挥作用的功能(如:交互式 Shell、文件操作、隧道等),并且使用 TLS/SSL 协议进行通信,它可以利用证书和密钥对通信进行加密,确保数据传输的隐蔽性。
二、工具原理分析
Platypus工具包括两种类型的监听器:TCP监听器和Termite监听器。TCP监听器使用nc
shell,默认监听端口为13338,而Termite监听器默认监听端口为13339,并通过HTTP协议下载并执行木马,后续木马使用TLS协议用于加密回连。相比TCP监听器,Termite监听器通过TLS协议加密通信,具有更高的安全性和隐蔽性。
终端通过HTTP协议与Termite监听器建立通信连接,并将木马文件下载到路径/termite/[ip:port]下。在木马成功上线后,与Platypus服务器上的Termite监听器建立TLS连接,按固定格式依次执行一系列命令,收集终端的系统信息、用户信息、Python版本、网络接口等数据。信息收集完毕也意味着木马上线完成,攻击者如需执行进一步的操作,系统将转为交互式shell模式进行命令执行。流程见下图。
图 1工具原理图
在木马上线时,EstablishPTY 方法用于建立交互式 Shell,如图 2 所示。该方法通过 Python 启动交互式 Shell,并禁用历史命令记录,从而降低取证风险。确保攻击者能够在受害者系统上顺畅地执行命令,同时提升攻击的隐蔽性和可用性。
图 2 EstablishPTY方法
在使用 TCP 监听器时,可以观察到每次命令执行时,Platypus 服务器会按照固定格式发送命令:echo + 8 字节随机字符串(tokenA) + ; + 默认命令 + ; + echo + 8 字节随机字符串(tokenB)。终端接收到 Platypus 服务器发送的命令后,会提取 tokenA 和 tokenB,然后执行命令,并将命令执行结果以固定格式返回:tokenA + 命令执行结果 + tokenB。命令执行的回显可以通过唯一标识符(tokenA 和 tokenB)进行区分。
图 3 命令执行结果
通过观察TCP模式的通信数据可以辅助分析TLS模式下的行为特征:TCP明文流量中交互式shell发送的命令是逐字节发送的,且每次发送单字节内容后,服务端会返回同样的内容,依次交替直到完成一个命令。
图 4 明文流量分析
使用TLS协议加密后,流量中的明文命令和结果被转换为加密数据。虽然需要解密才能还原内容,但这种特殊的命令执行方式在加密后的数据包中也能发现对应的长度变化和模式。从下图可以看到请求和响应的数据包长度为68字节时,对应TCP模式下Platypus服务器逐字节下发命令的过程,后续267和355字节的返回包对应命令执行并返回相应结果。
图 5 加密流量分析
三、工具检测
我们通过行为分析的检测方法,实现了对Platypus C2工具TLS通信的有效检测。
图6:Platypus检出结果
四、总结
利用Platypus工具的木马进行C&C通信,攻击者可以利用TLS将通信内容加密从而规避传统明文流量设备的检测,但是基于人工智能、流行为特征检测的加密威胁智能检测系统能够检测此类加密通信行为。如今,越来越多的攻击者采用加密通信的C2工具,以提升攻击的隐蔽性。观成科技安全研究团队持续追踪这些C2工具的最新动态,积极研究和更新针对加密流量的检测技术。