从流量里认出「谁在打你」------蚁剑 / 冰蝎 / 哥斯拉 / Metasploit / CobaltStrike 全特征拆解
📌 来源声明|本文为学习笔记整理,非原创 主体内容整理自 CSDN 博主 @一只枷锁 的 HW 系列文章,原文链接:
- 《【HW系列】---C2远控服务器(webshell链接工具、metasploit、cobaltstrike)的漏洞特征/流量特征》 【HW系列】---C2远控服务器(webshell链接工具, metasploit、cobaltstrike)的漏洞特征流量特征_cobalt strike流量特征-CSDN博客
本文在原文基础上做了结构重排、原理补全与错误修正(修正处标 ⚠️,补充处标 💡),并补充了公开资料中的 TLS 指纹数据与工程化检测建议。 感谢原作者分享,如有侵权请联系删除。
🧭 导读:这篇解决什么问题
护网值守最常遇到的尴尬是------设备报了一堆告警,但你说不清这是谁、用的什么工具、已经打到哪一步了。
本篇把「流量」这一层讲透:攻击者的载荷可以加密到完全看不懂,但通信的节奏、格式、握手指纹藏不住。掌握这些「不像人的行为」,你就能在告警海洋里一眼认出 C2 与 Webshell。
阅读主线:
认知框架(为什么能被检测)
↓
三款 Webshell 管理工具(蚁剑 / 冰蝎 / 哥斯拉)
↓
两款 C2 框架(Metasploit / CobaltStrike)
↓
检测规则 → 防御与应急响应
⚠️ 合规前提 :本文所有特征与规则仅用于防守侧检测、护网值守与授权渗透测试。 未经授权对他人系统实施远控、植入 Webshell 或建立 C2 通道,均属违法。
📕 第一章 · C2 远控与 Webshell 流量特征
📌 本章整理自文章 《【HW系列】---C2远控服务器(webshell链接工具、metasploit、cobaltstrike)的漏洞特征/流量特征》 (CSDN @一只枷锁,2025-09-18)。 原文是零散的要点罗列,这里重组成一条线:认知框架 → 三款 Webshell 管理工具 → 两款 C2 框架 → 检测规则 → 防御与溯源。
一句话概括:攻击者可以加密载荷,但很难藏住"通信习惯"。 密码学能藏"内容",藏不住"节奏、格式、握手指纹"------所以流量分析永远是护网里最硬的那块砖。
🗺️ 〇、一页速览
| # | 章节 | 你会拿到什么 |
|---|---|---|
| 1 | 认知框架 | C2 的两种形态 · 检测的四个层次 · 强特征 vs 弱特征 · 一句话特征速记 |
| 2 | 蚁剑 AntSword | @ini_set 固定代码 · _0x 参数名 · 随机串包裹响应 |
| 3 | 冰蝎 Behinder | 动态密钥 → 固定密钥 e45e329feb5d925b · application/octet-stream · 老旧 UA 池 |
| 4 | 哥斯拉 Godzilla | Cookie 末尾多余分号 · MD5 前后 16 位夹 Base64 · 长连接 |
| 5 | 三剑客横向对比 | 一张表定位"看到这个特征 = 哪个工具" |
| 6 | Metasploit | 4444 端口 · Staged/Stageless · MZ 标头 · 进程注入与 Sysmon |
| 7 | CobaltStrike | checksum8 = 92 · 心跳包 · JA3S 指纹 · DNS Beacon 三种记录 |
| 8 | 检测规则 | 可直接抄的 Suricata 规则集 + 分层检测清单 |
| 9 | 防御与处置 | 流量侧 / 主机侧 / 出口侧三道闸 + 应急响应顺序 |
| 10 | 总结 | 十条要点 + 一句话收尾 + 工具与资料清单 |
📌 阅读建议:护网值守时直接跳 第 5 章对比表 和 第 8 章规则 ;想知道"为什么这个特征可信"回 第 1 章。
🧠 一、认知框架:先看懂"为什么能检测"
1.1 C2 的两种形态
护网里遇到的"远控",本质上就两类,混淆点不一样,抓法也不一样:
| 形态 | 代表 | 本质 | 谁在说话 |
|---|---|---|---|
| Webshell 管理工具 | 蚁剑、冰蝎、哥斯拉 | 一个 Web 后门脚本 + 一个图形化客户端 | 客户端(攻击者本机)↔ 站点脚本 |
| C2 框架 | Metasploit、CobaltStrike | 完整的"载荷投放---上线---横向---持久化"体系 | 被控主机上的 Beacon/Payload ↔ C2 服务器 |
💡 关键差别:Webshell 的流量借道正常业务端口 (80/443),藏在 Web 请求里; C2 框架的流量往往会开新端口或走异常协议(4444、DNS),更容易从出口侧被发现。
1.2 检测的四个层次(从易到难,从脆到稳)
| 层次 | 抓什么 | 优点 | 缺点 | 举例 |
|---|---|---|---|---|
| ① 静态特征 | 固定字符串、默认密钥、默认端口 | 命中即报警,快 | 改一行配置就失效 | e45e329feb5d925b、端口 4444 |
| ② 协议指纹 | TLS 握手、证书、JA3/JA3S | 难伪装,与载荷内容无关 | 需要采集能力 | CS 的 72a589da... |
| ③ 行为特征 | 心跳间隔、请求节奏、连接时长 | 改配置也难改掉"习惯" | 需要基线,有误报 | 每 3 秒一次 GET |
| ④ 主机日志 | 进程创建、线程注入、父子进程关系 | 落地即证据,可溯源 | 需要提前装好 Agent | Sysmon CreateRemoteThread |
⚠️ 单一层次都不可靠。真实值守是 ①打捞 → ②定性 → ③关联 → ④溯源 的流水线。
1.3 强特征 vs 弱特征(决定能不能"直判")
这是原文没点破、但实操里最重要的一条分界线:
| 强特征 | 弱特征 | |
|---|---|---|
| 定义 | 默认实现留下的、难以解释成正常流量的痕迹 | 看像异常、但正常软件也可能如此 |
| 处置 | 可直接定性告警 | 只能做加权评分,不能单独定性 |
| 例子 | Cookie 末尾多余分号、MD5 前后 16 位夹 Base64、checksum8=92 | Accept: application/json...、随机 UA、Keep-Alive |
📌 值守铁律:弱特征用来"捞",强特征用来"判"。 用弱特征直接判,一晚上全是误报。
1.4 一句话特征速记(原文金句)
蚁剑:@ini_set("display_errors","0")、_0x[A-Fa-f0-9]+
冰蝎:application/octet-stream、e45e329feb5d925b
哥斯拉:;[ \t]*$(Cookie 末尾分号)、[A-Fa-f0-9]{16}[A-Za-z0-9+/=]+[A-Fa-f0-9]{16}
💡 这三行就是三款工具的"身份证号"------背下来,抓包时一眼就能认人。
🐜 二、蚁剑(AntSword)流量特征
2.1 基础请求特征
| 特征点 | 具体内容 | 强度 |
|---|---|---|
| 固定 PHP 片段 | @ini_set("display_errors","0");@set_time_limit(0); ------ 关错误显示 + 取消超时限制 |
强 |
| 参数名 | 加密后参数名以 _0x 开头,如 _0x1234=加密数据 |
强 |
| 正则 | _0x[A-Fa-f0-9]+ |
强 |
| User-Agent | 默认 antsword/xxx,但可改代码伪装成 Opera / Chrome |
中(默认时强) |
📌
@ini_set("display_errors","0")为什么是强特征? 没有正常业务会在请求体里下发这句代码。 它只可能来自"我要安静地执行一句话木马"这个意图。
2.2 加密与编码
-
默认编码:Base64、Chr、ROT13 等多种可选;
-
未加密时 :流量明文可见
eval或assert函数调用------这是最扎眼的一种,属"裸奔"; -
响应特征 :返回数据被随机字符串包裹 ,形如
a1cc2fb143b...d7ef08da,真实输出夹在中间。
# 典型响应结构(示意)
<随机前缀 a1cc2fb143b> <真实回显内容> <随机后缀 d7ef08da>
💡 随机串包裹的目的是"让响应长度和形态不固定",但正因如此------每次都不一样、且没有业务语义------反而成了可检测的行为特征。
2.3 行为特征
-
高频重传:网络不稳或虚拟机性能差时会触发 TCP 重传。
⚠️ 这条不能单独定性 。重传本身很常见,必须结合上下文(是不是同时出现了
_0x参数)判断。属于典型弱特征。
🦂 三、冰蝎(Behinder)流量特征
3.1 协议与加密特征
密钥协商机制的演进(这是识别版本的关键):
| 版本 | 密钥方式 | 说明 |
|---|---|---|
| 冰蝎 2.0 | 动态密钥 | 通过 GET/POST 协商密钥,如 /shell.jsp?pass=密钥,之后用 AES + Base64 传输 |
| 冰蝎 3.0+ | 固定密钥 | 取消动态协商,改用默认固定密钥 e45e329feb5d925b |
# 冰蝎默认密钥(即 AES key 的 MD5 前 16 位)
e45e329feb5d925b
⚠️ 版本演进的攻防含义: 2.0 的协商过程 本身就是特征(一次带
pass=的 GET); 3.0 砍掉了协商,但也因此固化了密钥 ------只要不改,全网通用的这一个十六进制串就是最强指纹。
Content-Type 标识 :冰蝎 3.0 及以上,请求头里 Content-Type 常为 application/octet-stream(二进制流)。 正常 Web 表单几乎不会用这个值提交,属强特征。
3.2 请求头特征
User-Agent 随机化 :内置 16 个老旧 UA 头,每次连接随机挑一个。
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50
Opera/9.80 (Windows NT 6.1; U; zh-cn) Presto/2.9.168 Version/11.50
Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; Tablet PC 2.0; .NET4.0E)
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.3)
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36 ← 冰蝎3.0 示例
Mozilla/5.0 (iPhone; CPU iPhone OS 13_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.5 Mobile/15E148 Safari/604.1 ← 冰蝎3.0 示例
💡 "随机"反而暴露了它自己。 真实浏览器会随版本更新 UA,且同一会话内保持一致;冰蝎是同一会话里 UA 来回跳 ,而且跳的都是 Chrome 14 / Firefox 6 / IE 8 这类早该进博物馆的版本。 判据:UA 频繁变化 + UA 版本老旧 两者同时出现,可信度立刻拉满。
Accept 字段 :默认 application/json, text/javascript, */*; q=0.01。
📌 原文明确标注这是弱特征------很多前端框架也会发类似值,只能加权不能定性。
3.3 固定代码与端口特征
- PHP Webshell 服务端代码:
$post=Decrypt(file_get_contents("php://input"));
eval($post);
- JSP 版本 :使用长端口号 (如
49700附近)并且递增连接。
🧠
php://input+eval是冰蝎的标配骨架。看到服务端文件或流量里出现"读原始输入流 → 解密 → eval"这三段式,基本可以定性。 而"49700 附近递增"这种端口递增规律,属于典型的工具自动化痕迹。
🦖 四、哥斯拉(Godzilla)流量特征
4.1 强特征标识
① Cookie 末尾多余分号(最经典的一招)
JSESSIONID=xxx; ← 注意末尾这个分号
正常 HTTP 请求里 Cookie 结尾不会带分号。这个违反 RFC 的小瑕疵,是哥斯拉最硬的指纹。
💡 正则写法:
;[ \t]*$(Cookie 值结尾是分号 + 可选的空白)
② 响应体的 MD5 夹心结构
返回数据采用 Base64 编码时,会把 32 位 MD5 拆成前后各 16 位,夹住中间的 Base64 数据:
[md5 前 16 位] + [Base64 数据] + [md5 后 16 位]
| 版本 | MD5 大小写 |
|---|---|
| PHP 版 | 小写 MD5 |
| Java 版 | 大写 MD5 |
对应正则:
[A-Fa-f0-9]{16}[A-Za-z0-9+/=]+[A-Fa-f0-9]{16}
🧠 判据价值极高:自然业务几乎不可能产出"16 位十六进制 + Base64 + 16 位十六进制"这种三段式响应体。 而且大小写还能顺带判断目标站点语言(PHP / Java),做下一步的载荷猜测。
4.2 请求与加密特征
| 特征点 | 内容 |
|---|---|
| 默认 User-Agent | 暴露 JDK 版本,如 Java/1.8.0_121(可自定义) |
| 加密模式 | 支持 AES、XOR、RAW 多种 |
| XOR 标记 | 请求体可能包含 XORHEAD 和 XORBODY 标记 |
⚠️
Java/1.8.0_121这种 UA 出现在对外 Web 请求里很反常------正常用户是用浏览器访问的。
4.3 行为与连接特征
-
长连接 :默认启用
Connection: Keep-Alive,减少握手开销; -
初始化流量 :首次连接会发大体积数据包 用于密钥协商,之后请求携带固定 Cookie。
📌 抓包时的手感:"一大包 + 之后一串小包 + Cookie 固定不变"。 固定 Cookie 也是加分项------正常业务的 Cookie 会带会话轮换,长期一字不变的很少见。
4.4 行为分析要点(原文总结)
监控对象:User-Agent 频繁变化、异常端口(如 49700)、长连接请求
🆚 五、三剑客横向对比速查表
| 维度 | 蚁剑 AntSword | 冰蝎 Behinder | 哥斯拉 Godzilla |
|---|---|---|---|
| 最强指纹 | @ini_set("display_errors","0") |
默认密钥 e45e329feb5d925b |
Cookie 末尾多余分号 |
| 参数/路径特征 | 参数名 _0x[A-Fa-f0-9]+ |
Content-Type: application/octet-stream |
--- |
| 响应特征 | 随机字符串包裹真实回显 | AES+Base64 密文 | MD5 前后 16 位夹 Base64 |
| 密钥机制 | 可无加密(明文 eval/assert) |
2.0 动态协商 → 3.0 固定密钥 | 首次连接大包协商 |
| UA | 默认 antsword/xxx,可伪装 |
16 个老旧 UA 随机切换 | 默认暴露 JDK 版本,可自定义 |
| 连接行为 | 可能高频 TCP 重传 | JSP 版端口 ~49700 递增 | 默认 Keep-Alive 长连接 |
| 加密能力 | Base64 / Chr / ROT13 | AES + Base64 | AES / XOR / RAW |
| 误报陷阱 | 重传很常见,别单判 | Accept 是弱特征 |
--- |
💡 一句话分人 : 看到
@ini_set→ 蚁剑;看到e45e329feb5d925b/octet-stream→ 冰蝎;看到 Cookie 末尾分号 + MD5 夹心 → 哥斯拉。
🛠️ 六、Metasploit 流量特征
6.1 工具定位
| 项 | 内容 |
|---|---|
| 性质 | 开源渗透测试框架 |
| 起源 | HD Moore 等人,2003 年 |
| 语言 | Ruby |
| 核心能力 | 漏洞利用开发与测试 |
| 规模 | 超过 750 种漏洞利用模块(SMB、Web 应用等)+ 224 种攻击载荷(Payload) |
| 覆盖 | 从扫描到后渗透全流程 |
6.2 协议与通信机制
协议类型 :主要基于 TCP(默认端口 4444) 或 HTTP(S),用于 Meterpreter 会话的实时交互。
两种投递模式------这是流量侧区分的关键:
| 模式 | 机制 | 流量表现 | 检测切入点 |
|---|---|---|---|
| Staged(分段) | 先用小型 Stager(如 windows/meterpreter/reverse_tcp)上线,再下载完整 Payload |
存在分阶段下载行为,如 HTTP GET 请求下载加密 Payload | 抓"二次下载"这个动作 |
| Stageless(无分段) | 单文件直接建立会话 | 无额外下载过程,但 Payload 体积大 | 抓"大体积单次传输"的静态特征 |
💡 权衡很有意思:Staged 藏体积但露行为,Stageless 藏行为但露体积。 攻击者只能二选一,所以两个方向都要布检测。
6.3 流量检测特征
① TCP 端口交互
-
会话建立后,常有两个端口持续交互 (如
9999与57591); -
流量中可见 MZ 标头 和 DOS 模式异常(非标准协议的数据包结构)。
🧠
MZ是 Windows PE 可执行文件的魔数("MZ"=0x4D 0x5A)。 一个声称是"业务数据"的 TCP 流里出现 PE 文件头,基本就是在传可执行体------这是非常硬的静态特征。
② HTTP 请求特征
-
路径含动态参数:
/index.php?cmd=xxx -
或直接调用敏感路径:
/meterpreter -
响应包中可能含加密的 Meterpreter 指令,如:
-
migrate--- 注入其他进程 -
hashdump--- 提取凭据
-
③ 进程注入行为(主机侧最好抓)
-
通过
rundll32.exe或svchost.exe注入恶意代码; -
Sysmon 日志会记录:
-
CreateRemoteThread事件 -
异常父进程关系
-
⚠️
svchost.exe/rundll32.exe是系统自带的"白名单进程",攻击者就靠这个做掩护。 所以看父进程 比看进程名有用:正常svchost.exe的父进程是services.exe,如果是artifact.exe或某个 Office 进程拉起来的,就是异常。
6.4 检测规则示例
alert tcp any any -> any 4444 (msg:"Metasploit Meterpreter TCP Session"; sid:10001;)
alert http any any -> any any (msg:"Metasploit Stager Download"; content:"/meterpreter"; http_uri; sid:10002;)
☠️ 七、CobaltStrike 流量特征
7.1 工具定位
| 项 | 内容 |
|---|---|
| 性质 | 商业化高级渗透测试工具 |
| 设计目标 | 红队协作 与 APT 模拟 |
| 核心能力 | 后渗透控制 |
| 实现 | 通过 Beacon 代理 实现内网横向移动、权限维持、隐蔽通信 |
📌 和 Metasploit 的分工:MSF 偏"打进去",CS 偏"进去之后"。 所以护网里真正难缠的、长期潜伏的,往往都是 CS 的 Beacon。
7.2 HTTP/S 通信特征
① HTTP-staging 模式
路径校验规则 ------ checksum8
请求路径(如 /Yle2)的 ASCII 码之和与 256 取余等于 92:
# 手工验算 /Yle2(不计开头的 "/")
'Y' = 89
'l' = 108
'e' = 101
'2' = 50
────────────
合计 = 348
348 mod 256 = 92 ✅ 命中
🧠 这是 CobaltStrike 最著名的检测点。原理是 CS 的服务端会只响应 checksum8 命中 92 的路径 ,其余一律返回正常页面。 攻击者可以改 profile 里的这个值,但绝大多数人不会改------于是 92 就成了全网通用的筛子。 实战用法:把外发 HTTP 请求的 URI 提出来算一遍,命中 92 的直接高优先级告警。
心跳包规律
-
每隔固定时间(如 3 秒)发送 GET 请求;
-
Cookie 字段携带 Base64 加密的会话元数据。
💡 "固定间隔 + 内容无业务语义"是行为侧最好抓的一类。 真人不会 3 秒一次精确地敲服务器,正常前端也不会。画出请求时间序列,周期性一眼可见。
命令下发与回传
-
任务指令:通过 HTTP 响应包中的加密内容下发;
-
执行结果:以 POST 请求回传(加密放在 Cookie 或 Body 里)。
② HTTPS 特征
| 特征 | 说明 |
|---|---|
| 默认证书 | 使用空证书 或自签名证书 |
| JA3 / JA3S 指纹 | 固定,如 72a589da586844d7f0818ce684948eea |
| Malleable C2 Profile | 可自定义 UA、路径和证书;但默认配置下仍暴露,如 /dpixel、/__utm.gif 路径 |
📌 关于 JA3S 的两点补充(原文开头引用部分):
JA3S 值取决于操作系统 ------ Win10 是一种,Win11 是另一种。所以建签名库时要按 OS 分别采集;
反编译 CS 源码可知:
92L对应 x86 位木马,93L对应 x64 位后门------能顺带判断载荷架构。实践做法:收集不同 TLS 实现的 JA3S 值建签名库,再结合其他特征与行为综合判断,不要单靠一个哈希。
7.3 DNS 通信特征(DNS-stageless 模式)
当 HTTP 出网被限制时,CS 可以走 DNS 隧道。三种记录各司其职:
| 环节 | 记录类型 | 具体表现 |
|---|---|---|
| 上线请求 | A 记录 | 通过 www6.<域名> 发送 16 进制编码的靶机信息 ;C2 响应 0.0.0.0 确认 |
| 命令下发 | TXT 记录 | 用 TXT 传递加密 Payload;响应 IP 为非常规值,如 0.0.0.243 |
| 结果回传 | A 记录 | 通过 post.<域名> 的 A 记录查询回传数据 |
整体表现:DNS 流量中出现高频异常请求。
⚠️ DNS 隧道为什么危险?------ 绝大多数企业防火墙不拦 DNS 出网 (拦了就上不了网)。 所以 DNS 是 C2 最常用的"最后一条路",必须单独监控: 异常长的子域名、异常的 TXT 查询量、
www6/post这类固定前缀、响应 IP 落在0.0.0.x段。
7.4 检测规则示例
alert http any any -> any any (msg:"CobaltStrike Checksum8 Path"; content:"/Yle2"; http_uri; pcre:"/^\/[A-Za-z0-9]{4}$/"; sid:20001;)
alert dns any any -> any any (msg:"CobaltStrike DNS Beacon"; content:"www6."; depth:5; sid:20002;)
💡 第二条规则的思路值得学:它不比内容,只比域名前 5 个字节是不是
www6.。 特征越短、越靠前,匹配越快------适合放在高吞吐链路上做初筛。
🔎 八、检测与防御
8.1 检测方法
① 流量分析
-
监控 HTTP 路径的 checksum8 规则 、固定心跳间隔 、异常 DNS 请求;
-
识别 JA3/JA3S 指纹 或 自签名证书的异常使用。
② 日志溯源
-
通过 Sysmon 日志追踪:
-
异常进程创建(如
artifact.exe启动rundll32.exe注入); -
网络连接事件。
-
📌 原文此处有一句关键的红队视角建议,蓝队必须反过来读 : 原文"防御策略"里写的 "升级至 Metasploit/CobaltStrike 最新版本、禁用默认配置(更换证书、修改默认端口)"、"使用 Malleable C2 Profile 自定义流量特征以规避静态规则检测" ------ 这些其实是攻击方的反检测措施 ,不是防守方的加固动作。 蓝队的正确理解是:对手一定会改默认配置,所以绝不能只靠静态特征,必须叠加协议指纹与行为分析。
8.2 防御策略(蓝队视角重排)
① 网络侧
-
部署 WAF,拦截含 checksum8 路径、异常 Cookie 或异常 DNS 记录的请求;
-
限制非业务端口的出站流量(如 4444,以及 53 / 80 / 443 之外的非常用端口);
-
特别地:DNS 出网要收敛到内部 DNS,禁止主机直连外部 DNS,从根上掐断 DNS Beacon。
② 主机侧
-
部署 Sysmon 并开启
CreateRemoteThread、进程创建、网络连接的采集; -
关注异常父子进程关系(这条比进程名可靠得多)。
③ 检测侧
-
建立 JA3S 签名库(按操作系统分档采集),避免单个哈希过时;
-
对 HTTP 请求 URI 做 checksum8 批量计算,命中 92 的直接提优先级;
-
对时间序列做周期性分析,抓心跳。
8.3 完整的 Suricata 规则速查
# ---------- Metasploit ----------
alert tcp any any -> any 4444 (msg:"Metasploit Meterpreter TCP Session"; sid:10001;)
alert http any any -> any any (msg:"Metasploit Stager Download"; content:"/meterpreter"; http_uri; sid:10002;)
# ---------- CobaltStrike ----------
alert http any any -> any any (msg:"CobaltStrike Checksum8 Path"; content:"/Yle2"; http_uri; pcre:"/^\/[A-Za-z0-9]{4}$/"; sid:20001;)
alert dns any any -> any any (msg:"CobaltStrike DNS Beacon"; content:"www6."; depth:5; sid:20002;)
⚠️ 这些规则只是起点,不是终点。它们全部命中在"静态特征"层,改一下 profile 就失效。 生产环境务必配合 JA3S 指纹库与行为检测一起用。
8.4 应急响应顺序(实操建议)
① 确认 :哪个特征命中的?强特征还是弱特征?(强特征可直接定性)
② 定性 :反推工具与版本 → 反推攻击者能力阶段(Webshell = 已落地;Beacon = 已建立 C2)
③ 圈范围 :以外网 IP + 内网会话为锚,拉全量流量,找同源的其它连接
④ 定位主机:用 Sysmon 日志找异常进程树与 CreateRemoteThread
⑤ 止血 :先断 C2 出网(封 IP/域名、收敛 DNS),再清主机
⑥ 溯源 :Webshell 文件时间、日志留存、横向路径复盘
💡 先断网,后清主机。 只杀马不断链,攻击者下一秒就换个马重新上线。
🧬 八-B、笔记补充:JA3 / JA3S 指纹速查
💡 为什么单独列一节 :JA3 / JA3S 是极少数"改不掉"的特征 。 Malleable C2 Profile 能改 UA、改 URI、改证书、改请求头 ------ 但改不了 TLS 握手的实现细节。 换句话说:Profile 能改"应用层说什么",改不了"传输层怎么握手"。
| 指纹类型 | 典型值 | 说明 |
|---|---|---|
| JA3(Client Hello) | 72a589da586844d7f0818ce684948eea |
Win10 + HTTPS Beacon 的客户端指纹,随 CS 版本 + 操作系统变化 |
| JA3S(Server Hello) | fd4bc6cea4877646ccd62f0792ec0b62 |
CentOS 上 CS 4.4 服务端的已知指纹 |
| JA3S 与位数 | 92L / 93L |
原文引用值,92 ≈ x86 木马,93 ≈ x64 木马 |
⚠️ 两个必须知道的坑
指纹必须建库,不能背一个值。 JA3 与操作系统、CS 版本、Java 版本都有关,同一个 CS 在不同系统上指纹不同。正确做法是采集自己环境的基线,再比对异常值,而不是全网搜一个"魔数"。
JA3S 的可信度高于 JA3。 服务端是攻击者自己的 C2,客户端可能被 defender/代理改写;所以实战中优先盯 JA3S。
🧬 八-C、笔记补充:DNS Beacon 的"三阶段"读法
原文把 DNS 特征列成了零散条目,实战中把它们串成一条链更好记 ------ DNS Beacon 的一次完整通信必然走完这三步:
① 上线 A 记录:www6./cdn./api./www. + <16进制主机信息> → C2 回 0.0.0.0
↓
② 下发 A 记录 api<hex> 告知"可以下发任务" → TXT 记录 api<hex> 等待 C2 返回加密 Payload
↓
③ 回传 A 记录 post<hex> 携带执行结果
为什么这个顺序很重要:
| 阶段 | 检测到意味着什么 | 处置优先级 |
|---|---|---|
| 只有 ① | 主机已上线,已被控制 | 🔴 立即隔离 |
| 出现 ② | 攻击者正在下发指令 | 🔴 立即隔离 + 抓内存 |
| 出现 ③ | 数据已经回传 | 🔴 隔离 + 启动泄露评估 |
💡 响应码
0.0.0.x是最硬的弱特征 :正常 DNS 几乎不会返回0.0.0.0、0.0.0.80、0.0.0.241这类非常规 IP。 单看一条可能是配置错误,但同一域名高频返回0.0.0.x,基本可以直接定性。
🧬 八-D、笔记补充:从「特征检测」走向「体系化检测」
单条 Suricata 规则能抓默认配置的攻击者,抓不住改过配置的。工程上建议按四层递进建能力:
| 层级 | 检测什么 | 稳定性 | 绕过难度 | 落地方式 |
|---|---|---|---|---|
| L1 · IOC | IP、域名、UA、URI、证书指纹 | 低(改配置即失效) | 极易 | 威胁情报 + 黑名单 |
| L2 · 指纹 | JA3/JA3S、checksum8、TLS 握手特征 | 中 | 需改源码/换实现 | 流量设备 + 指纹库 |
| L3 · 行为 | 心跳周期、上下行等长、包长分布 | 高 | 需重写通信逻辑 | 流量建模 / NDR |
| L4 · 关联 | 进程树 + 网络连接 + 主机日志 | 最高 | 几乎不可能全遮 | EDR + Sysmon + SIEM |
一句话原则:
L1 用来"快筛",L2/L3 用来"定性",L4 用来"溯源和做证据"。 只靠 L1,改个 UA 你就瞎了;只靠 L4,告警量会淹没人。四层都得有,但研判权重从上到下递增。
💡 给值守同学的可操作建议
出网 DNS 必须单独监控(很多单位只盯 80/443,DNS 是默认放行的大漏勺)。
心跳检测别写死"3 秒",写等间隔 + 等长包的统计特征,攻击者调速也躲不开。
抓到可疑主机先断网再取证,顺序反了攻击者会收到"失联信号"直接清痕。
🧾 九、总结
9.1 十条要点
-
加密藏不住习惯 :密码学保护的是内容,但节奏、格式、握手指纹藏不住,这是流量分析成立的根本前提。
-
检测要分四层:静态特征(快而脆)→ 协议指纹(稳)→ 行为特征(改不掉)→ 主机日志(可溯源)。单层都不可靠。
-
强特征定性,弱特征打捞 :Cookie 末尾分号、MD5 夹心、checksum8=92 可直接判;
Accept、随机 UA、TCP 重传只能加权。 -
蚁剑认
@ini_set和_0x:@ini_set("display_errors","0");@set_time_limit(0);没有正常业务会这么发。 -
冰蝎认
e45e329feb5d925b:3.0 起固定密钥,成了全网通用指纹;3.0+ 的application/octet-stream是第二强特征。 -
冰蝎的 UA 池是反向指纹 :16 个 Chrome 14 / Firefox 6 / IE 8 级老 UA 随机切------随机本身就是破绽。
-
哥斯拉认 Cookie 分号和 MD5 夹心 :
;[ \t]*$与16位hex + Base64 + 16位hex,PHP 小写 MD5、Java 大写。 -
Metasploit 认 4444 与 MZ 标头 :Staged 露行为、Stageless 露体积,两者必居其一;主机侧抓
CreateRemoteThread。 -
CobaltStrike 认 checksum8=92 与心跳 :
72a589da586844d7f0818ce684948eea是经典 JA3S;JA3S 值随操作系统变化,需建库。 -
DNS 是最容易被忽略的出网口 :
www6.(A 记录上线)、TXT 下发、post.(A 记录回传)、响应0.0.0.x------ 必须单独监控。
9.2 一句话收尾
攻击工具和正常软件的区别,从来不在"传了什么",而在"怎么传"。 内容可以加密到看不懂,但三秒一次的心跳、末尾多出来的分号、早该进博物馆的 UA------这些"不像人的行为",才是护网里最诚实的证据。
9.3 工具与资料
| 资源 | 说明 |
|---|---|
| Suricata | 开源 IDS/IPS,本文规则的落地方;建议配合 ET 规则集使用 |
| Sysmon | Windows 主机日志采集,重点开 CreateRemoteThread、进程创建、网络连接 |
| Wireshark / tcpdump | 手工验证特征、导出 URI 做 checksum8 计算 |
| JA3 / JA3S | TLS 握手指纹,需按操作系统分档建立签名库 |
| CobaltStrike 流量分析参考 | blog.csdn.net/qq_35258863/article/details/130298946(原文引用的 JA3S / 92L/93L 出处) |
| 原文 | shining.blog.csdn.net/article/details/148315531 |
🔗 系列导航
本系列共四篇,构成一条完整的蓝队证据链:
① 流量特征 ── 谁在打
↓
② 日志分析 ── 怎么进来的 / 干了什么
↓
③ 主机排查 ── 东西藏在哪 / 它是谁
↓
④ 防御体系 ── 怎么防 / 打穿了也能救
| 篇 | 主题 | 一句话 |
|---|---|---|
| 1 ⬅ | C2 远控与 Webshell 流量特征 | 从流量里认出「谁在打你」 |
| 2 | 中间件与主机日志分析 | 从日志里还原「发生了什么」 |
| 3 | Windows / Linux 入侵排查与溯源 | 从主机上找出「它藏在哪」 |
| 4 | 安全设备、内网处置与云上防护 | 从体系上做到「防得住」 |
🙏 致谢与声明
-
内容来源 :CSDN @一只枷锁 的 HW 系列文章(具体链接见各章开头)。本文为学习笔记整理,非原创。
-
本文改动:结构重排、原理补全、错误修正(补充处标 💡,修正处标 ⚠️),并补充了公开资料中的指纹数据、排查顺序与落地清单。
-
合规声明 :本文所有特征、规则与命令仅用于防守侧检测、护网值守与授权渗透测试/应急响应。 未经授权对他人系统实施远控、植入 Webshell、建立 C2 通道、内网横向移动、日志篡改或未授权端口扫描,均属违法。
-
如需转载请注明原作者与本文出处;如有侵权请联系删除。