11个版本 (1个稳定版)

8.0.0-alpha.202406132024年6月14日
7.0.5 2024年6月14日
7.0.0-dev2021年5月28日
7.0.0-alpha.52023年1月31日
6.0.3-alpha.12021年9月23日

#453 in Rust 模式

每月26次下载

GPL-2.0-only

3MB
66K SLoC

Suricata

Fuzzing Status codecov

简介

Suricata 是由 OISF 和 Suricata 社区开发的网络 IDS、IPS 和 NSM 引擎。

资源

贡献

我们很高兴接受补丁和其他贡献。请参阅我们的 贡献流程 了解如何开始。

Suricata 是一款处理大多数不受信任输入的复杂软件。不当处理这些输入将产生严重后果

  • 在 IPS 模式下,崩溃可能导致网络离线
  • 在被动模式下,IDS 被入侵可能导致关键和机密数据丢失
  • 漏检可能导致网络被未检测到的入侵

换句话说,我们认为风险相当高,尤其是在许多常见情况下,IDS/IPS 将直接被攻击者访问。

因此,我们开发了一个相当广泛的 QA 流程。结果是,为 Suricata 贡献可能是一个相对漫长的过程。

从高层次来看,步骤如下

  1. 基于 GitHub-CI 的检查。在创建 pull request 时自动运行。
  2. 团队和社区开发者的审查
  3. 来自私有 QA 设置的 QA 运行。这些测试是私有的,因为测试流量的性质。

Suricata 的 QA 步骤概述

OISF 团队成员可以将构建提交到我们的私有 QA 设置。它将运行一系列构建测试和回归测试,以确认没有现有功能损坏。

最终的 QA 运行至少需要几个小时,通常在夜间进行。目前运行

  • 在多个操作系统、编译器、优化级别、配置功能上的广泛的构建测试
  • 使用 cppcheck、scan-build 的静态代码分析
  • 使用 valgrind、AddressSanitizer、LeakSanitizer 的运行时代码分析
  • 针对过去错误的回归测试
  • 日志输出的验证
  • Unix 套接字测试
  • 基于 ASAN 和 LSAN 的基于 pcap 的模糊测试
  • 基于流量回放的 IDS 和 IPS 测试

在这些测试旁边,根据代码更改的类型,可以手动运行进一步测试

  • 流量回放测试(多吉比特)
  • 大型pcap收集处理(多太字节)
  • 模糊测试(可能需要多天甚至几周)
  • 基于pcap的性能测试
  • 实时性能测试
  • 根据对提议的更改的评估,进行各种其他手动测试

重要的是要认识到,上述几乎所有测试都用作验收测试。如果出现问题,则由您负责在代码中解决这个问题。

QA的一个步骤目前在合并后运行。我们将构建提交到Coverity Scan程序。由于该(免费)服务的限制,我们每天最多只能提交一次。当然,合并后社区可能会发现问题。对于这两种情况,我们请求您帮助他们解决问题。

常见问题解答(FAQ)

问题:你会接受我的PR吗?

答案:这取决于许多事情,包括代码质量。对于新功能,它还取决于团队和/或社区是否认为该功能有用,它对其他代码和功能的影响,性能回退的风险等。

问题:我的PR何时会被合并?

答案:这取决于情况,如果它是一个主要功能或被认为是一个高风险更改,它可能将被纳入下一个主要版本。

问题:为什么我的PR被关闭了?

答案:如Suricata GitHub工作流程中所述,我们期望每个更改都有一个新的pull request。

通常,团队(或社区)会在拉取请求后给出反馈,然后预计会被改进的PR所取代。所以看看评论。如果您不同意评论,我们仍然可以在关闭的PR中讨论它们。

如果PR没有评论就被关闭,很可能是由于QA失败。如果GitHub-CI检查失败,应立即修复PR。不需要对此进行讨论,除非您认为QA失败是不正确的。

问题:编译器/代码分析器/工具出错怎么办?

答案:为了帮助自动化QA,我们不接受保留警告或错误。在某些情况下,这可能意味着如果工具支持,我们将添加抑制(例如valgrind,DrMemory)。某些警告可以禁用。在某些特殊情况下,唯一的“解决方案”是重构代码以绕过静态代码检查器限制的误报。虽然令人沮丧,但我们更愿意这样做而不是在输出中保留警告。警告往往会被人忽视,然后增加隐藏其他警告的风险。

问题:我认为你的QA测试是错误的

答案:如果您真的这么认为,我们可以讨论如何改进它。但不要太快得出这个结论,更常见的情况是代码是错误的。

问题:你们需要签署贡献者许可协议吗?

答案:是的,我们这样做是为了保持Suricata的所有权:Open Information Security Foundation。请参阅http://suricata.io/about/open-source/http://suricata.io/about/contribution-agreement/

依赖项

~19MB
~521K SLoC