Flan Scan是一款基于Nmap打包的Python漏洞扫描程序。基于Nmap的开源强大,灵活性,Cloudflare利用他取代了之前使用昂贵的安全厂商专业产品,大大的降低了运营成本,并提供了无与伦比的部署灵活性,功能修改,漏洞库快速更新(基于CVS开源数据库)等优势。

日前,Cloudflare宣布开源其内部的轻型网络漏洞扫描工具Flan Scan。Flan Scan是一款基于Nmap打包的Python漏洞扫描程序。基于Nmap的开源强大,灵活性,Cloudflare利用他取代了之前使用昂贵的安全厂商专业产品,大大的降低了运营成本,并提供了无与伦比的部署灵活性,功能修改,漏洞库快速更新(基于CVS开源数据库)等优势。目前Cloudflare的全球190多个数据中心的主机上都使用该工具进行漏洞扫描。

1.jpg

缘起

该工具的产生源于Cloudflare的一个内部合规性扫描任务,因为任务执行比较急促,需要在截止日期内完成对合规性要求的内部扫描,在考察后,没有发现可以满足需求的工具和解决方案,于是他们决定自研开发一款适合自定义需求的扫描工具:需要一个能够准确检测服务器上监听的端口和服务,并能通过CVE数据库查找这些服务对应的漏洞项,该工具必须灵活的安装部署。

这就是Flan Scan的来源。

Nmap为基础扫描器

Flan Scan选择Nmap作为基础扫描器,与其他网络扫描器牺牲准确性而求高效不同,Nmap稳扎稳打,优先检测的准确性,虽然扫描速度比较慢,但是结果比较准确,可以极大的减少误报。

除了强大的基础功能外,Nmap还提供了灵活、可扩展的脚本引擎NSE(Nmap Scripting Engine),用来执行额外自定义的任务。NSE脚本都是通过灵活小巧的动态语言Lua编写,NSE脚本库具有大量的执行各种各样任务和漏洞测试的脚本库,也有大量第三方或者个人撰写的脚本可以供使用和参考。下面是NSE官方文档中提到的脚本库:

2.jpg

便捷性设计

为了使扫描器易于部署,同时确保其输出可行且有价值的结果。Flan Scan提供了三个功能,通过他们可以将Nmap打包程序任意部署到大型网络中。

易于部署和配置

为了创建具有轻松配置的轻量级扫描程序,Flan Scan提供了虚拟化Docker容器的部署方式。因此,可以构建Flan Scan,并将其推送到Docker 注册表,以保持在运行时配置的灵活性。Flan Scan还包括带有几个占位符的Kubernetes示例配置和部署文件,可以通过容器云快速部署、并启动扫描。

扫描结果推送到云

Flan Scan另一个便捷功能是添加扫描结果自动推送到云存储。Flan Scan的扫描结果可以自动推送到谷歌云存储或者或AWS S3对象存储。需要做的就是启动容器时候配置一些环境变量,Flan Scan就能自动完成该任务。通过这种方式可以在大型网络上运行大量扫描,并将结果集中收集在在一起进行处理。

便于执行的安全报告

Flan Scan从Nmap的输出生成可以执行报告,可以让我们快速识别网络上的易受攻击的服务,其存在的漏洞CVE和对应服务的IP和端口。该报告对于跟踪扫描结果的安全工程师以及寻找合规扫描证据的审核员很有用。

3.jpg

改善网络安全性

在Cloudflare内部,通过Scan Flan不仅帮助完成了合规性扫描的限时任务,还使用Flan Scan切实改善了网络的安全性。在Cloudflare,会将在生产环境中会固定某些服务的软件版本,这样可通过权衡升级的运营成本和最新版本的改进来确定升级的优先级。Flan Scan的扫描结果表明,用于管理Linux用户和主机的FreeIPA节点运行的Apache版本过时,存在多个中等严重性漏洞。因此,优先考虑了对升级更新。Flan Scan还帮助发现一些潜在安全点。比如,存在一个存在漏洞PostgreSQL实例,该实例实际上不再使用应该下线的服务。

在Cloudflare,线上环境都使用osquery执行基于主机的安全基线检查和漏洞跟踪。而Flan Scan则作为补充,扩大了其漏洞管理范畴。通过Flan Scan网络扫描来补充osquery发现,可以全面了解边缘运行的服务及其存在的漏洞。通过两者配合,Cloudflare构建一个漏洞源管理体系,该体系会定时自动发送有关新漏洞的警报,过滤出误报并跟踪已修复的漏洞。

Flan Scan架构

4.jpg

Flan Scan的第一步是运行具有服务检测功能的Nmap扫描, Flan Scan默认启动Nmap的下面的扫描项:

1. ICMP ping扫描:用来确定给出的IP地址是否在线。

2. SYN扫描:通过扫描ICMP ping响应IP地址的1000个最常用端口。Nmap根据扫描结果,将其标记为open、close或者filtered。注意:fileter表示该端口被防火墙明确封禁;close表示端口没有被防火墙封禁,但是主机没有应用监听该端口;open表示主机在该端口有服务监听。

3.服务检测扫描:对端口open的服务,执行TCP握手和banner抓取扫描,根据反馈的服务指纹找出服务类型和版本等信息。

Nmap还支持其他类型的扫描,例如UDP扫描和对IPv6地址扫描。Flan Scan允许用户通过在启动时制定Nmap参数来启用这些功能和更多的其他扩展功能。

Flan Scan在其Nmap命令中添加启动”vulners”脚本(–script=vulners.nse),这样会在扫描结果中包含于检测到的服务的漏洞列表。vulners脚本通过对vulners服务API调用返回给定服务存在的漏洞。

5.jpg

Flan Scan获取nmap扫描结果过后,就会执行Python脚本将Nmap输出的XML结构化数据转换为可操作的报告。扫描程序的报告列出了所扫描的IP地址,并列出了IP上存在的漏洞。当IP比较多时候,面对大量的IP项目的报告,阅览和执行就比较费劲。Flan Scan扫描结果围绕以服务为单位进行组织。该报告列举了所有易受攻击的服务,并在每个相关漏洞和运行此服务的所有IP地址下方列出了一个列表。由于可以清楚地确定需要修补的服务,因此该结构使报告更简短且可操作。

6.jpg

Flan Scan报告使用LaTeX来编写的,可以使用pdf2latex或TeXShop等工具将Flan Scan输出的原始LaTeX文件转换为漂亮的PDF。

总结

本文介绍了Cloudflare开源的轻量级网络扫描工具,基于简单的几个脚本构建了其安全防线。其安全解决思路和现成工具都可以供大家参考,工具不是最主要的,主要是解决问题的思路。安全问题是企业的重中之重,然而安全通过购买那些昂贵的安全软件就可以解决的么?这是大家值得深思的问题。