全功能开源的企业级安全主动攻击型蜜罐钓鱼系统 HFish,你很有必要部署一套!

Posted by Mike on 2020-05-22

前段时间我们在「巧用 Cowrie 部署 SSH 蜜罐,让黑客攻击无处遁形!」 一文中给大家介绍了一款好用开源的 SSH 蜜罐系统,但遗憾的是这个蜜罐系统只支持 SSH 这一种协议。

今天,我们就给大家介绍一套功能更加强大、支持跨平台和多种协议的全功能蜜罐钓鱼开源系统 HFish

什么是 HFish ?

HFish 是一款基于 Golang + SqlLite 开发的跨平台多功能主动攻击型蜜罐钓鱼平台框架系统。

项目地址:https://github.com/hacklcx/HFish

HFish 支持的特性

  • 多功能:不仅仅支持 HTTP(S) 钓鱼,还支持 SSHSFTPRedisMySQLMemCacheVNCES 等多种蜜罐。

  • 扩展性:HFish 提供 API 接口,使用者可以随意扩展钓鱼模块。

  • 便捷性:HFish 使用 Golang 开发,使用者可以在多平台上(WindowsMacOSLinux 等) 上快速进行部署。

什么是蜜罐?

蜜罐技术本质上是一种对攻击方进行 欺骗的技术,通过布置一些作为诱饵的主机、网络服务或者信息,诱使攻击方对它们实施攻击,从而可以对攻击行为进行捕获和分析,了解攻击方所使用的工具与方法,推测攻击意图和动机,能够让防御方清晰地了解他们所面对的安全威胁,并通过技术和管理手段来增强实际系统的安全防护能力。

蜜罐好比是情报收集系统。蜜罐好像是故意让人攻击的目标,引诱黑客前来攻击。所以攻击者入侵后,你就可以知道他是如何得逞的,随时了解针对服务器发动的最新的攻击和漏洞。还可以通过窃听黑客之间的联系,收集黑客所用的种种工具,并且掌握他们的社交网络。

部署 HFish

HFish 支持单机、集群、Docker 多种形式的部署,部署方法也是非常简单的。

二进制部署模式

  1. 下载当前系统二进制安装包

首先通过浏览器打开 https://github.com/hacklcx/HFish/releases,然后下载对应系统的二进制安装包。

  • darwinMacOS 版本

  • arm64ARM 架构的 64 位,可用于树莓派

  • 38632 位系统, amd6464 位系统

  1. 快速启动 HFish

二进制安装包下载完成,解压后执行即可。

2.1 Linux + Mac 平台

1
2
3
4
5
6
# 名字是下载的压缩包,根据实际情况修改
$ tar -zxvf HFish-0.5-linux-amd64.tar.gz
# 名字是解压后压缩包,根据实际情况修改
$ cd HFish-0.5-linux-amd64
$ chmod 777 -R db # sqlite 临时文件需要最高权限
$ ./HFish run

注意: db 目录必须要设置 777 最高权限,否则会报 unable to open database file。

2.2 Windown 平台

1
2
3
4
5
# 鼠标右键解压压缩包,打开命令终端 (cmd.exe) 进入程序跟目录
# 名字是解压后压缩包,根据实际情况修改
$ cd c:/HFish-0.5-win-amd64
# Windows 一样要给 db 目录所有权限,具体方法谷歌搜索。
$ ./HFish.exe run
  1. 访问 HFish

启动成功后,直接通过浏览器访问 IP:9001 端口即可进行访问。

默认登陆账号/密码为:admin/admin

Docker 部署模式

如果你对 Docker 比较了解还可以直接通过 Docker 来一键完成单节点部署或集群部署。

  1. 单节点部署
1
$ docker run -d --name hfish -p 21:21 -p 22:22 -p 23:23 -p 3306:3306 -p 6379:6379 -p 8080:8080 -p 8989:8989 -p 9000:9000 -p 9001:9001 -p 11211:11211 imdevops/hfish:latest
  1. 集群部署
