└── docs ├── 0-0-test.md ├── 0-0.md ├── 1-1-honeypot.md ├── 1-2-demo.md ├── 2-0-deploy.md ├── 2-1-docker.md ├── 2-2-linux.md ├── 2-3-windows.md ├── 2-4-mariadb.md ├── 2-5-env.md ├── 2-6-nginx.md ├── 3-0-quickstart.md ├── 3-1-nodemgmt.md ├── 3-2-potmgmt.md ├── 3-3-checkattack.md ├── 3-4-debug.md ├── 4-0-scene.md ├── 4-1-Intranet.md ├── 4-2-extranet.md ├── 4-2-scan.md ├── 4-3-detection.md ├── 4-4-internetdecoy.md ├── 4-4-yara.md ├── 4-6-trace.md ├── 5-0-apply.md ├── 5-1-diy.md ├── 5-2-asset.md ├── 5-2-jsonp.md ├── 5-4-custom.md ├── 5-5-reset.md ├── 5-5-test.md ├── 5-6-passwd.md ├── 5-7-uninstall.md ├── 6-0-detail.md ├── 6-2-1dingtalk.md ├── 6-2-2wechat.md ├── 6-2-3lark.md ├── 6-4-api.md ├── README.md ├── _coverpage.md ├── _navbar.md ├── _sidebar.md ├── contribute.md ├── detail-alarm.md ├── detail-api.md ├── detail-attack-source.md ├── detail-attack.md ├── detail-damaged-account.md ├── detail-dashboard.md ├── detail-database.md ├── detail-decoy.md ├── detail-feishu.md ├── detail-intel.md ├── detail-ip.md ├── detail-node-mgmt.md ├── detail-nodegourp.md ├── detail-qqmail.md ├── detail-service-mgmt.md ├── detail-sysinfo.md ├── detail-template-mgmt.md ├── detail-user.md ├── docs.md ├── down.md ├── dv.min.js ├── email.md ├── en ├── 1-1-honeypot.md ├── 1-3-demo.md ├── 2-0-deploy.md ├── 2-1-docker.md ├── 2-2-linux.md ├── 2-3-windows.md ├── 2-4-mariadb.md ├── README.md ├── _coverpage.md ├── _navbar.md ├── _sidebar.md └── static │ └── version ├── highinteractive.md ├── images ├── 1301627983256_.pic_hd.jpg ├── 1311627983622_.pic_hd.jpg ├── 1321627983675_.pic_hd.jpg ├── 1331627983967_.pic_hd.jpg ├── 1531628589485_.pic_hd.jpg ├── 1591628590040_.pic_hd.jpg ├── 1611628590115_.pic_hd.jpg ├── 1641628594371_.pic_hd.jpg ├── 1701628595182_.pic.jpg ├── 1721628595216_.pic_hd.jpg ├── 1741628595751_.pic_hd.jpg ├── 20210616170818.png ├── 20210616171500.png ├── 20210616172029.png ├── 20210616173018.png ├── 20210616173055.png ├── 20210616173129.png ├── 20210616174908.png ├── 20210616174930.png ├── 20210728213641.png ├── 20210728213740.png ├── 20210728213815.png ├── 20210728213852.png ├── 20210730142413.png ├── 20210730154357.png ├── 20210730161448.png ├── 20210730162306.png ├── 20210730173725.png ├── 20210812135104.png ├── 20210812135114.png ├── 20210812135158.png ├── 20210812135238.png ├── 20210812135309.png ├── 20210812135318.png ├── 20210812135326.png ├── 20210812135333.png ├── 20210812135455.png ├── 20210812135501.png ├── 20210812135541.png ├── 20210812135551.png ├── 20210812135559.png ├── 20210812135608.png ├── 20210812135616.png ├── 20210812135624.png ├── 20210812135634.png ├── 20210812135642.jpg ├── 20210812135706.png ├── 20210812135717.png ├── 20210826113545.png ├── 202111071541552.png ├── 20211231163415.png ├── 20211231163518.png ├── 20211231163717.png ├── 20220103194402.png ├── 202311081253175.png ├── 202311081253176.png ├── 202311081253181.png ├── 2801635164451_.pic.jpg ├── 2811635164463_.pic_hd.jpg ├── 2821635164487_.pic_hd.jpg ├── 4351638188574_.pic_hd.jpg ├── 4381638189986_.pic_hd.jpg ├── background.jpg ├── image-20210803203953937.png ├── image-20210803204029159.png ├── image-20210806093718827.png ├── image-20210806093830870.png ├── image-20210806093916207.png ├── image-20210810195923459.png ├── image-20210810200645587.png ├── image-20210810202312677.png ├── image-20210810203232153.png ├── image-20210902143712779.png ├── image-20210902172749029.png ├── image-20210902172832815.png ├── image-20210902172916191.png ├── image-20210902210912371.png ├── image-20210903150833262.png ├── image-20210903150857177.png ├── image-20210903150945171.png ├── image-20210903152406368.png ├── image-20210914113134975.png ├── image-20210914115931102.png ├── image-20210914120052175.png ├── image-20210914160036385.png ├── image-20210914160703477.png ├── image-20210914160836213.png ├── image-20210914160912912.png ├── image-20210914161340527.png ├── image-20210914161437108.png ├── image-20211012223326542.png ├── image-20211025205700560.png ├── image-20211027204924883.png ├── image-20211027205006150.png ├── image-20211027205827645.png ├── image-20211027205939646.png ├── image-20211116210129137.png ├── image-20211116212624793.png ├── image-20211116212911284.png ├── image-20211116213058329.png ├── image-20211116213445009.png ├── image-20211116213801346.png ├── image-20211117105331269.png ├── image-20211206115017049.png ├── image-20211206115035865.png ├── image-20211208095138935.png ├── image-20211220220515428.png ├── image-20211220220556975.png ├── image-20211220220946291.png ├── image-20211220220958972.png ├── image-20211220221136447.png ├── image-20211220221635593.png ├── image-20211222095127831.png ├── image-20211222095756489.png ├── image-20211222095822939.png ├── image-20220105214958606.png ├── image-20220105220938586.png ├── image-20220105221346398.png ├── image-20220105221536927.png ├── image-20220118114818278.png ├── image-20220309193114260.png ├── image-20220309193630269.png ├── image-20220309193659551.png ├── image-20231108193659551.png ├── joinus.png └── logo.png ├── index.html ├── js ├── docsify-copy-code.min.js ├── docsify-sidebar-collapse.min.js ├── docsify-tabs.min.js ├── docsify.min.js ├── prism-bash.min.js ├── prism-markdown.min.js └── search.min.js ├── known.md ├── node-update.md ├── portrait.min.js ├── sandbox.md ├── sc.min.js ├── scene-cloud.md ├── scene-hacker.md ├── scene-intel.md ├── scene-lostpwd.md ├── scene-spy.md ├── scene-training.md ├── service-demo.zip ├── static └── version ├── syslog.md ├── thanksforall.md ├── update.md ├── vue.css ├── webhook.md └── webinstall.sh /docs/0-0-test.md: -------------------------------------------------------------------------------- 1 | 测试 -------------------------------------------------------------------------------- /docs/0-0.md: -------------------------------------------------------------------------------- 1 | 测试 -------------------------------------------------------------------------------- /docs/1-1-honeypot.md: -------------------------------------------------------------------------------- 1 | #### 蜜罐的定义 2 | 3 | **蜜罐** 技术本质上是一种对攻击方进行**欺骗的技术**,通过布置一些作为**诱饵的主机**、**网络服务** 或者**信息**,诱使攻击方对它们实施攻击,从而可以对攻击行为进行**捕获** 和**分析**,了解攻击方所使用的工具与方法,推测攻击意图和动机,能够让防御方清晰地了解他们所面对的安全威胁,并通过技术和管理手段来增强实际系统的安全防护能力。 4 | 5 | #### 蜜罐的优势 6 | 7 | > ##### 误报少,告警准确 ##### 8 | 9 | 蜜罐作为正常业务的 "**影子**" 混淆在网络中,正常情况下不应被触碰,每次触碰都可以视为威胁行为。例如,在其它检测型产品中,将正常请求误判为攻击行为的误报很常见,而对于蜜罐来说,几乎**不存在正常请求**,即使有也是探测行为。 10 | 11 | > ##### 检测深入,信息丰富 ##### 12 | 13 | 不同于其它检测型安全产品,蜜罐可以**模拟业务服务甚至对攻击的响应**,完整获取整个交互的所有内容,最大深度的获得攻击者探测行为之后的N个步骤,可检测点更多,信息量更大。 14 | 15 | 例如,对于**SSL加密** 或**工控环境**,蜜罐可以轻松伪装成业务,得到完整攻击数据。 16 | 17 | > ##### 主动防御,预见未来,生产情报 ##### 18 | 19 | 在每个企业,几乎每分钟都在发生这样的场景:潜伏在互联网角落中的攻击者发起一次攻击探测,防守方业务不存在安全漏洞,IDS告警后事情就不了了之了。 20 | 21 | 而应用蜜罐型产品后,转换为**主动防御思路**:蜜罐响应了攻击探测,诱骗攻击者认为存在漏洞,进而发送了更多指令,包括从远端地址下载木马程序,而这一切不仅被完整记录下来,还可以转化为威胁情报供给传统检测设备,用于在未来的某个时刻,准确检测主机失陷。 22 | 23 | 可以发现,转换为主动防护思路后,**威胁检测由针对单次、多变的攻击上升到应用威胁情报甚至TTPs检测**。 24 | 25 | > ##### 环境依赖少,拓展视野 ##### 26 | 27 | 由于是融入型安全产品,蜜罐**不需要**改动现有网络结构,并且很多蜜罐是软件形态,对各种虚拟和云环境非常友好,部署成本低。 28 | 29 | 蜜罐可以广泛部署于**云端**和**接入交换机下游末梢网络中**,作为**轻量级探针**,将告警汇聚到态势感知或传统检测设备中分析和展示。 30 | 31 | #### 蜜罐与情报 32 | 33 | 显而易见**蜜罐** 是非常准确、稳定和恰当的**情报感知探针**。 34 | 35 | 蜜罐最大的价值是**诱使攻击者展示其能力和资产**,再配合误报少,信息丰富等一系列优势,配合态势感知或本地情报平台可以稳定生产私有威胁情报。 36 | -------------------------------------------------------------------------------- /docs/1-2-demo.md: -------------------------------------------------------------------------------- 1 | 2 | #### 快速预览 3 | 4 | 百闻不如一见,您可以随时登录HFish的Demo环境,浏览HFish的能力: 5 | 6 | ``` 7 | 预览地址:https://demo.hfish.net:4433/web/ 8 | 用户:hfishguest 9 | 密码:HFish2021 10 | ``` 11 | 12 | `特别注意:Demo环境提供的是普通用户,有些功能已被隐藏,如需完整体验,请自行安装体验:https://hfish.net/#/down` 13 | 14 | #### 联系我们 15 | 16 | ![joinus](/images/joinus.png) -------------------------------------------------------------------------------- /docs/2-0-deploy.md: -------------------------------------------------------------------------------- 1 | #### 快速部署 2 | 3 | HFish采用B/S架构,系统由管理端和节点端组成,管理端用来生成和管理节点端,并接收、分析和展示节点端回传的数据,节点端接受管理端的控制并负责构建蜜罐服务。 4 | 5 | 6 | > ##### HFish支持架构列表 ##### 7 | 8 | | | Windows | Linux X86 | 9 | | ----------------- | ----------------- | ----------------- | 10 | | 管理端(Server) | 支持64位 | 支持64位 | 11 | | 节点端(Client) | 支持64位和32位 | 支持64为和32位 | 12 | 13 | 14 | > ##### HFish部署在内网所需配置 ##### 15 | 16 | 部署在内网的蜜罐对性能要求较低,针对过往测试情况,我们给出两个配置。 17 | 18 | | | 管理端 | 节点端 | 19 | | --------- | ------------ | ----------- | 20 | | 建议配置 | 2核4g200G | 1核2g50G | 21 | | 最低配置 | 1核2g100G | 1核1g50G | 22 | 23 | `注意:日志磁盘占用情况受攻击数量影响很大,建议管理端配置200G以上硬盘空间。` 24 | 25 | 26 | > ##### HFish部署在外网所需配置(必须更换MySQL数据库) ##### 27 | 28 | 部署在公网的蜜罐因遭受更多攻击,因此会有更大性能需求。 29 | 30 | | | 管理端 | 节点端 | 31 | | --------- | ------------- | ----------- | 32 | | 建议配置 | 4核8g200G | 1核2g50G | 33 | | 最低配置 | 2核4g100G | 1核1g50G | 34 | 35 | `注意:日志磁盘占用情况受攻击数量影响较大,建议管理端配置200G以上硬盘空间。` 36 | 37 | 38 | 39 | > ##### HFish部署权限要求 ##### 40 | 41 | 1、如果使用官网推荐的install.sh脚本安装,必须具备root权限,安装目录会位于opt目录下; 42 | 43 | 2、如果下载安装包手动安装,在默认使用SQLite数据库情况下,管理端的部署和使用不需要root权限,但如果后续需要替换SQLite改为MySQL数据,则MySQL安装和配置需要root权限; 44 | 45 | 3、节点端安装和运行无需root权限,但是由于操作系统限制,非root权限运行的节点无法监听低于TCP/1024的端口; 46 | -------------------------------------------------------------------------------- /docs/2-1-docker.md: -------------------------------------------------------------------------------- 1 | #### Docker下载部署 2 | 3 | Docker是我们推荐的部署方式之一,当前的版本拥有以下特性: 4 | 5 | 1. 自动升级:每小时请求最新镜像进行升级,升级不会丢失数据。 6 | 2. 数据持久化:在宿主机/usr/share/hfish目录下建立data目录用于存放攻击数据,建立logs目录用于存放日志。 7 | 8 | `注意:当前Docker版本使用host模式启动,如果您不希望Docker的管理端开放除TCP/4433和TCP/4434以外的端口,可暂停管理端内置默认节点。` 9 | 10 | 11 | 12 | #### Docker默认安装说明 13 | 14 | > ##### 确认主机中已安装并启动Docker ##### 15 | 16 | ``` 17 | docker version 18 | ``` 19 | 20 | > ##### 运行HFish(框内全部复制,粘贴,执行即可) ##### 21 | 22 | ``` 23 | docker run -itd --name hfish \ 24 | -v /usr/share/hfish:/usr/share/hfish \ 25 | --network host \ 26 | --privileged=true \ 27 | threatbook/hfish-server:latest 28 | ``` 29 | 正常情况下返回如下内容: 30 | 4351638188574_.pic_hd 31 | 32 | 33 | 34 | > ##### 配置为后续自动升级(框内全部复制,粘贴,执行即可) ##### 35 | 36 | ``` 37 | docker run -d \ 38 | --name watchtower \ 39 | --restart unless-stopped \ 40 | -v /var/run/docker.sock:/var/run/docker.sock \ 41 | --label=com.centurylinklabs.watchtower.enable=false \ 42 | --privileged=true \ 43 | containrrr/watchtower \ 44 | --cleanup \ 45 | hfish \ 46 | --interval 3600 47 | ``` 48 | 49 | 正常情况下返回如下内容: 50 | 51 | ![4381638189986_.pic_hd](https://hfish.net/images/4381638189986_.pic_hd.jpg) 52 | 53 | 54 | 55 | > ##### 登陆HFish ##### 56 | 57 | ``` 58 | 登陆地址:https://[server]:4433/web/ 59 | 初始用户名:admin 60 | 初始密码:HFish2021 61 | ``` 62 | 63 | 64 | #### Docker升级失败情况 65 | 66 | 如果已经配置了Docker镜像代理,有可能会导致watchower无法生效,手动执行: 67 | 68 | ``` 69 | docker pull threatbook/hfish-server:3.3.5 70 | docker tag threatbook/hfish-server:3.3.5 threatbook/hfish-server:latest 71 | docker rm -f hfish 72 | docker run -itd --name hfish \ 73 | -v /usr/share/hfish:/usr/share/hfish \ 74 | --network host \ 75 | --privileged=true \ 76 | threatbook/hfish-server:latest 77 | ``` 78 | 79 | 80 | #### 未配置自动升级,Docker单次手动升级 81 | 82 | > ##### 配置watchover(框内全部复制,粘贴,执行即可) 83 | 84 | ``` 85 | docker run -d \ 86 | --name watchtower \ 87 | --restart unless-stopped \ 88 | -v /var/run/docker.sock:/var/run/docker.sock \ 89 | --label=com.centurylinklabs.watchtower.enable=false \ 90 | --privileged=true \ 91 | containrrr/watchtower \ 92 | --cleanup \ 93 | hfish \ 94 | --interval 10 95 | ``` 96 | 97 | > ##### 等待升级成功后,登录Web管理页面,确认升级完成 98 | 99 | > ##### 取消watchover自动升级 100 | 101 | ``` 102 | docker stop watchtower 103 | ``` 104 | 105 | 完成watchover配置后,后续如果还需手动升级,只需要执行 docker start watchtower 和 docker stop watchtower 即可,不需要反复配置watchover。 106 | 107 | 108 | 109 | #### Docker修改持久化配置并重启 110 | 111 | > ##### 在/usr/share/hfish/config.toml下面修改配置 112 | 113 | > ##### 重启docker容器 114 | 115 | ``` 116 | docker restart hfish 117 | ``` 118 | -------------------------------------------------------------------------------- /docs/2-2-linux.md: -------------------------------------------------------------------------------- 1 | #### Linux联网环境,一键安装(强烈推荐) 2 | 3 | > ##### CentOS 是HFish团队主力开发和测试系统,推荐选用CentOS系统部署管理端 ##### 4 | 5 | 如果部署的环境为Linux,且可以访问互联网,强烈建议使用一键部署脚本进行安装和配置,在使用一键脚本前,请先配置防火墙。 6 | 7 | 如果蜜罐节点暴露在互联网,可能会出现TCP连接超过最大1024个连接数限制,导致其他连接被拒绝的情况,可手动放开机器TCP最大连接数。参考解决链接:https://www.cnblogs.com/lemon-flm/p/7975812.html 8 | 9 | > ##### 以root权限运行以下命令,确保配置防火墙开启TCP/4433、TCP/4434 ##### 10 | 11 | ``` 12 | firewall-cmd --add-port=4433/tcp --permanent #(用于web界面启动) 13 | firewall-cmd --add-port=4434/tcp --permanent #(用于节点与管理端通信) 14 | firewall-cmd --reload 15 | ``` 16 | 17 | 如之后蜜罐服务需要占用其他端口,可使用相同命令打开 18 | 19 | > ##### 以root权限运行以下一键部署命令 ##### 20 | 21 | ``` 22 | bash <(curl -sS -L https://hfish.net/webinstall.sh) 23 | ``` 24 | 25 | > ##### 完成安装后,通过以下网址、账号密码登录 ##### 26 | 27 | ``` 28 | 登陆链接:https://[ip]:4433/web/ 29 | 账号:admin 30 | 密码:HFish2021 31 | ``` 32 | 如果管理端的IP是192.168.1.1,则登陆链接为:https://192.168.1.1:4433/web/ 33 | 34 | URL中/web/路径不能少, 35 | 36 | 安装完成登录后,在「节点管理」页面中可看到管理端服务器上的默认节点,如下图: 37 | 38 | image-20210914113134975 39 | 40 | #### Linux无法联网,手动安装 41 | 42 | 如果您的环境无法联网,可以尝试手动安装。 43 | 44 | > ##### 下载安装包: 45 | 46 | 点击 [Linux AMD x86-64安装包](https://hfish.cn-bj.ufileos.com/hfish-3.3.5-linux-amd64.tgz) 获取安装包, 47 | 48 | 点击 [Linux ARM-64安装包](https://hfish.cn-bj.ufileos.com/hfish-3.3.5-linux-arm64.tgz) 获取安装包, 49 | 50 | 以下命令以Linux 64位系统为例。 51 | 52 | > ##### 创建一个目录用于后续存放解压缩文件 53 | 54 | ``` 55 | mkdir /home/user/hfish 56 | ``` 57 | 58 | > ##### 将HFish安装文件解压到刚才创建的目录中 59 | 60 | ``` 61 | tar zxvf hfish-3.3.5-linux-amd64.tgz -C /home/user/hfish 62 | ``` 63 | 64 | > ##### 以root权限运行以下命令,确保配置防火墙开启TCP/4433、TCP/4434 65 | 66 | ``` 67 | sudo firewall-cmd --add-port=4433/tcp --permanent (用于web界面启动) 68 | sudo firewall-cmd --add-port=4434/tcp --permanent (用于节点与管理端通信) 69 | sudo firewall-cmd --reload 70 | ``` 71 | 72 | > ##### 进入安装目录直接运行install.sh 73 | 74 | ``` 75 | cd /home/user/hfish 76 | sudo ./install.sh 77 | ``` 78 | 79 | > ##### 登陆web界面 80 | 81 | ``` 82 | 登陆链接:https://[ip]:4433/web/ 83 | 账号:admin 84 | 密码:HFish2021 85 | ``` 86 | 如果管理端的IP是192.168.1.1,则登陆链接为:https://192.168.1.1:4433/web/ 87 | 88 | URL中/web/路径不能少, 89 | 90 | 安装完成登录后,在「节点管理」页面中可看到管理端服务器上的默认节点,如下图: 91 | 92 | image-20210914113134975 93 | 94 | -------------------------------------------------------------------------------- /docs/2-3-windows.md: -------------------------------------------------------------------------------- 1 | #### Windows环境手动部署管理端 2 | 3 | Windows环境不支持一键部署管理端,用户需要手动部署。 4 | 5 | > ##### 下载安装包[HFish-Windows-amd64](https://hfish.cn-bj.ufileos.com/hfish-3.3.5-windows-amd64.tgz) ##### 6 | 7 | > ##### 在防火墙上放行TCP/4433、TCP/4434端口出入双向流量 ##### 8 | 9 | 如需其他蜜罐服务,也需要打开对应端口。 10 | 11 | > ##### 安装包解压缩后,运行HFish-Windows-amd64目录下的install.bat ##### 12 | 13 | install.bat脚本会在**当前目录**安装HFish,因此运行脚本前请确保当前目录路径恰当。 14 | 15 | > ##### 登陆web界面 ##### 16 | 17 | ``` 18 | 登陆链接:https://[ip]:4433/web/ 19 | 账号:admin 20 | 密码:HFish2021 21 | ``` 22 | 23 | 如果管理端的IP是192.168.1.1,则登陆链接为:https://192.168.1.1:4433/web/ 24 | 25 | URL中/web/路径不能少, 26 | 27 | 安装完成登录后,在「节点管理」页面中可看到管理端服务器上的默认节点,如下图: 28 | 29 | image-20210914113134975 30 | 31 | `注意事项:` 32 | 33 | `1、当前HFish分为两个进程,"hfish"进程为管理进程,负责监测、拉起和升级蜜罐主程序。"管理端"进程为蜜罐主程序进程,其执行蜜罐软件程序。因此,安装时候,请务必按照要求,执行hfish进程;如果直接执行管理端程序,可能会导致程序不稳定,升级失败等情况。` 34 | 35 | `2、HFish的windows版数据库文件当前存储在 C:\Users\Public\hfish 目录,重装HFish后,HFish默认自动读取该目录内的配置和数据"。` 36 | 37 | `3、如果无妨访问Web管理页面,检查TCP/4433和TCP/4434是否可被访问` 38 | 39 | -------------------------------------------------------------------------------- /docs/2-4-mariadb.md: -------------------------------------------------------------------------------- 1 | #### 数据库选择 2 | 3 | 除非性能极度紧张或环境所限,否则HFish官方**强烈建议使用MySQL/MariaDB数据库!** 4 | 5 | 经过实战测评,MySQL/MariaDB数据库可以适应目前绝大多数场景,其数据处理和并发兼容能力都要优于SQLite。 6 | 7 | > ##### 关于SQLite ##### 8 | 9 | 出于开箱即用考虑,HFish系统默认使用的SQLite数据库,自带的已经初始化好的db具体路径为/usr/share/db/hfish.db 10 | 11 | SQLite数据库仅适用于功能预览、小规模内网环境失陷感知等有限场景。 12 | 13 | > ##### SQLite更换为MySQL/MariaDB数据库 ##### 14 | 15 | HFish提供两种更换数据库的机会: 16 | 17 | 1、在首次安装时,用户可以选择使用SQLite或MySQL/MariaDB数据库 18 | 19 | 2、如果已经选择了SQLite,以管理员身份登录后,在「数据库配置」页面,根据指南可快速更换数据库 20 | 21 | ![image-20211116210129137](https://hfish.net/images/image-20211116210129137.png) 22 | 23 | `特别注意:HFish只支持SQLite向MySQL/MariaDB数据库迁移,不支持反向迁移` 24 | -------------------------------------------------------------------------------- /docs/2-5-env.md: -------------------------------------------------------------------------------- 1 | #### 主动联网要求 2 | 3 | > ##### 安全声明 ##### 4 | 5 | HFish使用100% Golang语言开发,本地采用低交互蜜罐,本地模拟的所有网络服务都是由HFish构架的虚假服务,攻击者看似可以登录进入MySQL、Redis等蜜罐服务,但实际上那是完全用Golang开发的MySQL、Redis部分能力,用于迷惑攻击者。 6 | 7 | 用户完全不需要担心HFish模拟服务被击穿的风险。 8 | 9 | 10 | > ##### HFish管理端主动访问如下网络域名 ##### 11 | 12 | HFish支持IPv4和IPv6网络环境,可以在完全隔离互联网的内部网络工作,但为了最大限度感知真实威胁、对接云端高交互情报、对接消费云端威胁情报和自动化升级,强烈建议客户允许HFish管理端主动访问有限互联网地址,管理端**永远不会**主动访问节点,管理端仅负责生成一个配置,等待节点每60秒尝试连接管理端拉取。 13 | 14 | 为兼顾安全性和服务可用性,建议用户设置ACL仅允许HFish管理端主动访问如下网络域名、地址和端口: 15 | 16 | 17 | | 开放IP | 对应开放域名 | 协议/端口 | 访问目的 | 18 | | ---------------------------------------------------------- | --------------------------------------- | ------------------------------------------------------- | ------------------------------------------------ | 19 | | 106.75.31.212、106.75.71.108 | api.hfish.net(已经禁止ping) | TCP/443 | 用于官网升级与攻击数据拉取,建议开启 | 20 | | 106.75.5.50、106.75.15.34 | zoo.hfish.net(已经禁止ping) | TCP/22222(高交互ssh端口)、TCP/22223(高交互Telnet端口) | 用于与云端高交互蜜罐通信,建议开启 | 21 | | 43.227.197.203、43.227.197.42 | hfish.cn-bj.ufileos.com | TCP/443 | 用于分发安装和升级包 | 22 | | 106.75.36.224、123.59.51.113、123.59.72.253、106.75.36.226 | api.threatbook.cn | TCP/443 | 用于威胁情报查询,如果未启用该功能,无需开放 | 23 | | (无法罗列,建议按域名开通) | open.feishu.cn | TCP/443 | 用于飞书告警功能,如果未使用该功能,无需开放 | 24 | | (无法罗列,建议按域名开通) | oapi.dingtalk.com | TCP/443 | 用于钉钉告警功能,如果未使用该功能,无需开放 | 25 | | (无法罗列,建议按域名开通) | qyapi.weixin.qq.com | TCP/443 | 用于企业微信告警功能,如果未使用该功能,无需开放 | 26 | 27 | ``` 28 | 注意: 29 | 1. 基于安全考虑,不建议用户将HFish管理端Web管理端口TCP/4433暴露在互联网; 30 | 2. 如果使用邮件通知,请开启相应邮件服务器的访问权限; 31 | 3. HFish支持最多 5 路syslog日志发送,便于与安全设备联动,请根据实际情况开放权限; 32 | ``` 33 | 34 | > ##### HFish客户端主动访问如下网络域名 ##### 35 | 36 | HFish客户端不会主动访问除管理端外任何地址。 37 | 38 | 39 | #### 安全配置 40 | 41 | > ##### 管理端安全要求 ##### 42 | 43 | 管理端应部署在安全区,只向少部分有网络管理权限和安全分析能力工作的人员和设备开放Web和SSH端口。 44 | 45 | 管理端用于配置管理的Web页面开启了HTTPS,默认访问端口为TCP/4433,虽然官方不推荐,但是用户可以在config.ini中自行修改Web管理端口和登录URL。 46 | 47 | 此外,管理端还会开放TCP/4434用于节点和管理端进行通讯,该端口不可改变,且必须保证该端口可被所有节点联通。 48 | 49 | ``` 50 | 注意: 51 | - TCP/4433端口和TCP/22端口 “只能”被安全区的管理设备访问; 52 | - TCP/4434端口“必须能”被蜜罐节点访问; 53 | ``` 54 | 55 | > ##### 节点端安全要求 ##### 56 | 57 | 蜜罐节点直接面对攻击者,建议遵循以下安全配置: 58 | 59 | 1. 如果用户同时有外网和内部需求,强烈建议用户分别在外网和内网部署完全独立的两套管理端和节点端; 60 | 2. 如果有节点需要能被外网访问,建议把节点和管理端部署在DMZ区; 61 | 3. 外网节点除了能访问管理端的TCP/4434端口外,不能有权限访问内网中的任何资产; 62 | 4. 内网节点除了开放蜜罐服务相应端口外,其它任何端口都不应该在网络中能被用户访问到; 63 | 5. 考虑安全区设备有维护节点主机的需求,可以向有限的设备开放SSH端口; 64 | -------------------------------------------------------------------------------- /docs/2-6-nginx.md: -------------------------------------------------------------------------------- 1 | 贡献用户:K龙 2 | 3 | 4 | 5 | > 如果对编写 Nginx 配置文件不熟悉,推可以使用 [https://nginxconfig.io/](https://nginxconfig.io/) 辅助完成配置。(若使用[https://nginxconfig.io/](https://nginxconfig.io/) ,请于文件内使用include语句包含[https://nginxconfig.io/](https://nginxconfig.io/)生成的配置文件) 6 | 7 | HFish 分别使用了 `TCP/4433` 和 `TCP/4434` 端口。其中 `TCP/4433` 用于对外提供 Web 服务和部分 API 接口;`TCP/4434` 端口用于节点通讯。因此,Nginx 需同时代理这两个端口,方可提供服务。 8 | 9 | 以下是一份简单的 Nginx 配置,仅供参考。 10 | 11 | #### 常规方案 12 | 13 | ``` 14 | server { 15 | listen 443 ssl http2; 16 | listen [::]:443 ssl http2; 17 | client_max_body_size 4G; #设置传输大小限制,nginx默认文件上传大小为1M。 18 | server_name domain.com; #需要将domain.com替换为您所使用的域名。 19 | 20 | ssl_certificate /etc/nginx/cert/domain.com.pem; #您的证书存储位置,通常位于/etc/nginc/cert文件夹下,需要将domain.com.pem替换为您的证书文件。 21 | ssl_certificate_key /etc/nginx/cert/domain.com.key; #您证书私钥的存储位置,通常位于/etc/nginc/cert文件夹下,需要将domain.com.key替换为您证书私钥文件。 22 | 23 | # 反向代理设置 24 | # 反向代理 /api/v1 用于与节点进行通讯 25 | location /api/v1 { 26 | proxy_pass https://127.0.0.1:4434$request_uri; 27 | proxy_set_header Host $host; 28 | proxy_set_header X-Real-IP $remote_addr; 29 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 30 | proxy_set_header X-Forwarded-Proto $scheme; 31 | proxy_set_header X-Forwarded-Host $host; 32 | proxy_set_header X-Forwarded-Port $server_port; 33 | proxy_connect_timeout 60s; 34 | proxy_send_timeout 60s; 35 | proxy_read_timeout 60s; 36 | } 37 | 38 | # 反向代理 /tmp 用于与节点进行下载 39 | location /tmp { 40 | proxy_pass https://127.0.0.1:4434$request_uri; 41 | proxy_set_header Host $host; 42 | proxy_set_header X-Real-IP $remote_addr; 43 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 44 | proxy_set_header X-Forwarded-Proto $scheme; 45 | proxy_set_header X-Forwarded-Host $host; 46 | proxy_set_header X-Forwarded-Port $server_port; 47 | proxy_connect_timeout 60s; 48 | proxy_send_timeout 60s; 49 | proxy_read_timeout 60s; 50 | } 51 | 52 | # 反向代理 / 用于与 Web 服务 53 | location / { 54 | proxy_pass https://127.0.0.1:4433$request_uri; 55 | proxy_set_header Host $host; 56 | proxy_set_header X-Real-IP $remote_addr; 57 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 58 | proxy_set_header X-Forwarded-Proto $scheme; 59 | proxy_set_header X-Forwarded-Host $host; 60 | proxy_set_header X-Forwarded-Port $server_port; 61 | proxy_connect_timeout 60s; 62 | proxy_send_timeout 60s; 63 | proxy_read_timeout 60s; 64 | } 65 | } 66 | 67 | # HTTP 重定向至 HTTPS 68 | server { 69 | listen 80; 70 | listen [::]:80; 71 | server_name domain.com; 72 | location / { 73 | return 301 https://domain.com$request_uri? permanent; 74 | } 75 | } 76 | 77 | ``` 78 | 79 | 说明 80 | 81 | * 部署时需要将文件内所有domain.com更改为所您所使用的域名。 82 | * 本文件为已有证书使用,存放于/etc/nginx/conf.d/文件夹下(建议为命名为hfish.conf)。 83 | 84 | 85 | #### Let's encrypto方案 86 | 87 | > Let's Encrypt是一个数字证书认证机构,旨在以自动化流程消除手动创建和安装证书的复杂流程,并推广使万维网服务器的加密连接无所不在,为安全网站提供免费的SSL/TLS证书。 88 | 89 | ``` 90 | server { 91 | listen 443 ssl http2; 92 | listen [::]:443 ssl http2; 93 | client_max_body_size 4G; #设置传输大小限制,nginx默认文件上传大小为1M 94 | server_name domain.com; #需要将domain.com替换为您所使用的域名 95 | 96 | ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem; #您的证书存储位置,通常位于/etc/nginc/cert文件夹下,需要将domain.com.pem替换为您的证书文件 97 | ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem; #您证书私钥的存储位置,通常位于/etc/nginc/cert文件夹下,需要将domain.com.key替换为您证书私钥文件。 98 | 99 | # 反向代理设置 100 | # 反向代理 /api/v1 用于与节点进行通讯 101 | location /api/v1 { 102 | proxy_pass https://127.0.0.1:4434$request_uri; 103 | proxy_set_header Host $host; 104 | proxy_set_header X-Real-IP $remote_addr; 105 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 106 | proxy_set_header X-Forwarded-Proto $scheme; 107 | proxy_set_header X-Forwarded-Host $host; 108 | proxy_set_header X-Forwarded-Port $server_port; 109 | proxy_connect_timeout 60s; 110 | proxy_send_timeout 60s; 111 | proxy_read_timeout 60s; 112 | } 113 | 114 | # 反向代理 /tmp 用于与节点进行下载 115 | location /tmp { 116 | proxy_pass https://127.0.0.1:4434$request_uri; 117 | proxy_set_header Host $host; 118 | proxy_set_header X-Real-IP $remote_addr; 119 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 120 | proxy_set_header X-Forwarded-Proto $scheme; 121 | proxy_set_header X-Forwarded-Host $host; 122 | proxy_set_header X-Forwarded-Port $server_port; 123 | proxy_connect_timeout 60s; 124 | proxy_send_timeout 60s; 125 | proxy_read_timeout 60s; 126 | } 127 | 128 | # 反向代理 / 用于与 Web 服务 129 | location / { 130 | proxy_pass https://127.0.0.1:4433$request_uri; 131 | proxy_set_header Host $host; 132 | proxy_set_header X-Real-IP $remote_addr; 133 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 134 | proxy_set_header X-Forwarded-Proto $scheme; 135 | proxy_set_header X-Forwarded-Host $host; 136 | proxy_set_header X-Forwarded-Port $server_port; 137 | proxy_connect_timeout 60s; 138 | proxy_send_timeout 60s; 139 | proxy_read_timeout 60s; 140 | } 141 | } 142 | 143 | 144 | server { 145 | listen 80; 146 | listen [::]:80; 147 | server_name domain.com; 148 | 149 | #方向代理 / 用于let's encrypto验证域名归属 150 | location ^~ /.well-known/acme-challenge/{ 151 | default_type "text/plain"; 152 | root /; 153 | } 154 | 155 | # HTTP 重定向至 HTTPS 156 | location / { 157 | return 301 https://domain.com$request_uri? permanent; 158 | } 159 | } 160 | 161 | ``` 162 | 163 | 说明 164 | 165 | * 本文件为生成证书后所使用的文件,存放于/etc/nginx/conf.d/文件夹下(建议为命名为hfish.conf)。 166 | * 使用let's encrypto生成证书步骤请看下文。 167 | 168 | 前置步骤: 169 | 170 | 于/etc/nginx/conf.d/文件夹下,将以下内容写入文件,命名为*.conf(建议为命名为hfish.conf,星号内容可自定义) 171 | 172 | ``` 173 | server { 174 | listen 80; 175 | listen [::]:80; 176 | server_name domain.com; 177 | 178 | #反向代理 / 用于let's encrypto验证域名归属 179 | location ^~ /.well-known/acme-challenge/{ 180 | default_type "text/plain"; 181 | root /; 182 | } 183 | } 184 | ``` 185 | 186 | 文件写入后运行命令 187 | 188 | ``` 189 | nginx -t && systemctl restart nginx 190 | ``` 191 | 192 | 安装certbot 193 | 194 | ``` 195 | # ubuntu系统 196 | apt install certbot 197 | # centos系统 198 | yum install certbot 199 | ``` 200 | 201 | 完成域名验证并生成证书 202 | 203 | ``` 204 | certbot certonly --webroot domain.com #将domain.com替换为需要申请证书的域名 205 | ``` 206 | 207 | 运行该命令后根据提示输入验证文件地址。根据配置,验证地址为root /; ,即此处输入‘/’即可。 208 | 209 | 生成证书与密钥默认存放于/etc/letsencrypt/live/domain.com/文件夹下,此时将/etc/nginx/conf.d/文件夹下(建议为命名为hfish.conf)配置文件替换为完整的配置文件并运行以下命令即可。 210 | 211 | ```nginx 212 | nginx -t && systemctl restart nginx 213 | ``` 214 | 215 | #### CERT证书自动续期方案 216 | 217 | 编辑定时任务 218 | 219 | ``` 220 | crontab -e #首次使用定时任务则选择“2”,使用vim编辑 221 | ``` 222 | 223 | 写入以下命令,将domain.com替换为需要自动续期的域名 224 | 225 | ``` 226 | 00 00 1 * * certbot renew --force-renewal && systemctl restart nginx #每月一号强制续期所有使用certbot生成的证书 227 | ``` 228 | 229 | > certbot申请由Let's encrypto签发的证书通常有效期为三个月,剩余有效期大于三十日则判定为证书有效无法续期,此时使用“--force-renewal ”强制续期即可。 230 | > 231 | > 值得注意的是,Let's encrypto限制单个域名/IP每周生成证书最多五十个,每次生成证书时错误尝试次数小于等于五次。建议生成证书时先加入参数“--dry-run”测试。 232 | 233 | 234 | #### Let's encrypto+Nginx鉴权方案 235 | 236 | > 使用nginx鉴权可有效隐藏管理端界面,可有效防止hash匹配识别登录界面 237 | 238 | ``` 239 | server { 240 | listen 443 ssl http2; 241 | listen [::]:443 ssl http2; 242 | client_max_body_size 4G; #设置传输大小限制,nginx默认文件上传大小为1M 243 | server_name domain.com; #需要将domain.com替换为您所使用的域名 244 | 245 | ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem; #您的证书存储位置,通常位于/etc/nginc/cert文件夹下,需要将domain.com.pem替换为您的证书文件 246 | ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem; #您证书私钥的存储位置,通常位于/etc/nginc/cert文件夹下,需要将domain.com.key替换为您证书私钥文件。 247 | 248 | # 反向代理设置 249 | # 反向代理 /api/v1 用于与节点进行通讯 250 | location /api/v1 { 251 | proxy_pass https://127.0.0.1:4434$request_uri; 252 | proxy_set_header Host $host; 253 | proxy_set_header X-Real-IP $remote_addr; 254 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 255 | proxy_set_header X-Forwarded-Proto $scheme; 256 | proxy_set_header X-Forwarded-Host $host; 257 | proxy_set_header X-Forwarded-Port $server_port; 258 | proxy_connect_timeout 60s; 259 | proxy_send_timeout 60s; 260 | proxy_read_timeout 60s; 261 | } 262 | 263 | # 反向代理 /tmp 用于与节点进行下载 264 | location /tmp { 265 | proxy_pass https://127.0.0.1:4434$request_uri; 266 | proxy_set_header Host $host; 267 | proxy_set_header X-Real-IP $remote_addr; 268 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 269 | proxy_set_header X-Forwarded-Proto $scheme; 270 | proxy_set_header X-Forwarded-Host $host; 271 | proxy_set_header X-Forwarded-Port $server_port; 272 | proxy_connect_timeout 60s; 273 | proxy_send_timeout 60s; 274 | proxy_read_timeout 60s; 275 | } 276 | 277 | # 反向代理 / 用于与 Web 服务 278 | location / { 279 | proxy_pass https://127.0.0.1:4433$request_uri; 280 | proxy_set_header Host $host; 281 | proxy_set_header X-Real-IP $remote_addr; 282 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 283 | proxy_set_header X-Forwarded-Proto $scheme; 284 | proxy_set_header X-Forwarded-Host $host; 285 | proxy_set_header X-Forwarded-Port $server_port; 286 | proxy_connect_timeout 60s; 287 | proxy_send_timeout 60s; 288 | proxy_read_timeout 60s; 289 | auth_basic "Restricted"; #启用Nginx鉴权 290 | auth_basic_user_file /etc/nginx/.htpasswd; #密码文件存放地址,默认为/etc/nginx/.htpasswd 291 | } 292 | } 293 | 294 | 295 | server { 296 | listen 80; 297 | listen [::]:80; 298 | server_name domain.com; 299 | 300 | #方向代理 / 用于let's encrypto验证域名归属 301 | location ^~ /.well-known/acme-challenge/{ 302 | default_type "text/plain"; 303 | root /; 304 | } 305 | 306 | # HTTP 重定向至 HTTPS 307 | location / { 308 | return 301 https://domain.com$request_uri? permanent; 309 | } 310 | } 311 | 312 | ``` 313 | 314 | 说明 315 | 316 | * Nginx鉴权设置前置条件 317 | 318 | 安装Nginx鉴权工具 319 | 320 | ``` 321 | # ubuntu系统 322 | apt install apache2-utils 323 | # centos系统 324 | yum install httpd-tools 325 | ``` 326 | 327 | 生成密码 328 | 329 | ``` 330 | htpasswd -c /etc/nginx/.htpasswd username #username为登录用户名,运行此命令后按照步骤输入需要设置的密码即可 331 | ``` 332 | 333 | * 本文件为生成证书后所使用的文件,存放于/etc/nginx/conf.d/文件夹下(建议为命名为hfish.conf)。 -------------------------------------------------------------------------------- /docs/3-0-quickstart.md: -------------------------------------------------------------------------------- 1 | #### 快速使用 2 | 3 | 如果时间有限,当用户部署完HFish管理端后,只需要了解并操作以下三步就可以进行蜜罐观测。 4 | 5 | > ##### 添加/删除节点 6 | 7 | 安装HFish管理端后,在管理端所在机器上会默认建立节点感知攻击,该节点被命名为【内置节点】。 8 | 9 | 用户也可以在其他机器上部署新的节点,以增加观测范围。 10 | 11 | > ##### 添加/删除蜜罐 12 | 13 | 蜜罐、节点和管理端的关系类似于总部、零售店和货物的关系,总部(管理端)负责管理零售店(一个或多个节点端),并提供货物(一个或多个蜜罐服务),零售店(一个或多个节点端)负责将总部(管理端)推送的货物(一个或多个蜜罐服务)上架并提供具体服务。 14 | 15 | 节点负责主动和管理端沟通,用户通过管理端Web界面配置后,节点根据指令在主机上构建具体蜜罐服务。 16 | 17 | 一个节点最多可以同时构建10个蜜罐服务。 18 | 19 | > ##### 查看攻击详情 20 | 21 | HFish有四个不同的页面提供攻击详情,分别为:攻击列表、扫描感知、攻击来源、账号资产 22 | -------------------------------------------------------------------------------- /docs/3-1-nodemgmt.md: -------------------------------------------------------------------------------- 1 | #### 添加/删除节点 2 | 3 | #### 内置节点 4 | 5 | 安装HFish管理端后,在管理端所在机器上会默认建立节点感知攻击,该节点被命名为【内置节点】。 6 | 7 | 该节点将默认开启部分服务,包括FTP、SSH、Telnet、Zabbix监控系统、Nginx蜜罐、MySQL蜜罐、Redis蜜罐、HTTP代理蜜罐、ElasticSearch蜜罐和通用TCP端口监听。 8 | 9 | `注意:该节点不能被删除,但可以暂停。` 10 | 11 | image-20210902210912371 12 | 13 | 14 | #### 新增节点 15 | 16 | > ##### 进入【节点管理】页面,点击【增加节点】 17 | 18 | image-20210902172749029 19 | 20 | > ##### 根据节点设备类型选择对应的安装包和回连地址 21 | 22 | image-20210902172832815 23 | 24 | > ##### 回连地址设置 25 | 26 | HFish会自动获取当前服务器IP地址,但是例如在云环境,有时候获取的是内网地址,用户需要确保该回连地址和端口确实可以被所有节点联通。 27 | 28 | image-20210902172916191 29 | 30 | > ##### 在节点机器执行命令语句或安装包,即可成功部署节点。 31 | 32 | 33 | 34 | #### 删除节点 35 | 36 | > ##### 进入【节点管理】页面,在节点列表中找到要删除的节点,点击该节点右侧【删除】,HFish需要二次验证您的管理员身份,输入admin密码后,节点将被删除。 37 | 38 | 节点被删除后,节点端进程会自动退出,但程序会保留在原有路径,需要手动二次删除,管理端上已收集的关于该节点的所有攻击数据不会丢失,仍然能查看。 39 | -------------------------------------------------------------------------------- /docs/3-2-potmgmt.md: -------------------------------------------------------------------------------- 1 | #### 添加/删除蜜罐 2 | 3 | 每个蜜罐服务必须由在节点程序构建,这里指的蜜罐服务例如MySQL、Redis等具体服务。因此用户必须先添加节点后才可以为节点配置蜜罐服务,HFish提供两种方式配置节点服务。 4 | 5 | #### 直接修改蜜罐服务 6 | 7 | 该方法可以快速修改单个节点上的蜜罐服务,其操作步骤如下: 8 | 9 | > ##### 点击单个节点,可直接对节点上的服务进行添加和删除 ##### 10 | 11 | image-20210914120052175 12 | 13 | 14 | 15 | #### 创建模版,应用到多节点 16 | 17 | 蜜罐模板便于用户同时管理很多节点,批量更改蜜罐服务,即将一套模板批量应用到多个节点上,其操作步骤如下: 18 | 19 | > ##### 进入【模版管理】页面,点击【新建模板】,输入模板名称,选择蜜罐服务,填写描述信息,点击【确定】保存 20 | 21 | image-20210914115931102 22 | 23 | > ##### 进入【节点管理】页面,展开具体节点,选择上面创建的蜜罐模板 24 | 25 | image-20210616173015062 26 | 27 | 28 | > ##### 应用模板后,蜜罐服务状态会短暂显示为【启用】,此时蜜罐尚未部署完成,只有蜜罐服务状态变为【在线】才表示蜜罐服务正常工作 29 | 30 | image-20210616173053947 31 | 32 | > ##### 如果状态显示为【离线】,说明蜜罐服务没有正常启动,可将鼠标移动到问号上查看提示或请参考我们后面的【排错说明】 33 | 34 | image-20210616173128526 35 | 36 | -------------------------------------------------------------------------------- /docs/3-3-checkattack.md: -------------------------------------------------------------------------------- 1 | #### 查看攻击详情 2 | 3 | 当前,HFish提供四个不同的页面进行**攻击详查看**,分别为:**攻击列表**、**扫描感知**、**攻击来源**、**账号资产** 4 | 5 | image-20210902143712779 6 | 7 | 四种功能分别代表四种不同的攻击数据场景 8 | 9 | | | 功能简介 | 功能原理 | 10 | | ------------- | -------------------------------------- | ------------------------------------------------------------ | 11 | | **攻击列表** | 收集所有对蜜罐的攻击 | 节点部署蜜罐后,攻击者对蜜罐的**所有攻击信息**都会被收录到「攻击列表」中。 | 12 | | **扫描感知** | 收集节点主机网卡的所有连接信息 | 节点生成之后,HFish会**记录对节点所有网卡的连接**,包括来访IP,连接IP和端口。 | 13 | | **攻击来源** | 收集了所有连接和攻击节点的IP信息 | **所有**尝试连接和攻击节点的**IP信息**都被记录在攻击来源中,如果蜜罐溯源和反制成功,信息也会被记录其中。 | 14 | | **账号资产** | 收集了所有攻击者爆破蜜罐使用的账号密码 | HFish会**记录**攻击者对所有蜜罐进行**暴力破解时使用的账号密码**,进行统一展示,用户还可**自定义监控词汇**,如员工姓名、公司名称等,一旦与攻击者使用的账号重合,可高亮显示并告警。 | 15 | 16 | 详细介绍可查看: 17 | 18 | [攻击列表](4-1-attack) 19 | 20 | [扫描感知](4-2-scan) 21 | 22 | [攻击来源](5-1-source) 23 | 24 | [账号资产](5-2-asset) 25 | -------------------------------------------------------------------------------- /docs/3-4-debug.md: -------------------------------------------------------------------------------- 1 | #### 错误排查 2 | 3 | > ##### 管理端部署完成后,访问Web管理页面始终无法打开 ##### 4 | 5 | 1. 确认浏览器访问地址是 https://[server]:4433/web/,注意不可缺少“/web/”这个路径 6 | 2. 确认管理端进程的运行情况和TCP/4433端口开放情况,如果不正常需要重启管理端进程 7 | 8 | ``` 9 | # 检查 hfish-server的进程是否运行正常 10 | ps ax | grep ./hfish | grep -v grep 11 | ​ 12 | # 检查TCP/4433端口是否正常开放 13 | ss -ntpl 14 | ``` 15 | 16 | 3. 检查管理端主机是否开启了防火墙,导致目前无法访问,必要情况,考虑关闭防火墙 17 | 18 | ``` 19 | #centos7 检查防火墙状态 20 | systemctl status firewalld 21 | 22 | #centos7 检查防火墙开放端口 23 | firewall-cmd --list-ports 24 | ``` 25 | 26 | 4. Linux环境使用date命令确认系统时间的准确 27 | 5. 如果以上都没有问题,请将server和client日志提供给我们 28 | 29 | ``` 30 | 节点端日志在安装目录的logs文件夹内,文件名为client.log 31 | Linux管理端日志在/usr/share/hfish/log文件夹内,文件名为server.log 32 | Windows管理端日志在C:\Users\Public\hfish\log文件夹内,文件名为server.log 33 | ``` 34 | 35 | > ##### 节点状态为红色离线 ##### 36 | 37 | 1. 检查节点到管理端的网络连通情况,以下是几种常见情况 38 | ``` 39 | 节点每60秒连接管理端的TCP/4434端口一次,180秒内连接不上即显示为离线。 40 | 刚完成部署或网络不稳定的时候会出现显示为离线。 41 | 通常情况,等待2~3分钟,如果节点恢复绿色在线,那蜜罐服务也会从绿色启用,变成绿色在线。 42 | ``` 43 | 44 | 2. 检查节点上的进程运行情况,如果进程运行异常,杀死全部关联进程后重启进程,并查看错误日志 45 | ``` 46 | # 检查./client的进程是否运行正常 47 | ps ax | grep -E 'services|./client' | grep -v grep         48 | ``` 49 | 50 | 3. 如果以上都没有问题,请将server和client日志提供给我们 51 | ``` 52 | 节点端日志在安装目录的logs目录内,文件名为client.log 53 | Linux管理端日志在/usr/share/hfish/log文件夹内,文件名为server.log 54 | Linux管理端日志在C:\Users\Public\hfish\log文件夹内,文件名为server.log 55 | ``` 56 | 57 | 58 | > ##### 节点在线,部分蜜罐服务在线,部分蜜罐服务离线 ##### 59 | 60 | 通常情况,用户可以登录Web管理界面,将鼠标悬停在蜜罐后面的问号图标,查看离线原因,如下图: 61 | 62 | ![image-20220721111203773](http://img.threatbook.cn/hfish/image-20220721111203773.png) 63 | 64 | 65 | > ##### 蜜罐离线原因 bind:address already in use ##### 66 | 67 | 此蜜罐占用的端口已经被别的进程占用。 68 | 69 | 新手常见的错误之一是使用HFish模拟SSH服务,而又没有修改真正的SSH服务,导致蜜罐SSH服务和真正SSH服务争夺TCP/22端口,观测到的现象是刚启动节点时SSH蜜罐服务在线,刷新页面后显示离线。 70 | 71 | 使用ss -ntpl命令检查该蜜罐服务的端口是否被占用,如果被占用,建议修改该业务的默认端口。 72 | ​ 73 | Windows操作系统上,如果用户启用了tcp端口监听,大概率会发现TCP 135、139、445、3389端口冲突, 74 | 这是用于Windows默认占用了这些端口,不建议在Windows上监听TCP 135、139、445、3389端口。 75 | ​ 76 | Linux操作系统中,可以通过netstat -ant查看端口是否已被占用(需root权限)。 77 | 78 | > ##### 我通过SSH登录运行了节点进程,如何防止SSH退出后节点进程终止? ##### 79 | ``` 80 | nohup .~/client >>nohup.out 2>&1 & 81 | ``` 82 | ​ 83 | > ##### 如何在Linux上设定节点进程开机自启动 ##### 84 | ``` 85 | echo 'nohup .~/client >>nohup.out 2>&1 &' >> /etc/rc.local 86 | ``` 87 | ​ 88 | > ##### 如何在Linux上通过计划任务自动重启节点进程 ##### 89 | ``` 90 | echo '* * * * * nohup .~/client >>nohup.out 2>&1 &' >> /var/spool/cron/crontabs/root 91 | ``` -------------------------------------------------------------------------------- /docs/4-0-scene.md: -------------------------------------------------------------------------------- 1 | #### 场景介绍 2 | 3 | > ##### 内网环境 ##### 4 | 5 | 1. 内网办公/内部服务器失陷检测场景 6 | 2. 内部人员风险 7 | 8 | 9 | > ##### 外网环境 ##### 10 | 11 | 1. 外网威胁感知场景 12 | 2. 外网情报生产场景 13 | 3. 外网溯源反制场景 14 | 4. 云环境风险感知场景 15 | 5. 员工账号密码遗失感知场景 16 | 6. 员工安全意识培训场景 17 | 18 | -------------------------------------------------------------------------------- /docs/4-1-Intranet.md: -------------------------------------------------------------------------------- 1 | #### 内网失陷感知场景 2 | 3 | 根据HFish团队走访,内网失陷感知场景是目前商业用户反馈最实用、最常用的场景,相对于部署在互联网,HFish部署在内网可以精确感知内部失陷主机横移扫描行为,风险等级更高,处置闭环更强。 4 | 5 | ![image-202311081253175](https://hfish.net/images/202311081253175.png) 6 | 7 | 8 | > ##### 痛点 9 | 10 | 由于设备外带、USB设备接入、员工下载非法软件、客户端漏洞、VPN账号失窃、恶意员工等众多原因导致内部办公或内部服务器失陷,攻击者和蠕虫木马在内网肆无忌惮的横向移动,如何及时感知已经在内网发生的以上紧急安全事件。 11 | 12 | 13 | > ##### 推荐部署位置 14 | 15 | ![image-20210611130733084](https://hfish.net/images/20210616174930.png) 16 | 17 | 该场景是蜜罐在企业环境 **最常见** 的使用方法,用来捕捉内网已经失陷、勒索软件和恶意行为,重点在于 **敏捷准确**,具体可细分为 **内部办公场景** 和 **内部服务器场景**, 18 | 19 | **内部办公场景**:蜜罐被部署在企业内部办公网区,用于 **感知内网失陷主机、勒索软件扫描或恶意员工内网刺探行为** ,常见模板可设置为监听TCP/135、TCP/139、TCP/445和TCP/3389等服务。 20 | 21 | **内部服务器场景**:蜜罐被部署在企业内部服务器区,用于 **感知内网失陷和横向移动**,常见模板可以设置为模拟Web、MySQL、Redis、Elasticsearch、SSH、Telnet等服务。 22 | 23 | 24 | > ##### 部署注意事项 25 | 26 | 1. 节点部署数量:建议节点的覆盖程度密集更好,在每个网段内建议有两个节点,在网段头和网段尾部署。 27 | 2. 节点部署网络要求:节点部署与vlan无关,只要评估攻击者控制任何一台内网的机器后进行内网扫描时大概率会触碰到节点即可。 28 | 3. 节点防火墙要求:开放蜜罐服务所占用的端口,这些端口应能被攻击者访问到。 29 | 30 | 31 | > ##### 可能需要经常关注的页面 32 | 33 | 1. [**攻击列表** ](detail-attack) 34 | 35 | 查看所有蜜罐被攻击的情况。 36 | 37 | 2. [**扫描感知** ](4-2-scan) 38 | 39 | 启用扫描感知后,HFish可以观测到该节点主机上任意端口的被访问记录,如果内网部署在纯净机器上(即全新机器只部署HFish节点),强烈推荐启用该功能。 40 | 41 | 如果只想针对特定端口进行监听,请使用「TCP端口监听蜜罐」; 42 | 43 | `注意:如果HFish节点和正常业务共用一台服务器,该功能也会记录正常业务连接导致海量误报;` 44 | 45 | 3. [**失陷感知**](detail-decoy) 46 | 47 | 该页面是利用已经播撒的蜜饵实现**被动对业务主机失陷的感知**,用户可以在该页面生成蜜饵,并观测蜜饵被触碰状态。 48 | 49 | 4. [**告警配置**](detail-alarm) 50 | 51 | 对于蜜罐捕获到的信息,跟据不同的安全运营流程,可能需要第一时间通知其它安全设备或相关安全运营人员。 -------------------------------------------------------------------------------- /docs/4-2-extranet.md: -------------------------------------------------------------------------------- 1 | #### 外网威胁感知场景 2 | 3 | > ##### 痛点 4 | 5 | 大量业务上云,传统防火墙、IDS、IPS、NDR无法上云或上云后功能受限,最终导致安全感知能力极度弱化。开源情报质量差,大量无效告警,半自动化处置无法落地。 6 | 7 | > ##### 推荐部署位置 8 | 9 | 该场景一般是将节点部署在互联网区,用来感知互联网来自自动化蠕虫、竞争对手和境外的 **真实威胁**,甚至发现针对客户的 **0day攻击**,通过和具有情报生产能力的 **情报平台** 对接,可以稳定准确的**生产私有威胁情报**。 10 | 11 | 12 | > ##### 部署注意事项: 13 | 14 | 1. 该场景会捕捉到 **大量真实攻击行为** ,建议在部署前将蜜罐加入网络检测设备白名单中避免误报; 15 | 2. 个别行业需要考虑监管单位扫描通报情况,建议在部署前建表报备蜜罐地址; 16 | 17 | -------------------------------------------------------------------------------- /docs/4-2-scan.md: -------------------------------------------------------------------------------- 1 | #### 扫描感知 2 | 3 | 该页面用于展示HFish蜜罐节点被TCP、UDP和ICMP三种协议的全端口扫描探测行为。 4 | 5 | ![image-20210730154355445](https://hfish.net/images/20210730154357.png) 6 | 7 | 即使节点相关端口没有开放,HFish仍能记录下扫描行为,此外,HFish还会记录节点主机本身外联行为。 8 | 9 | 目前扫描感知列表内能够展示的信息如下: 10 | 11 | ``` 12 | 1、扫描IP 13 | 2、威胁情报 14 | 3、被扫描节点 15 | 4、被扫描IP 16 | 5、扫描类型 17 | 6、被扫描端口 18 | 7、节点位置 19 | 8、扫描开始时间 20 | 9、扫描持续时间 21 | ``` 22 | 23 | `注意:Windows节点的扫描感知依赖WinPcap,需要手动进行下载安装!` 24 | 25 | WinPcap官方链接:https://www.winpcap.org/install/bin/WinPcap_4_1_3.exe 26 | 27 | 28 | #### 扫描感知异常 29 | 30 | HFish通过节点端构造“蜜罐服务”,因此,**部署节点的机器不建议运行任何正常业务**,但很多用户往往会将**正常业务使用的笔记本、虚拟机作为节点机器**。 31 | 32 | 这种情况下,扫描数据常常会记录下用户软件访问网络的信息,利用Windows用户中,HFish经常检测到TCP/445端口的被访问或访问情况。 33 | 34 | 此外,有很多用户反馈,将蜜罐节点部署在外网数日早上到海量扫描攻击,导致HFish页面响应慢,如果对扫描探测不敏感,可以选择点击页面左上角开关暂时关闭扫描感知功能。 35 | 36 | 如果您的扫描感知出现了其他问题,欢迎加入官方交流微信群反馈。 37 | 38 | ![image-20220729162931543](http://img.threatbook.cn/hfish/image-20220729162931543.png) 39 | -------------------------------------------------------------------------------- /docs/4-3-detection.md: -------------------------------------------------------------------------------- 1 | 威胁检测 2 | 3 | #### 检测功能简介 4 | 5 | **适用情况:** 6 | 7 | 本地默认自带规则,通过设置自定义规则,可对关注的重点攻击行为做实时监控。在重大保障/攻防演练中,当有0day、N day等漏洞爆出,可自定义添加对应漏洞的yara规则,重点监控。另,威胁检测引擎会发现触发这些规则的告警,这些告警可帮助判断针对性攻击。 8 | 9 | **检测数据:** 10 | 11 | HFish的威胁检测引擎是基于攻击HFish的日志数据进行检测。日志原始数据可以查看攻击列表 12 | 13 | 这些数据包括有web蜜罐的url数据、UA等数据,高交互蜜罐内执行的命令等数据,普通蜜罐的记录日志。 14 | 15 | 原始数据参考可通过攻击列表下载查看: 16 | 17 | image-20220525175235039 18 | 19 | image-20220525175429375 20 | 21 | 22 | 23 | #### 使用介绍 24 | 25 | 通过增加威胁检测引擎 ,支持规则检测,且支持上传自定义yara规则,系统自动化分析数据,判定攻击行为,丰富IP威胁判定,更清晰的感受攻击态势和攻击情况。 26 | 27 | image-20220525180224940 28 | 29 | 30 | 31 | #### 告警查看 32 | 33 | 1)点击列表中的【命令记录】下方的数字即可跳转到对应攻击 34 | 35 | image-20220525221605474 36 | 37 | 2)也可在【威胁感知】-【攻击列表】进行搜索匹配到规则的告警,只有匹配过的告警记录,筛选条件【攻击行为类型】才有选项。 38 | 39 | image-20220525221529700 40 | 41 | 42 | 43 | #### 新增自定义规则 44 | 45 | 1、点击右上角【新增检测规则】 46 | 47 | image-20220525180831991 48 | 49 | 2、撰写新增检测规则。填写策略名称、描述、严重级别、yara规则。另最下方支持工具帮助测试写好的yara规则是否能对当前日志正确检出 50 | 51 | image-20220525180854591 52 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /docs/4-4-internetdecoy.md: -------------------------------------------------------------------------------- 1 | 2 | ### 什么是诱饵 3 | 4 | 诱饵泛指任意伪造的高价值文件(例如运维手册、邮件、配置文件等),用于引诱和转移攻击者视线,最终达到牵引攻击者离开真实的高价值资产并进入陷阱的目的。 5 | 6 | ### 蜜饵使用场景 7 | 8 | HFish的蜜饵在 **牵引** 攻击者的功能上增加了 **精确定位失陷** 能力,即每个蜜饵都是 **唯一的**,攻击者入侵用户主机后,如果盗取蜜饵文件中的数据并从任意主机发起攻击,防守者仍能知道失陷源头在哪里。 9 | 10 | 举个例子: 11 | 12 | ``` 13 | 攻击者侵入企业内部某台服务器,在其目录中找到一个payment_config.ini文件,文件中包含数据库主机IP地址和账号密码, 14 | 攻击者为隐藏自己真实入侵路径,通过第三台主机访问数据库主机…… 15 | ``` 16 | 17 | 在以上场景中,payment_config.ini为蜜饵,所谓的数据库主机是另外一台位于安全区域的蜜罐,而攻击者得到的所谓账号密码也是虚假且唯一的,防守者可以根据其得到攻击者真实的横向移动路径。 18 | 19 | 由于蜜饵只是静态文件,所以蜜饵适合部署在任何主机和场景中,例如作为附件通过邮件发送(检测邮件是否被盗)、在攻防演练期间上传到百度网盘或github上混淆攻击者视线、压缩改名成backup.zip放置在Web目录下守株待兔等待攻击者扫描器上钩…… 20 | 21 | ### 蜜标使用场景 22 | 23 | HFish的蜜标为excel或者word文件的格式,一个蜜标可以下发到多个主机。攻击者入侵用户主机后,只要尝试打开蜜标,那么蜜标就会给节点发出告警信息。我们最终可以在管理端看到整体的蜜标失陷告警。 24 | 25 | 因此特别注意:`蜜标在多个机器部署的时候,蜜标部署位置一定要跟生成蜜标的节点是可联通的` 26 | 27 | 28 | ### HFish的诱饵模式 29 | 30 | HFish的诱饵模块由 **定制** 、**分发接口** 和 **告警信息** 三部分组成, 31 | 32 | #### 诱饵定制 33 | 34 | HFish提供完整的诱饵定制,您可以通过在「失陷感知」-「蜜饵管理」中定制新增您自己的诱饵 35 | 36 | image-20220525224243205 37 | 38 | image-20220525224216905 39 | 40 | 在蜜饵内容中,$username$、$password$和$honeypot$分别代表账号、密码和蜜罐变量,以上为必填变量,必须进行引用,才能让蜜饵功能生效。 41 | 三个变量,按照文件想呈现给攻击者的效果进行引用。 42 | $username$变量如果未填写账号字典,则默认用root作为所有蜜饵的账号名。 43 | $password$变量按照选取的位数,自动生成蜜饵的密码。 44 | $honeypot$变量按照蜜饵下拉节点的部署服务,自动生成IP和端口。 45 | 46 | .2801635164451_.pic 47 | 48 | 点击预览,可以查看当前的蜜饵内容,在实际被下拉时的显示内容 49 | 50 | 2811635164463_.pic_hd 51 | 52 | 点击确定,即可新增一条文件蜜饵。 53 | 54 | 2821635164487_.pic_hd 55 | 56 | 57 | 58 | #### 分发接口 59 | 60 | 其中 **分发接口** 实际位于节点端,启用或禁用开关位于管理端的节点管理页面任意一个节点的详情页面中,默认监听TCP/7878端口, 61 | 62 | 任何一台节点都可以作为节点分发服务器使用,如下图: 63 | 64 | image-20211116213058329 65 | 66 | 启用后,用户可以从需要部署蜜饵的主机上访问如下地址,得到一个唯一的蜜饵文件: 67 | 68 | image-20220525224602527 69 | 70 | 复制该下发指令后,前往需进行布防的业务机器,执行即可。 71 | 72 | 用户可以在【失陷感知】-【告警信息】页面查看到已经生成的蜜饵。 73 | 74 | 75 | 76 | #### 告警信息 77 | 78 | 蜜饵部署完成后,已部署蜜饵的所有机器,以及攻击者被蜜饵迷惑访问蜜罐的网络地址和时间都可在该页面查看。 79 | 80 | image-20211222095756489 81 | 82 | 83 | 如果攻击者根据已部署的蜜饵文件中的虚假信息尝试登陆,HFish将会记录并告警,并展示已失陷节点主机和失陷流程。 84 | 85 | image-20211222095822939 86 | -------------------------------------------------------------------------------- /docs/4-4-yara.md: -------------------------------------------------------------------------------- 1 | #### HFish检测语法介绍 2 | 3 | HFish使用的yara监测语法分为三部分,rule,string和condition。样例如下: 4 | 5 | ``` 6 | rule name1 7 | { 8 | 9 | strings: 10 | $str1 = "1" 11 | $str12 = "2" 12 | 13 | condition: 14 | any of them 15 | } 16 | ``` 17 | 18 | 该样例代表的是,我建立了一个叫做"name1"的检测规则,如果我检测的数据中出现1或者2,代表这个数据触碰了我建立的name1规则。 19 | 20 | 其他Yara规则中标准的meta字段,hfish使用填空的形式进行收集,详情界面可以参见: 21 | 22 | image-20220525204450737 23 | 24 | 25 | 26 | 最后附上一篇较为全面的Yara检测规则语法参考 27 | 28 | https://b1ackie.cn/2021/09/13/yara%E8%A7%84%E5%88%99%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%EF%BC%88%E4%B8%80%EF%BC%89/ 29 | 30 | -------------------------------------------------------------------------------- /docs/4-6-trace.md: -------------------------------------------------------------------------------- 1 | **溯源功能支持版本:3.1.4** 2 | 3 | ### 什么是溯源 4 | 5 | 溯源,一般是在攻防中,用于挖掘攻击者身份,通过资产面,回溯等判断攻击者身份。 6 | 7 | 在近几年攻防演练中,更加特指了解对方的身份信息。 8 | 9 | HFish作为蜜罐软件,提供被攻击时候的正常防卫需求。当攻击者扫描、攻击或者恶意连接HFish的蜜罐时,HFish提供包括但不限于: 10 | 通过现有攻击工具漏洞,在合理范围内对攻击者进行信息提取、溯源等必要的攻击防御信息收集手段。 11 | 12 | 13 | 14 | ### 纯内网部署,能否溯源 15 | 16 | **安全业务层面:** 17 | 18 | 内网没有太大的溯源意义,通过IP地址分配,dhcp查询,以运维手段可以很快了解到来源IP的所属用户。所以内网并没有非常大的意义 19 | 20 | **溯源技术层面**: 21 | 22 | HFish共支持三种溯源手段。 23 | 24 | Mysql反制(支持内网,能够对攻击者机器做任意文件读取) 25 | 26 | 厂商vpn蜜罐反制(支持内网,能够获得windows机器登陆的微信号信息与桌面截图) 27 | 28 | web型蜜罐溯源(不支持内网)这种溯源方式,在溯源时,会自动获取攻击者的出口IP进行标记。 29 | 30 | 31 | 32 | ### HFish溯源实现原理与测试方法 33 | 34 | HFish共支持三种溯源手段。 35 | 36 | ##### 1.Mysql反制(支持内网,能够对攻击者机器做任意文件读取) 37 | 38 | 通过MySql客户端漏洞,当攻击者使用8.0以下的**Mysql客户端直连**HFish的Mysql蜜罐的时候。可以触发任意文件读取的能力,读取Mysql客户端所在机器上的任意一个文件。 39 | 40 | 注意: 41 | 42 | 1. 一定是Mysql客户端直连。不兼容诸如navicat这类工具。 43 | 44 | 2. 在节点管理中,可以设置mysql任意文件读取的具体读取路径 45 | 46 | ![image-20220807141822892](http://img.threatbook.cn/hfish/image-20220807141822892.png) 47 | 48 | ##### 2.厂商vpn蜜罐反制(支持内网,能够获得windows机器登陆的微信号信息与桌面截图) 49 | 50 | 通过蜜罐页面提供可下载二进制,攻击者下载执行后,会获取攻击者的微信与屏幕截图 51 | 52 | 该部分记录的是连接IP,所以您在内网中测试,测试结果不会回传到云端共享,可放心测试。 53 | 54 | ##### 测试步骤: 55 | 56 | a. 直接在HFish中添加深信服vpn蜜罐。 57 | 58 | b.下载蜜罐页面中的exe并运行 59 | 60 | c. 进入攻击来源,搜索IP或者直接点击溯源信息按钮。查看详情 61 | 62 | image-20220807123404778 63 | 64 | image-20220807124218394 65 | 66 | #### 67 | 68 | ##### 3.web型蜜罐溯源(不支持内网溯源) 69 | 70 | HFish所有的web页面蜜罐,包括自定义蜜罐,都可以在该情况下进行溯源。 71 | 72 | 对扫描器、webshell管理器、java反序列化反制。该部分反制数据会显示攻击者的出口IP。 73 | 74 | 可以拿到包括**机器架构,微信账号、QQ账号、QQ音乐账号、百度云账号,浏览器浏览记录、history、whoami**等信息 75 | 76 | ⚠️注意:处于对产品技术保密的原因。我们不会公开可以对扫描器、webshell管理器能够进行溯源反制,也不会提供相关的应用教程。 77 | 78 | 如果您确实有测试需求,请用您的企业邮箱,说明您的公司,身份,测试需求原因,邮件honeypot@threatbook.cn发送申请。我们只支持企业安全部门的测试申请与协助。 79 | 80 | 81 | 82 | ##### 4 .Java 远程调用蜜罐溯源(不支持内网溯源) 83 | 84 | Java远程调用蜜罐是HFish内置的一种蜜罐服务。添加到节点上即可食用 85 | 86 | ![image-20220807144001639](http://img.threatbook.cn/hfish/image-20220807144001639.png) 87 | 88 | 当攻击者使用java反序列化工具对你的Java远程调用蜜罐进行攻击时,由于该蜜罐内置了Java反序列化工具的漏洞利用方式。 89 | 90 | 因此可以拿到包括**机器架构,微信账号、QQ账号、QQ音乐账号、百度云账号,浏览器浏览记录、history、whoami**等信息 91 | 92 | ⚠️注意:处于对产品技术保密的原因。我们不会提供相关的应用教程。 93 | 94 | 如果您确实有测试需求,请用您的企业邮箱,说明您的公司,身份,测试需求原因,邮件honeypot@threatbook.cn发送申请。我们只支持企业安全部门的测试申请与协助。 95 | 96 | 97 | 98 | ### 溯源信息查看 99 | 100 | 进入攻击来源,搜索IP或者直接点击溯源信息按钮。查看详情 101 | 102 | image-20220807123404778 103 | 104 | image-20220807124218394 105 | 106 | #### 107 | 108 | 109 | 110 | 111 | 112 | 溯源蜜罐支持表单 113 | 114 | | 溯源类型 | 服务名称 | 大类/具体服务 | 交互类型 | 默认监听端口 | 描述 | 115 | | --------------- | ------------------------------ | ------------- | -------- | ------------ | ------------------------------------------------------------ | 116 | | Mysql反制 | Mysql蜜罐 | 数据库服务 | 低交互 | TCP/3306 | 该蜜罐仿真了MySQL服务端,可用于记录探测和攻击行为,建议部署在内外网研发测试环境 | 117 | | 厂商VPN蜜罐反制 | 深信服VPN蜜罐 | IT设备 | 低交互 | TCP/9091 | 提供虚假的深信服VPN后台登陆Web界面,常见于互联网场景,默认使用TCP/9091端口 | 118 | | Java反制 | Java远程调用蜜罐 | JAVA服务 | 低交互 | TCP/1099 | 该蜜罐仿真了JAVA远程调用服务,可用于内外网攻击感知,同时具备溯源能力。远程方法调用是用Java在JDK1.2中实现的服务,Java作为一种风靡一时的网络开发语言,有着非常大的应用面,同时也在市面屡见不鲜出现漏洞。因此,JAVA服务蜜罐对攻击者有极大诱惑力。 | 119 | | web型蜜罐溯源 | 群晖NAS蜜罐 | IOT设备 | 低交互 | TCP/9194 | 该蜜罐仿真了群晖NAS的Web登陆界面,可用于记录账号暴力破解和攻击行为,建议部署在内网办公环境 | 120 | | web型蜜罐溯源 | CiscoVPN蜜罐 | IT设备 | 低交互 | TCP/9299 | 提供虚假的思科VPN后台登录Web界面,常见于互联网场景,默认使用TCP/9299 | 121 | | web型蜜罐溯源 | 天融信防火墙蜜罐 | 安全设备 | 低交互 | TCP/9081 | 提供虚假的天融信安全设备后台登录Web界面,常见于互联网、内网场景,默认使用TCP/9081 | 122 | | web型蜜罐溯源 | 绿盟防火墙蜜罐 | 安全设备 | 低交互 | TCP/9083 | 提供虚假的绿盟安全设备后台登录Web界面,常见于互联网、内网场景,默认使用TCP/9083 | 123 | | web型蜜罐溯源 | Dell打印机配置管理蜜罐 | IT设备 | 低交互 | TCP/9084 | 提供虚假的Dell打印机配置管理Web界面,常见于互联网场景,默认使用TCP/9084 | 124 | | web型蜜罐溯源 | IntelActiveManagement管理蜜罐 | IT设备 | 低交互 | TCP/9085 | 提供虚假的IntelActiveManagement后台管理Web界面,常见于互联网场景,默认使用TCP/9085 | 125 | | web型蜜罐溯源 | 深信服网页防篡改系统蜜罐 | 安全设备 | 低交互 | TCP/9298 | 该蜜罐仿真了深信服网页防篡改系统的Web登陆界面,可用于记录账号暴力破解和攻击行为,建议部署在内网安全管理区,默认使用TCP/9298 | 126 | | web型蜜罐溯源 | 科来网络全流量安全分析系统蜜罐 | 安全设备 | 低交互 | TCP/9296 | 该蜜罐仿真了科来网络全流量安全分析系统的Web登陆界面,可用于记录账号暴力破解和攻击行为,建议部署在内网安全管理区,默认使用TCP/9296 | 127 | | web型蜜罐溯源 | 中科网威安全控制系统蜜罐 | 安全设备 | 低交互 | TCP/9297 | 该蜜罐仿真了中科网威安全控制系统的Web登陆界面,可用于记录账号暴力破解和攻击行为,建议部署在内网安全管理区,默认使用TCP/9297 | 128 | | web型蜜罐溯源 | 火绒终端安全管理系统蜜罐 | 安全设备 | 低交互 | TCP/9295 | 该蜜罐仿真了火绒终端安全管理系统的Web登陆界面,可用于记录账号暴力破解和攻击行为,建议部署在内网vpn安全管理区,默认使用TCP/9295 | 129 | | web型蜜罐溯源 | jumpserver开源跳板机 | IT设备 | 低交互 | TCP/9304 | 该蜜罐仿真了Jumpserver开源跳板机的Web登陆界面,可用于记录账号暴力破解和攻击行为,建议部署内外网、开发测试环境,默认使用TCP/9304 | 130 | | web型蜜罐溯源 | Aruba无线AP蜜罐 | IT设备 | 低交互 | TCP/9195 | 该蜜罐仿真了Aruba无线AP的Web登陆界面,可用于记录账号暴力破解和攻击行为,建议部署在内网办公环境 | 131 | | web型蜜罐溯源 | 智慧电力系统 | 服务器环境 | 低交互 | TCP/9303 | 该蜜罐仿真了智慧电力系统的Web登陆界面,可用于记录账号暴力破解和攻击行为,建议部署能源外网,服务器环境,默认使用TCP/9303 | 132 | | web型蜜罐溯源 | 疫情上报系统 | 服务器环境 | 低交互 | TCP/9302 | 该蜜罐仿真了疫情上报系统的Web登陆界面,可用于记录账号暴力破解和攻击行为,建议部署政府外网,服务器环境,默认使用TCP/9302 | 133 | | web型蜜罐溯源 | phpAdmin | 服务器环境 | 低交互 | TCP/9301 | 该蜜罐仿真了phpAdmin的Web登陆界面,可用于记录账号暴力破解和攻击行为,建议部署公司内网、测试开发环境,默认使用TCP/9301 | 134 | | web型蜜罐溯源 | LDAP蜜罐 | 运维系统 | 低交互 | TCP/389 | 该蜜罐仿真了虚拟化的LDAP协议,可用以记录账号暴力破解攻击。LDAP作为一个统一认证的解决方案,常用来存储企业员工的用户名和口令,是企业内非常重要的数据存储区域,对攻击者有极大诱惑力。 | 135 | | web型蜜罐溯源 | TP-LINK路由器蜜罐 | IT设备 | 低交互 | TCP/9197 | 该蜜罐仿真了TP-LINK路由器的Web登陆界面,可用于记录账号暴力破解和攻击行为,建议部署在内网办公环境 | 136 | | web型蜜罐溯源 | 锐捷交换机蜜罐 | IT设备 | 低交互 | TCP/9196 | 该蜜罐仿真了锐捷交换机的Web登陆界面,可用于记录账号暴力破解和攻击行为,建议部署在内网办公环境 | 137 | | web型蜜罐溯源 | RouterOs | IT设备 | 低交互 | TCP/8291 | 该蜜罐仿真了RouterOS软性路由器的Web登陆界面,可用于记录账号暴力破解和攻击行为,建议部署在中小公司内网环境,默认使用TCP/8291 | 138 | | web型蜜罐溯源 | JspSpy蜜罐 | 木马伪装 | 低交互 | TCP/9294 | 该蜜罐仿真了JspSpy的Web登陆界面,可用于记录攻击者密码和主观恶意行为,建议部署在内外网生产环境 | 139 | | web型蜜罐溯源 | Webmin蜜罐 | 运维系统 | 低交互 | TCP/10000 | 该蜜罐仿真了Webmin的Web登陆界面,可用于记录账号暴力破解和攻击行为,建议部署在内外网生产环境 | 140 | | web型蜜罐溯源 | Joomla蜜罐 | CRM和OA系统 | 低交互 | TCP/8080 | 该蜜罐仿真了WebLogic的Web登陆界面,可用于记录账号暴力破解和攻击行为,建议部署在内外网开发测试环境 | 141 | | web型蜜罐溯源 | 政务OA蜜罐 | CRM和OA系统 | 低交互 | TCP/9098 | 该蜜罐仿真了某个虚假的政务OA系统的Web登陆界面,可用于记录账号暴力破解和攻击行为,建议部署在内外网生产测试环境 | 142 | | web型蜜罐溯源 | 海康摄像头蜜罐 | IOT设备 | 低交互 | TCP/9082 | 该蜜罐仿真了海康微视摄像头的Web登陆界面,可用于记录账号暴力破解和攻击行为,建议部署在内网办公研发测试环境 | 143 | | web型蜜罐溯源 | Confluence系统蜜罐 | CRM和OA系统 | 低交互 | TCP/9293 | 该蜜罐仿真了项目管理平台Confluence的Web登陆界面,可用于记录账号暴力破解和攻击行为,建议部署在内外网运维环境 | 144 | | web型蜜罐溯源 | Jenkins蜜罐 | 服务器环境 | 低交互 | TCP/8080 | 该蜜罐仿真了Jenkins的Web登陆界面,可用于记录账号暴力破解和攻击行为,建议部署在内网开发测试环境 | 145 | | web型蜜罐溯源 | Weblogic蜜罐 | 服务器环境 | 低交互 | TCP/7001 | 该蜜罐仿真了WebLogic的Web登陆界面,可用于记录账号暴力破解和攻击行为,建议部署在内网开发测试环境 | 146 | | web型蜜罐溯源 | Jira系统蜜罐 | CRM和OA系统 | 低交互 | TCP/9292 | 该蜜罐仿真了项目管理平台Jira的Web登陆界面,可用于记录账号暴力破解和攻击行为,建议部署在内外网运维环境 | 147 | | web型蜜罐溯源 | 通达OA蜜罐 | CRM和OA系统 | 低交互 | TCP/9099 | 该蜜罐仿真了通达OA的Web登陆界面,可用于记录账号暴力破解和攻击行为,建议部署在内网办公环境 | 148 | | web型蜜罐溯源 | Exchange蜜罐 | 邮件系统 | 低交互 | TCP/9095 | 该蜜罐仿真了微软Exchange邮件系统的Web登陆界面,可用于记录账号暴力破解和攻击行为,建议部署在内外网生产测试环境 | 149 | | web型蜜罐溯源 | 齐治堡垒机蜜罐 | 运维系统 | 低交互 | TCP/9193 | 该蜜罐仿真了齐治堡垒机的Web登陆界面,可用于记录账号暴力破解和攻击行为,建议部署在内外网生产测试环境 | 150 | | web型蜜罐溯源 | WordPress蜜罐 | CRM和OA系统 | 低交互 | TCP/9090 | 该蜜罐仿真了WordPress的Web登陆界面,可用于记录账号暴力破解和攻击行为,建议部署在内外网生产测试环境 | 151 | | web型蜜罐溯源 | IIS蜜罐 | 服务器环境 | 低交互 | TCP/9199 | 该蜜罐仿真了微软IIS默认主页,可用于记录探测和攻击行为,建议部署在外网生产环境 | 152 | | web型蜜罐溯源 | Zabbix监控系统蜜罐 | 运维系统 | 低交互 | TCP/9192 | 该蜜罐仿真了网络监控平台Zabbix的Web登陆界面,可用于记录账号暴力破解和攻击行为,建议部署在内外网运维环境 | 153 | | web型蜜罐溯源 | Tomcat蜜罐 | 服务器环境 | 低交互 | TCP/9198 | 该蜜罐仿真了Tomcat默认主页,可用于记录账号暴力破解和攻击行为,建议部署在外网生产环境 | 154 | | web型蜜罐溯源 | ESXi系统蜜罐 | 运维系统 | 低交互 | TCP/9190 | 该蜜罐仿真了虚拟化管理平台ESXi的Web登陆界面,可用于记录账号暴力破解和攻击行为,建议部署在内外网运维环境 | 155 | | web型蜜罐溯源 | H3C路由器蜜罐 | IT设备 | 低交互 | TCP/9092 | 该蜜罐仿真了H3C路由器的Web登陆界面,可用于记录账号暴力破解和攻击行为,建议部署在内外网研发测试环境 | 156 | | web型蜜罐溯源 | GitLab蜜罐 | 服务器环境 | 低交互 | TCP/9093 | 该蜜罐仿真了GitLab代码仓库的Web登陆界面,可用于记录账号暴力破解和攻击行为,建议部署在内外网生产测试环境 | 157 | | web型蜜罐溯源 | Websphere蜜罐 | 服务器环境 | 低交互 | TCP/9080 | 该蜜罐仿真了IBMWebSphere的Web登陆界面,可用于记录账号暴力破解和攻击行为,建议部署在外网生产环境 | 158 | | web型蜜罐溯源 | Nginx蜜罐 | 服务器环境 | 低交互 | TCP/9291 | 该蜜罐仿真了Nginx默认主页,可用于记录探测和攻击行为,建议部署在外网生产环境 | 159 | | web型蜜罐溯源 | Nagios监控系统蜜罐 | 运维系统 | 低交互 | TCP/9191 | 该蜜罐仿真了网络监控平台Nagios的Web登陆界面,可用于记录账号暴力破解和攻击行为,建议部署在内外网运维环境 | 160 | | web型蜜罐溯源 | Coremail蜜罐 | 邮件系统 | 低交互 | TCP/9094 | 该蜜罐仿真了Coremail邮件系统的Web登陆界面,可用于记录账号暴力破解和攻击行为,建议部署在内外网生产测试环境 | 161 | | web型蜜罐溯源 | 通用OA系统蜜罐 | CRM和OA系统 | 低交互 | TCP/9096 | 该蜜罐仿真了某个通用的OA系统的Web登陆界面,可用于记录账号暴力破解和攻击行为,建议部署在内外网生产测试环境 | 162 | 163 | **写在最后**: 164 | 165 | 朋友们,理智看待溯源功能 166 | 167 | 不会是有一个人访问你的蜜罐页面,我们就可以控制它的权限。 168 | 169 | HFish在对方有恶意与攻击行为的时候,才会通过当前掌握到的攻击工具/其他工具漏洞触发溯源反制。 170 | 171 | 最后,我们应该是极少数的,公开详细解读自己溯源功能原理的厂商,各位且行且珍惜.... 172 | 173 | 174 | 175 | -------------------------------------------------------------------------------- /docs/5-0-apply.md: -------------------------------------------------------------------------------- 1 | 2 | #### 进阶应用 3 | 4 | 该章节介绍几种HFish进阶用法,为避免浪费用户时间,以下内容可能需要用户了解专项背景信息: 5 | 6 | ``` 7 | 1、使用自定义Web蜜罐,需要对前端有一定了解; 8 | 9 | 2、使用HFish监控企业是否有账号外泄,可收集企业邮箱后缀、员工姓名等信息,并基于该信息进行实时监控。 10 | 11 | 3、挥洒蜜饵诱骗攻击者,需要对Linux或Windows和业务配置文件有一定了解; 12 | 13 | 4、需要了解所有蜜罐触发方式和触发状态,需要部分技术知识; 14 | 15 | 5、希望卸载HFish,需要部分Linux或Windows技术知识; 16 | 17 | 6、当前进阶应用分为四个不同的模块,对应不同使用需求 18 | ``` 19 | 20 | 21 | 其他场景和进阶使用需求,可以加入官方微信群讨论: 22 | 23 | ![joinus](/images/joinus.png) 24 | 25 | -------------------------------------------------------------------------------- /docs/5-1-diy.md: -------------------------------------------------------------------------------- 1 | 2 | #### 自定义Web蜜罐 3 | 4 | > Web蜜罐样例 5 | 6 | 从以下地址下载HFish官方提供的自定义Web蜜罐模板 7 | 8 | https://hfish.net/service-demo.zip 9 | 10 | 解压后获得index.html文件。 11 | 12 | 13 | > index.html文件中的代码功能 14 | 15 | <form>中的代码明确了页面上账密表单的提交方式,具体利用方式参考下文“制作全新的登陆页面” 16 | <script>中的代码明确了调用jsonp的方式 17 | 18 | 19 | > portrait.min.js 文件中的代码功能 20 | 21 | 该文件是jsonp溯源功能的利用代码,攻击者在已登录其他社交平台的情况下,成功利用会让蜜罐获得部分社交平台的账号信息。 22 | 23 | 本代码因为利用了Chrome内核浏览器v80版本之前的漏洞,具有一定的时效性,随着攻击者更新自己的浏览器,利用代码可能失效,并有可能让攻击者在访问该页面时触发其杀毒软件报警。 24 | 25 | 您可以选择删除index.html中引用portrait.min.js的部分代码,或者自行优化portrait.min.js代码,补全更多反制方法。 26 | 27 | HFish社区非常期待用户贡献漏洞利用代码。 28 | 29 | 30 | 31 | #### 制作全新的登陆页面 32 | 33 | 用户还可以自己制作一个全新的登陆页面,通过替换表单元素实现“定制开发” 34 | 35 | 使用编辑器打开主页文件index.html,按照下面图片的提示修改表单元素。 36 | 37 | 38 | ![蜜罐web页面表格元素](https://hfish.net/images/20210728213641.png) 39 | 40 | 41 | 42 | #### 打包并上传到蜜罐的管理后台 43 | 44 | > 制作自定义蜜罐压缩包 45 | 46 | 把所有的静态文件文件打包名为“service-xxx.zip”文件,包括index.html 、portrait.js 以及其他所有格式的静态文件和文件夹。 47 | 48 | `注意:文件命名为规范格式前缀 **必须** 为“service-”虽然用户可以修改“xxx”为适当的名字,但不能使用“web”和“root”字样,且压缩包 **必须** 为.zip格式。` 49 | 50 | ![image-20210508222121613](https://hfish.net/images/20210728213740.png) 51 | 52 | 53 | 54 | > 上传自定义蜜罐压缩包 55 | 56 | ![image-20210508213915879](https://hfish.net/images/20210728213815.png) 57 | 58 | 59 | 60 | > 配置新增服务页面 61 | 62 | ![image-20210508221316072](https://hfish.net/images/20210728213852.png) 63 | 64 | 如果一切正常,用户已经可以在【节点管理】和【模板管理】页面中使用该自定义蜜罐了。 65 | 66 | 67 | 68 | #### 特别注意:如果上传服务包,遇到not found index.html的报错 69 | 70 | 这种情况,往往是因为所有机器的默认压缩是二层嵌套。 71 | 72 | 可直接到资源包文件夹,选择全部文件后,直接右键压缩。再将压缩包上传即可 73 | 74 | ![image-20220806141310886](http://img.threatbook.cn/hfish/image-20220806141310886.png) 75 | -------------------------------------------------------------------------------- /docs/5-2-asset.md: -------------------------------------------------------------------------------- 1 | #### 账号失陷监控 2 | 3 | > 【威胁实体】-【账号资产】页面收集了所有被用来攻击的账号密码,通过配置可对企业失陷账号进行有效监控 4 | 5 | image-20210506152344041 6 | 7 | > 通过设定高级监测策略,辅助企业进行失陷账号监控,建议输入企业邮箱、企业域名、员工姓名等信息,随时监控泄漏 8 | 9 | 1、点击界面右上角【高级监测策略】 10 | 11 | image-20210401150526485 12 | 13 | 2、按照规则要求,导入csv文件。 14 | 15 | `注意!务必按照提示规则进行写入` 16 | 17 | image-20210506153037454 18 | 19 | 3、可查看到所有匹配高级监测策略的数据(带颜色),帮助安全人员精准排查泄漏账号。 20 | 21 | image-20210506153041469 22 | -------------------------------------------------------------------------------- /docs/5-2-jsonp.md: -------------------------------------------------------------------------------- 1 | 2 | #### jsonp反制说明 3 | 4 | 该页面用于介绍HFish蜜罐中Web类蜜罐默认开启的JSONP反制能力。 5 | 6 | #### 什么是jsonp 7 | 8 | jsonp(JSON with Padding) 是 json 的一种"使用模式",可以让网页从别的域名(网站)那获取资料,即跨域读取数据。 9 | 10 | 由于同源策略,跨域之间无法传递数据,但是Web页面上调用js文件时则不受是否跨域的影响。(不仅如此,凡是拥有src这个属性的标签都拥有跨域的能力,比如 100 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | -------------------------------------------------------------------------------- /docs/js/docsify-copy-code.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * docsify-copy-code 3 | * v2.1.1 4 | * https://github.com/jperasmus/docsify-copy-code 5 | * (c) 2017-2020 JP Erasmus 6 | * MIT license 7 | */ 8 | !function(){"use strict";function s(o){return(s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o})(o)}!function(o,e){void 0===e&&(e={});var t=e.insertAt;if(o&&"undefined"!=typeof document){var n=document.head||document.getElementsByTagName("head")[0],c=document.createElement("style");c.type="text/css","top"===t&&n.firstChild?n.insertBefore(c,n.firstChild):n.appendChild(c),c.styleSheet?c.styleSheet.cssText=o:c.appendChild(document.createTextNode(o))}}(".docsify-copy-code-button,.docsify-copy-code-button span{cursor:pointer;transition:all .25s ease}.docsify-copy-code-button{position:absolute;z-index:1;top:0;right:0;overflow:visible;padding:.65em .8em;border:0;border-radius:0;outline:0;font-size:1em;background:grey;background:var(--theme-color,grey);color:#fff;opacity:0}.docsify-copy-code-button span{border-radius:3px;background:inherit;pointer-events:none}.docsify-copy-code-button .error,.docsify-copy-code-button .success{position:absolute;z-index:-100;top:50%;right:0;padding:.5em .65em;font-size:.825em;opacity:0;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.docsify-copy-code-button.error .error,.docsify-copy-code-button.success .success{right:100%;opacity:1;-webkit-transform:translate(-115%,-50%);transform:translate(-115%,-50%)}.docsify-copy-code-button:focus,pre:hover .docsify-copy-code-button{opacity:1}"),document.querySelector('link[href*="docsify-copy-code"]')&&console.warn("[Deprecation] Link to external docsify-copy-code stylesheet is no longer necessary."),window.DocsifyCopyCodePlugin={init:function(){return function(o,e){o.ready(function(){console.warn("[Deprecation] Manually initializing docsify-copy-code using window.DocsifyCopyCodePlugin.init() is no longer necessary.")})}}},window.$docsify=window.$docsify||{},window.$docsify.plugins=[function(o,r){o.doneEach(function(){var o=Array.apply(null,document.querySelectorAll("pre[data-lang]")),c={buttonText:"Copy to clipboard",errorText:"Error",successText:"Copied"};r.config.copyCode&&Object.keys(c).forEach(function(t){var n=r.config.copyCode[t];"string"==typeof n?c[t]=n:"object"===s(n)&&Object.keys(n).some(function(o){var e=-1',''.concat(c.buttonText,""),''.concat(c.errorText,""),''.concat(c.successText,""),""].join("");o.forEach(function(o){o.insertAdjacentHTML("beforeend",e)})}),o.mounted(function(){document.querySelector(".content").addEventListener("click",function(o){if(o.target.classList.contains("docsify-copy-code-button")){var e="BUTTON"===o.target.tagName?o.target:o.target.parentNode,t=document.createRange(),n=e.parentNode.querySelector("code"),c=window.getSelection();t.selectNode(n),c.removeAllRanges(),c.addRange(t);try{document.execCommand("copy")&&(e.classList.add("success"),setTimeout(function(){e.classList.remove("success")},1e3))}catch(o){console.error("docsify-copy-code: ".concat(o)),e.classList.add("error"),setTimeout(function(){e.classList.remove("error")},1e3)}"function"==typeof(c=window.getSelection()).removeRange?c.removeRange(t):"function"==typeof c.removeAllRanges&&c.removeAllRanges()}})})}].concat(window.$docsify.plugins||[])}(); -------------------------------------------------------------------------------- /docs/js/docsify-sidebar-collapse.min.js: -------------------------------------------------------------------------------- 1 | !function(e){("object"!=typeof exports||"undefined"==typeof module)&&"function"==typeof define&&define.amd?define(e):e()}(function(){"use strict";function e(e,n){var t,a=(n=void 0===n?{}:n).insertAt;e&&"undefined"!=typeof document&&(t=document.head||document.getElementsByTagName("head")[0],(n=document.createElement("style")).type="text/css","top"===a&&t.firstChild?t.insertBefore(n,t.firstChild):t.appendChild(n),n.styleSheet?n.styleSheet.cssText=e:n.appendChild(document.createTextNode(e)))}var t;function a(e){e&&null!=t&&(e=e.getBoundingClientRect().top,document.querySelector(".sidebar").scrollBy(0,e-t))}function n(){requestAnimationFrame(function(){var e=document.querySelector(".app-sub-sidebar > .active");if(e)for(e.parentNode.parentNode.querySelectorAll(".app-sub-sidebar").forEach(function(e){return e.classList.remove("open")});e.parentNode.classList.contains("app-sub-sidebar")&&!e.parentNode.classList.contains("open");)e.parentNode.classList.add("open"),e=e.parentNode})}function o(e){t=e.target.getBoundingClientRect().top;var n=d(e.target,"LI",2);n&&(n.classList.contains("open")?(n.classList.remove("open"),setTimeout(function(){n.classList.add("collapse")},0)):(function(e){if(e)for(e.classList.remove("open","active");e&&"sidebar-nav"!==e.className&&e.parentNode;)"LI"!==e.parentNode.tagName&&"app-sub-sidebar"!==e.parentNode.className||e.parentNode.classList.remove("open"),e=e.parentNode}(s()),i(n),setTimeout(function(){n.classList.remove("collapse")},0)),a(n))}function s(){var e=document.querySelector(".sidebar-nav .active");return e||(e=d(document.querySelector('.sidebar-nav a[href="'.concat(decodeURIComponent(location.hash).replace(/ /gi,"%20"),'"]')),"LI",2))&&e.classList.add("active"),e}function i(e){if(e)for(e.classList.add("open","active");e&&"sidebar-nav"!==e.className&&e.parentNode;)"LI"!==e.parentNode.tagName&&"app-sub-sidebar"!==e.parentNode.className||e.parentNode.classList.add("open"),e=e.parentNode}function d(e,n,t){if(e&&e.tagName===n)return e;for(var a=0;e;){if(t<++a)return;if(e.parentNode.tagName===n)return e.parentNode;e=e.parentNode}}e(".sidebar-nav > ul > li ul {\n display: none;\n}\n\n.app-sub-sidebar {\n display: none;\n}\n\n.app-sub-sidebar.open {\n display: block;\n}\n\n.sidebar-nav .open > ul:not(.app-sub-sidebar),\n.sidebar-nav .active:not(.collapse) > ul {\n display: block;\n}\n\n/* 抖动 */\n.sidebar-nav li.open:not(.collapse) > ul {\n display: block;\n}\n\n.active + ul.app-sub-sidebar {\n display: block;\n}\n"),document.addEventListener("scroll",n);e("@media screen and (max-width: 768px) {\n /* 移动端适配 */\n .markdown-section {\n max-width: none;\n padding: 16px;\n }\n /* 改变原来按钮热区大小 */\n .sidebar-toggle {\n padding: 0 0 10px 10px;\n }\n /* my pin */\n .sidebar-pin {\n appearance: none;\n outline: none;\n position: fixed;\n bottom: 0;\n border: none;\n width: 40px;\n height: 40px;\n background: transparent;\n }\n}\n");var r,c="DOCSIFY_SIDEBAR_PIN_FLAG";function l(){var e="true"===(e=localStorage.getItem(c));localStorage.setItem(c,!e),e?(document.querySelector(".sidebar").style.transform="translateX(0)",document.querySelector(".content").style.transform="translateX(0)"):(document.querySelector(".sidebar").style.transform="translateX(300px)",document.querySelector(".content").style.transform="translateX(300px)")}768 ul"),1),a(t),n(e)}),e.ready(function(){document.querySelector(".sidebar-nav").addEventListener("click",o)})})}); -------------------------------------------------------------------------------- /docs/js/docsify-tabs.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * docsify-tabs 3 | * v1.5.2 4 | * https://jhildenbiddle.github.io/docsify-tabs/ 5 | * (c) 2018-2021 John Hildenbiddle 6 | * MIT license 7 | */ 8 | !function(){"use strict";!function(t,o){void 0===o&&(o={});var a=o.insertAt;if(t&&"undefined"!=typeof document){var e=document.head||document.getElementsByTagName("head")[0],c=document.createElement("style");c.type="text/css","top"===a&&e.firstChild?e.insertBefore(c,e.firstChild):e.appendChild(c),c.styleSheet?c.styleSheet.cssText=t:c.appendChild(document.createTextNode(t))}}(':root{--docsifytabs-border-color:#ededed;--docsifytabs-border-px:1px;--docsifytabs-border-radius-px: ;--docsifytabs-margin:1.5em 0;--docsifytabs-tab-background:#f8f8f8;--docsifytabs-tab-background--active:var(--docsifytabs-content-background);--docsifytabs-tab-color:#999;--docsifytabs-tab-color--active:inherit;--docsifytabs-tab-highlight-px:3px;--docsifytabs-tab-highlight-color:var(--theme-color,currentColor);--docsifytabs-tab-padding:0.6em 1em;--docsifytabs-content-background:inherit;--docsifytabs-content-padding:1.5rem}.docsify-tabs:before,.docsify-tabs__tab{z-index:1}.docsify-tabs__tab--active,.docsify-tabs__tab:focus{z-index:2}.docsify-tabs{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;position:relative}.docsify-tabs:before{-ms-flex-order:0;content:"";-ms-flex:1 1;flex:1 1;order:0}.docsify-tabs__tab{-ms-flex-order:-1;appearance:none;font-size:inherit;margin:0;order:-1;position:relative}.docsify-tabs__content{height:0;overflow:hidden;position:absolute;visibility:hidden;width:100%}.docsify-tabs__content :first-child{margin-top:0}.docsify-tabs__content :first-child~:last-child,.docsify-tabs__content :last-child{margin-bottom:0}.docsify-tabs__tab--active+.docsify-tabs__content{height:auto;overflow:auto;position:relative;visibility:visible}[class*=docsify-tabs--]{margin:1.5em 0;margin:var(--docsifytabs-margin)}[class*=docsify-tabs--] .docsify-tabs__tab{background:#f8f8f8;background:var(--docsifytabs-tab-background);color:#999;color:var(--docsifytabs-tab-color);padding:.6em 1em;padding:var(--docsifytabs-tab-padding)}[class*=docsify-tabs--] .docsify-tabs__tab--active{background:inherit;background:var(--docsifytabs-tab-background--active);color:inherit;color:var(--docsifytabs-tab-color--active)}[class*=docsify-tabs--] .docsify-tabs__content{background:inherit;background:var(--docsifytabs-content-background);padding:1.5rem;padding:var(--docsifytabs-content-padding)}.docsify-tabs--classic .docsify-tabs__content,.docsify-tabs--classic .docsify-tabs__tab,.docsify-tabs--classic:before{border-color:#ededed;border-width:1px;border:var(--docsifytabs-border-px) solid var(--docsifytabs-border-color)}.docsify-tabs--classic:before{border-left-width:0;border-right-width:0;border-top-width:0;margin-right:1px;margin-right:var(--docsifytabs-border-px)}.docsify-tabs--classic .docsify-tabs__tab:first-of-type{border-top-left-radius:var(--docsifytabs-border-radius-px)}.docsify-tabs--classic .docsify-tabs__tab:last-of-type{border-top-right-radius:var(--docsifytabs-border-radius-px)}.docsify-tabs--classic .docsify-tabs__tab~.docsify-tabs__tab{margin-left:-1px;margin-left:calc(0px - var(--docsifytabs-border-px))}.docsify-tabs--classic .docsify-tabs__tab--active{border-bottom-width:0;box-shadow:inset 0 3px 0 0 var(--theme-color,currentColor);box-shadow:inset 0 var(--docsifytabs-tab-highlight-px) 0 0 var(--docsifytabs-tab-highlight-color)}.docsify-tabs--classic .docsify-tabs__content{border-radius:0;border-radius:0 var(--docsifytabs-border-radius-px) var(--docsifytabs-border-radius-px) var(--docsifytabs-border-radius-px);border-top:0;margin-top:-1px;margin-top:calc(0px - var(--docsifytabs-border-px))}.docsify-tabs--material .docsify-tabs__tab{background:transparent;border:0;margin-bottom:2px;margin-bottom:calc(var(--docsifytabs-tab-highlight-px) - var(--docsifytabs-border-px))}.docsify-tabs--material .docsify-tabs__tab--active{background:transparent;box-shadow:0 3px 0 0 var(--theme-color,currentColor);box-shadow:0 var(--docsifytabs-tab-highlight-px) 0 0 var(--docsifytabs-tab-highlight-color)}.docsify-tabs--material .docsify-tabs__content{border-color:#ededed;border-width:1px 0;border-bottom:var(--docsifytabs-border-px) solid var(--docsifytabs-border-color);border-left:0 solid var(--docsifytabs-border-color);border-right:0 solid var(--docsifytabs-border-color);border-top:var(--docsifytabs-border-px) solid var(--docsifytabs-border-color)}',{insertAt:"top"});var t="tabs:replace",o={tabsContainer:"content",tabBlock:"docsify-tabs",tabButton:"docsify-tabs__tab",tabButtonActive:"docsify-tabs__tab--active",tabContent:"docsify-tabs__content"},a={codeMarkup:/(```[\s\S]*?```)/gm,commentReplaceMarkup:new RegExp("\x3c!-- ".concat(t," (.*) --\x3e")),tabBlockMarkup:/[\r\n]*(\s*)()[\r\n]+([\s|\S]*?)[\r\n\s]+()/m,tabCommentMarkup:/[\r\n]*(\s*)[\r\n]+([\s\S]*?)[\r\n]*\s*(?=)/m},e={persist:!0,sync:!0,theme:"classic",tabComments:!0,tabHeadings:!0};function c(t,o){if(Element.prototype.closest)return t.closest(o);for(;t;){if(r(t,o))return t;t=t.parentNode||null}return t}function r(t,o){return(Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector).call(t,o)}function s(t){var a=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=c(t,".".concat(o.tabButton));if(r){var n=r.getAttribute("data-tab"),i=document.querySelector(".".concat(o.tabsContainer)),d=r.parentNode,b=Array.apply(null,d.querySelectorAll(".".concat(o.tabButton))),f=d.offsetTop;if(b.forEach((function(t){return t.classList.remove(o.tabButtonActive)})),r.classList.add(o.tabButtonActive),!a){if(e.persist){var l=i?Array.apply(null,i.querySelectorAll(".".concat(o.tabBlock))):[],u=l.indexOf(d),y=JSON.parse(sessionStorage.getItem(window.location.href))||{};y[u]=n,sessionStorage.setItem(window.location.href,JSON.stringify(y))}if(e.sync){var p=i?Array.apply(null,i.querySelectorAll(".".concat(o.tabButton,'[data-tab="').concat(n,'"]'))):[],m=JSON.parse(sessionStorage.getItem("*"))||[];p.forEach((function(t){s(t,!0)})),window.scrollBy(0,0-(f-d.offsetTop)),m.indexOf(n)>0&&m.splice(m.indexOf(n),1),0!==m.indexOf(n)&&(m.unshift(n),sessionStorage.setItem("*",JSON.stringify(m)))}}}}function n(){var t=decodeURIComponent((window.location.hash.match(/(?:id=)([^&]+)/)||[])[1]),a=t&&".".concat(o.tabBlock," #").concat(t);if(t&&document.querySelector(a)){var e,c=document.querySelector("#".concat(t));if(c.closest)e=c.closest(".".concat(o.tabContent));else for(e=c.parentNode;e!==document.body&&!e.classList.contains("".concat(o.tabContent));)e=e.parentNode;s(e.previousElementSibling)}}window&&(window.$docsify=window.$docsify||{},window.$docsify.tabs=window.$docsify.tabs||{},Object.keys(window.$docsify.tabs).forEach((function(t){Object.prototype.hasOwnProperty.call(e,t)&&(e[t]=window.$docsify.tabs[t])})),window.$docsify.tabs.version="1.5.2",(e.tabComments||e.tabHeadings)&&(window.$docsify.plugins=[].concat((function(c,r){var i=!1;c.beforeEach((function(c){return(i=a.tabBlockMarkup.test(c))&&(c=function(c,r){for(var s,n,i=c.match(a.codeMarkup)||[],d=i.map((function(o,a){var e="\x3c!-- ".concat(t," CODEBLOCK").concat(a," --\x3e");return c=c.replace(o,(function(){return e})),e})),b=e.theme?"".concat(o.tabBlock,"--").concat(e.theme):"",f=document.createElement("div"),l=1,u=function(){var i=s[0],d="",u="",y=e.tabComments&&a.tabCommentMarkup.test(i),p=e.tabHeadings&&a.tabHeadingMarkup.test(i),m=s[1],h=s[2],g=s[4];if(y||p){d="\x3c!-- ".concat(t,'
--\x3e'),u="\n".concat(m,"\x3c!-- ").concat(t,"
--\x3e");for(var v=function(){f.innerHTML=n[2].trim()?r.compiler.compile(n[2]).replace(/<\/?p>/g,""):"Tab ".concat(l);var a=f.innerHTML,e=(n[3]||"").trim(),c=(f.textContent||f.firstChild.getAttribute("alt")||f.firstChild.getAttribute("src")).trim().toLowerCase();i=i.replace(n[0],(function(){return["\n".concat(m,"\x3c!-- ").concat(t,' --\x3e"),"\n".concat(m,"\x3c!-- ").concat(t,'
--\x3e'),"\n\n".concat(m).concat(e),"\n\n".concat(m,"\x3c!-- ").concat(t,"
--\x3e")].join("")})),l++};null!==(n=(e.tabComments?a.tabCommentMarkup.exec(i):null)||(e.tabHeadings?a.tabHeadingMarkup.exec(i):null));)v()}i=(i=i.replace(h,(function(){return d}))).replace(g,(function(){return u})),c=c.replace(s[0],(function(){return i}))};null!==(s=a.tabBlockMarkup.exec(c));)u();return d.forEach((function(t,o){c=c.replace(t,(function(){return i[o]}))})),c}(c,r)),c})),c.afterEach((function(t,o){i&&(t=function(t){for(var o,e=function(){var a=o[0],e=o[1]||"";t=t.replace(a,(function(){return e}))};null!==(o=a.commentReplaceMarkup.exec(t));)e();return t}(t)),o(t)})),c.doneEach((function(){var t,a,c,r;i&&(a=(t=document.querySelector(".".concat(o.tabsContainer)))?Array.apply(null,t.querySelectorAll(".".concat(o.tabBlock))):[],c=JSON.parse(sessionStorage.getItem(window.location.href))||{},r=JSON.parse(sessionStorage.getItem("*"))||[],n(),a.forEach((function(t,a){var s=t.querySelector(".".concat(o.tabButtonActive));s||(e.sync&&r.length&&(s=r.map((function(a){return t.querySelector(".".concat(o.tabButton,'[data-tab="').concat(a,'"]'))})).filter((function(t){return t}))[0]),!s&&e.persist&&(s=t.querySelector(".".concat(o.tabButton,'[data-tab="').concat(c[a],'"]'))),(s=s||t.querySelector(".".concat(o.tabButton)))&&s.classList.add(o.tabButtonActive))})))})),c.mounted((function(){var t=document.querySelector(".".concat(o.tabsContainer));t&&t.addEventListener("click",(function(t){s(t.target)})),window.addEventListener("hashchange",n,!1)}))}),window.$docsify.plugins||[])))}(); 9 | -------------------------------------------------------------------------------- /docs/js/prism-bash.min.js: -------------------------------------------------------------------------------- 1 | !function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},a={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|x[0-9a-fA-F]{1,2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:a},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:a},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:a.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:a.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|aptitude|apt-cache|apt-get|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:if|then|else|elif|fi|for|while|in|case|esac|function|select|do|done|until)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|break|cd|continue|eval|exec|exit|export|getopts|hash|pwd|readonly|return|shift|test|times|trap|umask|unset|alias|bind|builtin|caller|command|declare|echo|enable|help|let|local|logout|mapfile|printf|read|readarray|source|type|typeset|ulimit|unalias|set|shopt)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:true|false)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var s=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],i=a.variable[1].inside,o=0;o/g,function(){return"(?:\\\\.|[^\\\\\n\r]|(?:\n|\r\n?)(?![\r\n]))"}),RegExp("((?:^|[^\\\\])(?:\\\\{2})*)(?:"+n+")")}var e="(?:\\\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\\\|\r\n`])+",t="\\|?__(?:\\|__)+\\|?(?:(?:\n|\r\n?)|(?![^]))".replace(/__/g,function(){return e}),a="\\|?[ \t]*:?-{3,}:?[ \t]*(?:\\|[ \t]*:?-{3,}:?[ \t]*)+\\|?(?:\n|\r\n?)";s.languages.markdown=s.languages.extend("markup",{}),s.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"font-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:s.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+t+a+"(?:"+t+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+t+a+")(?:"+t+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(e),inside:s.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+t+")"+a+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+t+"$"),inside:{"table-header":{pattern:RegExp(e),alias:"important",inside:s.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n("\\b__(?:(?!_)|_(?:(?!_))+_)+__\\b|\\*\\*(?:(?!\\*)|\\*(?:(?!\\*))+\\*)+\\*\\*"),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n("\\b_(?:(?!_)|__(?:(?!_))+__)+_\\b|\\*(?:(?!\\*)|\\*\\*(?:(?!\\*))+\\*\\*)+\\*"),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n("(~~?)(?:(?!~))+\\2"),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n('!?\\[(?:(?!\\]))+\\](?:\\([^\\s)]+(?:[\t ]+"(?:\\\\.|[^"\\\\])*")?\\)|[ \t]?\\[(?:(?!\\]))+\\])'),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach(function(e){["url","bold","italic","strike","code-snippet"].forEach(function(n){e!==n&&(s.languages.markdown[e].inside.content.inside[n]=s.languages.markdown[n])})}),s.hooks.add("after-tokenize",function(n){"markdown"!==n.language&&"md"!==n.language||!function n(e){if(e&&"string"!=typeof e)for(var t=0,a=e.length;t",quot:'"'},u=String.fromCodePoint||String.fromCharCode;s.languages.md=s.languages.markdown}(Prism); -------------------------------------------------------------------------------- /docs/js/search.min.js: -------------------------------------------------------------------------------- 1 | !function(){var u={},m={EXPIRE_KEY:"docsify.search.expires",INDEX_KEY:"docsify.search.index"};function h(e){return e.text||"table"!==e.type||(e.cells.unshift(e.header),e.text=e.cells.map(function(e){return e.join(" | ")}).join(" |\n ")),e.text}function f(e){return e.text||"list"!==e.type||(e.text=e.raw),e.text}function g(r,e,o,s){void 0===e&&(e="");var c,e=window.marked.lexer(e),d=window.Docsify.slugify,l={},p="";return e.forEach(function(e,n){if("heading"===e.type&&e.depth<=s){var t=function(e){void 0===e&&(e="");var a={};return{str:e=e&&e.replace(/^'/,"").replace(/'$/,"").replace(/(?:^|\s):([\w-]+:?)=?([\w-%]+)?/g,function(e,n,t){return-1===n.indexOf(":")?(a[n]=t&&t.replace(/"/g,"")||!0,""):e}).trim(),config:a}}(e.text),a=t.str,t=t.config;c=t.id?o.toURL(r,{id:d(t.id)}):o.toURL(r,{id:d((t=e.text,i={"&":"&","<":"<",">":">",'"':""","'":"'"},String(t).replace(/[&<>"']/g,function(e){return i[e]})))}),a&&(p=a.replace(//,"").replace(/{docsify-ignore}/,"").replace(//,"").replace(/{docsify-ignore-all}/,"").trim()),l[c]={slug:c,title:p,body:""}}else{if(0===n&&(c=o.toURL(r),l[c]={slug:c,title:"/"!==r?r.slice(1):"Home Page",body:e.text||""}),!c)return;l[c]?l[c].body?(e.text=h(e),e.text=f(e),l[c].body+="\n"+(e.text||"")):(e.text=h(e),e.text=f(e),l[c].body=l[c].body?l[c].body+e.text:e.text):l[c]={slug:c,title:"",body:""}}var i}),d.clear(),l}function p(e){return e&&e.normalize?e.normalize("NFD").replace(/[\u0300-\u036f]/g,""):e}function r(i,r){var t,a,n,e,o="auto"===i.paths,s=o?(t=r.router,a=[],Docsify.dom.findAll(".sidebar-nav a:not(.section-link):not([data-nosearch])").forEach(function(e){var n=e.href,e=e.getAttribute("href"),n=t.parse(n).path;n&&-1===a.indexOf(n)&&!Docsify.util.isAbsolutePath(e)&&a.push(n)}),a):i.paths,c="";s.length&&o&&i.pathNamespaces?(n=s[0],Array.isArray(i.pathNamespaces)?c=i.pathNamespaces.filter(function(e){return n.slice(0,e.length)===e})[0]||c:i.pathNamespaces instanceof RegExp&&((d=n.match(i.pathNamespaces))&&(c=d[0])),e=-1===s.indexOf(c+"/"),d=-1===s.indexOf(c+"/README"),e&&d&&s.unshift(c+"/")):-1===s.indexOf("/")&&-1===s.indexOf("/README")&&s.unshift("/");var d,l=((d=i.namespace)?m.EXPIRE_KEY+"/"+d:m.EXPIRE_KEY)+c,p=((d=i.namespace)?m.INDEX_KEY+"/"+d:m.INDEX_KEY)+c,c=localStorage.getItem(l)l.length&&(a=l.length),t="..."+c.substring(n,a).replace(t,function(e){return''+e+""})+"...",o+=t)}),0\n

'+e.title+"

\n

"+e.content+"

\n\n"}),t.classList.add("show"),a.classList.add("show"),t.innerHTML=r||'

'+s+"

",o.hideOtherSidebarContent&&(i.classList.add("hide"),n.classList.add("hide"))}function d(e){o=e}function l(e,n){var t,a,i=n.router.parse().query.s;d(e),Docsify.dom.style("\n.sidebar {\n padding-top: 0;\n}\n\n.search {\n margin-bottom: 20px;\n padding: 6px;\n border-bottom: 1px solid #eee;\n}\n\n.search .input-wrap {\n display: flex;\n align-items: center;\n}\n\n.search .results-panel {\n display: none;\n}\n\n.search .results-panel.show {\n display: block;\n}\n\n.search input {\n outline: none;\n border: none;\n width: 100%;\n padding: 0 7px;\n line-height: 36px;\n font-size: 14px;\n border: 1px solid transparent;\n}\n\n.search input:focus {\n box-shadow: 0 0 5px var(--theme-color, #42b983);\n border: 1px solid var(--theme-color, #42b983);\n}\n\n.search input::-webkit-search-decoration,\n.search input::-webkit-search-cancel-button,\n.search input {\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n}\n.search .clear-button {\n cursor: pointer;\n width: 36px;\n text-align: right;\n display: none;\n}\n\n.search .clear-button.show {\n display: block;\n}\n\n.search .clear-button svg {\n transform: scale(.5);\n}\n\n.search h2 {\n font-size: 17px;\n margin: 10px 0;\n}\n\n.search a {\n text-decoration: none;\n color: inherit;\n}\n\n.search .matching-post {\n border-bottom: 1px solid #eee;\n}\n\n.search .matching-post:last-child {\n border-bottom: 0;\n}\n\n.search p {\n font-size: 14px;\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n}\n\n.search p.empty {\n text-align: center;\n}\n\n.app-name.hide, .sidebar-nav.hide {\n display: none;\n}"),function(e){void 0===e&&(e="");var n='
\n \n
\n \n \n \n \n \n
\n
\n
\n ',e=Docsify.dom.create("div",n),n=Docsify.dom.find("aside");Docsify.dom.toggleClass(e,"search"),Docsify.dom.before(n,e)}(i),n=Docsify.dom.find("div.search"),a=Docsify.dom.find(n,"input"),e=Docsify.dom.find(n,".input-wrap"),Docsify.dom.on(n,"click",function(e){return-1===["A","H2","P","EM"].indexOf(e.target.tagName)&&e.stopPropagation()}),Docsify.dom.on(a,"input",function(n){clearTimeout(t),t=setTimeout(function(e){return c(n.target.value.trim())},100)}),Docsify.dom.on(e,"click",function(e){"INPUT"!==e.target.tagName&&(a.value="",c())}),i&&setTimeout(function(e){return c(i)},500)}function y(e,n){var t,a,i,r,o;d(e),t=e.placeholder,a=n.route.path,(r=Docsify.dom.getNode('.search input[type="search"]'))&&("string"==typeof t?r.placeholder=t:(i=Object.keys(t).filter(function(e){return-1 14 | 15 | 16 | 17 | ![image-20220309193659551](https://hfish.net/images/image-20220309193659551.png) 18 | -------------------------------------------------------------------------------- /docs/scene-cloud.md: -------------------------------------------------------------------------------- 1 | #### 云环境风险感知场景 2 | 3 | 而通过在云端部署蜜罐产品,应用蜜罐 **吸引部分攻击**,保护真实业务,并且企业防守者可以通过蜜罐感知到 **云上威胁的强度和方式**,不至于对安全现状一无所知,最后通过 **蜜罐产品的API** 和 **本地态势感知或检测设备** 打通,实现防守者通过一个平台 **统一管理**。 4 | 5 | > ##### 痛点 6 | 由于云环境特殊性,云上 **匮乏** 流量检测类安全产品,此外企业防守者需要频繁切换查看本地安全设备的告警与云端有限安全设备的告警。 7 | 8 | > ##### 推荐部署位置 9 | 注册一个迷惑性子域名或使用某个废弃的子域名,通过搭建蜜罐感知攻击强度和攻击行为。 10 | 11 | > ##### 部署注意事项: 12 | 13 | 1. 该场景会捕捉到 **大量真实攻击行为** ,建议在部署前将蜜罐加入网络检测设备白名单中避免误报; 14 | 2. 个别行业需要考虑监管单位扫描通报情况,建议在部署前建表报备蜜罐地址; -------------------------------------------------------------------------------- /docs/scene-hacker.md: -------------------------------------------------------------------------------- 1 | #### 溯源反制场景 2 | 3 | ![image-202311081253181](https://hfish.net/images/202311081253181.png) -------------------------------------------------------------------------------- /docs/scene-intel.md: -------------------------------------------------------------------------------- 1 | #### 外网情报生产场景 2 | 3 | ![image-202311081253176](https://hfish.net/images/202311081253176.png) -------------------------------------------------------------------------------- /docs/scene-lostpwd.md: -------------------------------------------------------------------------------- 1 | #### 员工账号密码遗失感知场景 2 | 3 | > ##### 痛点 4 | 员工账号密码资产遗失对于大多数企业来说都是 **致命隐患**,如何感知此类威胁一直是当下安全团队一个空白。 5 | 6 | > ##### 推荐部署位置 7 | 企业可将常见的对外服务例如vpn.company.com或hr.company.com **替换成蜜罐**,通过监控试图登录的账号判断是否为 **内部员工账号**,并实时通知安全团队和该员工,敦促其尽快修改密码。 8 | 9 | > ##### 部署注意事项: 10 | 11 | 1. 该场景会捕捉到 **大量真实攻击行为** ,建议在部署前将蜜罐加入网络检测设备白名单中避免误报; 12 | 2. 个别行业需要考虑监管单位扫描通报情况,建议在部署前建表报备蜜罐地址; 13 | 14 | -------------------------------------------------------------------------------- /docs/scene-spy.md: -------------------------------------------------------------------------------- 1 | #### 内部人员风险场景 2 | 3 | ![image-20231108193659551](https://hfish.net/images/image-20231108193659551.png) 4 | 5 | -------------------------------------------------------------------------------- /docs/scene-training.md: -------------------------------------------------------------------------------- 1 | #### 员工安全意识培训场景 2 | 3 | > ##### 痛点 4 | 在企业安全工作中,员工 **安全意识问题** 不应被忽略,而对于攻击者,搜集员工信箱批量发送钓鱼或木马病毒链接成本极低,只要有一个受害者即可突破企业安全防线。 5 | 6 | > ##### 推荐部署位置 7 | 使用开源的钓鱼邮件工具和 **Web蜜罐自定义能力**,可以快速、低成本的组装 **企业安全意识培训平台**。 8 | 9 | > ##### 部署注意事项: 10 | 11 | 1. 该场景会捕捉到 **大量真实攻击行为** ,建议在部署前将蜜罐加入网络检测设备白名单中避免误报; 12 | 2. 个别行业需要考虑监管单位扫描通报情况,建议在部署前建表报备蜜罐地址; 13 | 14 | -------------------------------------------------------------------------------- /docs/service-demo.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hacklcx/HFish/d5c6b1abe1eb5ce80350647fbd4d2544a537724e/docs/service-demo.zip -------------------------------------------------------------------------------- /docs/static/version: -------------------------------------------------------------------------------- 1 | { 2 | "version": "3.3.5", 3 | "date": "2024-07-16", 4 | "desc": [ 5 | "【升级建议】支持2.7.0及以上版本顺滑升级", 6 | "1.【新增】支持国产化,兼容ARM64类型的节点", 7 | "2.【修复】修复了系统web框架存在ssl漏洞问题", 8 | "3.【修复】修复了部分其他bug" 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /docs/syslog.md: -------------------------------------------------------------------------------- 1 | ### Syslog外发信息字段 2 | 3 | #### 威胁告警外发字段: 4 | 5 | **HFish-威胁告警** 6 | 7 | ``` 8 | client //节点名称 9 | client_ip //节点IP 10 | attack_type //攻击类型,包含scan/attack/signon/hr_signon/compromise(扫描/攻击/登陆/高危登陆/失陷) 11 | scan_type //扫描类型(udp/tdp/icmp) 12 | scan_port //扫描端口 (为空时候为N/A) 13 | type //攻击蜜罐 14 | class //蜜罐类型 15 | account //账号信息 16 | src_ip //攻击来源IP 17 | labels //威胁情报标签 18 | dst_ip //受害IP 19 | geo //攻击来源ip的地理位置 20 | time //攻击发生时间 21 | threat_name: aaa,bbb,ccc //威胁行为名称 22 | threat_level: high //威胁行为等级 23 | info //攻击详情(为空填写N/A) 24 | ``` 25 | 26 | #### 系统告警外发字段 27 | 28 | **HFish-节点离线告警** 29 | 30 | ``` 31 | HFish-节点离线告警 //告警标题 32 | Server_ip //HFish系统IP 33 | client //离线节点名称 34 | client_ip //离线节点IP 35 | ``` 36 | 37 | **HFish-蜜罐离线告警** 38 | 39 | ``` 40 | title //告警标题 41 | Server_ip //HFish系统IP 42 | client //节点名称 43 | client_ip //节点IP 44 | class //离线蜜罐名称(如果监测到多个蜜罐离线,多个蜜罐在一条记录中发送) 45 | ``` 46 | 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /docs/thanksforall.md: -------------------------------------------------------------------------------- 1 | 2 | #### 致谢爱好者 3 | 4 | HFish作为一款免费蜜罐产品,在此由衷且真挚的向所有贡献过有价值意见的用户致谢,是你们一直以来的支持,让我们始终怀有期待,在此,HFish真诚感激,愿与各位携手同行,对抗网络攻击这件事道阻且长,你我同行,或许就能为彼此遮蔽一片风雨。 5 | 6 | image-20211208095138935 7 | 8 | 9 | > ##### 特别感谢名单 10 | 11 | 此名单记录曾经给HFish社区实际贡献的朋友: 12 | ``` 13 | **Github用户 JamCh01**:为HFish提供了完善的nginx配置文档,非常感谢~ 14 | **说书人(帅哥)**:愿意将自己的开发成果赋能到社区,为HFish提供了5种全新的web蜜罐,非常感谢~ 15 | ``` 16 | 17 | > ##### 感谢名单 18 | 19 | 感谢名单记录曾经给HFish非常多帮助的朋友: 20 | ``` 21 | 十一 22 | @loca1h0st 23 | 我是爱吃橙子的牛 24 | (这不是空行,是一个名字为空白的用户) 25 | 啃鸭子 26 | IIG 27 | eopA1x 28 | Testament 29 | Raison 30 | Akityo 31 | cyclcyc 32 | 竹马老去 33 | 月赋情长 34 | koreyshi 35 | ALi 36 | 老笨笨 37 | 网络运维 38 | 今天许愿了嘛 39 | 蒲公英的梦 40 | Hasauei 41 | ``` 42 | 43 | 以上所有排名不分先后,因为过去的时间HFish得到太多帮助,因此大概率会有漏缺。 44 | 45 | 46 | > ##### 在GitHub上commit 47 | 48 | HFish官网已在GitHub开源,诚挚期待各位可以贡献自己销魂的使用灵感、自定义的蜜罐或者觉得文档中疏漏的地方,运营人员会尽快确认并通过。 49 | 50 | Github项目地址:https://github.com/hacklcx/HFish 51 | 52 | 欢迎扫码加入HFish微信群: 53 | 54 | ![joinus](/images/joinus.png) 55 | 56 | -------------------------------------------------------------------------------- /docs/update.md: -------------------------------------------------------------------------------- 1 | #### 版本升级 2 | 3 | HFish v2.7.0(含)及后续版本支持Web页面自动升级,如果版本低于v2.7.0,请卸载重新部署。 4 | 5 | > ##### 联网情况 ##### 6 | 7 | HFish v2.7.0(含)及后续版本中,HFish会自动检测到升级包,用户点击右上角火箭,点击「确认升级」,即可完成升级。 8 | 9 | > ##### 非联网情况 ##### 10 | 11 | HFish v2.7.0(含)及后续版本中,用户点击右上角火箭,点击「上传安装包」,点击「确认升级」,即可完成升级。 12 | 13 | image-20220118114818278 14 | 15 | -------------------------------------------------------------------------------- /docs/webhook.md: -------------------------------------------------------------------------------- 1 | ### Syslog外发信息字段 2 | 3 | #### 威胁告警外发字段: 4 | 5 | **HFish-威胁告警** 6 | 7 | ``` 8 | client //节点名称 9 | client_ip //节点IP 10 | attack_type //攻击类型,包含scan/attack/signon/hr_signon/compromise(扫描/攻击/登陆/高危登陆/失陷) 11 | scan_type //扫描类型(udp/tdp/icmp) 12 | scan_port //扫描端口 (为空时候为N/A) 13 | type //攻击蜜罐 14 | class //蜜罐类型 15 | account //账号信息 16 | src_ip //攻击来源IP 17 | labels //威胁情报标签 18 | dst_ip //受害IP 19 | geo //攻击来源ip的地理位置 20 | time //攻击发生时间 21 | threat_name: aaa,bbb,ccc //威胁行为名称 22 | threat_level: high //威胁行为等级 23 | info //攻击详情(为空填写N/A) 24 | ``` 25 | 26 | #### 系统告警外发字段 27 | 28 | **HFish-节点离线告警** 29 | 30 | ``` 31 | HFish-节点离线告警 //告警标题 32 | Server_ip //HFish系统IP 33 | client //离线节点名称 34 | client_ip //离线节点IP 35 | ``` 36 | 37 | **HFish-蜜罐离线告警** 38 | 39 | ``` 40 | title //告警标题 41 | Server_ip //HFish系统IP 42 | client //节点名称 43 | client_ip //节点IP 44 | class //离线蜜罐名称(如果监测到多个蜜罐离线,多个蜜罐在一条记录中发送) 45 | ``` 46 | 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /docs/webinstall.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | #init 4 | initVar() { 5 | installType='yum -y install' 6 | removeType='yum -y remove' 7 | upgrade="yum -y update" 8 | echoType='echo -e' 9 | version='3.3.5' 10 | } 11 | initVar 12 | export LANG=en_US.UTF-8 13 | 14 | #the color of font 15 | echoContent() { 16 | case $1 in 17 | "red") 18 | # shellcheck disable=SC2154 19 | ${echoType} "\033[31m${printN}$2 \033[0m" 20 | ;; 21 | "skyBlue") 22 | ${echoType} "\033[1;36m${printN}$2 \033[0m" 23 | ;; 24 | "green") 25 | ${echoType} "\033[32m${printN}$2 \033[0m" 26 | ;; 27 | "white") 28 | ${echoType} "\033[37m${printN}$2 \033[0m" 29 | ;; 30 | "magenta") 31 | ${echoType} "\033[31m${printN}$2 \033[0m" 32 | ;; 33 | "yellow") 34 | ${echoType} "\033[33m${printN}$2 \033[0m" 35 | ;; 36 | esac 37 | } 38 | 39 | 40 | #start 41 | menu() { 42 | echoContent red " _ _ _____ _ _ " 43 | echoContent red "| | | | | ___| (_) ___ | |__ " 44 | echoContent red "| |_| | | |_ | | / __| | '_ \ " 45 | echoContent red "| _ | | _| | | \__ \ | | | |" 46 | echoContent red "|_| |_| |_| |_| |___/ |_| |_| v${version}" 47 | echoContent green "https://hfish.net\n\n" 48 | echoContent white "Press 1 : Install and run HFish" 49 | # echoContent yellow "Press 2 : Add mgmt ports to the firewall(coming soon)" 50 | # echoContent yellow "Press 3 : Install as service(coming soon)" 51 | # echoContent yellow "Press 4 : Post error logfile to HFish team(coming soon)" 52 | # echoContent yellow "Press 9 : Uninstall HFish(coming soon)" 53 | echoContent white "Press 0 : Exit" 54 | echoContent white "----------" 55 | 56 | while [ 1 ]; do 57 | read -r -p "Input: " selectMenuType 58 | 59 | case ${selectMenuType} in 60 | 1): 61 | serverInstall 62 | ;; 63 | 0) 64 | exitInstall 65 | ;; 66 | *) 67 | continue 68 | ;; 69 | esac 70 | break 71 | done 72 | } 73 | 74 | serverInstall() { 75 | cd /opt 76 | if [ $(uname -s) = 'Linux' ] && [ $(uname -m) = 'x86_64' ] && [ $(getconf LONG_BIT) = '64' ]; then 77 | curl -k http://hfish.cn-bj.ufileos.com/hfish-${version}-linux-amd64.tgz -o hfish-${version}-linux-amd64.tgz 78 | else 79 | echoContent red "No OS version is detected. Please refer to https://hfish.net for manual installation\n" && exit 1 80 | fi 81 | 82 | mkdir -p hfish 83 | tar -zxvf /opt/hfish-${version}*.tgz -C hfish 84 | cd hfish 85 | sudo ./install.sh 86 | } 87 | 88 | exitInstall() { 89 | exit 1 90 | } 91 | 92 | cd /opt 93 | menu 94 | --------------------------------------------------------------------------------