HFish 蜜罐流量特征与协议特征分析
基于 HFish 3.3.6 本地实验环境的协议返回、流量行为与 Web 指纹分析
摘要
关键词
一、前言


二、实验环境与网络拓扑
项目 | 配置/说明 |
Windows 主机网卡 | VMware Network Adapter VMnet8 |
目标虚拟机 IP | 192.168.111.128/24 |
HFish 版本 | HFish 3.3.6 |
HFish 安装目录 | /opt/hfish/3.3.6 |
HFish 数据目录 | /usr/share/hfish |
真实 SSH 管理端口 | 22222/tcp |
HFish SSH 蜜罐端口 | 22/tcp |
抓包位置 | Windows 主机监听 VMnet8 |
三、HFish 整体端口暴露特征
端口 | 服务/蜜罐 | 当前状态 | 主要可见特征 |
22/tcp | HFish SSH 蜜罐 | open | 服务端 Banner:SSH-2.0-OpenSSH_7.4;后续为 SSH 加密协商流量 |
23/tcp | HFish Telnet 蜜罐 | open | 无初始 login/password 提示;任意输入固定返回 test |
6379/tcp | Redis 蜜罐 | open | 明文 PING 返回 ING;标准 RESP PING 返回 +ok |
9200/tcp | Elasticsearch 蜜罐 | open | 返回固定 JSON:cluster_name=elasticsearch,lucene_version=4.10.2 |
8080/tcp | IOT-HIKCAM Web 蜜罐 | open | 登录页;HTTP Header 中存在 HFish Web 通用特征 |
8081/tcp | ESXi Web 蜜罐 | open | 登录页标题为“登录 - VMware ESXi”;HTTP Header 中存在通用特征 |
9000/tcp | Coremail Web 蜜罐 | open | 登录页标题为“Coremail邮件系统”;使用 login.js 提交登录表单 |
7879/tcp | HFish Local/HTTP 服务 | open | GET / 返回 404 page not found;异常请求返回 400 Bad Request |
4433/4434 | HFish 管理/API 相关服务 | open | HTTPS/HTTP2 下根路径返回 404;用于管理或节点通信相关场景 |
135/139/445/1433/3389 | TCP 监听类蜜罐 | open | 主要用于触发连接/扫描告警,协议层主动返回较弱 |

四、协议类蜜罐流量特征分析
4.1 SSH 蜜罐特征

分析项 | HFish SSH 蜜罐表现 | 真实 SSH 服务常见表现 |
Banner | SSH-2.0-OpenSSH_7.4 | 与系统发行版和 OpenSSH 版本相关,例如 OpenSSH_8.9p1 Ubuntu |
加密前可见内容 | 服务端 Banner、客户端 Banner、KEXINIT | 同样可见 Banner 与 KEXINIT |
账号密码可见性 | SSH 加密后不可直接在 Wireshark 看到明文 | 不可直接看到明文 |
识别重点 | 固定旧版本 Banner、算法组合、HostKey 指纹变化 | 版本与系统环境通常更一致 |
4.2 Telnet 蜜罐特征

输入内容 | HFish Telnet 返回 | 特征说明 |
admin | test | 无论输入内容如何,返回固定字符串 |
root | test | 缺少真实 Telnet 登录上下文 |
123456 | test | 上下文关联性弱 |
任意字符串 | test | 模板化返回,可作为检测特征 |

4.3 Redis 蜜罐特征



测试方式 | 输入 | HFish 返回 | 真实 Redis 常见返回 |
明文 PING | PING\r\n | ING | +PONG\r\n 或协议错误 |
明文 INFO | INFO\r\n | NFO | 包含 redis_version 等大量 INFO 信息 |
RESP PING | *1\r\n$4\r\nPING\r\n | +ok\r\n | +PONG\r\n |
4.4 Elasticsearch 蜜罐特征

字段/响应头 | HFish 表现 | 识别意义 |
name | 空字符串 | 真实集群通常存在节点名称 |
version.number | 空字符串 | 真实 Elasticsearch 通常返回明确版本号 |
lucene_version | 4.10.2 | 固定模板字段 |
tagline | You Know, for Search | 旧版 Elasticsearch 风格标语 |
Content-Type | text/plain; charset=utf-8 | 与真实 JSON API 的 application/json 风格不完全一致 |


