Google-Tsunami 高性能网络安全漏洞扫描工具
为什么要使用Tsunami
在WEB应用广泛流行的时代,网络安全一直以来备受关注,网络安全通常作为独立部门承担着网络安全防护的职能。但是长期以来也未能完全消除来自外部的网络攻击和威胁。网络安全漏洞往往被攻击者利用,严重的影响着公司以及个人的利益和荣誉。随着攻击者越来越多地使用自动化工具,对新发布的高危严重漏洞作出反应的时间窗口通常以小时为单位。这对拥有数千甚至数百万互联网连接系统的大型组织来说是一个重大挑战。在这种超大规模的环境中,必须检测到安全漏洞,并以完全自动化的方式进行理想的补救。要做到这一点,信息安全团队需要有能力在极短的时间内实现并推出针对新的安全问题的检测器。
Tsunami的能力
Tsunami支持检测小型手动策划的漏洞集合
Tsunami可以检测高度严重的、类似于rce的漏洞,这些漏洞通常被广泛利用。
Tsunami生成的扫描结果具有很高的置信度和最小的假阳性率。
Tsunami的探测器很容易扩展。
Tsunami易于伸缩,执行速度快,扫描无干扰。
到目前为止,在扫描公开的网络端点时,Tsunami遵循硬编码的两步过程:
Reconnaissance(侦察):在第一步中,Tsunami通过一组fingerprints插件识别目标主机上运行的开放端口,随后识别fingerprints协议、服务和其他软件。为了避免重复劳动,Tsunami利用现有的工具(如nmap)来完成其中一些任务。
Vulnerability verification(漏洞验证):根据步骤1收集的信息,选择所有与识别服务匹配的漏洞验证插件并执行,以验证漏洞无误报。
下图展示了Tsunami的漏洞检测流程:
在侦察步骤中,Tsunami探测扫描目标,尽可能多地收集有关扫描目标的信息,包括:
开放的端口
网络协议
网络服务
可能正被使用的应用软件
在端口扫描阶段,Tsunami执行端口扫描,以确定扫描目标上的开放端口、协议和网络服务。端口扫描的输出是PortScanReport protobuf,其中包含来自端口扫描程序的所有标识的网络服务。
PortScanner是一种特殊类型的Tsunami插件,设计用于端口扫描。这允许用户交换端口扫描实现。为了避免重复发明,用户可以选择在现有工具(如nmap或masscan)周围使用一个Tsunami插件包装器。您可以在tsunami-security-scanner-plugins 的repo中找到有用的PortScanner实现。
Fingerprinting阶段,通常端口扫描器只提供非常基本的服务检测功能。当扫描目标承载复杂的网络服务(如web服务器)时,扫描程序需要执行进一步的Fingerprinting,以了解有关公开的网络服务的更多信息。
例如,扫描目标可以选择在同一个TCP端口443上使用nginx作为反向代理,/blog用于WordPress, /论坛用于phpBB,等等。端口扫描器将只能告诉443端口正在运行nginx。需要一个带有全面爬虫的Web应用Fingerprinting打印机来识别这些应用程序。
ServiceFingerprinter是一种特殊类型的Tsunami插件,它允许用户为特定的网络服务定义Fingerprinter。通过使用过滤注释(参见如何将我的插件应用到特定类型的服务/软件?),当Tsunami识别出匹配的网络服务时,它将能够自动调用适当的ServiceFingerprinters。
漏洞验证,在漏洞验证步骤中,Tsunami根据侦察步骤中收集到的信息,并行执行VulnDetector插件,对扫描目标上的某个漏洞进行验证。VulnDetector的检测逻辑可以实现为简单的Java代码,也可以使用python或go等不同语言实现为单独的二进制/脚本。外部二进制文件和脚本必须在Tsunami之外使用Tsunami的命令执行util作为独立进程执行。看看未来的工作,我们的设计理念,使Tsunami插件的语言不可知。
探测器的选择,通常一个VulnDetector只验证一个漏洞,该漏洞通常只影响一种网络服务或软件。为了避免不必要的工作,Tsunami允许通过一些过滤注释对插件进行注释(详细信息请参阅指南),以限制插件的范围。
然后在漏洞验证步骤开始前,Tsunami会根据暴露的网络服务和扫描目标上运行的软件,选择匹配的vulndetector运行。不匹配的VulnDetector将在整个扫描过程中处于不活动状态。
关于具体的开发和部署的详情,请访问 :
https://github.com/google/tsunami-security-scanner