开源软件安全现状及其漏洞扫描工具

Jet Ding 发表于 2020/09/28 16:54:41 2020/09/28
【摘要】 最近接到一个需求,要求研究一下开源软件安全漏洞扫描的问题,这篇文章来谈一谈这个问题。1 开源软件安全现状有人做过这么一个统计,90%以上的应用都在使用第三方的程序库,这些程序库大部分都是开源的。与此同时,有超过一半的全球500强公司都在使用存在漏洞的开源软件。在当前的软件开发环境当中,为了节省时间和效率,我们在项目中大量的使用开源的组件,这些组件由开源社区的程序员来开发,但是这些程序员对安全...

最近接到一个需求,要求研究一下开源软件安全漏洞扫描的问题,这篇文章来谈一谈这个问题。

1 开源软件安全现状

有人做过这么一个统计,90%以上的应用都在使用第三方的程序库,这些程序库大部分都是开源的。

与此同时,有超过一半的全球500强公司都在使用存在漏洞的开源软件。

在当前的软件开发环境当中,为了节省时间和效率,我们在项目中大量的使用开源的组件,这些组件由开源社区的程序员来开发,但是这些程序员对安全方面的了解几乎为0。

那可想而知,当我们在使用这些开源软件件的时候,面临着多大的风险。

另一种情况我们不得不承认开源软件的强大性,全世界最好的程序员都在使用开源软件,因此我们无法停止使用开源软件件。

基于此,我们的当务之急是重视开源软件安全漏洞方面的研究。

当前业界依然认为开源软件是相对安全的,我们经常说的那句话, 暴露在大庭广众之下, 所有的问题都是可见的。


2 开源软件漏洞扫描工具

