Web应用程序防火墙(WAF)是现代Web安全中的一个关键层,提供网站针对漏洞的第一道防线。 WAF可用于防御和通知企图攻击,从而比组织修补易受攻击的软件更快地进行缓解。 此功能的实施方式必须对全局CDN的性能敏感,提供以毫秒为顺序的响应时间。 三年前,当我们将WAF引擎引入Verizon Digital Media Services (现为Edgio)堆栈时,我们选择了ModSecurity Rules Engine,我们发现该引擎在各个WAF用例中都是一流的。 此外,ModSecurity对OWASP核心规则集(CRS)的支持,强大的规则语言以及对HTTP流量流的API实时访问提供了极大的灵活性。
输入waflz
但是,随着使用WAF的客户数量的增加,我们遇到了性能和资源瓶颈。 ModSecurity在每个客户实例中传播的密集规则集提高了网络中的内存和CPU利用率,从而增加了运营成本。 测试和部署新规则也很困难,因为规则语言往往不易操作,难以编写和解析。 这些问题以及现有ModSecurity库的开发复杂性导致了waflz的开发,waflz是一个在Apache 2.0许可证下发布的开源WAF引擎。
对于Edgio来说,waflz是ModSecurity的显著改进,因为:
- 它消耗的内存更少。
- 提供更好的性能。
- 是API驱动的。
Waflz支持ModSecurity功能的一个子集,即OWASP核心规则集 2. x和 3. x和几个第三方规则集。
设计waflz
Waflz是一个全新的设计,旨在提供高性能和多租户技术。 在必要时,设计将性能与灵活性进行交换。 最终,waflz支持ModSecurity功能的受限子集。 例如,出于安全和性能原因,某些ModSecurity指令(如SecRemoteRules和spectFile)被认为不适合在边缘上运行。
可以使用ModSecurity格式或JSON格式的规则配置引擎。 整个WAF产品设计为”API”优先。 为此,waflz提供一流的JSON支持作为输入和输出。 Waflz在内部使用Google协议缓冲区来表示配置(包括规则)和警报格式。 选择协议缓冲区可实现与JSON输入和输出的互操作性,并为二者添加严格类型的架构。
CDN中的一些主要工程难题涉及到服务成千上万的客户所带来的高并发性和多租户:我们的全球边缘服务器必须能够尽快处理客户的请求。 此外,边缘服务器应用程序必须为任何客户配置提供实时修补和处理。
将许多WAF规则集加载到我们所有客户的边缘上正在运行的HTTP应用程序服务器进程的内存中,会带来可扩展性挑战。 WAF规则集仅在内存中创建一次,并在客户配置和规则自定义之间共享只读引用,从而克服了此问题。 此外,还确定了几种潜在的性能优化,从而缩短了请求处理时间,包括节省了一些关键内部数据结构的空间和时间。
Waflz还具有内置功能,使验证引擎行为和测试一次性ModSecurity规则更加容易,无需复杂的独立测试线束。
结论
Waflz是我们CDN技术堆栈的一部分,可以大规模运行,同时实现高效的粒度规则测试和自定义。 尽管CDN应用程序面临诸多挑战,ModSecurity和新的libmodsecurity是非常出色,灵活的库,非常适合许多用例。 事实上,在开发waflz的过程中,我们为ModSecurity的开发做出了贡献。 新的WAF引擎已在全球投产一年多,可同时支持和保护数千种不同的客户端配置,而不会影响性能。
访问GitHub查看waflz功能的更多示例。