Kea

遵循以下最佳实践的项目将能够自愿的自我认证,并显示他们已经实现了核心基础设施计划(OpenSSF)徽章。

如果这是您的项目,请在您的项目页面上显示您的徽章状态!徽章状态如下所示: 项目98的徽章级别为passing 这里是如何嵌入它:

这些是白银级别条款。您还可以查看通过黄金级别条款。

        

 基本 15/17

  • 识别

    KEA is an open source DHCPv4/DHCPv6 server being developed and maintained by ​Internet Systems Consortium. The objective of this project is to provide a very high-performance, extensible DHCP server engine for use by enterprises and service providers, either as is or with extensions and modifications.

  • 先决条件


    项目必须拥有通过徽章。 [achieve_passing]

  • 基本项目网站内容


    关于如何贡献的信息必须包括对可接受的贡献的要求(例如,引用任何所需的编码标准)。 (需要网址) [contribution_requirements]

    Contributor guidelines are here: https://gitlab.isc.org/isc-projects/kea/-/blob/master/CONTRIBUTING.md. Coding standards are covered there, including this excerpt: "Placed in the root of the repository are files that formally describe the coding guidelines above as close as possible. They are .clang-format and .uncrustify.cfg used by clang-format and uncrustify respectively. If you want to format code automatically, you will need to have at least one of these tools installed. Since by default, these tools look for the closest style file located in one of the parent directories or, otherwise, in a default location, there are a a couple of helpful scripts i.e. ./tools/clang-format.sh and ./tools/uncrustify.sh to assure you that the Kea-owned file is used. They accept any number of customized parameters that would be passed to the underlying tool followed by any number of files and/or directories. Passing directories will have all non-generated C++ files under it formatted."


  • 项目监督


    该项目应该有一个合法机制,所有对项目软件做出显著贡献的开发人员都声明他们有合法授权作出这些贡献。最常用且易于实施的方法是使用开发者原产地证书(DCO),用户可以在其提交中添加“signed-off-by”,另外,项目链接到DCO网站。本条款也可以使用贡献者许可协议(CLA)或其他法律机制实现。 (需要网址) [dco]

    DCO is included in the Contributing.md document in the top of the tree: https://gitlab.isc.org/isc-projects/kea/-/blob/master/CONTRIBUTING.md?ref_type=heads.



    该项目必须明确定义和记录其项目治理模式(决策方式,包括关键角色)。 (需要网址) [governance]


    该项目必须采取行为守则,并将其发布在标准的位置。 (需要网址) [code_of_conduct]

    We do have Code of Conduct. It's a slightly modified Django CoC: https://gitlab.isc.org/isc-projects/kea/-/blob/master/code_of_conduct.md



    该项目必须明确定义和公开记录项目中的关键角色及其职责,包括这些角色必须执行的任务。必须清楚指出谁是什么角色,尽管这可能没有以相同的方式记录下来。 (需要网址) [roles_responsibilities]


    如果任何一个开发者丧失工作能力或丧生,该项目必须能够继续保持最小的中断。特别是,在确认个人无行为能力或死亡的一周内,项目必须能够创建和关闭问题,接受提议的更改和发布软件版本。这可以通过确保其他人有任何必要的密钥,密码和合法权利来继续该项目。运行FLOSS项目的个人可以通过在锁箱中提供密钥,并提供任何所需的合法权利(例如DNS名称)来实现。 (需要网址) [access_continuity]

    There are several users who have admin rights for the gitlab Kea repository. They live in different regions (US, Czechia, Poland, UK). See Senior management tab on https://www.isc.org/team/



    项目必须具有2个或更多的“公交车因子”。 (需要网址) [bus_factor]

    Our bus factor is somewhere around 5. Here's a section about it: https://kea.readthedocs.io/en/kea-1.9.7/arm/security.html#bus-factor


  • 文档


    该项目必须有一个文档化的路线图,描述项目打算做什么,至少在下一年做什么。 (需要网址) [documentation_roadmap]

    Kea operates on milestones. For the next couple (2-4) months, we have very detailed milestones with specific tasks for each monthly release. We have milestones for major releases (e.g. 2.x). List of milestones: https://gitlab.isc.org/isc-projects/kea/-/milestones



    该项目必须包括项目生成的软件的架构(也称为高级别设计)的文档。如果项目不产生软件,请选择“不适用”(N/A)。 (需要网址) [documentation_architecture]

    We do have Kea Developer's guide that discusses each Kea component, its architecture, major design choices and much more. Although this is generated with oxygen, we have a lot of text there explaining the big picture. https://jenkins.isc.org/job/Kea_doc/doxygen/



    该项目必须书面记录用户从项目生成的软件的安全性上可以获得和不能指望的内容(其“安全需求”)。 (需要网址) [documentation_security]

    该项目必须为新用户提供“快速启动”指南,以帮助他们快速使用该软件。 (需要网址) [documentation_quick_start]

    We do have Quick Start section in the Kea ARM: https://kea.readthedocs.io/en/kea-1.8.2/arm/quickstart.html



    项目必须努力使文档与当前版本的项目结果(包括项目生成的软件)保持一致。任何已知的文档缺陷使其不一致必须修正。如果文档基本是最新的,但是错误地包括一些不再是真实的旧信息,那么将其视为缺陷,然后像往常一样进行跟踪和修复。 [documentation_current]

    We maintain multiple doc versions, one per release. See https://kea.readthedocs.io/en/kea-1.8.2/index.html (click on version in the lower left corner to switch between doc versions). We have mark tickets that address doc problems or require doc problems with a dedicated label. As of time of writing, there were 201 closed doc tickets, with 68 still open. Up to date list: https://gitlab.isc.org/isc-projects/kea/-/boards/18?scope=all&utf8=%E2%9C%93&state=opened&label_name[]=doc



    项目存储代码库首页和/或网站必须在获得成就的48小时内标识并超链接任何成就,包括此最佳实践徽章。 (需要网址) [documentation_achievements]

    We show several badges, including CII: https://gitlab.isc.org/isc-projects/kea


  • 无障碍和国际化


    该项目(项目网站和项目成果)都应遵循无障碍最佳做法,使残疾人仍然可以参与项目,并在合理的情况下使用项目成果。 [accessibility_best_practices]

    Kea is a command-line tool, so in principle is accessibility friendly. Our website and documentation use basic technologies that should be screen reader friendly. We use industry standards (github, gitlab, mailman mailing list) for providing a variety of access methods.



    该项目产生的软件应该被国际化,以便为目标受众的文化,地区或语言进行简单的本地化。如果国际化(i18n)不适用(例如,该软件不会生成针对最终用户的文本,并且不排序可读文本),请选择“不适用”(N/A)。 [internationalization]

    Kea software uses .mes files that list all possible messages Kea can print. Those files can be translated, including the descriptive paragraphs for each message. However, due to massive complexity of the software, so far we are not aware of any translation attempts. Details here: https://kea.readthedocs.io/en/kea-1.8.2/kea-messages.html


  • 其他


    如果项目站点(网站,存储库和下载URL)存储用于外部用户认证的密码,则必须使用密钥拉伸(迭代)算法将密码存储为具有每用户盐值的迭代散列(例如,PBKDF2,Bcrypt或Scrypt)。如果项目站点不存储密码,请选择“不适用”(N/A)。 [sites_password_security]

    We use github and gitlab.


  • 错误报告流程


    项目必须使用问题跟踪器来跟踪每个问题。 [report_tracker]
  • 漏洞报告流程


    除了要求匿名的报告者外,该项目必须对过去12个月内解决的所有漏洞报告的报告者表示感谢。如果过去12个月没有修复漏洞,请选择“不适用”(N/A)。 (需要网址) [vulnerability_report_credit]

    Kea enjoys very thorough, massive testing process (6000 unit-tests, 1500 system tests) and multiple automated tools (coverity scan, cppcheck, valgrind, thread sanitizer, shellcheck, danger, etc), fuzzing (afl) and stability tests (perfdhcp). We haven't had a security incident in well over a year.



    该项目必须有一个书面的流程来响应漏洞报告。 (需要网址) [vulnerability_response_process]

    We do have it: https://kb.isc.org/docs/aa-00861 and https://www.isc.org/reportbug/. Also, our gitlab has a note how to report vulnerability reports, see the bug template: https://gitlab.isc.org/isc-projects/kea/-/blob/master/.gitlab/issue_templates/bug_report.md We do have similar note for github.


  • 编码标准


    该项目必须确定其使用的主要语言的具体编码风格指南,并要求贡献一般情况下符合此要求。 (需要网址) [coding_standards]

    Sure we do. I can't imagine having a large project without coding guidelines: https://gitlab.isc.org/isc-projects/kea/-/wikis/Processes/coding-guidelines



    如果至少有一个FLOSS工具可以应用于所选择的语言,项目必须自动执行其选定的编码风格。 [coding_standards_enforced]

    We don't enforce it yet, because of large amounts of legacy code and lots of merge requests being constantly in progress.


  • 可工作的构建系统


    本地二进制文件的构建系统必须遵守传递给它们的相关编译器和链接器(环境)变量(例如CC,CFLAGS,CXX,CXXFLAGS和LDFLAGS),并将它们传递给编译器和链接器。构建系统可以使用附加标志来扩展它们,但不能简单地用自己的替换提供的值。如果没有生成本地二进制文件,请选择“不适用”(N/A)。 [build_standard_variables]

    We're using autotools (autoconf, automake and friends) and do our best to play by the rules. Details here: https://kea.readthedocs.io/en/kea-1.8.2/arm/install.html#configure-before-the-build



    构建和安装系统在在相关标志中要求时,应该保留调试信息(例如,“install -s”未被使用)。如果没有构建或安装系统(例如典型的JavaScript库),请选择“不适用”(N/A)。 [build_preserve_debug]

    We try to provide flexible environment. The user can specify whatever debugging options for g++ he/she wishes. We also have --enable-debug that conveniently enables -O0 -g and couple other things. It's by no means mandatory and user can specify or tweak flags as desired.



    如果子目录中存在交叉依赖关系,则由项目生成的软件的构建系统必须不能递归地构建子目录。如果没有构建或安装系统(例如典型的JavaScript库),请选择“不适用”(N/A)。 [build_non_recursive]


    该项目必须能够重复从源代码文件生成的过程,并获得完全相同的比特位结果。如果没有发生构建(例如,直接使用源代码而不是编译使用的脚本语言),请选择“不适用”(N/A)。 [build_repeatable]

    running make distcheck is part of our build process and it's verified after each commit that's merged on master.


  • 安装系统


    该项目必须提供一种使用常用惯例轻松安装和卸载由项目生成的软件的方法。 [installation_common]

    User who like to compile can do the usual make install, make uninstall. We also provide native (DEB, RPM, APK) packages for many distros that make the installation and removal easy. The nature of this project (DHCP server) implies that some manual configuration is necessary.



    最终用户的安装系统必须遵守用于在安装时选择构建工件写入位置的标准约定。例如,如果在POSIX系统上安装文件,它必须遵守DESTDIR环境变量。如果没有安装系统或没有标准惯例,请选择“不适用”(N/A)。 [installation_standard_variables]

    Yes, we're using normal autoconf/automake regime. --prefix and more detailed switches (--bindir, --sbindir, --libexecdir, --runstatedir and more) are available.



    该项目必须为潜在开发人员提供一种快速安装所有项目成果和支持环境所必需的环境,包括测试套件和测试环境。必须通过常规惯例执行。 [installation_development_quick]

    We do have a Developer's guide that explains how to set up the test environment to run unit-tests. Also have a dedicated tool named hammer that can automate installing Kea on bare metal or spin up VMs with requested mandatory and optional dependencies. For details, see https://gitlab.isc.org/isc-projects/kea/-/blob/master/hammer.py.


  • 外部维护的组件


    项目必须以计算机可处理的方式列出外部依赖关系。 (需要网址) [external_dependencies]

    Kea can be compiled using GNU autotools (with using automated configure script) or installed using native (DEB, RPM or APK) packages. The autotools automatically detect presence or absence of external dependencies. The packages have listed external dependencies, so they're installed automatically. Details in the package scripts: https://gitlab.isc.org/isc-projects/kea-packaging



    项目必须监视或定期检查其外部依赖(包括便利副本)以检测已知的漏洞,并修复可利用的漏洞或将其验证为不可利用的漏洞。 [dependency_monitoring]


    该项目必须满足下述情况之一:
    1. 可以轻松识别和更新重用的外部维护组件;
    2. 使用系统或编程语言提供的标准组件。
    这样,如果在重用的组件中发现了一个漏洞,将容易更新该组件。 [updateable_reused_components]

    Kea has a -W option that lists external dependencies used during compilation, including their versions. The configure script (typical GNU autotools) provide an option to use alternative components (such as patched dependency in non-standard location). The dependencies are well documented in the Kea ARM document (see https://kea.readthedocs.io/en/kea-1.8.2/arm/intro.html#required-software-at-run-time).



    该项目应避免使用已弃用或过时的功能和API,如果FLOSS替代品在其使用的技术集合(“技术堆栈”)中以及项目支持的大多数用户中可用(以便用户可以随时访问该替代品)。 [interfaces_current]

    We try to not use deprecated or obsolete functions and APIs. When possible, we print out a warning that a dependency (e.g. openssl) is too old and we disable TLS support in Kea. For some cases, e.g. CentOS 7, which still is popular, we attempt to provide alternatives, e.g. you need to install newer openssl. all the technology stack is open source (mostly gcc, but also flex, bison, and other smaller open source tools).


  • 自动测试套件


    必须将自动测试套件应用于至少一个分支的共享代码库的每次签入。该测试套件必须生成关于测试成功或失败的报告。 [automated_integration_testing]

    We do have a massive (6000+ unit-tests, 1500 system tests) test farm. It is run after each check-in.



    该项目必须为过去六个月内修复的至少50%的错误,在自动化测试套件中添加回归测试。 [regression_tests_added50]

    We try to live by the TDD (test driven development) philosophy. Except some rare corner cases, each fix or new functionality has new unit tests. For non-trivial features or bugfixes system tests are frequently developed by an independent QA. Often the system tests are ready before the functionality is ready.



    如果有至少一个FLOSS工具可以以所选语言度量此条款,该项目的FLOSS自动测试套件必须具有至少80%语句覆盖率。 [test_statement_coverage80]

    We have developed a generic DHCP/DNS testing suite called ISC Forge. It's published under ISC license. See https://github.com/isc-projects/forge


  • 新功能测试


    该项目必须具有正式的书面策略,一旦添加了主要的新功能,新功能的测试必须被添加到自动测试套件中。 [test_policy_mandated]

    该项目必须在其关于变更建议的书面指导中包括要为主要新功能添加测试的策略。 [tests_documented_added]
  • 警告标志


    在实际允许时,项目必须最大限度地严格修复项目生成的软件中的警告。 [warnings_strict]

    By default, our configure script enables the following extra switches in g++: -Wall -Wextra -Wnon-virtual-dtor -Wwrite-strings -Woverloaded-virtual -Wno-sign-compare -pthread -Wno-missing-field-initializers -fPIC. Note the -Wall and -Wextra. Many of our builds are run with -Werror. We do experiments with -Wpedantic sometimes, but we're not fully committed to that idea yet.


  • 安全开发知识


    该项目必须实施安全设计原则(来自“know_secure_design”)(如适用)。如果项目不生产软件,请选择“不适用”(N/A)。 [implement_secure_design]

  • 使用基础的良好加密实践

    请注意,某些软件不需要使用加密机制。

    由项目产生的软件中的默认安全机制不得取决于具有已知严重弱点(例如,SHA-1密码散列算法或SSH中的CBC模式)的加密算法或模式。 [crypto_weaknesses]

    We use security for TSIG, but there is no default algorithm, it must be positively specified.



    该项目应该支持多种加密算法,如果一个被破解,用户可以快速切换。普通的对称密钥算法包括AES,Twofish和Serpent。通用密码散列算法的选择包括SHA-2(包括SHA-224,SHA-256,SHA-384和SHA-512)和SHA-3。 [crypto_algorithm_agility]

    We support HMAC-MD5 (for backward compatibility), HMAC-SHA1, HMAC-SHA224, HMAC-SHA256, HMAC-SHA384 and HMAC-SHA512 in our TSIG implementation.



    该项目必须支持在与其他信息(如配置文件,数据库和日志)分离的文件中存储身份验证凭据(如密码和动态令牌)以及私有加密密钥,并允许用户更新和替换它们,而无需重新编译代码。如果项目从不处理身份验证凭据和私有加密密钥,请选择“不适用”(N/A)。 [crypto_credential_agility]


    该项目产生的软件应该支持所有网络通信的安全协议,如SSHv2或更高版本,TLS1.2或更高版本(HTTPS),IPsec,SFTP和SNMPv3。默认情况下,FTP,HTTP,Telnet,SSLv3或更早版本和SSHv1等不安全协议将被禁用,只有在用户专门配置时才启用。如果项目生成的软件不支持网络通信,请选择“不适用”(N/A)。 [crypto_used_network]

    As of April 2021, we have implemented TLS support in Kea.



    项目生成的软件(如果支持或使用TLS)应该至少支持TLS版本1.2。请注意,TLS的前身称为SSL。如果软件不使用TLS,请选择“不适用”(N/A)。 [crypto_tls12]

    由项目生成的软件必须,如果它支持TLS,则在使用TLS(包括子资源)时默认执行TLS证书验证。如果软件不使用TLS,请选择“不适用”(N / A)。 [crypto_certificate_verification]


    项目生成的软件(如果支持TLS)必须在发送具有私有信息(如安全Cookie)的HTTP头之前执行证书验证。如果软件不使用TLS,请选择“不适用”(N/A)。 [crypto_verification_private]

  • 安全发布


    该项目必须加密签名旨在广泛使用的项目结果的发布,并且必须有一个书面流程,向用户解释如何获取公共签名密钥并验证签名。这些签名的私钥不得在项目网站上直接向公众发布。如果发行版本不适用于广泛使用,请选择“不适用”(N/A)。 [signed_releases]

    All releases are signed and each release notes document has a note about how to check them. See example here: https://gitlab.isc.org/isc-projects/kea/-/wikis/release%20notes/release-notes-1.9.5#download and a general instructions how to check the signatures: https://www.isc.org/pgpkey/



    建议在版本控制系统中,每个重要版本标签(作为主要版本的一部分的标签,次要版本或修复公开提到的漏洞)都按照signed_releases中的要求进行加密签名,并可验证。 [version_tags_signed]

    We use the standard capabilities of GITLAB. See details here: https://gitlab.isc.org/isc-projects/kea/-/releases


  • 其他安全问题


    项目结果必须检查来自潜在不受信任来源的所有输入,以确保它们有效( *白名单*),如果对数据有限制,则拒绝无效输入。 [input_validation]

    DHCP often being the first packets exchanged with an unknown new device entering the network, we pay strict attention to data sanitization, including truncated, malformed, oversized fields, options and packets etc. The requests received over Kea management API undergo sanity checks before they're processed. We have substantial amount of system and unit tests that check for broken input. We also do fuzz testing for incoming packets and configuration files.



    加固机制应该用于项目生产的软件,以便软件缺陷不太可能导致安全漏洞。 [hardening]


    该项目必须提供一个保证案例,证明其满足安全要求。保证案例必须包括:对威胁模型的描述,明确确定信任边界,确定设计原则得到适用,以及常见安全弱点已经被消减。 (需要网址) [assurance_case]

  • 静态代码分析


    如果至少有一个FLOSS工具能够以所选择的语言实现此条款,则该项目必须至少使用一个具有规则或方式的静态分析工具来查找分析语言或环境中的常见漏洞。 [static_analysis_common_vulnerabilities]

    Coverity Scan, cppcheck, danger, clang static analyzer, shellcheck


  • 动态代码分析


    如果由项目生成的软件包含使用内存不安全语言编写的软件(例如,C或C ++),项目必须至少使用一个动态工具(例如,fuzzer或web应用扫描程序)与一种检测缓冲区覆写等内存安全问题的机制组合例行使用。如果项目不生成以内存不安全语言编写的软件,请选择“不适用”(N/A)。 [dynamic_analysis_unsafe]

    We run valgrind tests under Jenkins, use cppcheck, and thread sanitizer from clang.



This data is available under the Community Data License Agreement – Permissive, Version 2.0 (CDLA-Permissive-2.0). This means that a Data Recipient may share the Data, with or without modifications, so long as the Data Recipient makes available the text of this agreement with the shared Data. Please credit Vicky Risk and the OpenSSF Best Practices badge contributors.

项目徽章条目拥有者: Vicky Risk.
最后更新于 2016-05-03 15:46:35 UTC, 最后更新于 2025-02-06 12:43:24 UTC。 最后在 2021-03-22 15:34:49 UTC 获得通过徽章。

后退