1. 项目概述一次对典型远控木马通信特征的深度剖析最近在整理安全研究笔记翻到了几年前做恶意软件流量分析时的一个老项目。当时为了搞清楚几种主流RAT远程访问木马在网络层面的行为差异我花了大量时间在隔离环境里“养蛊”逐一分析了Gh0st、DarkComet、XtremeRAT、QuasarRAT、GreameRAT和njRAT这六个家伙的通信特征。今天把这些沉淀下来的观察和记录整理出来一方面是对自己学习过程的复盘另一方面也希望能给刚入行安全分析、威胁狩猎或者对恶意软件流量特征感兴趣的朋友提供一个清晰的参考地图。RAT这玩意儿说白了就是一个被植入受害者机器的后门程序攻击者通过它实现远程控制。从防御者的视角看识别网络流量中是否存在RAT通信是发现内网失陷主机的关键手段之一。但不同的RAT家族其通信协议、加密方式、心跳包特征往往大相径庭死记硬背特征库效率太低理解其背后的设计逻辑和通信模式才是王道。这次分析的六个RAT在历史上都曾“叱咤风云”有的至今仍有变种活跃。通过抓包、逆向和动态调试我们不仅能识别它们更能理解攻击者可能采用的隐匿技术和我们的检测思路该如何应对。2. 分析环境搭建与核心方法工欲善其事必先利其器。分析恶意软件通信特征一个安全、隔离的实验环境是首要前提。盲目在真实网络或主机上运行这些样本无异于引狼入室。2.1 实验室网络拓扑设计我采用的是经典的“孤岛”分析环境。核心是一台运行VMware或VirtualBox的物理宿主机。在宿主机上我创建了两个关键的虚拟机受害机Victim Machine通常安装Windows 7或Windows 10系统并保持系统补丁处于较旧状态以模拟一个常见的攻击目标。我会提前安装好Process Monitor、ProcExp、TCPView等动态分析工具以及Wireshark需安装WinPcap/Npcap驱动以支持混杂模式。攻击者控制机Attacker Machine通常使用一个Linux发行版如Kali或Ubuntu。这里用于运行RAT的服务端Server程序并可能搭建简单的C2命令与控制服务器。网络模式的选择至关重要。我强烈推荐使用“Host-Only”仅主机网络模式。这种模式下虚拟机构成一个与宿主机物理网络完全隔离的私有网络它们之间可以互相通信但无法访问外网外网也无法访问它们。这完美地将恶意流量禁锢在实验环境内杜绝了任何意外泄露的风险。在VirtualBox中你需要先创建一个“Host-Only”网络适配器通常名为VirtualBox Host-Only Ethernet Adapter然后将两台虚拟机的网络都连接到此适配器。注意切勿使用“桥接”Bridged或“NAT”模式除非你百分之百确信你的行为不会触发样本的横向移动或对外攻击行为并且你的网络环境有严格的出口管控。2.2 样本获取与处理样本来源需要极其谨慎。我通常从一些知名的恶意软件分析平台如VirusTotal、Hybrid-Analysis、MalwareBazaar的公开样本库中根据MD5/SHA256哈希值寻找对应的RAT样本。绝对不要从不明论坛、网盘直接下载可执行文件。获取到样本后通常是受害端的客户端Client.exe和控制端的服务端Server.exe第一件事是在隔离环境下进行静态扫描确认其基本属性。然后我会使用UPX、Aspack等脱壳工具如果需要对其进行处理但动态分析时往往直接运行加壳后的样本因为通信行为通常在壳解压后才发生。在运行前务必在受害机上启动Wireshark并选择“Host-Only”网络对应的网卡开始抓包。同时在攻击机上配置好RAT服务端准备好接收连接。2.3 核心分析维度当受害机上的RAT客户端被执行并与攻击机上的服务端建立连接后我们的分析就正式开始了。我主要从以下几个维度来剖析通信特征连接建立阶段目标IP/端口是硬编码还是动态解析连接发起方是谁Client主动连接Server还是Server反向连接ClientTCP三次握手有无异常标志位协议应用层特征通信是基于原始TCP/UDP还是封装在HTTP/HTTPS、DNS甚至SMB等合法协议中是否有固定的协议头Magic Byte数据加密与混淆传输的指令和数据是明文还是密文加密是简单的XOR异或还是AES、RC4等标准算法是否有Base64等编码混淆心跳与保活机制客户端如何告知服务端自己“在线”心跳包的发送间隔、数据包大小和内容是否有固定模式指令与数据流一条完整的远程控制指令如上传文件、执行命令在网络上被分割成几个包是否有分片、重组机制数据包长度分布有何特征3. 六大RAT通信特征逐一分辨下面进入正题结合当时的抓包记录和逆向片段详细拆解这六个RAT的通信特征。我会尽量用通俗的语言描述并附上关键特征速查表。3.1 Gh0st RAT标志性的“Gh0st”头与自定义协议Gh0st在国内的渗透测试历史中曾留下深刻印记其通信协议设计得相对直接。连接建立Gh0st客户端会主动向服务端预设的IP和端口发起TCP连接。在早期版本中端口如8000、8080较为常见。协议特征这是Gh0st最明显的指纹。在成功建立TCP连接后客户端发送的第一个数据包通常是第一个应用层数据包的开头会包含明文字符串“Gh0st”。这个字符串就像它的身份证在流量中一眼可辨。后续的通信数据包括心跳、指令、传输的文件内容都会使用一个自定义的协议格式进行封装。这个格式通常包含数据包长度、命令类型、加密标志等字段。加密方式Gh0st采用了动态密钥的XOR异或加密。服务端和客户端在握手阶段会协商一个密钥后续所有通信数据都使用这个密钥进行XOR加密。在Wireshark中如果你没有正确解密看到的将是毫无规律的乱码。但正因为是XOR如果密钥不变且数据中存在大量空字节0x00有时能在密文中看到密钥本身的重复模式。心跳机制心跳包也遵循同样的自定义协议格式命令类型字段标识为“心跳”数据部分可能很简单甚至为空。心跳间隔可以通过服务端配置通常在几十秒到几分钟不等。实操心得在流量检测中寻找TCP流起始部分的“Gh0st”字符串是最高效的方法。但需要注意高明的攻击者可能会修改这个魔术字不过修改客户端和服务端需要重新编译源码会增加成本。此外其固定结构的协议头长度命令类型…也是一个可用于模式匹配的弱信号。3.2 DarkComet RAT基于TCP的“DC”协议与固定端口DarkComet以其功能全面和易用性曾广泛流传其通信也有显著特点。连接建立同样是客户端主动连接服务端。它特别喜欢使用固定的端口1604。这个端口号甚至被一些安全设备列为DarkComet的默认检测特征。当然端口是可配置的但1604的出现是一个强警报信号。协议特征DarkComet使用一种被称为“DC”协议的自定义二进制协议。协议数据包以一个固定的协议头开始。通过逆向分析我发现其数据包结构通常包含包长、命令标识符、序列号等字段。与Gh0st的明文头不同DarkComet的协议头本身可能经过简单处理但整体结构固定。加密与混淆DarkComet的加密方式比较有趣。它使用了RC4流加密算法来加密实际的有效载荷如击键记录、屏幕截图数据。但有时为了规避简单的字符串检测它还会对加密后的数据或某些字符串如C2域名进行Base64编码或简单的字符替换混淆。心跳与识别心跳包是维持连接的关键。DarkComet的心跳包同样遵循“DC”协议格式命令码固定。在服务端界面上上线的主机会显示计算机名、用户名、IP等信息这些信息都是在初次握手或心跳包中由客户端发送过去的。注意事项检测DarkComet时不能只依赖端口1604。应结合流量分析寻找结构固定的二进制协议流并且注意观察是否有RC4加密后数据流看起来随机但无压缩特征以及可能伴随的Base64编码痕迹。其客户端在连接前有时会发送一个特定的“上线通知”包结构也很独特。3.3 XtremeRATHTTP伪装与“XTRM”头XtremeRAT在通信隐匿性上迈出了一步开始尝试融入正常流量。连接建立XtremeRAT通常采用HTTP协议作为传输层。客户端会像浏览器一样向服务端配置为Web服务器如Apache的特定URL例如/gate.php发送HTTP POST请求。这使得它的流量在80/443端口上从协议上看像普通的Web访问。协议特征虽然披着HTTP的外衣但其HTTP Body内部承载的仍然是XtremeRAT的自定义数据。在这个自定义数据的头部经常可以发现“XTRM”或类似变体作为魔术字。HTTP请求的User-Agent字段有时是默认的如Mozilla/4.0有时可能被配置成模仿特定浏览器但往往不够精致与真正的浏览器流量的User-Agent多样性有差距。加密方式数据加密方面XtremeRAT常用AES或Blowfish等较标准的加密算法。密钥可能硬编码在样本中或通过某种方式在初次通信时交换。加密后的数据可能会再进行一次Base64编码以便于在HTTP协议中传输。心跳机制心跳以周期性的HTTP POST请求形式发送。请求的间隔时间固定POST的数据量通常很小且长度固定因为可能只是加密编码后的心跳指令。检查规律性的、发往同一URI的、带有固定长度POST Body的HTTP请求是发现它的关键。排查技巧分析疑似XtremeRAT的流量时不要只看HTTP状态码200 OK看起来很正常。要深入检查POST请求的Body内容。尝试对Body进行Base64解码如果解码后的数据开头有“XTRM”等特征字基本可以确认。另外观察其HTTP请求的规律性真正的Web浏览行为不会像心跳一样准时准点。3.4 QuasarRAT开源带来的协议清晰度与TLS选项QuasarRAT是一个用C#编写的开源RAT因其代码公开其通信协议反而变得非常清晰这也代表了现代RAT的一种趋势。连接建立Quasar默认使用原始TCP连接端口可配置。但它有一个非常重要的特性支持TLS加密通信。在服务端配置中可以启用SSL/TLS此时客户端会与服务端进行标准的TLS握手之后的所有通信都被加密隧道保护。这大大增加了流量检测的难度。协议特征在不使用TLS的情况下Quasar使用一个结构清晰的自定义二进制协议。通过分析其开源代码可以明确知道其数据包格式例如一个数据包可能由PacketType4字节、PacketLength4字节、PacketData变长等部分组成。这种规整的结构虽然对分析者友好但也更容易被提取出精确的特征签名。加密方式在非TLS模式下Quasar会对敏感数据如密码、键盘记录使用XOR或AES加密。但其协议头部分通常是明文的。当启用TLS后整个TCP流都被加密只能看到证书交换和随后的密文数据流无法进行有效的内容检测。心跳与数据传输心跳包是一个特定类型的PacketType。文件传输、命令执行等都有对应的PacketType。由于协议规整心跳包的长度和结构往往非常固定。经验分享对于Quasar这类开源RAT最好的检测方式之一是结合其开源代码生成精准的流量特征如协议头字节序列。但对于启用了TLS的版本传统的内容检测几乎失效必须转向行为检测例如检测内部主机向外部IP发起周期性、固定大小的TLS连接且该外部IP的证书可能是自签名的在TLS握手阶段可观察到或者该IP地址出现在威胁情报库中。3.5 GreameRAT (AsyncRAT)C#与JSON over TCPGreameRAT现在更常被称为AsyncRAT同样是基于C#的开源项目在设计上更“现代”一些。连接建立通常使用TCP直接连接。服务端监听一个端口客户端主动连接。协议特征这是AsyncRAT的一个显著特点。它使用JSON格式来序列化传输的数据对象。在TCP流中你可以看到清晰的JSON字符串包含键值对例如{Type: ClientHello, Message: ..., ID: ...}。这使得它在网络流量中只要没有额外加密可读性相当高。它使用Newtonsoft.Json库进行序列化和反序列化。加密方式虽然协议层数据是JSON明文但AsyncRAT在传输前会对整个JSON字符串的字节数据进行AES加密。因此在网络上抓到的原始TCP负载是密文。但是如果密钥被获取或破解解密后就能得到清晰的JSON文本这对于分析指令和回传数据非常方便。心跳与通信模式心跳包就是一个Type为“Ping”或“KeepAlive”的JSON对象加密后发送。所有指令如文件列表请求、命令执行、键盘记录回传都被封装成不同类型的JSON对象。这种设计使得协议扩展性很好但也在流量中留下了固定的模式周期性发送的、长度相近的加密数据包因为JSON结构固定。实操心得检测AsyncRAT可以关注其加密后的数据包长度分布。由于JSON结构相对固定同类操作如心跳加密后的数据包长度可能非常接近。此外可以尝试在内存中提取其AES密钥因为它需要解密服务端指令或者寻找其用于初始密钥交换的算法如果有。在流量层面识别其固定的JSON键名如“Type”、“Message”的加密模式也是一种研究方向。3.6 njRAT端口可变但协议固定功能标志明显njRAT又名Bladabindi是另一个“常青树”级别的RAT以其简单的VB.NET编写和丰富的功能而“流行”。连接建立客户端主动连接服务端默认端口常为5555或5556但修改起来非常容易因此端口特征不可靠。协议特征njRAT使用一个简单的自定义二进制协议。协议头通常包含一个标识数据包类型的字节。通过分析大量样本我发现其数据包类型Command ID对应着不同的功能例如0x00- 心跳/存活信号0x01- 客户端信息计算机名、用户名、操作系统等0x02- 键盘记录数据0x03- 文件管理操作0x04- 远程Shell数据 这种将功能与固定命令字节关联的方式非常直接。加密方式njRAT通常使用非常简单的XOR加密并且密钥常常是硬编码在样本中的一个单字节或短字符串。例如用0x05这个字节循环XOR整个数据包。在Wireshark中如果你看到一个TCP流里充满了0x05这个值或者数据呈现某种规律的重复很可能就是简单的XOR加密并且密钥可能就是0x05本身。有时它也会用“NULL”这样的字符串作为密钥。心跳与识别心跳包就是发送一个Command ID为0x00的小数据包。客户端上线时会主动发送一个包含系统信息的包Command ID0x01。由于其协议简单很多网络入侵检测系统NIDS的规则可以直接匹配其特定的命令字节序列即使加密后由于XOR特性也可能存在固定模式。注意事项njRAT的变种极多上述命令字节和加密密钥可能在不同版本中变化。检测时应侧重于识别其“固定结构头部功能字节”的协议模式以及可能存在的简单XOR加密特征如高频率出现的相同字节。由于其流行度沙箱和威胁情报平台通常能很好地对已知变种进行识别。4. 通信特征横向对比与检测思路将六个RAT的特征放在一起对比能更清晰地看出差异和演变趋势。特征维度Gh0stDarkCometXtremeRATQuasarRATGreameRAT (AsyncRAT)njRAT主要传输层TCPTCPHTTP over TCPTCP (可选TLS)TCPTCP典型端口8000, 8080160480, 443可变可变5555, 5556 (可变)协议伪装无自定义协议无自定义协议HTTP协议伪装无 /TLS加密隧道无无应用层标识明文 “Gh0st” 头“DC”协议头HTTP体内含“XTRM”头规整二进制包头JSON结构 (加密后)简单二进制功能字节主流加密动态XORRC4 Base64混淆AES/Blowfish Base64XOR/AES (或全TLS)AES (加密JSON)简单XOR (常硬编码)检测关键点连接首包魔术字端口1604 固定结构流规律性HTTP POST Body解码规整协议头 / TLS自签名证书固定长度加密包 / JSON键名模式简单XOR模式 功能字节基于以上分析在实际的威胁狩猎或安全运营中可以形成多层检测思路基于已知特征的检测IOC匹配这是最直接的方式。将上述魔术字“Gh0st”、 “XTRM”、固定端口1604、特定协议头字节序列等编写成Snort、Suricata等NIDS的规则。优点是准确率高缺点是容易被攻击者通过修改配置或代码绕过。基于行为异常的检测Anomaly Detection周期性心跳内网主机向外部IP发起非常规律的、固定时间间隔如每30秒整的连接或请求HTTP POST/TCP小包而该外部IP并非合法的云服务或合作伙伴。协议不匹配在80端口上通信但载荷完全不是合法的HTTP格式或者TLS握手后流量特征不符合常见浏览器或应用的ALPN协议。数据包长度规律性如AsyncRAT加密后同类操作的数据包长度高度一致。非标准端口上的持久连接在非标准服务端口上存在长时间的、有双向数据交换的TCP连接。基于载荷分析的检测解密尝试对于疑似简单XOR加密的流如njRAT可以尝试用高频字节作为密钥进行解密观察是否得到可读字符串。统计特征分析加密数据的熵值、字符分布等。虽然AES/RC4加密后数据随机性好但结合其他行为特征仍有价值。终端与网络联动在网络侧发现可疑连接立刻关联该主机的终端安全软件日志检查是否有未知进程建立了该网络连接以及该进程的文件路径、数字签名等是否异常。5. 分析过程中的常见问题与解决实录在动态分析这些RAT时我踩过不少坑这里记录几个典型问题和解决思路。问题一抓不到包或流量不全现象在受害机上启动了Wireshark但运行RAT客户端后看不到预期的TCP连接或数据包。排查检查网卡确保Wireshark选择了正确的、处于活动状态的“Host-Only”虚拟网卡。检查防火墙临时关闭受害机和攻击机上的Windows防火墙/iptables避免其阻止连接。检查IP配置确保两台虚拟机在同一个“Host-Only”网段并能互相ping通。检查样本行为有些RAT会检测调试环境或沙箱。使用Process Monitor查看进程是否真的创建了网络连接TCP Connect或UDP Send事件。可能样本运行失败了。问题二服务端无法接收到客户端连接现象客户端运行了服务端也开启了监听但客户端迟迟不上线。排查确认IP和端口检查客户端配置文件中硬编码的C2地址是否是攻击机的“Host-Only”网络IP。用netstat -an命令在攻击机查看服务端程序是否在预期端口上正确监听。查看客户端错误在受害机用TCPView或netstat -anb查看客户端进程是否发起了连接尝试以及连接状态是SYN_SENT被拒绝还是根本没有尝试。依赖项缺失特别是C#编写的RAT如Quasar, AsyncRAT客户端可能需要特定版本的.NET Framework。在受害机安装对应的.NET运行时环境。问题三加密数据无法解读现象抓到了数据包但全是乱码无法识别协议结构。解决思路静态逆向找密钥使用IDA Pro、Ghidra或dnSpy针对.NET反编译样本搜索字符串“encrypt”、“decrypt”、“key”、“XOR”、“AES”等查找硬编码的密钥或密钥生成算法。动态调试截获明文在客户端程序接收数据recv和发送数据send的函数处下断点。在内存中数据被加密/解密的那一刻通常是以明文形式存在的。使用x64dbg/OllyDbg或dnSpy调试可以在函数内部截获加密前或解密后的数据缓冲区。尝试常见算法和编码对于HTTP传输的先尝试Base64解码。对于看起来有重复模式的尝试单字节或多字节XOR爆破。使用CyberChef这类在线工具可以快速进行多种解码、解密尝试。问题四样本有反分析或虚拟机检测现象样本一运行就退出或表现出与正常环境不同的行为如不发起网络连接。应对策略修改环境尝试在物理机专门的分析机上运行或使用更隐蔽的虚拟机配置修改VMware特征、使用不太常见的虚拟化软件。绕过检测使用调试器在样本的检测代码处打补丁NOP掉关键跳转或使用专门的反反调试工具。行为监控即使样本主动退出也可能在退出前执行了某些操作如删除自身、写入注册表。仔细检查Process Monitor的日志关注进程生命周期内的所有文件、注册表、进程操作。分析RAT通信特征是一个需要耐心和细致的工作它融合了网络协议分析、逆向工程和系统行为监控。理解这些特征不仅能帮助我们写出更好的检测规则更能让我们站在攻击者的角度思考从而构建更立体、更主动的防御体系。每一次抓包和解密成功都是对攻击链更深入的一次理解。
六大主流RAT木马通信特征深度剖析与检测实战
发布时间:2026/7/4 10:24:46
1. 项目概述一次对典型远控木马通信特征的深度剖析最近在整理安全研究笔记翻到了几年前做恶意软件流量分析时的一个老项目。当时为了搞清楚几种主流RAT远程访问木马在网络层面的行为差异我花了大量时间在隔离环境里“养蛊”逐一分析了Gh0st、DarkComet、XtremeRAT、QuasarRAT、GreameRAT和njRAT这六个家伙的通信特征。今天把这些沉淀下来的观察和记录整理出来一方面是对自己学习过程的复盘另一方面也希望能给刚入行安全分析、威胁狩猎或者对恶意软件流量特征感兴趣的朋友提供一个清晰的参考地图。RAT这玩意儿说白了就是一个被植入受害者机器的后门程序攻击者通过它实现远程控制。从防御者的视角看识别网络流量中是否存在RAT通信是发现内网失陷主机的关键手段之一。但不同的RAT家族其通信协议、加密方式、心跳包特征往往大相径庭死记硬背特征库效率太低理解其背后的设计逻辑和通信模式才是王道。这次分析的六个RAT在历史上都曾“叱咤风云”有的至今仍有变种活跃。通过抓包、逆向和动态调试我们不仅能识别它们更能理解攻击者可能采用的隐匿技术和我们的检测思路该如何应对。2. 分析环境搭建与核心方法工欲善其事必先利其器。分析恶意软件通信特征一个安全、隔离的实验环境是首要前提。盲目在真实网络或主机上运行这些样本无异于引狼入室。2.1 实验室网络拓扑设计我采用的是经典的“孤岛”分析环境。核心是一台运行VMware或VirtualBox的物理宿主机。在宿主机上我创建了两个关键的虚拟机受害机Victim Machine通常安装Windows 7或Windows 10系统并保持系统补丁处于较旧状态以模拟一个常见的攻击目标。我会提前安装好Process Monitor、ProcExp、TCPView等动态分析工具以及Wireshark需安装WinPcap/Npcap驱动以支持混杂模式。攻击者控制机Attacker Machine通常使用一个Linux发行版如Kali或Ubuntu。这里用于运行RAT的服务端Server程序并可能搭建简单的C2命令与控制服务器。网络模式的选择至关重要。我强烈推荐使用“Host-Only”仅主机网络模式。这种模式下虚拟机构成一个与宿主机物理网络完全隔离的私有网络它们之间可以互相通信但无法访问外网外网也无法访问它们。这完美地将恶意流量禁锢在实验环境内杜绝了任何意外泄露的风险。在VirtualBox中你需要先创建一个“Host-Only”网络适配器通常名为VirtualBox Host-Only Ethernet Adapter然后将两台虚拟机的网络都连接到此适配器。注意切勿使用“桥接”Bridged或“NAT”模式除非你百分之百确信你的行为不会触发样本的横向移动或对外攻击行为并且你的网络环境有严格的出口管控。2.2 样本获取与处理样本来源需要极其谨慎。我通常从一些知名的恶意软件分析平台如VirusTotal、Hybrid-Analysis、MalwareBazaar的公开样本库中根据MD5/SHA256哈希值寻找对应的RAT样本。绝对不要从不明论坛、网盘直接下载可执行文件。获取到样本后通常是受害端的客户端Client.exe和控制端的服务端Server.exe第一件事是在隔离环境下进行静态扫描确认其基本属性。然后我会使用UPX、Aspack等脱壳工具如果需要对其进行处理但动态分析时往往直接运行加壳后的样本因为通信行为通常在壳解压后才发生。在运行前务必在受害机上启动Wireshark并选择“Host-Only”网络对应的网卡开始抓包。同时在攻击机上配置好RAT服务端准备好接收连接。2.3 核心分析维度当受害机上的RAT客户端被执行并与攻击机上的服务端建立连接后我们的分析就正式开始了。我主要从以下几个维度来剖析通信特征连接建立阶段目标IP/端口是硬编码还是动态解析连接发起方是谁Client主动连接Server还是Server反向连接ClientTCP三次握手有无异常标志位协议应用层特征通信是基于原始TCP/UDP还是封装在HTTP/HTTPS、DNS甚至SMB等合法协议中是否有固定的协议头Magic Byte数据加密与混淆传输的指令和数据是明文还是密文加密是简单的XOR异或还是AES、RC4等标准算法是否有Base64等编码混淆心跳与保活机制客户端如何告知服务端自己“在线”心跳包的发送间隔、数据包大小和内容是否有固定模式指令与数据流一条完整的远程控制指令如上传文件、执行命令在网络上被分割成几个包是否有分片、重组机制数据包长度分布有何特征3. 六大RAT通信特征逐一分辨下面进入正题结合当时的抓包记录和逆向片段详细拆解这六个RAT的通信特征。我会尽量用通俗的语言描述并附上关键特征速查表。3.1 Gh0st RAT标志性的“Gh0st”头与自定义协议Gh0st在国内的渗透测试历史中曾留下深刻印记其通信协议设计得相对直接。连接建立Gh0st客户端会主动向服务端预设的IP和端口发起TCP连接。在早期版本中端口如8000、8080较为常见。协议特征这是Gh0st最明显的指纹。在成功建立TCP连接后客户端发送的第一个数据包通常是第一个应用层数据包的开头会包含明文字符串“Gh0st”。这个字符串就像它的身份证在流量中一眼可辨。后续的通信数据包括心跳、指令、传输的文件内容都会使用一个自定义的协议格式进行封装。这个格式通常包含数据包长度、命令类型、加密标志等字段。加密方式Gh0st采用了动态密钥的XOR异或加密。服务端和客户端在握手阶段会协商一个密钥后续所有通信数据都使用这个密钥进行XOR加密。在Wireshark中如果你没有正确解密看到的将是毫无规律的乱码。但正因为是XOR如果密钥不变且数据中存在大量空字节0x00有时能在密文中看到密钥本身的重复模式。心跳机制心跳包也遵循同样的自定义协议格式命令类型字段标识为“心跳”数据部分可能很简单甚至为空。心跳间隔可以通过服务端配置通常在几十秒到几分钟不等。实操心得在流量检测中寻找TCP流起始部分的“Gh0st”字符串是最高效的方法。但需要注意高明的攻击者可能会修改这个魔术字不过修改客户端和服务端需要重新编译源码会增加成本。此外其固定结构的协议头长度命令类型…也是一个可用于模式匹配的弱信号。3.2 DarkComet RAT基于TCP的“DC”协议与固定端口DarkComet以其功能全面和易用性曾广泛流传其通信也有显著特点。连接建立同样是客户端主动连接服务端。它特别喜欢使用固定的端口1604。这个端口号甚至被一些安全设备列为DarkComet的默认检测特征。当然端口是可配置的但1604的出现是一个强警报信号。协议特征DarkComet使用一种被称为“DC”协议的自定义二进制协议。协议数据包以一个固定的协议头开始。通过逆向分析我发现其数据包结构通常包含包长、命令标识符、序列号等字段。与Gh0st的明文头不同DarkComet的协议头本身可能经过简单处理但整体结构固定。加密与混淆DarkComet的加密方式比较有趣。它使用了RC4流加密算法来加密实际的有效载荷如击键记录、屏幕截图数据。但有时为了规避简单的字符串检测它还会对加密后的数据或某些字符串如C2域名进行Base64编码或简单的字符替换混淆。心跳与识别心跳包是维持连接的关键。DarkComet的心跳包同样遵循“DC”协议格式命令码固定。在服务端界面上上线的主机会显示计算机名、用户名、IP等信息这些信息都是在初次握手或心跳包中由客户端发送过去的。注意事项检测DarkComet时不能只依赖端口1604。应结合流量分析寻找结构固定的二进制协议流并且注意观察是否有RC4加密后数据流看起来随机但无压缩特征以及可能伴随的Base64编码痕迹。其客户端在连接前有时会发送一个特定的“上线通知”包结构也很独特。3.3 XtremeRATHTTP伪装与“XTRM”头XtremeRAT在通信隐匿性上迈出了一步开始尝试融入正常流量。连接建立XtremeRAT通常采用HTTP协议作为传输层。客户端会像浏览器一样向服务端配置为Web服务器如Apache的特定URL例如/gate.php发送HTTP POST请求。这使得它的流量在80/443端口上从协议上看像普通的Web访问。协议特征虽然披着HTTP的外衣但其HTTP Body内部承载的仍然是XtremeRAT的自定义数据。在这个自定义数据的头部经常可以发现“XTRM”或类似变体作为魔术字。HTTP请求的User-Agent字段有时是默认的如Mozilla/4.0有时可能被配置成模仿特定浏览器但往往不够精致与真正的浏览器流量的User-Agent多样性有差距。加密方式数据加密方面XtremeRAT常用AES或Blowfish等较标准的加密算法。密钥可能硬编码在样本中或通过某种方式在初次通信时交换。加密后的数据可能会再进行一次Base64编码以便于在HTTP协议中传输。心跳机制心跳以周期性的HTTP POST请求形式发送。请求的间隔时间固定POST的数据量通常很小且长度固定因为可能只是加密编码后的心跳指令。检查规律性的、发往同一URI的、带有固定长度POST Body的HTTP请求是发现它的关键。排查技巧分析疑似XtremeRAT的流量时不要只看HTTP状态码200 OK看起来很正常。要深入检查POST请求的Body内容。尝试对Body进行Base64解码如果解码后的数据开头有“XTRM”等特征字基本可以确认。另外观察其HTTP请求的规律性真正的Web浏览行为不会像心跳一样准时准点。3.4 QuasarRAT开源带来的协议清晰度与TLS选项QuasarRAT是一个用C#编写的开源RAT因其代码公开其通信协议反而变得非常清晰这也代表了现代RAT的一种趋势。连接建立Quasar默认使用原始TCP连接端口可配置。但它有一个非常重要的特性支持TLS加密通信。在服务端配置中可以启用SSL/TLS此时客户端会与服务端进行标准的TLS握手之后的所有通信都被加密隧道保护。这大大增加了流量检测的难度。协议特征在不使用TLS的情况下Quasar使用一个结构清晰的自定义二进制协议。通过分析其开源代码可以明确知道其数据包格式例如一个数据包可能由PacketType4字节、PacketLength4字节、PacketData变长等部分组成。这种规整的结构虽然对分析者友好但也更容易被提取出精确的特征签名。加密方式在非TLS模式下Quasar会对敏感数据如密码、键盘记录使用XOR或AES加密。但其协议头部分通常是明文的。当启用TLS后整个TCP流都被加密只能看到证书交换和随后的密文数据流无法进行有效的内容检测。心跳与数据传输心跳包是一个特定类型的PacketType。文件传输、命令执行等都有对应的PacketType。由于协议规整心跳包的长度和结构往往非常固定。经验分享对于Quasar这类开源RAT最好的检测方式之一是结合其开源代码生成精准的流量特征如协议头字节序列。但对于启用了TLS的版本传统的内容检测几乎失效必须转向行为检测例如检测内部主机向外部IP发起周期性、固定大小的TLS连接且该外部IP的证书可能是自签名的在TLS握手阶段可观察到或者该IP地址出现在威胁情报库中。3.5 GreameRAT (AsyncRAT)C#与JSON over TCPGreameRAT现在更常被称为AsyncRAT同样是基于C#的开源项目在设计上更“现代”一些。连接建立通常使用TCP直接连接。服务端监听一个端口客户端主动连接。协议特征这是AsyncRAT的一个显著特点。它使用JSON格式来序列化传输的数据对象。在TCP流中你可以看到清晰的JSON字符串包含键值对例如{Type: ClientHello, Message: ..., ID: ...}。这使得它在网络流量中只要没有额外加密可读性相当高。它使用Newtonsoft.Json库进行序列化和反序列化。加密方式虽然协议层数据是JSON明文但AsyncRAT在传输前会对整个JSON字符串的字节数据进行AES加密。因此在网络上抓到的原始TCP负载是密文。但是如果密钥被获取或破解解密后就能得到清晰的JSON文本这对于分析指令和回传数据非常方便。心跳与通信模式心跳包就是一个Type为“Ping”或“KeepAlive”的JSON对象加密后发送。所有指令如文件列表请求、命令执行、键盘记录回传都被封装成不同类型的JSON对象。这种设计使得协议扩展性很好但也在流量中留下了固定的模式周期性发送的、长度相近的加密数据包因为JSON结构固定。实操心得检测AsyncRAT可以关注其加密后的数据包长度分布。由于JSON结构相对固定同类操作如心跳加密后的数据包长度可能非常接近。此外可以尝试在内存中提取其AES密钥因为它需要解密服务端指令或者寻找其用于初始密钥交换的算法如果有。在流量层面识别其固定的JSON键名如“Type”、“Message”的加密模式也是一种研究方向。3.6 njRAT端口可变但协议固定功能标志明显njRAT又名Bladabindi是另一个“常青树”级别的RAT以其简单的VB.NET编写和丰富的功能而“流行”。连接建立客户端主动连接服务端默认端口常为5555或5556但修改起来非常容易因此端口特征不可靠。协议特征njRAT使用一个简单的自定义二进制协议。协议头通常包含一个标识数据包类型的字节。通过分析大量样本我发现其数据包类型Command ID对应着不同的功能例如0x00- 心跳/存活信号0x01- 客户端信息计算机名、用户名、操作系统等0x02- 键盘记录数据0x03- 文件管理操作0x04- 远程Shell数据 这种将功能与固定命令字节关联的方式非常直接。加密方式njRAT通常使用非常简单的XOR加密并且密钥常常是硬编码在样本中的一个单字节或短字符串。例如用0x05这个字节循环XOR整个数据包。在Wireshark中如果你看到一个TCP流里充满了0x05这个值或者数据呈现某种规律的重复很可能就是简单的XOR加密并且密钥可能就是0x05本身。有时它也会用“NULL”这样的字符串作为密钥。心跳与识别心跳包就是发送一个Command ID为0x00的小数据包。客户端上线时会主动发送一个包含系统信息的包Command ID0x01。由于其协议简单很多网络入侵检测系统NIDS的规则可以直接匹配其特定的命令字节序列即使加密后由于XOR特性也可能存在固定模式。注意事项njRAT的变种极多上述命令字节和加密密钥可能在不同版本中变化。检测时应侧重于识别其“固定结构头部功能字节”的协议模式以及可能存在的简单XOR加密特征如高频率出现的相同字节。由于其流行度沙箱和威胁情报平台通常能很好地对已知变种进行识别。4. 通信特征横向对比与检测思路将六个RAT的特征放在一起对比能更清晰地看出差异和演变趋势。特征维度Gh0stDarkCometXtremeRATQuasarRATGreameRAT (AsyncRAT)njRAT主要传输层TCPTCPHTTP over TCPTCP (可选TLS)TCPTCP典型端口8000, 8080160480, 443可变可变5555, 5556 (可变)协议伪装无自定义协议无自定义协议HTTP协议伪装无 /TLS加密隧道无无应用层标识明文 “Gh0st” 头“DC”协议头HTTP体内含“XTRM”头规整二进制包头JSON结构 (加密后)简单二进制功能字节主流加密动态XORRC4 Base64混淆AES/Blowfish Base64XOR/AES (或全TLS)AES (加密JSON)简单XOR (常硬编码)检测关键点连接首包魔术字端口1604 固定结构流规律性HTTP POST Body解码规整协议头 / TLS自签名证书固定长度加密包 / JSON键名模式简单XOR模式 功能字节基于以上分析在实际的威胁狩猎或安全运营中可以形成多层检测思路基于已知特征的检测IOC匹配这是最直接的方式。将上述魔术字“Gh0st”、 “XTRM”、固定端口1604、特定协议头字节序列等编写成Snort、Suricata等NIDS的规则。优点是准确率高缺点是容易被攻击者通过修改配置或代码绕过。基于行为异常的检测Anomaly Detection周期性心跳内网主机向外部IP发起非常规律的、固定时间间隔如每30秒整的连接或请求HTTP POST/TCP小包而该外部IP并非合法的云服务或合作伙伴。协议不匹配在80端口上通信但载荷完全不是合法的HTTP格式或者TLS握手后流量特征不符合常见浏览器或应用的ALPN协议。数据包长度规律性如AsyncRAT加密后同类操作的数据包长度高度一致。非标准端口上的持久连接在非标准服务端口上存在长时间的、有双向数据交换的TCP连接。基于载荷分析的检测解密尝试对于疑似简单XOR加密的流如njRAT可以尝试用高频字节作为密钥进行解密观察是否得到可读字符串。统计特征分析加密数据的熵值、字符分布等。虽然AES/RC4加密后数据随机性好但结合其他行为特征仍有价值。终端与网络联动在网络侧发现可疑连接立刻关联该主机的终端安全软件日志检查是否有未知进程建立了该网络连接以及该进程的文件路径、数字签名等是否异常。5. 分析过程中的常见问题与解决实录在动态分析这些RAT时我踩过不少坑这里记录几个典型问题和解决思路。问题一抓不到包或流量不全现象在受害机上启动了Wireshark但运行RAT客户端后看不到预期的TCP连接或数据包。排查检查网卡确保Wireshark选择了正确的、处于活动状态的“Host-Only”虚拟网卡。检查防火墙临时关闭受害机和攻击机上的Windows防火墙/iptables避免其阻止连接。检查IP配置确保两台虚拟机在同一个“Host-Only”网段并能互相ping通。检查样本行为有些RAT会检测调试环境或沙箱。使用Process Monitor查看进程是否真的创建了网络连接TCP Connect或UDP Send事件。可能样本运行失败了。问题二服务端无法接收到客户端连接现象客户端运行了服务端也开启了监听但客户端迟迟不上线。排查确认IP和端口检查客户端配置文件中硬编码的C2地址是否是攻击机的“Host-Only”网络IP。用netstat -an命令在攻击机查看服务端程序是否在预期端口上正确监听。查看客户端错误在受害机用TCPView或netstat -anb查看客户端进程是否发起了连接尝试以及连接状态是SYN_SENT被拒绝还是根本没有尝试。依赖项缺失特别是C#编写的RAT如Quasar, AsyncRAT客户端可能需要特定版本的.NET Framework。在受害机安装对应的.NET运行时环境。问题三加密数据无法解读现象抓到了数据包但全是乱码无法识别协议结构。解决思路静态逆向找密钥使用IDA Pro、Ghidra或dnSpy针对.NET反编译样本搜索字符串“encrypt”、“decrypt”、“key”、“XOR”、“AES”等查找硬编码的密钥或密钥生成算法。动态调试截获明文在客户端程序接收数据recv和发送数据send的函数处下断点。在内存中数据被加密/解密的那一刻通常是以明文形式存在的。使用x64dbg/OllyDbg或dnSpy调试可以在函数内部截获加密前或解密后的数据缓冲区。尝试常见算法和编码对于HTTP传输的先尝试Base64解码。对于看起来有重复模式的尝试单字节或多字节XOR爆破。使用CyberChef这类在线工具可以快速进行多种解码、解密尝试。问题四样本有反分析或虚拟机检测现象样本一运行就退出或表现出与正常环境不同的行为如不发起网络连接。应对策略修改环境尝试在物理机专门的分析机上运行或使用更隐蔽的虚拟机配置修改VMware特征、使用不太常见的虚拟化软件。绕过检测使用调试器在样本的检测代码处打补丁NOP掉关键跳转或使用专门的反反调试工具。行为监控即使样本主动退出也可能在退出前执行了某些操作如删除自身、写入注册表。仔细检查Process Monitor的日志关注进程生命周期内的所有文件、注册表、进程操作。分析RAT通信特征是一个需要耐心和细致的工作它融合了网络协议分析、逆向工程和系统行为监控。理解这些特征不仅能帮助我们写出更好的检测规则更能让我们站在攻击者的角度思考从而构建更立体、更主动的防御体系。每一次抓包和解密成功都是对攻击链更深入的一次理解。