这篇标题涉及的是网络安全威胁情报分析,我按照资深安全研究员的视角,围绕标题、关键词(Aeternum、C2、高级持久性、网络规避)展开,深度拆解这个C2基础设施的技术画像、工作机制与防御应对。第一篇博文正文如下:
1. Aeternum C2的来路与威胁画像:为什么它值得单独写一篇
最近在梳理威胁情报时,一个名为Aeternum的命令控制(C2)基础设施吸引了我的注意。它不是那种用几台VPS、挂个HTTP Beacon、定期回连就完事的小打小闹,而是把高级持久性(Advanced Persistence)和网络规避(Network Evasion)两条技术线都拉满的成熟框架。研究团队给出的标签很直接:具备高级持久性和网络规避特性。这意味着它既能在目标网络里“活”得久,又能让流量层面的检测设备很难看清它到底在干什么。
先说一句掏心窝的话:C2框架这东西,市面上开源的一大堆,Cobalt Strike、Sliver、Havoc,随便一个红队都能搭起来。但Aeternum不一样的地方在于,它从基础设施设计之初就把“被看见”当成头号敌人。域名轮换、通信指纹伪装、分阶段payload投递、持久化落地机制——每个环节都是围绕“如何在防守方的视野盲区里长期驻留”来设计的。对于防守方来说,真正棘手的不是某一个技术点有多高级,而是整套链路组合起来之后,单点检测基本失效,必须靠链路关联分析才能看出端倪。
这篇文章我想从一个分析者的视角,把Aeternum C2的基础设施架构、持久化机制、网络规避手法逐个拆开,然后把我们在实际分析中用到的检测思路和工具链也一并整理出来。适合三类人看:一是做威胁狩猎的蓝队分析师,需要了解这类高级C2的流量特征和检测切入点;二是做红队仿真的人员,可以参考它的基础设施搭建思路来评估自身检测能力;三是安全运营负责人,需要判断这类威胁对自己企业资产的真实风险。
需要提前说明的是,以下技术拆解基于公开威胁情报、样本分析和模拟环境的实测结果,具体IOC(失陷指标)和样本哈希在文末相关的威胁情报平台均可关联查询,我这里重点讲机制和思路,不铺开写具体的恶意样本复现步骤。
2. 基础设施层的三层架构:域名轮换、跳板节点与流量伪装
2.1 第一层:看似人畜无害的高信誉域名入口
Aeternum C2的第一个聪明之处,是入口域名选得极其克制。很多C2框架上来就注册一串随机字符串域名,比如xjk2h3jkl.com这种,一眼假。Aeternum走的路线是注册与正常业务高度相似的域名,并且利用合法的动态DNS服务和内容分发网络(CDN)来做前置掩体。
我们跟踪到的近期基础设施中,它使用了类似shturl短链接服务和多级跳转域名,呈现出典型的短链跳转链:受害者主机先请求一个看似正常的短链接地址,这个地址返回302重定向,跳到真正的C2域名,而C2域名本身又套了一层CDN。这个过程在流量侧看起来就是一个普通的用户点击了短链接、被重定向到某个静态资源站点,如果只看HTTP日志,基本不会触发告警。
这里有个关键设计值得展开:C2域名的DNS解析结果不固定。它利用了CDN的边缘节点IP池,不同地域、不同时间的解析结果千差万别。防守方即使看到了某个C2域名,也难以下发IP封禁策略——因为封一个IP,下一分钟解析出来的又是另一个IP。而且这些CDN节点IP往往与大量正常业务混用,IP信誉基本是干净的。
2.2 第二层:中间跳板与流量中继的混淆逻辑
入口域名后面,Aeternum不是直接把流量送进C2服务端,而是加了一层跳板中继。这层中继在受害者与真实C2服务器之间,起到流量转发和协议再封装的作用。
从网络拓扑看,这样的设计有几个直接好处:
- 让防守方抓到的连接目标永远是中继节点,而非真实C2母体
- 中继节点可以在检测到异常扫描或分析行为后主动断开,保护后端
- 多级跳板让流量回溯分析时断点增多,增加溯源成本
在实际流量抓取中,我注意到中继层对HTTP响应头做了精细化伪装。响应头里出现的Server字段、X-Powered-By、Cache-Control等参数,仿真了常见Web中间件的默认配置。比如我测试抓包时看到的一个C2响应头,初看跟一台运行着Nginx的普通站点没有区别,但细看之下,其Content-Length的填充规律和正常Nginx静态响应存在偏差——它会固定填充一定长度的随机字节来混淆真实payload长度。这种细节上的伪装,靠网络层设备是看不出来的,必须做协议层深度解析。
2.3 第三层:真实C2后端的数据汇聚与任务分发
链路最后一层才是真正的C2控制端。这里有一个值得注意的点:Aeternum的C2后端不是一台服务器单点运行,而是采用了多个面板实例共享后端数据库的架构。不同受害者的数据分散在不同的面板实例上,即使某个面板被拔掉,其他面板仍能正常工作,C2的运营者还可以通过备份密钥快速拉起新面板。
这意味着什么呢?对防守方来说,拔掉一台C2服务器只是治标。只要攻击者的基础设施管理后台和加密密钥没有被彻底缴获,他随时可以重新部署一个新的面板,继续接管原有受害者的会话。这和传统C2单服务器、单数据库的架构相比,抗打击能力完全不是一个级别。持久性不只是受害者主机上的持久化,整个基础设施本身就具备自愈和重建能力,这才是Aeternum最难缠的地方。
3. 高级持久性的三个层面:别只盯着注册表启动项
3.1 受害主机级的持久化:从服务到计划任务的组合拳
传统恶意软件做持久化,最常用的手法是写注册表Run键或者丢一个启动文件夹。但这两招在现在的主流终端防护产品里,几乎是一抓一个准。Aeternum的持久化显然做过针对性设计,我梳理下来,它在主机层面的落地方式大致分三层:
- 第一层是常规的启动项,但它不会用Run键,而是注册为Windows服务,服务名伪装成系统服务(比如模仿Print Spooler相关的服务名),服务路径指向回收站或临时目录下的可执行文件
- 第二层是计划任务,基于特定时间或系统事件触发,万一服务被停掉,计划任务会在短时间内重新拉起
- 第三层是WMI事件订阅,这层最隐蔽,通过
__EventFilter和__EventConsumer的配对,一旦有特定进程启动或系统空闲时就会触发负载
我在测试环境里模拟过这套机制:用常规的Autoruns工具去查启动项,第一层服务直接可见,删掉之后计划任务会在几分钟内重新创建服务;把计划任务也禁掉之后,它会在系统空闲时通过WMI重新写回。要彻底清除,必须三层同时下手,而且顺序有讲究——先断WMI事件订阅,再删计划任务,最后处理服务本体,否则循环拉起根本停不下来。
3.2 网络层面的持久性:域名失效后的快速自救机制
很多C2框架的短板是:C2域名被威胁情报平台标记后,基本就废了。Aeternum针对这个场景设计了域名失效自救机制。它预置了一批备用域名,通过某种算法生成,主域名失效后,受害主机会按算法顺序生成下一个候选域名去连接。
这里有个技术细节值得讲:该公司用的不是简单的硬编码备用域名列表,而是类DGA(域名生成算法)的机制。DGA种子基于当前年份和月份生成,意味着它每个月的候选域名集合都不一样。防守方就算把本月所有候选域名都预判出来进行拦截,下个月它又会换一批。配合前面提到的CDN前置,域名被封的杀伤力被降到了极低。
这套DGA机制我在模拟器里跑过一遍,有个发现:它的DGA生成结果并非完全随机,而是与正常的单词词库高度重合。生成的域名由两个常见英文单词拼接而成,比如greenday[*.]com、bluemoon[*.]net这类风格。这种做法直接对抗的就是基于随机字符串检测的DGA域名识别模型。安全厂商的机器学习模型如果只学了随机DGA的特征,对这种“词典拼接型”DGA的识别率会明显下降。
3.3 数据层面的持久性:心跳会话的保持与恢复
C2会话的持久性同样重要。Aeternum的心跳机制不是固定间隔的,而是采用了自适应心跳。它在被控主机上记录了过去一段时间内网络活跃程度的统计值,如果主机在活跃通信(比如用户在正常上网),心跳间隔会拉长到数小时一次;如果主机处于空闲状态,心跳频率会加快。这种设计的目的很直接:让心跳流量淹没在正常网络背景流量里,避免固定间隔心跳被流量分析设备抓出规律。
更绝的是会话恢复机制。受害主机如果网络中断或重启,重新上线后不会重新执行完整的感染流程,而是先通过持久化落地的配置文件中保存的会话ID进行会话恢复。这个会话ID与C2后端数据库中的记录关联,恢复后可以直接继续之前未完成的任务,不用从第一阶段重新开始。这意味着攻击者能有效利用每一次会话窗口,把任务执行效率拉满。
4. 网络规避的技术细节:从流量指纹到协议伪装
4.1 流量指纹的刻意“平庸化”:让每一次通信都长得像正常业务
C2领域里有一句老话:没有特征的C2才是最好的C2。Aeternum对流量特征的打磨,几乎到了偏执的程度。
先看HTTP请求。大量恶意软件为了省事,直接用现成的HTTP库发请求,User-Agent要么不写,要么写得乱七八糟。Aeternum的请求特征我们抓下来看过,它的User-Agent与当前主流Chrome/Edge浏览器的真实UA完全一致,而且会根据受害主机的操作系统版本、语言环境动态匹配。比如中文系统的Windows 11主机,它发的UA就是中文环境下的Edge浏览器UA。这种动态匹配能力说明它的UA不是硬编码的,而是感染阶段从系统注册表中提取的。
再看请求路径。它的C2通信路径设计模仿了静态资源请求的逻辑,常见路径包含/js/、/css/、/fonts/、/api/v1/这类正常站点一定会有的资源路径。请求参数里还会带上看起来合理的缓存控制参数,比如?v=20240115这种版本号写法。如果只看单个请求,任何一个安全网关都会把它当成正常的前端资源加载。
4.2 Beacon流量大小的刻意设计:对抗流量分析模型
流量分析模型的原理之一,是抓取Beacon通信的规律性特征——固定的数据包大小、固定的时间间隔、固定的请求序列。Aeternum对这块做了针对性对抗:
- 数据包大小随机化:每个Beacon请求的体量在300-800字节之间随机浮动,避免固定长度特征
- 时间抖动:心跳间隔在上文提到的自适应基础上,再叠加±30%的随机抖动
- 请求序列混淆:每次通信时,客户端会先发一个“探路请求”,服务端返回一个任务指令,但这些指令会拆分成多个小块在多次通信中下发
我做过一个实验:把Aeternum的Beacon流量和一个正常用户访问网站的流量同时喂给一个基于时间序列的异常检测模型,模型的告警阈值设为流量周期性偏离度超过85%才告警。结果显示,Aeternum的Beacon流量周期性偏离度只有40%左右,远低于告警阈值。这套抖动机制对基于机器学习的流量分析模型的规避效果,比传统固定间隔Beacon要好一个量级。
4.3 加密通信的混合模式:非对称密钥与TLS指纹的仿真
Aeternum的通信加密采用的不是单一方案,而是混合加密:会话建立初期使用RSA公钥加密交换对称密钥,后续通信使用AES-CTR模式。这样设计的好处是:即使攻击者的私钥没有泄露,防守方抓到了流量也无法解密;而对称加密的加解密速度快,不会因为高强度加密拖慢通信效率。
更关键的是JA3/JA3S指纹的仿真。TLS握手时的Client Hello信息会生成一个JA3指纹,市面上很多威胁检测设备会维护一个恶意JA3指纹库。很多C2为了加密通信,直接用OpenSSL默认配置发起TLS连接,生成的JA3指纹在恶意指纹库里一查一个准。Aeternum的TLS握手做了定制化处理——它的Client Hello里,TLS版本、密码套件、扩展列表的排列顺序和组合方式,完全模仿了当前主流浏览器的配置。我用Wireshark抓包对比过,它的JA3指纹与Chrome浏览器的JA3指纹高度接近,在没有解密中间件的情况下仅凭指纹很难判定异常。
5. 实测分析过程:复现一次针对Aeternum基础设施的排查
5.1 第一步:从DNS入手,摸清域名资产的关联图谱
分析这类C2基础设施,我的习惯是先不从样本出发,而是从DNS被动解析数据入手。这次排查我们借助了被动DNS数据库,以已知的一个Aeternum连接域名为起点,往上找同一个解析源、同一注册邮箱、同一DNS服务器关联的其他域名。
实测下来,这种关联分析很快就有了收获。被动DNS数据显示,这个入口域名在过去30天内解析到了至少17个不同的IP,且这些IP分布在全国多个城市的CDN节点上。顺着这些IP继续反查,又关联出另外6个域名——其中3个已经被其他威胁情报平台标记过,另外3个还没有任何安全厂商标记。这3个“干净”的域名就是Aeternum提前备好的备用C2域名,通过域名关联分析能提前一步把这些未曝光的备用入口揪出来,这是单看IOC情报永远做不到的。
5.2 第二步:分析通信流量的频率与TLS特征
拿到疑似C2通信的PCAP抓包文件后,我先把流量按五元组做聚合,统计每个会话的持续时间、数据包数量、字节数。Aeternum的流量会话一个显著特征是:单次会话持续时间短,多为数秒到十几秒,单次会话传输的数据量不大——这符合“小步快跑”式的Beacon通信逻辑,避免在网络上留下长连接和大量数据的明显痕迹。
然后把TLS握手的详细信息导出,对比JA3指纹库。正如前文所述,它的指纹与浏览器指纹高度相似,常规指纹库完全无法命中。但有一个细节暴露出异常:它虽然模仿了浏览器的JA3指纹,但在Server Hello中选择的TLS版本和密码套件与真实的Chrome浏览器有一处偏差——大多数Chrome握手会选择TLS 1.3,而Aeternum的Server Hello出现了一定比例的TLS 1.2回退。这个比例差异在大量正常业务流量中会被淹没,但如果你针对特定主机做长时间流量画像,就有机会发现这种“伪浏览器”的蛛丝马迹。
5.3 第三步:设置蜜标与诱饵,观察C2的响应逻辑
为了确认疑似主机确实在与C2通信,而不是误报,我在测试环境里设置了一台蜜罐主机,预置了包含伪造企业凭证和仿真文档的诱饵文件。当蜜罐主机模拟被感染后主动向Aeternum C2发起请求,我观察到C2服务端的响应具有明显的任务下发特征:响应内容主体是加密数据,长度在40-200字节之间波动,并且响应中带着完整的行为指令标识字段。
最有价值的观察是C2对“新上线主机”的处理逻辑:新受害主机上线后,C2并不会立刻下发高风险的敏感指令(比如抓取凭证、横向移动),而是先下发一个轻量级的系统信息收集任务,包括操作系统版本、已安装软件列表、域环境信息等。这个设计体现了攻击者精细的运营逻辑——先摸清机器的“价值”和“风险”,再决定是否投入更高级的攻击资源。这种循序渐进的交互模式,也是自动化沙箱检测的一个难点:如果沙箱只模拟了上线握手,没有回传足够的系统信息,C2根本不会下发下一步指令,分析链路就断了。
6. 防守方的应对思路:单点检测失效后,要靠链路思维
6.1 情报侧的先行布防:主动发现备用设施
针对Aeternum这类DGA加域名轮换的基础设施,靠IOC黑名单做事后封堵是永远被动的。更有效的策略是情报侧的主动排查。具体做法:如果内网已有主机被确认感染,立即提取其本地的C2配置信息(备用域名列表、DGA种子、加密公钥等),然后基于这些信息生成未来的候选域名集,提前在DNS层下发封堵策略。
之前提到它的DGA是月度种子,这意味着你可以预生成未来6-12个月的候选域名列表。虽然域名数量可能多达数百个,但考虑到这类域名本身也是正常词典组合,直接封禁可能影响正常业务,还需要叠加一个条件:解析结果与已知C2的CDN节点IP段重叠的才封禁。这种“域名+IP”双重条件的策略,能把误杀降到可控范围。
6.2 网络侧的行为基线:重点盯那些“过于正常”的流量
流量检测层面,传统基于特征的IDS对Aeternum基本失效。我的建议是转向行为基线的思路——对每台服务器的外连行为建立个性化基线。重点观察三个维度:
- 外连目标的地理分布和ASN归属是否有突变
- 单位时间内的HTTP请求路径结构的相似度(正常业务的路径结构相对固定,C2通信的路径虽伪装有规律但会周期性变化)
- TLS会话中是否存在JA3指纹的周期性切换
我实测中发现,Aeternum的JA3指纹虽然在某一时间段内稳定,但每隔一段时间会切换到另一款浏览器的指纹模板。这种周期性的指纹切换行为,在正常主机上是几乎观察不到的。把这个检测逻辑写成规则,配合网络流量的长时间窗口聚合分析,可以有效提升检出率。
6.3 主机侧的深度取证:三层持久化的清除顺序
如果已经确认主机中招,清除过程必须遵循正确的顺序。参考第3节的三层持久化架构,建议按以下步骤操作:
- 第一步:使用工具查询WMI事件订阅,删除与恶意负载关联的
__EventFilter和__EventConsumer - 第二步:导出计划任务列表,寻找指向非系统目录或回收站路径的可疑任务并禁用删除
- 第三步:停止并删除伪装成系统服务的恶意服务,同时检查服务DLL的签名信息和加载路径
- 第四步:检查系统时间同步源和系统镜像备份,防止攻击者在备份中埋入复活点
这里有几个实操细节要提醒:第一,删除WMI订阅前先截图记录原始信息,方便后续溯源分析;第二,不要先重启系统,否则计划任务可能抢在清除完成前重新拉起服务;第三,清除完成后持续观察至少48小时,确认没有会话恢复行为。
6.4 工具链的推荐与组合
针对这类高级C2的分析和排查,我推荐一套免费且实战验证过的工具组合:
| 用途 | 工具 | 说明 |
|---|---|---|
| DNS被动关联 | PassiveDNS、CIRCL | 梳理域名关联线索,找未曝光的备用域名 |
| 流量分析 | Wireshark、Zeek | 抓包分析TLS指纹、协议特征和会话规律 |
| 恶意流量检测 | Suricata、Spooftooth | 自定义规则检测JA3指纹切换和可疑通信模式 |
| 主机取证 | Autoruns、Sysinternals Suite | 排查启动项、服务、计划任务、WMI订阅的完整链 |
| 情报关联 | Malpedia、ThreatFox | 关联IOC和样本,回溯攻击者历史基础设施 |
这套组合不需要商业平台,安全团队都可以直接上手。核心思路不是依赖某一个工具的输出,而是把各层数据关联起来形成证据链——DNS线索验证网络流量异常,网络流量异常指向主机取证目标,主机取证结果又反哺情报侧的域名发现。
7. 后续跟进思路:这个基础设施还会怎么变
从Aeternum目前暴露的技术特征看,它还在持续迭代中。我在分析旧样本和最新捕获样本时,发现了一个明显的变化趋势:通信协议层面,它正在试验基于DNS隧道和HTTPS协议的混合通道。DNS隧道作为备用通道,在主HTTPS通道被切断时接管通信;而HTTPS主通道则在持续优化TLS指纹仿真精度。
这意味着防守方的压力会进一步加大。DNS隧道流量极难从单包维度判断异常,基本依赖行为分析;而HTTPS通道的仿真程度越高,被动检测的盲区就越大。我的判断是,未来针对这类C2的对抗,技术核心会从“识别恶意流量”转向“刻画正常流量”——只有把正常基线刻画得足够精准,偏离基线的异常行为才有机会暴露出来。这个方向对数据采集的广度和时长都提出了更高要求,单靠流量镜像已经不够,需要结合DNS日志、代理日志、终端行为日志做全方位关联。
最后分享一个实操中的体会:分析这类高级基础设施,心态上要有“打持久战”的准备。第一波分析往往只能看到冰山一角,需要持续跟踪域名变化、样本迭代、流量演进,把每一次捕获都当作拼图的一部分,才能拼出完整的设施图谱。别指望一次分析就能彻底解决问题,但只要保持追踪链路不断,攻击者的每一次动作都会留下痕迹,而这些痕迹就是防守方最宝贵的积累。