12.3.让社区了解情况
12.3.1 VuXML 数据库
在发现安全漏洞之后, 尽可能早地采取的一个非常重要和紧迫的步骤, 是将这一危险性通知 port 用户群体。这种通知有两个目的。首先,如果危险真的很严重,明智的做法是采用即时的变通办法。例如,停止受影响的网络服务,甚至完全卸载该 port,直到漏洞被关闭。第二,很多用户往往只是偶尔升级已安装的软件包。他们会从通知中知道,一旦有了更正的版本,他们 必须 毫不拖延地更新软件包。
鉴于树上有大量的 port , 在涉及到真正严重的问题时, 不可能对每一个事件都发布安全通告, 而不至于造成泛滥, 失去受众的注意力。因此在 ports 中发现的安全漏洞会被记录在 FreeBSD VuXML 数据库 中。安全官团队的成员也会对其进行监控,以发现需要他们干预的问题。
提交者可以自己更新 VuXML 数据库, 以协助安全官团队并更快地将关键信息传递给社区。 那些不是提交者或发现了特别严重的漏洞的人, 应该毫不犹豫地直接联系安全官团队, 这在 FreeBSD 安全信息 页面上有介绍。
VuXML 数据库是一个 XML 文档。其源文件 vuln.xml 就保存在 port security/vuxml 中。因此这个文件的全称是 PORTSDIR/security/vuxml/vuln.xml。每当在一个 port 中发现安全漏洞时, 请在该文件中加入该漏洞的条目。在熟悉 VuXML 之前, 最好的办法是找到一个符合当前情况的现有条目, 然后复制它并将其作为一个模板。
12.3.2 VuXML简介
完整的 XML 格式很复杂,远远超出了本书的范围。 然而,为了获得对 VuXML 条目结构的基本了解,只需要了解标签的概念。 XML标签的名称被括在角括号中。 每个开头的 必须有一个匹配的结尾的 。标签可以被嵌套。 如果嵌套,内部的标签必须在外部的标签之前关闭。 标签有一个层次结构,也就是说,有更复杂的嵌套规则。 这与 HTML 类似。主要的区别是,XML 是 eXtensible 的,也就是说,是基于定义自定义标签的。 由于其固有的结构,XML 把本来无定形的数据变成了定形。 VuXML 特别适合于标记安全漏洞的描述。
现在考虑一个现实的 VuXML 条目。
标签的名称应该是不言自明的,所以我们将只仔细看一下需要填写的字段。
① 这是一个 VuXML 条目的顶级标签。它有一个强制性的属性,vid
,为这个条目指定一个通用的唯一标识符(UUID)(带引号)。为每个新的 VuXML 条目生成一个 UUID (不要忘记用它来代替模板 UUID,除非从头开始编写条目)。使用 uuidgen(1) 来生成一个 VuXML UUID。
② 这是对所发现问题的单行描述。
③ 受影响的软件包的名字会列在这里。可以给出多个名字, 因为多个软件包可能是基于一个主 port 或软件产品的。这可能包括稳定和开发分支、 本地化版本,以及具有不同的重要联编配置选项的从属 port 。
④ 受影响的软件包的版本, 可以用 <lt>
、 <le>
、 <eq>
、 <ge>
和 <gt>
元素的组合来指定一个或多个范围。检查给定的版本范围是否重叠。在一个范围说明中,*
(星号)表示最小的版本号。特别是,2.*
小于 2.a
。因此,一个星号可以用于一个范围,以匹配所有可能的 alpha
、beta
和 RC
版本。
例如,<ge>2.**</ge><lt>3.**</lt>
将选择性地匹配每个 2.x
版本,而 <ge>2.0</ge><lt>3.0</lt>
则不会,因为后者错过了 2.r3
而匹配 3.b
。 上面的例子指出,受影响的是 1.6
及以下版本,但不包括 1.9
,2.4_1
之前的 2.x
版本,以及 3.0b1
版本。
⑤ 在 <affected>
部分可以列出几个相关的包组 (基本上是 ports)。如果几个软件产品 (例如 FooBar、FreeBar 和 OpenBar) 从同一个代码库中生长出来, 并且仍然分享它的错误和漏洞, 就可以使用这个方法。请注意与在单个部分列出多个名字的区别。
⑥ 版本范围必须允许 PORTEPOCH
和 PORTREVISION
(如果适用)。请记住, 根据整理规则, 具有非零 PORTEPOCH
的版本大于任何没有 PORTEPOCH
的版本, 例如, 3.0,1
大于 3.1
, 甚至大于 8.9
。
⑦ 这是对这个问题的总结。在这个领域中使用 XHTML。至少要出现封闭的 <p>
和 </p>
。可以使用更复杂的标记,但仅仅是为了准确和清晰起见。请不要有眼花缭乱的感觉。
⑧ 本节包含对相关文件的参考。我们鼓励使用尽可能多的参考文献。
⑨ 这是一份 FreeBSD 安全公告。
⑩这是一份 FreeBSD 问题报告。
⑪ 这是一个 MITRE CVE 标识符。
⑫ 这是一个 SecurityFocus Bug ID。
⑬ 这是 US-CERT 的安全公告。
⑭ 这是 US-CERT 漏洞说明。
⑮ 这是 US-CERT 网络安全警报。
⑯ 这是一个 US-CERT 技术网络安全警报。
⑰ 这是一个指向邮件列表中的存档帖子的URL。属性 msgid
是可选的,可以指定发帖的消息 ID。
⑱ 这是一个通用的 URL。只有在其他参考类别都不适用的情况下才使用。
⑲ 这是问题被披露的日期(YYY-MM-DD)。
⑳ 这是该条目被添加的日期(YYYY-MM-DD)。
㉑ 这是条目中任何信息最后被修改的日期(YYY-MM-DD)。新条目必须不包括这个字段。在编辑现有条目时添加它。
12.3.3 测试对 VuXML 数据库的修改
这个例子描述了软件包 dropbear 中的一个漏洞的新条目,该漏洞已在 dropbear-2013.59
版本中被修复。
作为先决条件,安装一个新版本的 port security/vuxml。
首先,检查是否已经有这个漏洞的条目。如果有这样一个条目,它将与该软件包的前一个版本,即 2013.58
相匹配。
如果没有找到,为这个漏洞添加一个新条目。
验证其语法和格式。
前面的命令生成了 vuln-flat.xml 文件。它也可以用以下方法生成。
注意
至少需要安装这些软件包中的其中一个:textproc/libxml2,textproc/jade。
验证条目中的 <affected>
部分将与正确的软件包相匹配。
请确保该条目在输出中没有产生虚假的匹配。
现在检查这个条目是否匹配了正确的软件包版本:
前一个版本符合,而后一个版本不符合。
最后更新于