五、Web 类蜜罐流量特征分析
5.1 IOT-HIKCAM Web 蜜罐(8080)

5.2 ESXi Web 蜜罐(8081)
scripts/main.jsbower_components/requirejs/require.jsbower_components/es5-shim/es5-shim.js
5.3 Coremail Web 蜜罐(9000)
../common/assets/83306/jquery/jquery-1.8.2.min.js../common/assets/login/login.js
5.4 Web 通用响应头指纹


Header | HFish 表现 | 分析价值 |
Server | JSP3/2.0.14 | 跨多个 Web 蜜罐复用,具有较强指纹价值 |
Content-Md5 | 随机字符串 | 值会变化,但字段名稳定 |
Ohc-Cache-Hit | 随机字符串 | 字段名较特殊,适合做 Header 指纹 |
Set-Cookie | session=32位hex | 不同伪装页面均使用统一 session 格式 |
Timing-Allow-Origin | * | 跨模板复用,可作为辅助特征 |

5.5 登录爆破记录机制分析
/v1/asset/passwords/v1/asset/passwords/stats/v1/asset/passwords/keyword/v1/asset/passwords/export
组件 | 作用 |
伪装登录页 | 模拟真实系统页面,引导攻击者提交账号密码 |
/login | 不同 Web 模板统一使用或包含的登录提交入口 |
hfish-server | 处理请求、识别服务、记录攻击行为与凭据 |
hfish.passwords 表 | 保存用户名、密码、来源 IP、目标端口、服务类型、时间等信息 |
Username.c96da552.js | 管理后台账号密码页面,调用 /v1/asset/passwords 相关 API 展示数据 |

