0x01 前言
巡风是同程安全应急响应中心(YSRC)在GitHub上开源的安全工具,采用Python编写,“是一款适用于企业内网的漏洞快速应急、巡航扫描系统,通过搜索功能可清晰地了解内部网络资产分布情况,并且可指定漏洞插件对搜索结果进行快速漏洞检测并输出结果报表。”对于这款工具,总体感觉小巧、高效,一定程度上关注到了安全运维中的部分痛点。笔者作为公司的安全运维负责人,在工作中有幸使用巡风来寻找内网的安全问题,现将巡风的安装过程和源码的阅读体会与大家一起分享。
0x02 安装
参考了官方给出的安装方法,下面是我在CentOS 7系统上的实际操作过程。
1.安装Python基础软件包
[root@tiejiang ~]# curl -O https://bootstrap.pypa.io/get-pip.py [root@tiejiang ~]# python get-pip.py [root@tiejiang ~]# pip install pymongo Flask xlwt paramiko
2.安装MongoDB数据库
配置MongoDB安装源
[root@tiejiang ~]# vim /etc/yum.repos.d/mongodb.repo [mongodb-org-3.4] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc
安装运行
[root@tiejiang ~]# yum -y install mongodb-org [root@tiejiang ~]# systemctl enable mongod.service [root@tiejiang ~]# systemctl start mongod.service [root@tiejiang ~]# systemctl status mongod.service mongod.service - High-performance, schema-free document-oriented database Loaded: loaded (/usr/lib/systemd/system/mongod.service; enabled) Active: active (running) since 四 2017-02-23 09:37:59 CST; 6s ago Docs: https://docs.mongodb.org/manual Process: 35995 ExecStartPre=/usr/bin/chmod 0755 /var/run/mongodb (code=exited, status=0/SUCCESS) Process: 35992 ExecStartPre=/usr/bin/chown mongod:mongod /var/run/mongodb (code=exited, status=0/SUCCESS) Process: 35991 ExecStartPre=/usr/bin/mkdir -p /var/run/mongodb (code=exited, status=0/SUCCESS) Main PID: 35998 (mongod) CGroup: /system.slice/mongod.service ├─35998 /usr/bin/mongod --quiet -f /etc/mongod.conf run ├─36002 /usr/bin/mongod --quiet -f /etc/mongod.conf run └─36003 /usr/bin/mongod --quiet -f /etc/mongod.conf run 2月 23 09:37:59 tiejiang systemd[1]: Started High-performance, schema-free document-oriented database. 2月 23 09:38:04 tiejiang mongod[35998]: about to fork child process, waiting until server is ready for connections. 2月 23 09:38:04 tiejiang mongod[35998]: forked process: 36003 [root@tiejiang ~]#
3.安装巡风
此步骤相对简单,从GitHub(https://github.com/Blacksmith-shop/xunfeng)上直接下载Zip包,解压至合适的位置即可,建议与公司应用部署上线的模式相结合,减少后期运维的麻烦。
参考:巡风:企业内网的漏洞快速应急巡航扫描系统
0x03 配置
从最小化修改、最快捷使用的角度出发,在配置过程中我也希望尽可精简。
1.导入基础数据
mongorestore -d xunfeng db
2.设置MongoDB账户
强迫症患者,可以在此处修改账号、密码,但需要与巡风最终的配置文件保持一致。
3.修改巡风
- 对Config.py文件,由于采用MongoDB默认安装,还是采用默认端口,修改如下:
PORT = 27017
- 对Run.py文件,这是巡风WebUIAdmin的主要启动程序,因在非root用户下运行,换成8080端口,修改如下:
app.debug = False,port=8080
- 对Run.sh文件,注释该行:
"nohup mongod --port 65521 --dbpath=${XUNFENG_DB} --auth > ${XUNFENG_LOG}/db.log &"
- 对masscan文件,添加执行权限:
4.配置防火墙
firewall-cmd --permanent --zone=public --add-port=8080/tcp firewall-cmd --reload
5.运行使用
sh Run.sh
访问http://[IP]:8080,默认账号密码:admin,xunfeng321,详细使用大家可从官方GitHub可看。
0x04 源码分析
巡风的整体设计比较清晰,估计在设计之初就定位于工具的缘故,侧重实用和效果,源码结构也是一目了然,编程水平高的同学可以通过修改源码来添加需要的功能。
1.目录结构及其功能
巡风主要由根目录和4个子目录views、aider、nascan、vulscan组成,4个子目录分别对应WebUIAdmin、辅助工具、设备(资产)扫描和漏洞检测4个组成模块,其中WebUIAdmin基于Flask实现,属于轻量级Web解决方案,该程序负责在日常工作中与我们进行请求响应和扫描结果展示,同时也通过Web对巡风进行插件的配置管理。
2.aider目录源码解读
目前aider目录仅一个文件Aider.py,故先拎出来分析。Aider会在启动时监听53(UDP)、8088(HTTP)两个端口。我们知道,53端口一般用作DNS服务,而aider的作用就是记录DNS的查询情况,并通过HTTP服务对DNS情况进行检查。
值得一提的事,aider的HTTP服务仅仅是一个TCP socket,对于HTTP的请求的处理和响应近乎暴力(高效),直接附上代码。
创建HTTP服务:
web = socket.socket(socket.AF_INET,socket.SOCK_STREAM) web.bind(('0.0.0.0',8088)) web.listen(10)
输出响应:
raw = "HTTP/1.0 200 OK/r/nContent-Type: application/json; charset=utf-8/r/nContent-Length: %d/r/nConnection: close/r/n/r/n%s" %(len(html),html) conn.send(raw) conn.close()
这部分代码对于初学TCP编程的同学可以借鉴。
3.nascan目录源码解读
NAScan是设备扫描程序,能够通过ICMP、Web和Masscan检测主机情况,包括主机存活性、端口、服务进行探测,同时对应用服务指纹和Web应用指纹进行识别(需要维护指纹配置信息)。
文件NAScan.py会周期性创建扫描任务,具体如何扫描等工作逻辑由lib目录下的start.py完成。start.py是个多线程编程的过程,类start通过读取MongoDB数据库中配置信息,创建相应的扫描线程,如果启用了Masscan,会调用plugin目录下的masscan.py完成端口扫描,并在线程类ThreadNum中进一步调用scan.py文件完成整个扫描工作。
因而scan.py是整个NAScan的核心,弄清楚scan.py就能够理解巡风进行设备扫描时的主要过程。
一般的主机扫描需要扫描端口和识别服务两个主要步骤,并进一步检测服务应用情况,尤其对Web服务基础信息的识别。scan.py的扫描只是处理显而易见的端口和服务,具体需要在“巡风-配置-爬虫引擎”中指定相应的端口和识别规则。弄明白这些,再去阅读scan.py就能够很快切入其中,从而可以根据自身业务的需要变更相关的流程或是添加额外的功能,例如对Web API服务的信息采集。
4.vulscan目录源码解读
vulscan不仅是漏洞检测程序,同时也是基于插件的漏洞检测开发框架,程序本身并不难理解,相反是漏洞检测插件的开发会成为后续使用巡风的一大障碍。
漏洞产生的原因多种多样,每种漏洞的检测方法也各不相同,显然在快速事件响应过程中,完成一个漏洞插件开发是安全运维者的较高水平体现,为了提升效率,vulscan定义了两种开发模式来尽可能简化相关漏洞插件的开发:针对Web请求的JSON插件和非Web厂家下的Python脚本。
JSON插件的本质事定义了一次完整的Web请求过程,通过对响应结果的规则匹配来识别Web漏洞;而Python脚本的开发,厉害的同学可以结合最新的exploit进行开发,只要符合vulscan的调用规则即可。两种插件模式配合使用不得不说高效。
0x05 总结
在日常的安全运维中,巡风作为安全工具能够协助我们做好最新漏洞的检测,防范安全风险,笔者通过本文也是对巡风使用上的一次回顾,对于巡风的WebUIAdmin和MongoDB数据模型也没有详细去聊,难免有不足之后,恳请大家谅解。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/55176.html