蓝队笔记整理01 C2 远控与 Webshell 流量特征

从流量里认出「谁在打你」------蚁剑 / 冰蝎 / 哥斯拉 / Metasploit / CobaltStrike 全特征拆解


📌 来源声明|本文为学习笔记整理,非原创 主体内容整理自 CSDN 博主 @一只枷锁 的 HW 系列文章,原文链接:

本文在原文基础上做了结构重排、原理补全与错误修正(修正处标 ⚠️,补充处标 💡),并补充了公开资料中的 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 的两点补充(原文开头引用部分):

  1. JA3S 值取决于操作系统 ------ Win10 是一种,Win11 是另一种。所以建签名库时要按 OS 分别采集;

  2. 反编译 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 木马

⚠️ 两个必须知道的坑

  1. 指纹必须建库,不能背一个值。 JA3 与操作系统、CS 版本、Java 版本都有关,同一个 CS 在不同系统上指纹不同。正确做法是采集自己环境的基线,再比对异常值,而不是全网搜一个"魔数"。

  2. 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,告警量会淹没人。四层都得有,但研判权重从上到下递增。
💡 给值守同学的可操作建议

  1. 出网 DNS 必须单独监控(很多单位只盯 80/443,DNS 是默认放行的大漏勺)。

  2. 心跳检测别写死"3 秒",写等间隔 + 等长包的统计特征,攻击者调速也躲不开。

  3. 抓到可疑主机先断网再取证,顺序反了攻击者会收到"失联信号"直接清痕。


🧾 九、总结

9.1 十条要点
  1. 加密藏不住习惯 :密码学保护的是内容,但节奏、格式、握手指纹藏不住,这是流量分析成立的根本前提。

  2. 检测要分四层:静态特征(快而脆)→ 协议指纹(稳)→ 行为特征(改不掉)→ 主机日志(可溯源)。单层都不可靠。

  3. 强特征定性,弱特征打捞 :Cookie 末尾分号、MD5 夹心、checksum8=92 可直接判;Accept、随机 UA、TCP 重传只能加权。

  4. 蚁剑认 @ini_set 和 _0x :@ini_set("display_errors","0");@set_time_limit(0); 没有正常业务会这么发。

  5. 冰蝎认 e45e329feb5d925b :3.0 起固定密钥,成了全网通用指纹;3.0+ 的 application/octet-stream 是第二强特征。

  6. 冰蝎的 UA 池是反向指纹 :16 个 Chrome 14 / Firefox 6 / IE 8 级老 UA 随机切------随机本身就是破绽。

  7. 哥斯拉认 Cookie 分号和 MD5 夹心 :;[ \t]*$ 与 16位hex + Base64 + 16位hex,PHP 小写 MD5、Java 大写。

  8. Metasploit 认 4444 与 MZ 标头 :Staged 露行为、Stageless 露体积,两者必居其一;主机侧抓 CreateRemoteThread。

  9. CobaltStrike 认 checksum8=92 与心跳 :72a589da586844d7f0818ce684948eea 是经典 JA3S;JA3S 值随操作系统变化,需建库。

  10. 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 通道、内网横向移动、日志篡改或未授权端口扫描,均属违法。

  • 如需转载请注明原作者与本文出处;如有侵权请联系删除。

相关推荐
学逆向的39 分钟前
C 宏函数
c语言·开发语言·网络安全
丑梨数据1 小时前
法律合同知识库怎么搭:从图片压缩到私有化 RAG 的工程笔记
开发语言·笔记·c#
江屿风1 小时前
【Plain Language Large Model】【大语言模型底层原理全解析:从Token生成到智能体演进】流食般投喂
人工智能·笔记·语言模型·llm·json·token·聊天模板
启博网络1 小时前
智慧档案库房工业组网:MR-1280 边缘大脑,实现温湿度、漏水、防火防盗设备智能联动教程
运维·网络·物联网·网络协议·网络安全·信息与通信·sdwan
Z21-X1 小时前
云原生运维学习笔记:揭开虚拟化的硬核面纱,从底层架构到KVM实战
运维·笔记·学习·云原生
深圳老胡1 小时前
STM32C5A3ZG开发板:基于STM32CubeMX与VSCode的按键检测与LED闪烁实战
笔记·stm32·单片机·代码规范
天疆说1 小时前
DeepSeek 开源学习中心公开课调研笔记
笔记·学习·开源
Rabitebla2 小时前
【Linux】 权限篇(三):深入理解 umask 位运算与粘滞位的设计思想
java·linux·服务器·c++·笔记·学习
实名上网宋凯宣3 小时前
现代电网可靠性测试系统-VPP工作笔记
笔记·学习