• Stars
    star
    957
  • Rank 47,767 (Top 1.0 %)
  • Language
    Go
  • License
    MIT License
  • Created over 1 year ago
  • Updated 11 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

一个高价值漏洞采集与推送服务 | collect valueable vulnerability and push it

WatchVuln 高价值漏洞采集与推送

众所周知,CVE 漏洞库中 99% 以上的漏洞只是无现实意义的编号。我想集中精力看下当下需要关注的高价值漏洞有哪些,而不是被各类 RSS 和公众号的 威胁情报 淹没。 于是写了这个小项目来抓取部分高质量的漏洞信息源然后做推送。 WatchVuln意为监测 漏洞更新,同时也表示这些漏洞需要注意

当前抓取了这几个站点的数据:

名称 地址 推送策略
阿里云漏洞库 https://avd.aliyun.com/high-risk/list 等级为高危或严重
OSCS开源安全情报预警 https://www.oscs1024.com/cm 等级为高危或严重并且包含 预警 标签
奇安信安全监测平台 https://nox.qianxin.com/KeyPoint 等级为高危严重并且包含 奇安信CERT验证 POC公开 技术细节公布标签之一
知道创宇Seebug漏洞库 https://www.seebug.org/ 存在 WAF,默认不启用,若手动启用,则推送等级为高危或严重

所有信息来自网站公开页面, 如果有侵权,请提交 issue, 我会删除相关源。

如果有更好的信息源也可以反馈给我,需要能够响应及时 & 有办法过滤出有价值的漏洞

具体来说,消息的推送有两种情况, 两种情况有内置去重,不会重复推送:

  • 新建的漏洞符合推送策略,直接推送,
  • 新建的漏洞不符合推送策略,但漏洞信息被更新后符合了推送策略,也会被推送

app

快速使用

支持下列推送方式:

使用 Docker

Docker 方式推荐使用环境变量来配置服务参数

环境变量名 说明 默认值
DB_CONN 数据库链接字符串,详情见 数据库连接 sqlite3://vuln_v3.sqlite3
DINGDING_ACCESS_TOKEN 钉钉机器人 url 的 access_token 部分
DINGDING_SECRET 钉钉机器人的加签值 (仅支持加签方式)
LARK_ACCESS_TOKEN 飞书机器人 url 的 /open-apis/bot/v2/hook/ 后的部分
LARK_SECRET 飞书机器人的加签值 (仅支持加签方式)
WECHATWORK_KEY 微信机器人 url 的 key 部分
SERVERCHAN_KEY Server酱的 SCKEY
WEBHOOK_URL 自定义 webhook 服务的完整 url
BARK_URL Bark 服务的完整 url, 路径需要包含 DeviceKey
SOURCES 启用哪些漏洞信息源,逗号分隔, 可选 avd, ti, nox, seebug avd,nox,oscs
INTERVAL 检查周期,支持秒 60s, 分钟 10m, 小时 1h, 最低 1m 30m
ENABLE_CVE_FILTER 启用 CVE 过滤,开启后多个数据源的统一 CVE 将只推送一次 true
NO_FILTER 禁用上述推送过滤策略,所有新发现的漏洞都会被推送 false
NO_START_MESSAGE 禁用服务启动的提示信息 false

比如使用钉钉机器人

docker run --restart always -d \
  -e DINGDING_ACCESS_TOKEN=xxxx \
  -e DINGDING_SECRET=xxxx \
  -e INTERVAL=30m \
  -e ENABLE_CVE_FILTER=true \
  zemal/watchvuln:latest

每次更新记得重新拉镜像:

docker pull zemal/watchvuln:latest
使用飞书机器人
docker run --restart always -d \
  -e LARK_ACCESS_TOKEN=xxxx \
  -e LARK_SECRET=xxxx \
  -e INTERVAL=30m \
  zemal/watchvuln:latest
使用企业微信机器人
docker run --restart always -d \
  -e WECHATWORK_KEY=xxxx \
  -e INTERVAL=30m \
  zemal/watchvuln:latest
使用自定义 Bark 服务
docker run --restart always -d \
  -e BARK_URL=http://xxxx \
  -e INTERVAL=30m \
  zemal/watchvuln:latest
使用自定义 Webhook 服务

通过自定义一个 webhook server,可以方便的接入其他服务, 实现方式可以参考: example

docker run --restart always -d \
  -e WEBHOOK_URL=http://xxx \
  -e INTERVAL=30m \
  zemal/watchvuln:latest
