Beholder是一款简洁而小巧的系统,主要作用是通过监控端口变化来发现企业内部的信息孤岛。开发此项目的初衷是:实际工作中会遇到其他部门开通了新机器却未更新到CMDB,造成了IP遗漏,最后导致安全扫描缺失。所以想通过端口比较来监控企业的网络变化。
系统由beholder_scanner、beholder_web两个部分组成。这两个部分可以部署在一台机器上,也可以分开部署在不同的机器上。
- beholder_scanner:对IP进行端口扫描、比较端口变化,可部署多个beholder_scanner来组成集群加快扫描速度。
- beholder_web:提供前端界面展示。
支持平台
- Linux
- Windows
安装指南
一、 Demo版部署
如果只是测试和尝鲜可以部署Demo版:
优点是部署简单,缺点是不利于扩展和管理。
新建文件夹
# mkdir -p /mongodb/db
构建容器
新建个docker_demo.yml文件,复制粘贴如下内容:
version: '3'
services:
scanner:
image: zj1244/beholder_scanner:latest
container_name: beholder_scanner
restart: always
environment:
REDIS_IP: redis
REDIS_PORT: 6379
REDIS_PWD: ""
MONGO_IP: mongo
MONGO_PORT: 27017
MONGO_USER: ""
MONGO_PWD: ""
SCAN_TIMEOUT: 300
VULSCAN_KEY: ""
depends_on:
- redis
- mongo
web:
image: zj1244/beholder_web:latest
container_name: beholder_web
ports:
- "8000:8000"
restart: always
environment:
ACCOUNT: "admin"
PASSWORD: "admin"
REDIS_IP: redis
REDIS_PORT: 6379
REDIS_PWD: ""
MONGO_IP: mongo
MONGO_PORT: 27017
MONGO_USER: ""
MONGO_PWD: ""
depends_on:
- redis
- mongo
redis:
image: redis:5.0.3
container_name: beholder_redis
restart: always
expose:
- "6379"
mongo:
image: mongo:3.6.15-xenial
container_name: beholder_mongo
restart: always
volumes:
- "/mongodb/db:/data/db"
expose:
- "27017"
启动容器
# docker-compose -f docker_demo.yml up -d
检查启动是否成功
如果输出类似信息则启动成功,此时可访问http://ip:8000,输入默认用户名密码admin来登陆
# docker logs beholder_web
[2020-03-18 Wednesday 00:20] [INFO] Scheduler started
[2020-03-18 Wednesday 00:20] [DEBUG] Looking for jobs to run
[2020-03-18 Wednesday 00:20] [INFO] * Running on http://0.0.0.0:8000/ (Press CTRL+C to quit)
[2020-03-18 Wednesday 00:20] [DEBUG] Next wakeup is due at 2020-03-18 01:11:13.959033+08:00 (in 3019.861167 seconds)
# docker logs beholder_scanner
[2020-03-18 00:20:52,385] [INFO] 扫描开始
二、常规部署
依赖:项目运行依赖于mongodb和redis,所以需准备好mongodb和redis,关于mongodb和redis的安装这里不再阐述。请参考:
添加mongodb认证
在 mongodb 服务器上新建 db 用户,这里新建了一个用户名为scan
密码为123456
的用户。
# mongo
> use admin
> db.createUser({user:'scan',pwd:'123456', roles:[{role:'readWriteAnyDatabase', db:'admin'}]})
> exit
导入数据库
把beholder_scanner项目下的db
文件夹导入 mongodb 。在 mongodb 服务器上执行如下命令:
# git clone https://github.com/zj1244/beholder_scanner.git
# cd beholder_scanner/db/
# mongorestore -u scan -p 123456 --authenticationDatabase admin -d portscan .
构建镜像
新建个install_web_and_scanner.yml文件,复制粘贴如下内容,并根据实际情况修改redis和mongo配置信息:
version: '3'
services:
scanner:
image: zj1244/beholder_scanner:latest
restart: always
network_mode: "host"
environment:
# 请修改以下redis和mongodb的配置
REDIS_IP: 192.168.47.16
REDIS_PORT: 6379
REDIS_PWD: pwd
MONGO_IP: 192.168.47.16
MONGO_PORT: 27017
MONGO_USER: scan
MONGO_PWD: 123456
SCAN_TIMEOUT: 300
# 用于后续扫描的队列,保持默认为空即可
VULSCAN_KEY: ""
web:
image: zj1244/beholder_web:latest
ports:
- "8000:8000"
restart: always
environment:
# 登陆用户名密码
ACCOUNT: "admin"
PASSWORD: "admin"
# 请修改以下redis和mongodb的配置
REDIS_IP: 192.168.47.16
REDIS_PORT: 6379
REDIS_PWD: pwd
MONGO_IP: 192.168.47.16
MONGO_PORT: 27017
MONGO_USER: scan
MONGO_PWD: 123456
启动容器
# docker-compose -f install_web_and_scanner.yml up -d
检查启动是否成功
如果输出类似信息则启动成功,此时可访问http://ip:8000,输入install_web_and_scanner.yml里的用户名密码来登陆
# docker logs $(docker ps | grep zj1244/beholder_web | awk '{print $1}')
[2020-03-18 Wednesday 00:20] [INFO] Scheduler started
[2020-03-18 Wednesday 00:20] [DEBUG] Looking for jobs to run
[2020-03-18 Wednesday 00:20] [INFO] * Running on http://0.0.0.0:8000/ (Press CTRL+C to quit)
[2020-03-18 Wednesday 00:20] [DEBUG] Next wakeup is due at 2020-03-18 01:11:13.959033+08:00 (in 3019.861167 seconds)
# docker logs $(docker ps | grep zj1244/beholder_scanner | awk '{print $1}')
[2020-03-18 00:20:52,385] [INFO] 扫描开始
至此整套程序部署完毕。
三、部署单个扫描节点(可选)
如果需要提升扫描速度,可以在多台机器上重复部署beholder_scanner来组成集群。步骤如下:
构建镜像
使用 vi 新建一个名为docker-compose.yml的文件,复制粘贴如下内容:
version: '3'
services:
scanner:
image: zj1244/beholder_scanner:latest
restart: always
network_mode: "host"
environment:
# 请修改以下redis和mongodb的配置
REDIS_IP: 192.168.47.16
REDIS_PORT: 6379
REDIS_PWD: pwd
MONGO_IP: 192.168.47.16
MONGO_PORT: 27017
MONGO_USER: scan
MONGO_PWD: 123456
SCAN_TIMEOUT: 300
VULSCAN_KEY: ""
启动容器
# docker-compose up -d
检查scanner是否正常启动
输入如下命令,如果输出扫描开始
则表示启动成功
# docker logs $(docker ps | grep zj1244/beholder_scanner | awk '{print $1}')
[2020-02-15 15:48:56,575] [INFO] 扫描开始
使用手册
一、 配置
第一次使用时需要在【配置】中设置扫描并发数。如果需要把比较结果发送邮箱,请配置邮件相关信息。
二、新增扫描任务
在【添加任务】页面中,添加需要监控的IP段和端口。注意:
- 任务名称不能重复
- 如果循环周期选择【不循环】,则添加的是一次性任务
- 如果一个循环周期内扫描没有完成,下个循环周期开始时不会添加新任务
三、查看端口变化
当任务循环扫描两次(不含两次)以上时,才会进行端口比较。
点击【任务列表】->【扫描详情】
在【扫描详情】页面,点击【扫描次数】,可以查看每次扫描的IP变化。
四、查找端口信息
可以按照如下方法搜索(不区分大小写,支持模糊查询):
1.按端口: port:端口号 eg. port:22
2.按服务名: server:服务名 eg. server:iis
3.按ip: ip:ip地址 eg. ip:192.168.14
4.按软件名: soft:服务名 eg. soft:supervisor
五、与扫描器联动
项目预留了与扫描器联动的方式。如果yml文件里的VULSCAN_KEY不为空,就会把扫描结果存到redis里,这样扫描器就可以通过读取redis的端口信息来进行扫描。
总结
Q:为什么不用masscan+nmap的组合?
A:在实际的使用中发现,虽然masscan可以提高扫描速度,但是漏报的情况太严重了,而且很容易造成网络瘫痪。如果把发包频率限制在某个程度可以解决网络瘫痪问题,但是速度还不如只使用nmap快。所以最终只采用nmap进行扫描
Q:端口比较是否准确
A:由于网络波动等问题,可能做不到100%的准确,只能不断的接近100%
最后给出该项目地址,请各位师傅轻拍:
来源:freebuf.com 2020-07-02 21:47:27 by: zj1244
请登录后发表评论
注册