论文标题
用GNU GUIX构建安全的软件供应链
Building a Secure Software Supply Chain with GNU Guix
论文作者
论文摘要
软件供应链正在成为一个广泛的类比,以指定从开发人员发布的源代码到对用户运行的可执行文件所采取的一系列步骤?计算机。任何这些步骤中的安全漏洞都使用户处于危险之中,证据表明对供应链的攻击变得越来越普遍。在一个依赖许多相互联系的软件系统的社会中,对软件供应链的攻击的后果可能是悲惨的,这引发了研究的兴趣以及政府激励供应链安全的兴趣。 GNU GUIX是一种软件部署工具和软件分发,可支持出处跟踪,可重现的构建和可重现的软件环境。与许多软件分布不同,它仅由源代码组成:它提供了一组包装定义,这些软件包定义描述了如何从源构建代码。这些属性共同将其与许多以二进制文件为中心的部署工具区分开来。 本文重点介绍了一个研究问题:GUIX和类似系统如何允许用户安全地更新其软件? GUIX源代码是使用GIT版本控制系统分发的;更新GUIX安装的软件包,首先是更新GUIX源代码的本地副本。对安全软件更新的先前工作着重于与GUIX(例如Debian,Fedora或PYPI)完全不同的系统,其中更新包括获取有关可用的最新二进制伪像的元数据 - 并且在GUIX的背景下在很大程度上不适用。相比之下,GUIX的主要威胁是对其源代码存储库的攻击,这可能会导致用户运行不正确的代码或降级其系统。从NIX到Portage,更类似于GUIX的部署工具缺乏安全的更新机制或缺陷。 我们的主要贡献是对新的GIT修订进行身份验证的模型和工具。我们进一步展示了如何建立GIT语义的基础,我们建立了防止降级攻击和相关威胁的保护措施。我们解释实施选择。这项工作已在两年前在生产中部署,使我们对每天的实际使用情况有所了解。 GIT结帐的核心身份验证范围是GUIX的特定用例,我们认为使用GIT的开发人员团队可能会受益。 随着对软件供应链的攻击,安全研究现在正在查看供应链的每个链接。安全更新是供应链的重要方面,但是本文也关注更广泛的环境:GUIX模型和实现供应链,从上游源代码到计算机上运行的二进制文件。尽管最近的许多工作重点是证明 - 认证供应链的每个链接 - Guix采用了更激进的方法:对每个步骤进行独立验证,在可再现的构建基础上构建,“ Bootstrable”构建和出处跟踪。大图显示了GUIX如何用作安全软件供应链的基础。
The software supply chain is becoming a widespread analogy to designate the series of steps taken to go from source code published by developers to executables running on the users? computers. A security vulnerability in any of these steps puts users at risk, and evidence shows that attacks on the supply chain are becoming more common. The consequences of an attack on the software supply chain can be tragic in a society that relies on many interconnected software systems, and this has led research interest as well as governmental incentives for supply chain security to rise. GNU Guix is a software deployment tool and software distribution that supports provenance tracking, reproducible builds, and reproducible software environments. Unlike many software distributions, it consists exclusively of source code: it provides a set of package definitions that describe how to build code from source. Together, these properties set it apart from many deployment tools that center on the distribution of binaries. This paper focuses on one research question: how can Guix and similar systems allow users to securely update their software? Guix source code is distributed using the Git version control system; updating Guix-installed software packages means, first, updating the local copy of the Guix source code. Prior work on secure software updates focuses on systems very different from Guix -- systems such as Debian, Fedora, or PyPI where updating consists in fetching metadata about the latest binary artifacts available -- and is largely inapplicable in the context of Guix. By contrast, the main threats for Guix are attacks on its source code repository, which could lead users to run inauthentic code or to downgrade their system. Deployment tools that more closely resemble Guix, from Nix to Portage, either lack secure update mechanisms or suffer from shortcomings. Our main contribution is a model and tool to authenticate new Git revisions. We further show how, building on Git semantics, we build protections against downgrade attacks and related threats. We explain implementation choices. This work has been deployed in production two years ago, giving us insight on its actual use at scale every day. The Git checkout authentication at its core is applicable beyond the specific use case of Guix, and we think it could benefit to developer teams that use Git. As attacks on the software supply chain appear, security research is now looking at every link of the supply chain. Secure updates are one important aspect of the supply chain, but this paper also looks at the broader context: how Guix models and implements the supply chain, from upstream source code to binaries running on computers. While much recent work focuses on attestation -- certifying each link of the supply chain -- Guix takes a more radical approach: enabling independent verification of each step, building on reproducible builds, "bootstrappable" builds, and provenance tracking. The big picture shows how Guix can be used as the foundation of secure software supply chains.