使用server酱机器人
docker run --restart always -d \
  -e SERVERCHAN_KEY=xxxx \
  -e INTERVAL=30m \
  zemal/watchvuln:latest
使用多种服务

如果配置了多种服务的密钥,那么每个服务都会生效, 比如使用钉钉和企业微信:

docker run --restart always -d \
  -e DINGDING_ACCESS_TOKEN=xxxx \
  -e DINGDING_SECRET=xxxx \
  -e WECHATWORK_KEY=xxxx \
  -e INTERVAL=30m \
  zemal/watchvuln:latest

初次运行会在本地建立全量数据库,大约需要 1 分钟,可以使用 docker logs -f [containerId] 来查看进度, 完成后会在群内收到一个提示消息,表示服务已经在正常运行了。

使用二进制

前往 Release 下载对应平台的二进制,然后在命令行执行。命令行参数请参考 Docker 环境变量部分的说明,可以一一对应。

USAGE:
   watchvuln [global options] command [command options] [arguments...]

GLOBAL OPTIONS:
   [Push Options]

   --bark-url value, --bark value             your bark server url, ex: http://127.0.0.1:1111/DeviceKey
   --dingding-access-token value, --dt value  webhook access token of dingding bot
   --dingding-sign-secret value, --ds value   sign secret of dingding bot
   --lark-access-token value, --lt value      webhook access token of lark
   --lark-sign-secret value, --ls value       sign secret of lark
   --serverchan-key value, --sk value         send key for server chan
   --webhook-url value, --webhook value       your webhook server url, ex: http://127.0.0.1:1111/webhook
   --wechatwork-key value, --wk value         webhook key of wechat work

   [Launch Options]

   --db-conn value, --db value  database connection string (default: "sqlite3://vuln_v3.sqlite3")
   --enable-cve-filter          enable a filter that vulns from multiple sources with same cve id will be sent only once (default: true)
   --interval value, -i value   checking every [interval], supported format like 30s, 30m, 1h (default: "30m")
   --no-filter, --nf            ignore the valuable filter and push all discovered vulns (default: false)
   --no-github-search, --ng     don't search github repos and pull requests for every cve vuln (default: false)
   --no-start-message, --nm     disable the hello message when server starts (default: false)
   --sources value, -s value    set vuln sources (default: "avd,nox,oscs")

   [Other Options]

   --debug, -d    set log level to debug, print more details (default: false)
   --help, -h     show help (default: false)
   --version, -v  print the version (default: false)

在参数中指定相关 Token 即可, 比如使用钉钉机器人

$ ./watchvuln --dt DINGDING_ACCESS_TOKEN --ds DINGDING_SECRET -i 30m
使用飞书机器人
$ ./watchvuln --lt LARK_ACCESS_TOKEN --ls LARK_SECRET -i 30m
使用企业微信机器人
$ ./watchvuln --wk WECHATWORK_KEY -i 30m
使用server酱机器人
$ ./watchvuln --sk xxxx -i 30m
使用自定义 Bark 服务
$ ./watchvuln --bark http://xxxx -i 30m
使用自定义 Webhook 服务

通过自定义一个 webhook server,可以方便的接入其他服务, 实现方式可以参考: example

$ ./watchvuln --webhook http://xxxx -i 30m
使用多种服务

如果配置了多种服务的密钥,那么每个服务都会生效, 比如使用钉钉和企业微信:

$ ./watchvuln --dt DINGDING_ACCESS_TOKEN --ds DINGDING_SECRET --wk WECHATWORK_KEY -i 30m

数据库连接

默认使用 sqlite3 作为数据库,数据库文件为 vuln_v3.sqlite3,如果需要使用其他数据库,可以通过 --db 参数或是环境变量 DB_CONN 指定连接字符串,当前支持的数据库有:

  • sqlite3://filename
  • mysql://user:pass@host:port/dbname
  • postgres://user:pass@host:port/dbname

注意:该项目不做数据向后兼容保证,版本升级可能存在数据不兼容的情况,如果报错需要删库重来。

常见问题

  1. 服务重启后支持增量更新吗

    支持,每次检查会按照一定的策略去增量抓取

  2. Docker 拉取镜像提示 not found

    你使用的 Docker 版本太老了,不支持新的镜像格式,需要升级一下 Docker 版本,参考 #16

其他

为了减少内卷,该工具在 00:00 到 07:00 间会去 sleep 不会运行, 请确保你的服务器是正确的时间!

扫码加我拉进讨论群,请备注申请理由为:问题反馈与讨论,否则不通过

wechat