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