ysrc巡风-一款优秀的甲方资产扫描工具

0x00 介绍

巡风是YSRC开源的一款资产及运维漏洞管理工具。在针对YSRC做更改的时候注意遵从GPL License。

0x01 代码结构

巡风包含一个Web管理模块,一个网络资产发现模块和一个漏洞监测模块。代码结构如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
│ Config.py # 配置文件
│ README.md # 说明文档
│ Run.bat # Windows启动服务
│ Run.py # webserver
│ Run.sh # Linux启动服务,重新启动前需把进程先结束掉
├─aider
│ Aider.py # 辅助验证脚本
├─db # 初始数据库结构
├─masscan # 内置编译好的Masscan程序(CentOS win64适用),需要chmod+x给执行权限(root),若无法使用请自行编译安装。
├─nascan
│ │ NAScan.py # 网络资产信息抓取引擎
│ │
│ ├─lib
│ │ common.py 其他方法
│ │ icmp.py # ICMP发送类
│ │ log.py # 日志输出
│ │ mongo.py # 数据库连接
│ │ scan.py # 扫描与识别
│ │ start.py # 线程控制
│ │
│ └─plugin
│ masscan.py # 调用Masscan脚本
├─views
│ │ View.py # web请求处理
│ │
│ ├─lib
│ │ Conn.py # 数据库公共类
│ │ CreateExcel.py # 表格处理
│ │ Login.py # 权限验证
│ │ QueryLogic.py # 查询语句解析
│ │
│ ├─static #静态资源目录
│ │
│ └─templates #模板文件目录
└─vulscan
│ VulScan.py # 漏洞检测引擎
└─vuldb # 漏洞库目录

Run.py是*nix下的安装脚本,启动的后台脚本很多,大多数情况很难一次启动成功。注意在/var/log/xunfeng/查看日志。

0x02 Web模块

Web框架是Flask,由Run.py启动,默认端口为80,主要代码在views目录下。数据库使用的是Mongodb,Web模块不多说。

0x03 资产发现模块

巡风的定位是甲方,资产发现为每天固定时间扫描,这部分代码在nascan/NAScan.py中,如下

1
2
3
4
5
6
7
8
9
if (now_hour == int(ac_hour) and now_day % int(cy_day) == 0 and now_date not in ac_data) or NACHANGE[0]: # 判断是否进入扫描时段
ac_data.append(now_date)
NACHANGE[0] = 0
log.write('info', None, 0, u'开始扫描')
s = start(CONFIG_INI)
s.masscan_ac = MASSCAN_AC
s.statistics = STATISTICS
s.run()
time.sleep(60)

按照需要可以自行更改。

如果不想用NAScan,可以使用masscan。调用masscan在nascan/plugin/masscan.py中,也可以自己按照需要使用其他扫描器,只需要仿照masscan.py再写一个即可。

0x04 漏洞扫描模块

上面说过,巡风的定位是甲方+运维安全问题。扫描的一般是弱口令和常见组件的高危漏洞。

漏洞插件支持py脚本模式和json文件模式,py模式下需要有get_plugin_info函数和check函数,get_plugin_info函数比较重要的是keyword,确认哪些服务需要扫描。然后调用check函数,返回漏洞扫描结果。

json模式下json有一些重要字段,例如,keyword,跟py模式中的keyword作用一样。plugin字段确定请求。data指定post请求的内容,analyzing指定对 HTTP response的分析,支持keyword,regex和md5。如果response中包含keyword或者满足正则表达式或者md5为指定值,则漏洞存在。

0x05

总体来说,巡风是一款不错的扫描工具,适合无力或者不值得自己开发扫描器的中小公司,稍加改造,即可适配。插件还实时保持更新,非常不错,不像某些公司开源以后就不管了,啥都没有。