# HFish-SecOps-Brain **Repository Path**: elfbobo_admin_admin/hfish-sec-ops-brain ## Basic Information - **Project Name**: HFish-SecOps-Brain - **Description**: 本项目旨在基于 HFish 蜜罐平台打造一个完整的企业级 SecOps Brain(安全运营大脑)。项目的最终目标是涵盖从诱捕感知、数据汇聚、智能分析(AI/大模型介入)到自动化响应(SOAR)的闭环安全体系。 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-05-18 - **Last Updated**: 2026-05-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # HFish SecOps Brain 基于 HFish 蜜罐平台的企业级安全运营大脑,实现从威胁数据采集、清洗存储到自动化响应的完整闭环。 ## 架构概览 ```mermaid graph TB subgraph 数据源 HFish[HFish 蜜罐管理端] end subgraph 采集层 Puller[hfish_puller
数据采集器] end subgraph 传输与存储 Kafka[(Kafka
消息队列)] Logstash[Logstash
日志清洗写入] ES[(Elasticsearch
全量日志检索)] MySQL[(MySQL
攻击者画像)] LocalFile[(本地 JSON
调试输出)] end subgraph SOAR 自动化响应 Bridge[hfish_soar_bridge
ES 轮询桥接] Engine[soar_core
工作流引擎] Linux[SSH iptables
IP 封禁] ESQuery[ES 历史查询] HTTP[HTTP 请求] end subgraph Web 可视化 API[FastAPI
api-server] Frontend[React + Ant Design
8 页面安全运营平台] end HFish -->|REST API| Puller Puller -->|attack_detail| Kafka Puller -->|profile| MySQL Puller -->|raw| LocalFile Kafka -->|消费| Logstash Logstash -->|写入| ES ES -->|轮询新攻击| Bridge Bridge -->|加载 workflow| Engine Bridge -->|更新处理状态| MySQL Engine --> Linux Engine --> ESQuery Engine --> HTTP Frontend -->|HTTP /api/*| API API -->|查询| ES API -->|查询| MySQL API -->|读取| HFish ``` ## 项目背景 企业安全运营中,蜜罐系统产生的威胁日志通常面临两个核心诉求: 1. **安全审计与快速检索**:需要存储全量原始攻击日志,支持多维度的搜索和关联分析。 2. **黑客画像与态势感知**:需要从海量日志中提取高价值特征(攻击 IP、账号、手法等),构建攻击者档案。 本项目围绕这两个诉求设计了一套完整的流水线: - **攻击详情链路**:`attack_detail` channel → Kafka(Kafka 模式)或直写 ES(直连模式)。Kafka 模式下 Logstash 消费 topic `hfish_attack_detail_categorized`,将 `raw_list` split 展开并提升字段到顶层,按攻击日期索引 `hfish-YYYY.MM.DD` 写入 ES。直连模式使用相同索引和字段格式。`@timestamp` 映射为攻击时间(`create_time`),`_id` 按 `attack_ip + create_time + service_name + service_port` 去重。 - **画像数据链路**:`profile` channel → MySQL。Puller 将画像数据 upsert 到 `attacker_profiles` 表(每 IP 一行),用于攻击者分析和关联查询。 - **调试输出**:`raw` channel → LocalFile。所有原始数据均写入本地 JSON 文件,不进入 ES/Kafka。 - **自动化响应链路**:桥接脚本轮询 ES 发现新攻击,触发自研 soar_core 工作流引擎执行封禁、通知等操作。 ## 前置依赖 | 组件 | 版本要求 | 用途 | |------|----------|------| | Python | ≥ 3.9 | 运行采集器和 SOAR 引擎 | | Kafka | 4.x | 消息队列,削峰填谷(可选,不启用 Kafka 模式可跳过) | | Elasticsearch | 8.x | 全文检索与攻击事件存储 | | Logstash | 8.x | 消费 Kafka 数据,清洗后写入 ES | | MySQL | 5.7+ | 黑客画像存储 + SOAR 去重跟踪 | | Kibana | 8.x | ES 可视化(可选) | Kafka 需配置双 listener(PLAINTEXT:9092 + INTERNAL:9192),详见 docs 目录下的部署指南。 ## 快速开始 ### 1. 安装依赖 ```powershell pip install -r requirements.txt ``` ### 2. 配置 编辑 `config.json`,至少需要配置以下信息: ```json { "hfish": { "base_url": "https://你的HFish管理端IP:4433", "api_key": "在HFish后台生成的API_KEY" }, "pipeline": { "use_kafka_pipeline": true, "enabled_outputs": ["local_file", "elasticsearch", "mysql"], "kafka": { "bootstrap_servers": ["127.0.0.1:9092"] }, "elasticsearch": { "hosts": ["http://localhost:9200"] }, "mysql": { "host": "127.0.0.1", "user": "root", "password": "your_password", "database": "secops_brain" } }, "soar": { "targets": [ { "name": "honeypot-node", "host": "192.168.1.100", "port": 22, "user": "your_ssh_user", "password": "your_ssh_password", "workflows": ["攻击自动响应(ES查历史+条件判断)"] } ] } } ``` ### 3. 启动基础设施 Kafka 需要在 Windows 上原生启动,其他组件运行在 Docker 中: ```powershell # Step 1: 启动 Kafka(保持窗口打开) cd D:\Kafka_2.13-4.2.0 .\bin\windows\kafka-server-start.bat .\config\server.properties # Step 2: 启动 ELK Stack(ES + Logstash + Kibana + MySQL) cd D:\ELK docker-compose up -d ``` ### 4. 运行数据采集 ```powershell cd D:\HFish_SecOps python hfish_puller.py ``` 首次运行会拉取过去 N 天的攻击数据。控制台输出 `=== 拉取任务完成 ===` 即运行成功。攻击详情经 Kafka → Logstash 写入 ES,画像数据直存 MySQL。 验证 ES 中已有数据: ```powershell curl -s "http://localhost:9200/hfish-*/_count" ``` 返回 `count` > 0 表示链路通畅。 ### 5. 启动 SOAR 自动化响应 ```powershell cd D:\HFish_SecOps python hfish_soar_bridge.py ``` 桥接脚本启动后,会定期轮询 ES 查找新攻击文档,发现后自动加载工作流并执行。默认轮询间隔 10 秒。 支持手动写入测试数据验证: ```powershell curl -X POST "http://localhost:9200/hfish-test/_doc" -H "Content-Type: application/json" -d "{\"attack_ip\":\"8.8.8.8\",\"service_name\":\"SSH\",\"@timestamp\":\"$(Get-Date -Format 'yyyy-MM-ddTHH:mm:ssZ')\"}" ``` 桥接脚本应输出类似:`→ 8.8.8.8 攻击自动响应(ES查历史+条件判断)[honeypot-node] OK` ### 6. 启动 Web 可视化 ```powershell cd D:\HFish_SecOps python hfish_web.py ``` 脚本自动安装依赖(首次)并启动 API + 前端,浏览器自动打开 `http://localhost:5173`。 打开浏览器访问 `http://localhost:5173`,即可看到安全运营平台可视化界面。 > 详细部署说明见 `docs/环境部署/Web可视化部署指南.md`。 ## 组件详解 ### hfish_puller.py — 数据采集器 负责从 HFish 管理端 REST API 拉取攻击数据,按 channel 分发到不同存储: - **攻击详情**:含 `raw_list` 数组,走 `attack_detail` channel → Kafka(Kafka 模式)或 ES(直连模式) - **攻击者画像**:按 `attack_ip` 去重合并,走 `profile` channel → MySQL - **调试文件**:所有原始数据走 `raw` channel → 本地 JSON 文件 数据流向由 `config.json` 控制: - `use_kafka_pipeline: true`:攻击详情推 Kafka,画像直存 MySQL,本地文件保存全部原始数据(混合模式,推荐) - `use_kafka_pipeline: false`:攻击详情直写 ES,画像直存 MySQL,本地文件保存全部原始数据(直连模式) ### hfish_soar_bridge.py — SOAR 桥接脚本 核心职责: 1. 定时轮询 ES,查询最近 N 分钟内的新攻击文档 2. 通过 MySQL `soar_es_tracker` 表对文档 ID 做去重,确保每条攻击只触发一次 3. 根据 `config.json` 中 `soar.targets` 配置,将目标节点的 SSH 凭据注入工作流 4. 每个工作流通过 `trigger_field` 声明所关注的 ES 字段(如 `"attack_ip"`),桥接在分发时检查 doc 是否含该字段,缺失则跳过该工作流 5. 调用 soar_core 引擎执行工作流。工作流执行失败(status ≠ 0)则桥接直接退出,不重试 去重机制基于 ES 文档的 `_id`,确保同一攻击记录不会重复触发响应动作。 ### soar_core — 工作流引擎 自研轻量 SOAR 引擎,零外部依赖(仅 Python 标准库 + loguru)。工作流以 JSON 文件定义,存储在 `soar_core/workflows/` 目录下。 **核心特性:** - DAG 图执行引擎,支持条件分支(IF)、循环(FOR) - 插件式 app 节点,通过 `soar_core/apps/` 目录下的模块扩展 - 变量系统:支持 `@(node-uuid!>field)` 引用前序节点的输出 - `trigger_field`:每个工作流的 JSON 中声明所关注的 ES 文档字段,控制桥接分发过滤 - 错误码:status 0 = 成功,status 2 = 失败(桥接退出) **当前工作流:** | 工作流 | 功能 | |--------|------| | `attack_response.json` | ES 查攻击历史 → 条件判断 → SSH iptables 封禁 | | `hello_world.json` | 引擎测试,打印攻击 IP | ### 插件节点 | 节点 | 功能 | 依赖 | |------|------|------| | `linux` | SSH 远程执行命令(iptables 封禁) | paramiko | | `es` | Elasticsearch 查询(攻击历史) | elasticsearch | | `http` | 通用 HTTP 请求 | requests | | `helloworld` | 引擎测试节点 | 无 | ### Web 可视化平台 — web-platform/ + api-server/ React + Ant Design 前端 + FastAPI 后端,提供 8 个功能页面: | 页面 | 路由 | 数据源 | 功能 | |------|------|--------|------| | 攻击态势总览 | `/` | ES + MySQL | KPI 卡片、攻击趋势折线图、服务分布饼图、实时攻击流 | | 攻击者列表 | `/attackers` | MySQL | IP 搜索、排序分页,点击 Drawer 查看画像 | | SOAR 响应历史 | `/soar-history` | MySQL `soar_es_tracker` | 响应记录分页、封禁 TOP10 | | 蜜罐节点状态 | `/nodes` | HFish API | 节点卡片(在线/离线/版本/心跳)+ 系统摘要 | | 攻击详情钻取 | `/attacks` | ES | 多条件筛选(IP/服务/节点/归属地)、JSON 详情 Drawer | | 系统设置 | `/settings` | `config.json` | 5 Tab 表单(HFish/ES/MySQL/SOAR/Pipeline) | | 审计日志 | `/audit` | MySQL `audit_logs` | 操作记录分页,按类型筛选 | **技术栈:** | 层 | 技术 | 端口 | |----|------|------| | 前端 | React 18 + TypeScript + Ant Design 5 + Vite 5 | 5173 | | 后端 | FastAPI + elasticsearch-py + pymysql | 8000 | 前端通过 Vite 代理 `/api/*` → 后端,开发和生产环境统一。 > 部署详见 `docs/环境部署/Web可视化部署指南.md`。 ## 数据格式示例 ### HFish API 原始返回 #### 1. 攻击来源 — `POST /api/v1/attack/ip` ```json { "response_code": 0, "verbose_msg": "成功", "data": { "attack_ip": ["192.168.75.137", "192.168.75.254"], "distribution": {} } } ``` #### 2. 攻击详情 — `POST /api/v1/attack/detail` ```json { "response_code": 0, "verbose_msg": "成功", "data": { "detail_list": [ { "attack_ip": "192.168.75.137", "client_name": "client002", "service_name": "ELECTRIC蜜罐", "service_port": "9303", "ip_location": "LAN", "attack_type": "暴力破解", "timestamp": 1746789123, "payload": "root:admin123", "country": "中国", "province": "浙江省", "city": "杭州市" } ] } } ``` #### 3. 攻击账号 — `POST /api/v1/attack/account`(逐 IP) ```json { "response_code": 0, "verbose_msg": "成功", "data": [ {"username": "root", "password": "admin123"}, {"username": "admin", "password": "password"}, {"username": "test", "password": "123456"} ] } ``` #### 4. 系统状态 — `GET /api/v1/hfish/sys_info` ```json { "response_code": 0, "verbose_msg": "成功", "data": { "server_num": 2, "node_num": 5, "attack_num": 1234 } } ``` ## 项目目录结构 ``` D:\HFish_SecOps\ ├── hfish_puller.py # 数据采集器(HFish → Kafka/ES/MySQL) ├── hfish_soar_bridge.py # SOAR 桥接脚本(ES 轮询 → 引擎触发) ├── hfish_web.py # Web 可视化一键启动 ├── config.json # 主配置文件 ├── requirements.txt # Python 依赖 ├── README.md ├── soar_core/ │ ├── engine.py # 工作流引擎核心 │ ├── workflows/ # 工作流 JSON 定义 │ │ ├── attack_response.json # 攻击自动封禁 │ │ └── hello_world.json # 引擎测试 │ ├── apps/ # 插件节点 │ │ ├── linux/ # SSH 远程命令 │ │ ├── es/ # ES 查询 │ │ ├── http/ # HTTP 请求 │ │ └── helloworld/ # 引擎测试 │ └── ai-agent/ │ └── SKILL.md # SOAR 工作流编写指南 ├── api-server/ # Web API 服务 │ ├── main.py # FastAPI 入口 │ ├── routers/ # 7 个路由模块 │ ├── services/ # ES / MySQL 数据服务 │ └── models/ # Pydantic 数据模型 ├── web-platform/ # Web 前端 │ ├── src/ # React 源码(8 页面) │ ├── dist/ # 构建产物(npm run build) │ └── package.json # 前端依赖清单 ├── docs/ │ ├── 系统架构设计.md │ ├── 总体测试流程.md │ ├── 扩展方向.md │ ├── 环境部署/ │ │ ├── kafka部署指南.md │ │ ├── ELK部署指南.md │ │ ├── Web可视化部署指南.md │ │ └── 环境验证指南.md │ └── 架构图.png └── hfish_data/ # 本地 JSON 输出(自动生成) ``` ## 文档导航 | 文档 | 内容 | |------|------| | `docs/数据结构解释.md` | 四种数据流方向与最终存储结构 | | `docs/系统架构设计.md` | 整体架构设计与各层职责 | | `docs/总体测试流程.md` | 全链路连通性验证步骤 | | `docs/环境部署/kafka部署指南.md` | Kafka 双 listener 部署方法 | | `docs/环境部署/ELK部署指南.md` | ES + Logstash + Kibana Docker 部署 | | `docs/环境部署/Web可视化部署指南.md` | Web 可视化平台(React + FastAPI)部署 | | `docs/环境部署/环境验证指南.md` | 数据汇聚层分段验证 | | `docs/扩展方向.md` | 平台未来规划(AI 研判、动态蜜罐等) |