发布于周五 15:304天前 ## 概述 近日,我在浏览网络上的威胁情报信息时,无意中发现不少APT组织利用Remcos商业木马作为远程控制程序来窃取数据。因此,笔者尝试了解并利用Remcos商业木马。在模拟使用过程中,我发现这个商业木马确实很好用,目前正在维护更新中。难怪它受到许多APT组织的青睐。 基于“既然Remcos商业木马受到众多APT组织的青睐,网络中必然存在更多的Remcos商业木马的使用案例,因此围绕Remcos商业木马进行攻防技术的研究绝对是有意义的”。笔者从以下几个角度对Remcos商业木马进行了分析: - 梳理Remcos商业木马历史版本的升级迭代,发现每次大版本升级都会伴随着木马通信模型的升级和优化; - 对Remcos商业木马最新版本的通信模型进行梳理和分析; - 从防御者的角度分析了Remcos商业木马的配置文件提取、通信包解密等核心技术点,并对Remcos商业木马的加密通信识别提出了思考; - 为了更好的辅助分析Remcos商业木马的命令通信模型,模拟构建了Remcos商业木马的控制程序,可以重现Remcos商业木马的通信模型,也可以重现单个命令号的具体响应行为; 相关Remcos商业木马用法如下: ## Remcos历史版本通信模型 为了更好地了解Remcos远程控制的历史通信模型,笔者查阅了大量资料,并从以下几个角度进行了尝试: - 搜索网络上可用程序的历史版本:基本上没有找到可用的历史版本,并且github上发布的一些程序无法运行。感觉像是一个钓鱼木马(未实际验证)。 - 查看网上关于Remcos木马的分析报告:对网络通信模型的分析很少,只能三言两语拼凑出来。 - 查看Remcos官网对Remcos遥控版的说明:有详细说明,但没有实际配置图片。 结合各类资料,笔者整理了Remcos远程控制的通信模型。排序情况如下: 相关截图如下: - v1.0版本更新说明 - v1.7版本Agent网络连接配置(图片来自网络) - v2.0.0版本更新说明 - RC4算法加密通讯连接(网络报道截图) - 无加密算法的明文通信模式下的通信数据包截图 - 使用加密算法的加密通信模式下的通信数据包截图 - v3.0.0版本更新说明 - v4.0.0版本Agent网络连接配置(官网图片) - v4.9.3版本Agent网络连接配置(官网免费版实际运行截图) ## Remcos-v4.9.3 通信模型回顾 尝试从官网下载最新的免费版Remcos远程控制程序,深入研究其通信模型,发现该版本支持两种通信模型: - TLS1.3通信协议:使用TLS协议对数据进行加密和传输; - 套接字连接:使用TCP协议以明文形式传输数据; ### TLS1.3通信协议模型 在最新免费版Remcos远程控制程序中配置TLS1.3通信协议模型时,需要手动填写密码**(注:通过查看TLS1.3通信协议原理,发现TLS1.3不需要手动填写密码,因此推测该密钥主要用于TLS1.3通信链路建立后的数据验证)**。 相关截图如下: ###socket套接字通信模型 在最新免费版Remcos远程控制程序中配置socket通信协议模型时,只需取消“安全连接(TLS1.3)”选项即可。 相关截图如下: 通过分析通信数据包格式,整理通信数据格式如下: ```` #数据包1 24 04 ff 00 #固定魔法值 0c 00 00 00 #后续有效数据大小 01 00 00 00 #有效数据指令号 30 7c 1e 1e 1f 7c 33 30 #有效数据-数据加载 #数据包2 24 04 ff 00 #固定魔法值 64 00 00 00 #后续有效数据大小 4c 00 00 00 #有效数据指令号 #有效的数据-数据负载 30 7c 1e 1e 1f 7c #分隔符“|.|” 43 00 3a 00 5c 00 55 00 73 00 65 00 72 00 73 00 5c 00 61 00 64 00 6d 00 69 00 6e 00 5c 00 44 00 65 00 73 00 6b 00 74 00 6f 00 70 00 5c 00 72 00 65 00 6d 00 63 00 6f 00 73 00 5f 00 62 00 2e 00 65 00 78 00 65 00 7c 1e 1e 1f 7c #分隔符“|.|” 36 33 7c 1e 1e 1f 7c #分隔符“|.|” 39 38 36 37 30 35 32 33 ```` 相关截图如下: ## 攻防技术对抗 为了更好地对Remcos远程控制程序进行攻防对抗和预警发现,笔者准备从取证分析的角度对该远程控制程序的Agent端木马进行分析: - 木马配置信息提取:由于该样本为商用遥控器,因此可以在网络上查询其背景、功能等信息。无需分析样品即可有效获得相关信息。唯一需要分析提取的就是木马外部链接地址信息。 - 木马通信解密尝试:通过解密木马通信,可以有效提取攻击者在攻击过程中执行的所有操作;由于该样本使用的是TLS1.3通信协议,因此笔者之前并没有尝试过基于TLS1.3通信协议来解密该木马。因此,目前还没有什么好的办法从取证取证的角度来解密通信,所以笔者在这里只能对TLS1.3做一个简单的对比介绍。 - 木马加密通信识别:由于该样本的通信数据暂时无法解密,因此只能从加密数据的角度检测识别该样本的通信行为。因此,作者从加密流量预警识别的角度提出了一种检测识别思路(仅供参考)。 ### RAT练习 通过对Remcos远程控制程序的使用分析,我们发现Remcos远程控制程序的整体操作确实非常人性化、流畅。经过7年官方的升级迭代,支持的指令也非常丰富;因为使用的是免费版本,Agent运行后会弹出一个小框,所以这个版本更多的是为了演示效果。 代理运行截图: 控制端运行截图如下: ###配置信息解密 通过分析发现,Agent样本运行后,会从“SETTINGS”资源段中读取并解密配置信息。配置信息包括:外链IP、外链端口等配置项。 配置信息解密过程如下: - 从“SETTINGS”资源段读取第一个字节。该字节是下一个RC4密钥的大小; - 根据RC4密钥的大小读取RC4密钥负载; - 读取后续的payload,并将其作为实际的加密配置信息数据; - 使用RC4密钥解密实际加密的配置信息数据; **注:在分析过程中,笔者查看了网络上的分析报告,发现不同报告中的不同Remcos版本均采用了相同的配置信息加密方式。因此,笔者推测Remcos的所有历史版本到最新版本都采用了统一的配置信息加密方式。 ** Remcos-v4.9.3远程控制程序Agent端木马代码截图如下: 加密配置信息数据: 解密配置信息数据: ####解密脚本工具 为了实现快速解密,可以基于CyberChef工具或者编写解密脚本来解密“SETTINGS”资源段: - CyberChef工具:需要手动提取RC4密钥和payload,然后解密; - 编写解密脚本:可实现自动解密; ```` 包主 导入( \'加密/rc4\' \'fmt\' \'io/ioutil\' ) 函数主() { file_in :=\'C:\Users\admin\Desktop\remcos_a_SETTINGS\' 文件数据,错误:=ioutil.ReadFile(file_in) 如果错误!=nil { fmt.Println(\'读取文件:时出错\', err) 返回 } key_len :=文件数据[0] 键:=文件数据[1 : key_len+1] 密文:=文件数据[key_len+1:] //创建解密器 解密,错误:=rc4.NewCipher(key) 如果错误!=nil { 恐慌(错误) } //解密密文 解密文本:=make([]byte, len(cipherText)) decipher.XORKeyStream(decryptedText, cipherText) ioutil.WriteFile(file_in+\'解密\',decryptedText,0664) } ```` ### 通信解密尝试? 笔者在分析该木马加密通信数据的过程中,发现其与常规TLS解密的几个不同点: - 该木马的通讯数据中没有证书数据; - 使用的密钥套件没有DH算法; 由于作者从来没有比较过TLS1.3和TLS1.2的区别,所以在通信解密阶段走了很多弯路但失败了。我使用了多种方法对通信数据进行解密,发现无法解密成功。 相关截图如下: #### TLS1.3 和TLS1.2 的区别 通过查询网络中《[SSL/TLS、对称加密和非对称加密和TLSv1.3](https://tinychen.com/20200602-encryption-intro/)》的信息,我们发现TLS1.3不仅对通信数据进行了加密,而且对握手阶段的数据也进行了加密。 相关对比截图如下: #### TLS1.3和TLS1.2之间的通信解密 尝试构建一个程序来模拟TLS1.3和TLS1.2通信,研究TLS1.3和TLS1.2的通信解密方法如下: - TLS1.2通信数据中,如果使用的密钥套件没有DH算法,可以使用CLIENT_RANDOM形式的私钥或Master-Secret进行解密; - TLS1.2通信数据中,如果使用的密钥套件具有DH算法,则只能使用CLIENT_RANDOM形式的Master-Secret进行解密; - TLS1.3通信数据中,虽然使用的密钥套件没有DH算法,但由于密钥握手阶段使用了DH算法,因此无法使用私钥进行解密; - TLS1.3通信数据中,由于握手阶段的数据也是加密的,因此无法使用CLIENT_RANDOM形式的Master-Secret进行解密; - TLS1.3通信数据中,需要使用CLIENT_HANDSHAKE_TRAFFIC_SECRET、SERVER_HANDSHAKE_TRAFFIC_SECRET、CLIENT_TRAFFIC_SECRET_0、SERVER_TRAFFIC_SECRET_0形式的Master-Secret进行解密; 《TLS1.2-私钥解密》相关截图: 《TLS1.2-CLIENT_RANDOM形式的Master-Secret解密》相关截图: “TLS1.3-CLIENT_HANDSHAKE_TRAFFIC_SECRET、SERVER_HANDSHAKE_TRAFFIC_SECRET、CLIENT_TRAFFIC_SECRET_0、SERVER_TRAFFIC_SECRET_0形式的Master-Secret解密”相关截图: ### 加密通讯识别? 由于该样本的通信数据暂时无法解密,因此只能从加密数据的角度检测识别该样本的通信行为。通过对比socket通信流程和TLS1.3通信流程,发现加密通信可以从以下几个角度来识别: - 加密通信采用TLS1.3通信协议; - 通信过程中,Agent端木马仅提供一种密钥套件供密钥套件选择:Cipher Suite: TLS_AES_128_GCM_SHA256 (0x1301) - 心跳包会在主会话中循环发起通信,心跳间隔默认为30秒; - 由于心跳数据包有固定范围长度(注:不确定是否是固定长度),因此加密后的数据长度也是固定范围长度; ####socket套接字通信过程 通过分析该样本的通信行为,作者发现Remcos-v4.9.3版本程序的socket通信过程中: - Remcos-v4.9.3版本程序会启动一个主会话来接收远程控制命令和心跳数据(默认心跳间隔为30秒);
创建帐户或登录后发表意见