很多公司经常搜索像cve(http://www.cvedetails.com/)和nvd(https://nvd.nist.gov/)漏洞数据库来搜索漏洞信息,但是这些资源对于开源软件的漏洞信息收集的比较少。这是因为开源软件使用的范围如此之广, 以至于追踪它们非常的困难。

事实上,开源软件生态系统比我们想象的要脆弱的多,这一点让我们不得不感到恐惧。

近些年来涌现出大量的开源或者商业类工具来解决这样的问题。每个工具解决问题的方式各有优势。现在将这些工具列举如下:


2.1  Node Security Project (NSP)

https://nodesecurity.io/

NSP以其在Node.js模块和NPM依赖关系方面的工作而闻名。它还提供了扫描依赖关系和使用公共漏洞数据库(如NIST国家漏洞数据库(NVD))等公共漏洞数据库以及它自己的数据库的工具,这些工具可以扫描依赖关系并找到漏洞,而这些数据库是它根据对NPM模块的扫描结果建立的。

来自NSP的Adam Baldwin对自己的产品很有信息,并且展望了一下未来,他认为依赖安全检测会称为软件开发流程的一部分。"很快你会看到我们的一些产品,包括持续的安全监控,与GitHub(和其他产品)的集成,依靠这些集成,你可以在软件开发周期中对相关的领域添加安全监控、检测、警报和补救。"


2.2  RetireJS

http://retirejs.github.io/retire.js/

RetireJS是一个开源的工具,特别用于JavaScript程序的依赖检查。它包含如下组件: 一个命令行扫描器以及Grunt、Gulp、Chrome、Firefox、ZAP和Burp的插件。

RetireJS还做了一个站点检查服务,以供那些想找出自己使用的JavaScript库是否存在已知漏洞的JS开发者使用。

RetireJS从NIST NVD以及其他许多其他来源获取漏洞信息,信息途径包括邮件列表、错误跟踪系统和流行的JavaScript项目的博客。

RetireJS的Erlend Oftedal认为,安全是每个人的问题,需要更多的合作。"我希望看到流行的开源框架的作者们自己向Retire.js这样的工具报告安全修复,以便让他们的软件用户更安全。"


2.3  OSSIndex

https://ossindex.net/

OSSIndex 支持多种技术平台的扫描。它从NPM、Nuget、Maven Central Repository、Bower、Chocolatey和MSI中提取依赖信息,它覆盖了JavaScript、.NET/C#和Java生态系统。

OSSIndex还免费提供了一个漏洞API。

OSSIndex目前从NIST的NVD中获取漏洞信息。OSSIndex的Ken Duck计划在不久的将来,可以从一些关键的邮件列表、数据库和错误跟踪系统中自动导入漏洞信息。


2.4  Dependency-check

https://www.owasp.org/index.php/OWASP_Dependency_Check

Dependency-check是一个来自OWASP的开源命令行工具,它维护得非常好,可以在独立模式下使用,也可以在构建工具中使用。Dependency-check支持Java、.NET、JavaScript和Ruby。该工具严格地从NIST NVD中获取漏洞信息。


2.5 Bundler-audit

https://github.com/rubysec/bundler-audit

Bundler-audit是一个专注于Ruby Bundler的开源、命令行依赖检查器。该项目从NIST NVD和RubySec中检索漏洞信息,RubySec是一个Ruby漏洞数据库。


2.6  Hakiri

https://hakiri.io/

Hakiri是一个商业工具,它为基于Ruby和Rails的GitHub项目提供静态代码分析的依赖检查。它为公共开源项目提供免费计划,为私人项目提供付费计划。它使用NVD和Ruby咨询数据库。

Hakiri的Vasily Vasily Vasinov表示,该软件的未来计划包括增加与Slack、JIRA和Pivotal Tracker的集成,以及支持Node.js和PHP等其他平台。


2.7  Snyk

https://snyk.io/

Snyk 是一个专注于 JavaScript npm 依赖关系的商业服务。Snyk是一个新的场景,它的功能是独一无二的。它不仅提供了检测JavaScript项目中已知漏洞的工具,而且还帮助用户使用Snyk创建的引导升级和开源补丁来修复这些问题。

Snyk有自己的漏洞数据库,它的数据来自NIST NVD和NSP。Snyk的重点是将已知的漏洞处理扩展到整个组织及其团队,并提供更好的协作工具和更紧密的GitHub集成。Snyk的首席执行官Guy Podjarny表示,Snyk未来的计划包括构建运行时工具,让开发人员在生产系统上运行开源包时,能够获得更好的可视性和控制能力。


2.8  Gemnasium

https://gemnasium.com/

Gemnasium是一个商业工具,将来会提供免费版本。Gemnasium有自己的数据库,它的数据来自多个地方。虽然每天都会对漏洞进行人工审查,但它并不会自动发布建议。

Gemnasium提供了一个独特的自动更新功能,使用特殊的算法来测试依赖集的智能组合,而不是测试所有的组合,这样可以节省一些时间。

Gemnasium支持Ruby、NPM(JavaScript)、PHP、Python和Bower(JavaScript)。

Gemnasium的另一个独特的产品是它的Slack集成--一旦检测到咨询反馈,就会通过Slack实时通知用户。

来自Gemnasium公司的Philippe Lafoucrière表示,未来的计划支持更多语言,比如从Java开始。

2.9  Grabber

https://github.com/neuroo/grabber

Grabber 是一款不错的 Web 应用程序扫描器,可以检测到 Web 应用程序中的许多安全漏洞,可以执行扫描并告知漏洞存在的位置,可以检测到以下的漏洞类型:

l  跨站点脚本

l  SQL注入

l  Ajax测试

l  文件包含

l  JS源码分析器

l  备份文件检查

与其他安全扫描器相比,它的速度并不快,但它的操作简单、便携。用于测试小型的网络应用比较合适,因为扫描大型应用需要太多时间。

这个工具不提供任何GUI界面,也不能创建任何PDF报告, 其设计很简单,是为个人使用而设计的。

这个工具是用Python开发的。源代码是可用的,可以根据自己的需要进行修改。

主脚本是grabber.py,执行后会调用其他模块,如sql.py、xss.py等。


2.10  Vega

https://subgraph.com/vega/

Vega是一个免费的开源Web漏洞扫描和测试平台。通过这个工具,你可以对一个Web应用程序进行安全测试。该工具是用Java编写的,提供了一个基于GUI的环境,可用于如下平台:OS X、Linux和Windows。

该工具可以用于查找SQL注入、头注入、目录列表、shell注入、跨站点脚本、文件包含和其他Web应用程序的漏洞。该工具还可以通过一个用JavaScript编写的强大API进行扩展。

在使用该工具工作时,你可以设置一些首选项,如路径子节点的总数量、节点的子路径数量、深度和每秒最大请求数。你可以使用Vega Scanner、Vega Proxy、Proxy Scanner以及带凭证的Scanner。


2.11  Zed Attack Proxy

https://github.com/zaproxy/zaproxy

Zed Attack Proxy简称为ZAP,是款开源工具,由AWASP开发。它适用于Windows、Unix/Linux和Macintosh平台,可以用来查找Web应用程序中的各种漏洞。这个工具非常简单,使用起来也很方便。即使你是渗透测试的新手,也可以轻松地使用这个工具进行Web应用的渗透测试。

以下是ZAP的主要功能:

l  拦截代理

l  自动扫描器

l  传统而强大的爬虫功能

l  Fuzzer

l  WebSocket支持

l  Plug-n-hack支持

l  认证支持

l  基于REST的API

l  动态SSL证书

l  支持智能卡和客户端数字证书

可以将此工具作为扫描器使用,通过输入URL进行扫描,也可以将此工具作为拦截代理,对特定页面进行手动测试。

2.12  Wapiti

http://wapiti.sourceforge.net/

Wapiti也是一款不错的Web漏洞扫描器,通过它你可以审计你的Web应用程序的安全性。

它通过扫描网页和注入数据来执行黑盒测试。

它可以尝试注入有效载荷,查看脚本是否存在漏洞。

它同时支持GET和POST HTTP攻击,并检测多种漏洞。


它可以检测以下漏洞种类:

l  文件泄露

l  文件包含

l  跨网站脚本(XSS)

l  命令执行检测

l  CRLF注入

l  SEL注入和X路径注入

l  弱的.htaccess配置

l  备份文件的泄露

l  等等

Wapiti是一个命令行应用程序。所以,对于初学者来说,它可能并不容易。但对于专家来说,比较受欢迎。要使用这个工具,你需要学习很多命令,可以在官方文档中找到这些命令。


2.13  W3af

http://w3af.org/

W3af是一个流行的Web应用攻击和审计框架。该框架旨在提供一个更好的Web应用渗透测试平台。

它是使用Python开发的。通过使用这个工具,你将\能够识别超过200种Web应用程序的漏洞,包括SQL注入、跨站点脚本等。

它自带图形化控制台界面, 简单易懂,轻松使用。


2.14  WebScarab

https://github.com/OWASP/OWASP-WebScarab

WebScarab是一个基于Java的安全框架,用于分析使用HTTP或HTTPS协议的Web应用程序。

通过可用的插件,你可以扩展其功能。

这个工具的工作原理是作为一个拦截代理使用。

因此,你可以查看到你的浏览器的请求和响应,并酌情进入服务器进行检查。

还可以在服务器或浏览器收到请求或响应之前修改请求或响应。

如果你是一个初学者,这个工具可能不适合你。因为这个工具是为那些对HTTP协议有很好的理解,并且会写代码的人设计的。

Webscarab提供了许多功能,可以帮助渗透测试人员在网络应用中紧密地工作,并发现安全漏洞。

它有一个爬虫功能,可以自动找到目标网站的新URL。

它可以轻松地提取脚本和页面的HTML。

Proxy可以观察服务器和浏览器之间的流量,你可以通过使用可用的插件控制请求和响应。

可用的模块可以轻松地检测到最常见的漏洞,如SQL注入、XSS、CRLF等漏洞。


2.15  Skipfish

http://code.google.com/p/skipfish/

Skipfish是一款不错的网络应用安全工具。

它可以抓取网站页面,然后检查每个页面是否存在各种安全威胁,并在最后编写出报告。

这个工具是用C语言编写的,针对HTTP处理和CPU使用进行了高度的优化。

它声称它可以轻松地处理每秒2000个请求,而不会增加CPU的负荷。

在爬行和测试网页时,它使用了启发式方法。

该工具还声称提供高质量的报告和较少的误报率。

该工具可用于Linux、FreeBSD、MacOS X和Windows平台。


2.16  Ratproxy

http://code.google.com/p/ratproxy/

Ratproxy也是一个开源的web应用安全审计工具,可以用来发现web应用中的安全漏洞。

它支持Linux、FreeBSD、MacOS X和Windows(Cygwin)环境。

这个工具的设计是为了克服用户在使用其他代理工具进行安全审计时通常面临的问题。

它能够区分CSS样式表和JavaScript代码。

它还支持SSL中攻击,这意味着你也可以看到通过SSL传递的数据。


2.17  SQLMap

https://github.com/sqlmapproject/sqlmap

SQLMap是一个流行的开源渗透测试工具。

它可以自动发现和利用网站数据库中的SQL注入漏洞。

它拥有强大的检测引擎和许多有用的功能。

渗透测试人员可以轻松地对网站进行SQL注入检查。


它支持多种数据库服务器,包括MySQL、Oracle、PostgreSQL、Microsoft SQL Server、Microsoft Access、IBM DB2、SQLite、Firebird、Sybase和SAP MaxDB。

它提供了6种SQL注入技术的全面支持:基于时间的盲注、基于布尔的盲注、基于错误的查询、UNION查询、堆叠查询和带外查询。


2.18  Wfuzz

http://code.google.com/p/wfuzz/

Wfuzz是一个免费的开源工具,用于Web应用渗透测试。

它可以用来粗暴强制进行GET和POST参数的变化,用于测试各种类型的注入,如SQL、XSS、LDAP等。

它还支持cookie 模糊化、多线程、SOCK、代理、验证、参数强制、多代理等功能。

这个工具不提供GUI界面,所以你必须在命令行界面上工作。


2.19  Grendel-Scan

http://sourceforge.net/projects/grendel/

Grendel-Scan是一个不错的开源Web应用安全工具。

它可以自动寻找Web应用中的安全漏洞。许多功能也可用于手动渗透测试。

它可用于Windows、Linux和Macintosh平台。

它是用Java开发的。


2.20  Watcher

http://websecuritytool.codeplex.com/

Watcher是一个被动时的网络安全扫描器。

它不会用大量的请求进行攻击,也不会抓取目标网站。

它不是一个独立的工具,而是Fiddler的一个附加组件。

所以你需要先安装Fiddler,然后安装Watcher才能使用。

它可以静静地分析用户交互的请求和响应,然后对应用进行报告。由于它是一个被动扫描器,所以不会影响到网站的主机或云端基础设施。


2.21  X5s

http://xss.codeplex.com/

X5s是一个Fiddler插件,其目的是提供一种寻找跨站脚本漏洞的方法。

它不是一个自动的工具,你需要了解编码问题是如何导致XSS的。你需要手动找到注入点,然后检查XSS可能在应用程序中的位置。


2.22  Arachni

http://www.arachni-scanner.com/

Arachni是一个开源工具,是为提供渗透测试环境而开发的。

这个工具可以检测各种Web应用程序的安全漏洞, 如SQL注入、XSS、本地文件包含、远程文件包含、未验证重定向等。


3  参考

https://resources.infosecinstitute.com/14-popular-web-application-vulnerability-scanners/#gref

https://owasp.org/www-community/Vulnerability_Scanning_Tools

https://sectooladdict.blogspot.com/

https://misterscanner.com/

http://rgaucher.info/beta/grabber/

https://geekflare.com/open-source-web-security-scanner/

https://www.esecurityplanet.com/open-source-security/slideshows/10-open-source-vulnerability-assessment-tools.html

https://www.dnsstuff.com/network-vulnerability-scanner

https://techbeacon.com/app-dev-testing/13-tools-checking-security-risk-open-source-dependencies

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。