Gryffin 是一个大规模 Web 安全扫描平台。它并非又一款扫描器,而是为了解决现有扫描器存在的两个特定问题而编写:覆盖率 和 可扩展性。
更好的覆盖率意味着更少的漏报。固有的可扩展性意味着能够扫描并支持大型弹性应用基础设施。简单来说,就是通过简单的水平扩展,能够从今天扫描 1000 个应用扩展到明天扫描 100,000 个应用。
覆盖率有两个维度——爬取阶段和模糊测试阶段。在爬取阶段,覆盖率意味着能够尽可能多地发现应用的足迹。在扫描阶段(或模糊测试时),覆盖率意味着能够深入测试应用的每个部分,针对一组应用的漏洞进行测试。
如今,大量 Web 应用都是模板驱动的,这意味着相同的代码或路径会生成数百万个 URL。对于安全扫描器而言,它只需要同一代码或路径生成的数百万个 URL 中的一个。Gryffin 的爬虫正是为此而生。
Gryffin 的核心是一个去重引擎,它将新页面与已见过的页面进行比较。如果新页面的 HTML 结构与已见过的页面相似,则将其分类为重复页面,不再进一步爬取。
如今大量的应用都是富应用,严重依赖客户端 JavaScript。为了发现此类应用中的链接和代码路径,Gryffin 的爬虫使用 PhantomJS 进行 DOM 渲染和导航。
由于 Gryffin 是一个扫描平台而非扫描器,它本身不包含模糊测试模块,即使是对 XSS 和 SQL 注入等常见 Web 漏洞进行模糊测试也一样。
在不必要的情况下,重新发明轮子是不明智的。Gryffin 在雅虎的生产规模中使用开源和自定义模糊测试器。其中一些自定义模糊测试器未来可能会开源,也可能不会成为 Gryffin 仓库的一部分。
出于演示目的,Gryffin 集成了 sqlmap 和 arachni。它并不特别推荐这些或任何其他扫描器。
其理念是,通过仅针对所需的内容进行模糊测试来提高扫描覆盖率。
虽然 Gryffin 可作为独立包使用,但它主要是为大规模构建的。
Gryffin 基于发布-订阅模型构建。每个组件要么是发布者,要么是订阅者,要么两者兼具。这使得 Gryffin 能够通过简单地增加更多订阅者或发布者节点来实现水平扩展。
go1.13 或更高版本--max-msg-size=5000000 参数go get -u github.com/yahoo/gryffin/...
(待完成)
代码采用 BSD 风格许可证授权。详情见 LICENSE 文件。