Xray 是一款 DevSecOps 工具,它与 Artifactory 协同工作,用于检查应用程序依赖项之间潜在的安全问题。它连接到私有和公共漏洞数据提供商,包括 NVDVulnDB 数据库。它支持 多种包类型和不同的技术(例如 Docker 镜像、npm 或 PyPI),并且自 3.21.2 版本 起,它也支持 Conan 包。

在这篇文章中,我们将解释如何使用 Artifactory 中的 Xray 来确保您的 C/C++ 构建安全。我们将使用 JFrog 免费层实例逐步完成设置过程,该实例附带云托管的 Artifactory 和 Xray 实例,可随时与 Conan 一起使用。如果您仍然不了解 JFrog 免费层,您可以 创建一个账户(完全免费)来按照本文中的步骤操作。Artifactory 实例有一些限制,例如每月 10GB 的传输限制和 2GB 的存储限制,但这对于个人使用或了解 JFrog 平台体验来说已经足够了。

设置 Artifactory:创建 Conan 仓库

登录免费层实例后,首先需要在 Artifactory 中创建一个新的 Conan 仓库。免费层中有一个“入门”按钮,可以引导您完成此过程。对于本文,我们创建了一个名为 test-repo 的本地仓库。配置好新的仓库后,我们将使用 conan remote addconan user 命令将其添加到 Conan 本地客户端(您将在免费层入门指南和 Artifactory 文档 中找到详细说明)。

设置 Xray:添加策略、规则和监控

要开始使用 Xray,首先需要定义一个**策略**。**策略**只是一组**规则**,每个**规则**定义一个安全/许可证条件(免费层不可用许可证选项),当满足这些条件时,将触发一组相应的操作。我们可以使用免费层中的“入门”按钮创建一个新的策略,或者直接转到“管理 > Xray > 监控和策略”,然后创建一个新的**策略**。

Creating a new Xray policy

我们将创建一个名为 mycompany-policy 的安全**策略**,并向其中添加一条规则。点击“新建规则”,并将 low-severity-warning 设为规则名称。此规则将最小严重性级别调整为低(严重性评分低于 4.0/10.0)。您可以根据预定义的范围(低、中、高或严重)设置严重性警告,或 设置自定义 CVSS 评分范围。当规则条件满足时,可以触发多个操作。我们将为此规则添加“通知电子邮件”操作,并检查上传包含已知安全问题的包时会发生什么。

Creating a new Xray rule

接下来是添加**监控**。**监控**将**资源**(例如仓库或构建)与**策略**连接起来。要创建监控,您可以使用“入门”按钮,或转到“管理 > Xray > 监控和策略”,然后选择“监控”选项卡。我们将创建一个名为 test-watch 的监控,它将 test-repo 添加为资源(您也可以使用模式来包含仓库或将所有仓库添加到监控中)。然后点击“管理策略”将 mycompany-policy **策略**连接到 test-repo **资源**。

Creating a new Xray watch

请查看 Xray 文档,了解有关 策略和规则 以及监控 的更多信息。

使用 Conan 客户端测试

现在我们已经添加了**策略**,并使用**监控**将 Conan 仓库连接到该**策略**,现在可以使用 Conan 客户端进行测试了。我们将一个受某些漏洞影响的 Conan 包上传到 test-repo 仓库,我们应该会收到一封电子邮件,警告我们该漏洞。例如,我们可以尝试使用 openssl/1.1.1h,它应该受 CVE-2020-1971 影响。

$ conan install openssl/1.1.1h@ -r conancenter
$ conan upload openssl/1.1.1h@ --all -c -r test-repo

此包上传后,您应该会收到一封关于策略违规的电子邮件警告。

Xray policy break warning email

点击链接将带您进入 Artifactory 实例。选择“Xray 数据”选项卡将显示有关包中存在的漏洞的所有详细信息。

Vulnerabilities report

关于上传包中漏洞的警告很有用,但您可能还想阻止任何人下载这些包。我们将修改之前添加的规则,并选中“阻止下载”选项。如果我们尝试安装任何受安全问题影响的二进制文件,Xray 应该会阻止下载。

$ conan remove openssl/1.1.1h@ -f # to force downloading from the server
$ conan install openssl/1.1.1h@ -r test-repo
Configuration:
[settings]
arch=x86_64
arch_build=x86_64
build_type=Release
compiler=apple-clang
compiler.libcxx=libc++
compiler.version=12.0
os=Macos
os_build=Macos
[options]
[build_requires]
[env]

openssl/1.1.1h: Retrieving from server 'test-repo' 
openssl/1.1.1h: Trying with 'test-repo'...
ERROR: Permission denied for user: 'test-user@jfrog.com'. [Remote: test-repo]

我们只展示了一个简单的示例,说明您可以如何使用 Conan、Artifactory 和 Xray 来提高 C/C++ 构建的安全性。您还可以尝试其他选项,例如使用 conan_build_info v2 扫描属于一个构建的所有包。此外,您还可以尝试在 规则 中设置 Webhook,以执行更复杂的操作,例如自动创建 JIRA 工单或向 Slack 频道发送警报。

结论

使用 Xray 和 Artifactory 增强 C/C++ 构建的安全性只需几分钟。您可以配置适合您公司安全策略的规则,并使用 Webhook 等功能触发复杂的操作。如果您想尝试运行一个具有 Xray 支持的云托管 Artifactory 实例,您可以 创建一个新的 Artifactory 免费层账户