1
2
3
4
5
# 主节点部署
$ docker run -d --name hfish-master -p 21:21 -p 22:22 -p 23:23 -p 3306:3306 -p 6379:6379 -p 7879:7879 -p 8080:8080 -p 8989:8989 -p 9000:9000 -p 9001:9001 -p 11211:11211 imdevops/hfish:latest

# 客户端子节点部署
$ docker run -d --name hfish-client -p 21:21 -p 22:22 -p 23:23 -p 3306:3306 -p 6379:6379 -p 8080:8080 -p 8989:8989 -p 9000:9000 -p 11211:11211 -e CLUSTER_IP=master_ip:7879 -e NODE_NAME=clinet imdevops/hfish:latest

具体方法可以参考官方文档:https://hfish.io/docs/#/deploy/docker

配置 HFish

HFish 的配置分为服务器端和客户端,大致配置内容基本相同。官方也说得很清楚了,只要按需启用相应服务即可,这里就不再赘述了。

服务端配置

本配置为 Demo 服务端,需要启动 rpc , 修改状态 status1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
[rpc]
status = 1 # 模式 0关闭 1服务端 2客户端
addr = 127.0.0.1:7879 # RPC 服务端地址 or 客户端地址
name = Server # 状态1 服务端名称 状态2 客户端名称

[admin] # RPC 状态为 2 集群客户端的时候 admin 可以删掉
addr = 127.0.0.1:9001 # 管理后台启动地址
account = admin # 登录账号
password = admin # 登录密码

[api]
status = 1 # 是否启动 API 1 启动 0 关闭
web_url = /api/v1/post/report # 管理后台启动地址
deep_url = /api/v1/post/deep_report # 管理后台启动地址
plug_url = /api/v1/post/plug_report # 插件蜜罐上报 API
sec_key = 9cbf8a4dcb8e30682b927f352d6559a0 # API 认证秘钥

[plug]
status = 0 # 是否启动 蜜罐插件 0 关闭 1 启动, 需要先启动 API
addr = 0.0.0.0:8989 # 蜜罐插件 启动地址

[web]
status = 0 # 是否启动 WEB 1 启动 0 关闭, 启动 API 后 WEB 方可上报结果
addr = 0.0.0.0:9000 # WEB 启动地址,0.0.0.0 对外开放,127.0.0.1 对内开放 可走 Nginx 反向代理
template = wordPress/html # WEB 模板路径
index = index.html # WEB 首页文件
static = wordPress/static # WEB 静态文件路径 注意:必须存在两个目录,html 文件 和静态文件 不能平级
url = / # WEB 访问目录,默认 / 可更改成 index.html index.asp index.php

[deep]
status = 0 # 是否启动 暗网 1 启动 0 关闭, 启动 API 后 方可上报结果
addr = 0.0.0.0:8080 # 暗网 WEB 启动地址
template = deep/html # 暗网 WEB 模板路径
index = index.html # 暗网 WEB 首页文件
static = deep/static # 暗网 WEB 静态文件路径 注意:必须存在两个目录,html 文件 和静态文件 不能平级
url = / # 暗网 WEB 访问目录,默认 / 可更改成 index.html index.asp index.php

[ssh]
status = 0 # 是否启动 SSH 1 启动 0 关闭
addr = 0.0.0.0:22 # SSH 服务端地址 注意端口冲突,请先关闭服务器 openssh 服务 或 修改端口

[redis]
status = 0 # 是否启动 Redis 1 启动 0 关闭
addr = 0.0.0.0:6379 # Redis 服务端地址 注意端口冲突

[mysql]
status = 0 # 是否启动 Mysql 1 启动 0 关闭
addr = 0.0.0.0:3306 # Mysql 服务端地址 注意端口冲突
files = /etc/passwd,/etc/group # Mysql 服务端读取客户端任意文件; 多写逗号分隔,会随机取

[telnet]
status = 0 # 是否启动 Telnet 1 启动 0 关闭
addr = 0.0.0.0:23 # Telnet 服务端地址 注意端口冲突

[ftp]
status = 0 # 是否启动 Ftp 1 启动 0 关闭
addr = 0.0.0.0:21 # Ftp 服务端地址 注意端口冲突

