巡风源码初探【转】

巡风源码初探

2017-02-22 LazyTricks MottoIN

0x01 前言

巡风是同程安全应急响应中心(YSRC)在GitHub上开源的安全工具,采用Python编写,“是一款适用于企业内网的漏洞快速应急、巡航扫描系统,通过搜索功能可清晰地了解内部网络资产分布情况,并且可指定漏洞插件对搜索结果进行快速漏洞检测并输出结果报表。”对于这款工具,总体感觉小巧、高效,一定程度上关注到了安全运维中的部分痛点。笔者作为公司的安全运维负责人,在工作中有幸使用巡风来寻找内网的安全问题,现将巡风的安装过程和源码的阅读体会与大家一起分享。

0x02 安装

参考了官方给出的安装方法,下面是我在CentOS 7系统上的实际操作过程。

1.安装Python基础软件包

curl -O https://bootstrap.pypa.io/get-pip.pypython get-pip.py
pip install pymongo Flask xlwt paramiko

2.安装MongoDB数据库

配置MongoDB安装源:

vi /etc/yum.repos.d/mongodb.repo[mongodb-org-3.4]name=MongoDB Repositorybaseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/gpgcheck=1enabled=1gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc

安装运行:

yum install mongodb-org
systemctl enable mongod.service
systemctl start mongod.service
systemctl status mongod.service

3.安装巡风

此步骤相对简单,从GitHub(https://github.com/ysrc/xunfeng)上直接下载Zip包,解压至合适的位置即可,建议与公司应用部署上线的模式相结合,减少后期运维的麻烦。

参考:巡风:企业内网的漏洞快速应急巡航扫描系统

http://www.mottoin.com/94253.html

0x03 配置

从最小化修改、最快捷使用的角度出发,在配置过程中我也希望尽可精简。

1.导入基础数据

mongorestore -d xunfeng db

2.设置MongoDB账户

强迫症患者,可以在此处修改账号、密码,但需要与巡风最终的配置文件保持一致。

3.修改巡风

  • 对Config.py文件,由于采用MongoDB默认安装,还是采用默认端口,修改如下:
PORT = 27017
  • 对Run.py文件,这是巡风WebUIAdmin的主要启动程序,因在非root用户下运行,换成8080端口,修改如下:
app.debug = Falseport=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,默认账号密码:adminxunfeng321,详细使用大家可从官方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数据模型也没有详细去聊,难免有不足之后,恳请大家谅解。

*作者:LazyTricks,MottoIN原创投稿。未经允许禁止转载!

关于xmsg

技术面前人人平等.同时技术也不分高低贵贱.正所谓学无大小,达者为尊.
此条目发表在未分类, 经验技术分类目录。将固定链接加入收藏夹。

发表评论