六、Wireshark 抓包与过滤方法
分析目标 | Wireshark 显示过滤器 |
所有 HFish 流量 | ip.addr == 192.168.111.128 && tcp |
SSH 蜜罐 | ip.addr == 192.168.111.128 && tcp.port == 22 |
Telnet 蜜罐 | ip.addr == 192.168.111.128 && tcp.port == 23 |
Redis 蜜罐 | ip.addr == 192.168.111.128 && tcp.port == 6379 |
Elasticsearch 蜜罐 | ip.addr == 192.168.111.128 && tcp.port == 9200 |
Web 类蜜罐 | http && ip.addr == 192.168.111.128 |
Web 登录请求 | http.request.method == "POST" && http.request.uri contains "login" |
单个 TCP 会话 | 选中数据包后 Follow -> TCP Stream |
协议 | 建议抓包动作 | 重点观察内容 |
SSH | ssh test@192.168.111.128 | 服务端 Banner、客户端 Banner、KEXINIT、HostKey |
Telnet | telnet 192.168.111.128 23 后输入任意内容 | 无 login 提示、固定返回 test |
Redis | 发送 PING、INFO、RESP PING | ING、NFO、+ok 异常返回 |
Web | 访问 8080/8081/9000 并提交登录表单 | POST /login、username/password、响应头特征 |
Elasticsearch | 访问 http://192.168.111.128:9200/ | 固定 JSON、Content-Type、Set-Cookie |
七、自动化检测思路
检测对象 | 规则思路 | 置信度 |
SSH | 22 端口 Banner 等于 SSH-2.0-OpenSSH_7.4,且系统指纹或其他服务与其不一致 | 中 |
Telnet | 连接 23 端口后输入任意字符串,固定返回 test\r\n | 高 |
Redis | RESP PING 返回 +ok 而非 +PONG,或 PING 返回 ING | 高 |
Elasticsearch | 根路径 JSON 中 version.number 为空且 lucene_version=4.10.2,并伴随 session Cookie | 高 |
Web | 多个 Web 端口同时出现 JSP3/2.0.14、Content-Md5、Ohc-Cache-Hit、session Cookie | 高 |
组合判断 | 同一 IP 同时暴露 SSH/Telnet/Redis/ES/Web 多种模板化服务 | 高 |
八、HFish 不同版本的特征差异分析
8.1 特征稳定性分级
特征类型 | 跨版本稳定性 | 说明 |
多端口组合特征 | 高 | 同一 IP 同时暴露 SSH、Telnet、Redis、Elasticsearch、ESXi、Coremail、IOT-HIKCAM 等多类诱捕服务,这类组合特征通常比单一字符串更稳定。 |
低交互协议异常 | 中高 | 例如 Telnet 固定返回、Redis 异常响应等,本质是协议模拟不完整导致的行为特征,具体返回字符串可能随版本变化。 |
Web 通用响应头 | 中 | 3.3.6 中可见 Server: JSP3/2.0.14、Content-Md5、Ohc-Cache-Hit、session Cookie、Timing-Allow-Origin: *,其他版本需实测确认。 |
页面模板与静态资源 | 低 | 页面标题、JS 路径、资源 hash、HTML 注释可能随版本和模板更新变化,不适合作为单独强判定依据。 |
管理后台 JS 文件名 | 很低 | 例如 Username.c96da552.js 这类带 hash 的构建产物具有明显版本相关性,不适合作为跨版本通用指纹。 |
单个协议 Banner | 中 | SSH Banner、ES JSON 字段等直观但可能被模板或配置修改,应结合其他特征综合判断。 |
8.2 HFish 2.x 系列特征差异
8.3 HFish 3.0/3.1 系列特征差异
8.4 HFish 3.3.x 系列特征差异
8.5 按协议划分的版本差异
协议/模块 | 3.3.6 已验证特征 | 其他版本可能变化点 | 跨版本检测建议 |
SSH | 服务端 Banner 为 SSH-2.0-OpenSSH_7.4 | Banner 字符串、KEX 算法列表、HostKey 类型和指纹可能变化 | 不要只依赖 OpenSSH_7.4,应结合 Banner、算法列表、HostKey、认证失败行为和多端口组合判断。 |
Telnet | 连接后无标准 login/password 提示,任意输入返回 test | 是否主动输出 login、是否进行 IAC 协商、固定返回内容可能变化 | 重点关注“缺少真实登录上下文”和“返回高度模板化”,而不是只看 test 字符串。 |
Redis | PING 返回 ING,INFO 返回 NFO,RESP PING 返回 +ok | 可能修正为 +PONG,或伪造 INFO 输出,明文回显逻辑可能变化 | 重点检测是否符合真实 Redis 协议行为,将异常响应作为蜜罐证据。 |
Elasticsearch | cluster_name=elasticsearch、lucene_version=4.10.2、tagline=You Know, for Search | ES 模板版本、lucene_version、build_hash、version.number、Content-Type 可能变化 | 该三元组适合作为 3.3.x 类 ES 蜜罐强特征,跨版本需结合 JSON 完整性、字段异常和 Cookie/Header 判断。 |
Web 蜜罐 | Server: JSP3/2.0.14、Content-Md5、Ohc-Cache-Hit、session Cookie、Timing-Allow-Origin: * | Server Header、登录失败提示、页面模板、JS 资源路径、HTML 注释可能变化 | 优先使用多个 Web 模板共同复用的 Header 框架和固定登录失败逻辑,降低误报。 |
后台前端资源 | Username.c96da552.js 中存在 /v1/asset/passwords 相关 API | 文件名 hash 和打包结构很容易变化 | 不要将具体 JS 文件名作为规则,应关注 API 功能路径和后台展示逻辑。 |
8.6 Elasticsearch 蜜罐版本指纹说明
cluster_name: elasticsearch
lucene_version: 4.10.2
tagline: You Know, for Search
8.7 Web 蜜罐版本指纹说明
Server: JSP3/2.0.14
Content-Md5: <随机字符串>
Ohc-Cache-Hit: <随机字符串>
Set-Cookie: session=<32位hex>
Timing-Allow-Origin: *
POST /login -> window.alert("用户名或密码错误");window.history.back();
8.8 跨版本检测策略
+2 多协议集中暴露
+2 Redis RESP PING 返回异常值
+2 Telnet 缺少真实登录上下文且返回固定内容
+2 Elasticsearch 命中 cluster_name/lucene_version/tagline 三元组
+2 Web 命中 Server/Content-Md5/Ohc-Cache-Hit/session/Timing-Allow-Origin 组合
+1 SSH Banner 与系统环境明显不一致
+1 页面模板或静态资源存在复制痕迹


