一、飞书机器人准备
1. 创建飞书机器人
- 打开飞书客户端,进入需要接收漏洞推送的群组,点击群设置 → 群机器人 → 添加机器人 → 自定义机器人;
- 填写机器人名称(如「WatchVuln漏洞推送」),按需配置「安全设置」(推荐开启「签名校验」);
- 复制机器人的「Webhook地址」(或仅复制
access_token部分)、「签名密钥(Sign Secret)」,保存备用。
注意:飞书机器人权限仅能推送消息到创建时绑定的群组,如需推送到多个群组,需为每个群组单独创建机器人。
2. 飞书机器人配置说明
| 配置项 | 获取位置 | 作用 |
|---|---|---|
| AccessToken | 机器人Webhook地址末尾部分(或完整Webhook地址) | 飞书机器人唯一标识,用于定位推送目标 |
| SignSecret | 机器人安全设置 → 签名校验 → 密钥 | 消息签名验证,防止伪造推送 |
二、飞书机器人部署方式
方式1:Docker部署(推荐)
1. 基础运行命令
bash
docker run --restart always -d \
-e LARK_ACCESS_TOKEN=你的飞书机器人access_token(或完整Webhook地址) \
-e LARK_SECRET=你的飞书机器人签名密钥(可选,开启签名校验时必填) \
-e INTERVAL=30m \ # 漏洞检查周期,支持60s/10m/1h
-e ENABLE_CVE_FILTER=true \ # 开启CVE去重,同一漏洞仅推送一次
zemal/watchvuln:latest
2. 私有化部署飞书适配
若你的飞书为私有化部署,直接填写完整Webhook地址即可(无需拼接):
bash
docker run --restart always -d \
-e LARK_ACCESS_TOKEN=https://your-private-lark-domain/open-apis/bot/v2/hook/xxxx \
-e LARK_SECRET=你的签名密钥 \
-e INTERVAL=30m \
zemal/watchvuln:latest
3. 自定义筛选规则(黑白名单)
如需仅推送指定关键词的漏洞(如「泛微」「Apache」),可挂载黑白名单文件:
bash
# 1. 创建白名单文件(每行一个关键词)
echo -e "泛微\nApache\nStruts2" > lark_whitelist.txt
# 2. 启动容器并挂载文件
docker run --restart always -d \
-v $(pwd)/lark_whitelist.txt:/config/whitelist.txt \
-e WHITELIST_FILE=/config/whitelist.txt \
-e LARK_ACCESS_TOKEN=你的access_token \
-e LARK_SECRET=你的签名密钥 \
-e INTERVAL=30m \
zemal/watchvuln:latest
方式2:二进制运行
1. 下载二进制文件
从 WatchVuln Release页面 下载对应系统(Linux/Windows/Mac)的二进制文件,赋予执行权限(Linux/Mac):
bash
chmod +x watchvuln
2. 基础运行命令
bash
# 公网飞书
./watchvuln --lt 你的access_token --ls 你的签名密钥 -i 30m
# 私有化部署飞书(直接填完整Webhook)
./watchvuln --lt https://your-private-lark-domain/open-apis/bot/v2/hook/xxxx --ls 你的签名密钥 -i 30m
3. 关键参数说明
| 参数 | 缩写 | 作用 |
|---|---|---|
--lark-access-token |
--lt |
飞书机器人access_token或完整Webhook地址 |
--lark-sign-secret |
--ls |
飞书机器人签名密钥(开启签名校验时必填) |
--interval |
-i |
漏洞检查周期(如30m表示30分钟检查一次) |
--whitelist-file |
--xf |
漏洞关键词白名单文件路径 |
--blacklist-file |
--bf |
漏洞关键词黑名单文件路径 |
--no-filter |
- | 禁用高价值筛选,推送所有漏洞 |
--no-sleep |
- | 禁用夜晚休眠(默认00:00-07:00不运行) |
方式3:配置文件部署(多机器人/多渠道推送)
1. 创建YAML配置文件(如lark_config.yaml)
yaml
db_conn: sqlite3://vuln_v3.sqlite3
sources: ["avd","oscs","seebug","threatbook","kev"] # 启用的漏洞数据源
interval: 30m
enable_cve_filter: true
pusher:
- type: lark
access_token: "你的第一个飞书机器人access_token"
sign_secret: "你的第一个飞书机器人签名密钥"
- type: lark
access_token: "https://your-private-lark-domain/open-apis/bot/v2/hook/xxxx" # 私有化部署飞书
sign_secret: "你的第二个飞书机器人签名密钥"
2. 启动命令
bash
# Docker方式
docker run --restart always -d \
-v $(pwd)/lark_config.yaml:/config.yaml \
-e CONFIG=/config.yaml \
zemal/watchvuln:latest
# 二进制方式
./watchvuln -c lark_config.yaml
三、验证飞书机器人运行
1. 测试推送(可选)
启动时添加测试参数,立即推送3条测试消息到飞书群组:
bash
# Docker方式
docker run --rm \
-e LARK_ACCESS_TOKEN=你的access_token \
-e LARK_SECRET=你的签名密钥 \
-e TEST=true \
zemal/watchvuln:latest
# 二进制方式
./watchvuln --lt 你的access_token --ls 你的签名密钥 --test
2. 查看运行日志
bash
# Docker查看日志
docker ps | grep watchvuln # 获取容器ID
docker logs -f 容器ID
# 二进制查看日志
./watchvuln --lt 你的access_token --ls 你的签名密钥 -i 30m --debug
正常日志示例:
[pusher-lark] sending text 数据初始化完成,当前版本 v1.6.0, 本地漏洞数量: 120, 检查周期: 30m
[pusher-lark] sending markdown CVE-2024-12345 某某系统远程代码执行漏洞
3. 确认飞书消息
启动成功后,飞书群组会收到「数据初始化完成」的提示消息;漏洞检查周期内,符合条件的高价值漏洞会以Markdown格式推送至群组。
四、飞书机器人专属配置说明
| 环境变量 | 对应二进制参数 | 作用 | 默认值 |
|---|---|---|---|
LARK_ACCESS_TOKEN |
--lark-access-token/--lt |
飞书机器人access_token或完整Webhook地址 | - |
LARK_SECRET |
--lark-sign-secret/--ls |
飞书机器人签名密钥(开启签名校验时必填) | - |
NO_SLEEP |
--no-sleep |
禁用夜晚休眠(默认00:00-07:00不推送) | false |
SOURCES |
--sources |
自定义漏洞数据源(如avd,oscs,seebug) | avd,ti,oscs,threatbook,seebug,struts2,venustech |
五、常见问题解决
1. 飞书推送失败
- 检查
LARK_ACCESS_TOKEN是否正确:公网飞书填access_token部分,私有化部署填完整Webhook地址; - 若开启签名校验,确认
LARK_SECRET与飞书机器人配置一致; - 飞书机器人未加入目标群组:删除机器人重新创建,确保绑定正确群组;
- 网络问题:服务器无法访问飞书开放平台,配置
HTTPS_PROXY环境变量(如-e HTTPS_PROXY=http://代理IP:端口)。
2. 飞书消息格式乱码
- WatchVuln会自动处理Markdown格式兼容飞书,无需手动调整;
- 若出现空行丢失,无需处理(飞书对Markdown空行兼容性问题,不影响内容阅读)。
3. 私有化部署飞书推送失败
- 确认
LARK_ACCESS_TOKEN填写完整的私有化Webhook地址(如https://your-lark-domain/open-apis/bot/v2/hook/xxxx); - 检查服务器是否能访问私有化飞书域名,关闭防火墙/安全组限制。
六、进阶优化
1. 仅推送指定等级漏洞
结合黑白名单,仅推送「严重」「高危」且含指定关键词的漏洞:
bash
# 创建白名单文件,仅推送含"严重""高危"的漏洞
echo -e "严重\n高危" > lark_severity.txt
# 启动容器
docker run --restart always -d \
-v $(pwd)/lark_severity.txt:/config/whitelist.txt \
-e WHITELIST_FILE=/config/whitelist.txt \
-e LARK_ACCESS_TOKEN=你的access_token \
-e LARK_SECRET=你的签名密钥 \
-e INTERVAL=15m \
zemal/watchvuln:latest
2. 多飞书群组推送
通过配置文件添加多个飞书机器人,实现多群组推送:
yaml
pusher:
- type: lark
access_token: "群组1的access_token"
sign_secret: "群组1的签名密钥"
- type: lark
access_token: "群组2的access_token"
sign_secret: "群组2的签名密钥"
3. 调整漏洞检查周期
根据需求缩短/延长检查周期(最低1分钟):
bash
# 10分钟检查一次漏洞
docker run --restart always -d \
-e LARK_ACCESS_TOKEN=你的access_token \
-e LARK_SECRET=你的签名密钥 \
-e INTERVAL=10m \
zemal/watchvuln:latest