[mem_cache]
status = 0 # 是否启动 MemCache 0 关闭 1 启动
addr = 0.0.0.0:11211 # Memcache 服务端地址 注意端口冲突
rate_limit = 4 # 每秒响应次数

客户端配置

本配置为 Demo 客户端,可删除 admin 配置项。客户端需要启动 rpc , 修改状态 status2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
[rpc]
status = 2 # 模式 0关闭 1服务端 2客户端
addr = 127.0.0.1:7879 # RPC 服务端地址 or 客户端地址
name = Beijing_Clinet # 状态1 服务端名称 状态2 客户端名称

[api]
status = 1 # 是否启动 API 1 启动 0 关闭
web_url = /api/v1/post/report # 管理后台启动地址
deep_url = /api/v1/post/deep_report # 管理后台启动地址
plug_url = /api/v1/post/plug_report # 插件蜜罐上报 API
sec_key = 9cbf8a4dcb8e30682b927f352d6559a0 # API 认证秘钥

[plug]
status = 0 # 是否启动 蜜罐插件 0 关闭 1 启动, 需要先启动 API
addr = 0.0.0.0:8989 # 蜜罐插件 启动地址

[web]
status = 0 # 是否启动 WEB 1 启动 0 关闭, 启动 API 后 WEB 方可上报结果
addr = 0.0.0.0:9000 # WEB 启动地址,0.0.0.0 对外开放,127.0.0.1 对内开放 可走 Nginx 反向代理
template = wordPress/html # WEB 模板路径
index = index.html # WEB 首页文件
static = wordPress/static # WEB 静态文件路径 注意:必须存在两个目录,html 文件 和静态文件 不能平级
url = / # WEB 访问目录,默认 / 可更改成 index.html index.asp index.php

[deep]
status = 0 # 是否启动 暗网 1 启动 0 关闭, 启动 API 后 方可上报结果
addr = 0.0.0.0:8080 # 暗网 WEB 启动地址
template = deep/html # 暗网 WEB 模板路径
index = index.html # 暗网 WEB 首页文件
static = deep/static # 暗网 WEB 静态文件路径 注意:必须存在两个目录,html 文件 和静态文件 不能平级
url = / # 暗网 WEB 访问目录,默认 / 可更改成 index.html index.asp index.php

[ssh]
status = 0 # 是否启动 SSH 1 启动 0 关闭
addr = 0.0.0.0:22 # SSH 服务端地址 注意端口冲突,请先关闭服务器 openssh 服务 或 修改端口

[redis]
status = 0 # 是否启动 Redis 1 启动 0 关闭
addr = 0.0.0.0:6379 # Redis 服务端地址 注意端口冲突

[mysql]
status = 0 # 是否启动 Mysql 1 启动 0 关闭
addr = 0.0.0.0:3306 # Mysql 服务端地址 注意端口冲突
files = /etc/passwd,/etc/group # Mysql 服务端读取客户端任意文件; 多写逗号分隔,会随机取

[telnet]
status = 0 # 是否启动 Telnet 1 启动 0 关闭
addr = 0.0.0.0:23 # Telnet 服务端地址 注意端口冲突

[ftp]
status = 0 # 是否启动 Ftp 1 启动 0 关闭
addr = 0.0.0.0:21 # Ftp 服务端地址 注意端口冲突

[mem_cache]
status = 0 # 是否启动 MemCache 0 关闭 1 启动
addr = 0.0.0.0:11211 # Memcache 服务端地址 注意端口冲突
rate_limit = 4 # 每秒响应次数

除了这些,Hfish 还支持通过 API 请求白名单WebHook插件扩展等很多强大的功能。如果你很感兴趣,可自行前往官网进一步探索哟!

更多功能演示截图

  1. HFish 管理界面

  1. HFish 数据统计界面

  1. HFish SSH 蜜罐后台界面

  1. HFish Telnet 蜜罐后台界面

  1. HFish Redis 蜜罐后台界面

  1. HFish Memcache 蜜罐后台界面

  1. HFish MySQL 蜜罐后台界面

  1. HFish FTP 蜜罐后台界面

  1. HFish Web 蜜罐后台界面

参考文档

  1. https://www.google.com

  2. https://hfish.io/docs/

  3. https://bithack.io/forum/484