Pyrsia -保护您的OSS供应链
使用OSS,不知道所有软件的来源意味着很难发现服务完整性的风险。如果没有持续的身份检查和密钥和秘密的安全协议,开源依赖关系可能会为破坏、利用和供应链攻击打开大门。
进入Pyrsia -你的火炬照亮了开源供应链!
向我们的产品工程团队学习这个新的OSS工具如何使您能够:
确保包的来源(例如签名提交、构建日志认证、发布者的不可抵赖性)
创建不可变的历史记录(例如,每个包在原始状态下的透明度日志,以及随时间变化的元数据)
安全有效地分发(例如,包及其源的可验证完整性)
独立的构建网络来验证来自开放源代码存储库的构建
视频记录
演讲者1:
大家好,我的名字是Sudhindra Rao,感谢您参加我们举办的网络研讨会,展示Pyrsia并帮助您确保OSS供应链的安全。因此,今天我们具体讨论的是你们的软件供应链,主要集中在开源软件上。我们专注于开源软件的原因是,我们发现好的自动化是缺乏的,而Pyrsia试图解决这个问题。如果你想找到我,我是Sudhindra Rao,在Twitter上,你也可以在Jfrog上找到Pyrsia团队,我会把Pyrsia托管的网站放在上面,这样你就可以看看了。但让我们看看今天的情况。
所以让我告诉你,今天的供应链是多么的黑暗。当我谈到供应链时,我们意识到这条供应链在COVID期间发生了什么,以及我们作为消费者的严重程度和伤害。但我说的不是这个,我说的是对我伤害更大的东西我更关心的是软件供应链。当我谈到软件供应链时,这是我最近想到的,也是大多数人的共鸣。太阳风攻击发生在COVID之前,然后继续伤害世界各地的组织和系统。这是一个典型的开源软件攻击,没有及时应用一个特定的补丁,并被利用来对系统造成不可挽回的损害。
另一个著名的是几年前发生在Equifax的事件,大约在2017年的时间框架内,数百万人的数据库被泄露,我们仍然可以看到人们信用记录等数据泄露的影响。这是因为托管他们数据的Apache Struts没有及时修补。要做到这一点并不容易,因为开源软件无处不在。从我们的研究中,我们发现人们已经关注了这个问题,今天构建的软件中大约有75%包含开源组件,这是一个巨大的数字。所以我们需要解决这个问题。最近发生的Log4Shell事件一直萦绕在我们的脑海中。这也显示了解决这些问题是多么的困难因为通常只有一到两个人维护和管理这些问题实际上是由他们来解决的,这是一种负担。我们需要更好的工具和系统来做到这一点,提供修复。
就在最近的5月10日,最安全的编程语言Rust或社区也面临着类似的问题。所以这个问题不会消失。还有人在写菜谱,告诉人们如何接管开源软件,并在人们需要菜谱时恶意行事。这就是问题的深度。我们把我们的面包和黄油放在上面,我们把我们的医疗系统放在同一个软件上,它依赖于同一个软件等等,我们没有一个好的方法来管理它。到目前为止我给你们的例子都只是冰山一角。这些是最受关注的,获得了最多的媒体报道,得到了最多的反馈,获得了最多的关注。有大量的库要么是依赖的,要么是不依赖传递的,要么是人们忽视的其他开源库,因为他们没有合适的工具来解决这些问题。这只是一个等待探索的定时炸弹。
为了方便起见,我们只是暗中信任这些系统。我们信任NPM,因为它是由微软托管的;信任PiBY,因为它是由Python社区托管的,等等。我们依靠他们的系统来验证他们发布的任何东西,二进制文件和包,他们是值得信赖的。但是这种信任,这种信任也是基于非常少的信任控制,也就是多因素认证,这样我们就知道特定的提交者提交了二进制文件,但是没有办法验证二进制文件是否真的来自提交者声称的源,等等。因此,在他们声称的和实际可能发生的事情之间存在着差距,那些绿色的领域是值得关注的领域,也是被开发的领域。
所以从本质上说,考虑到事态的发展,这就是我们正在做的。我们选择在街上找到的软件并将其插入到我们的生产系统中,这些系统管理我们的财务,管理我们的健康,管理我们在交通和卫星方面的自动化以及我们所做的各种通信,管理气候变化。所有这些都依赖于这样的软件,我们不能保证,或者我们甚至不能向自己证明,它已经通过了一些健全的测试,我们知道它是值得信赖的。那么我们该怎么做呢?
所以考虑到最近的攻击,甚至白宫也开始采取行动,有一个执行命令,说你需要努力行动,弄清楚你的软件材料包含什么,发布它,并确保它是最新的等等。他们已经发布了一些关于如何做到这一点的文档。在开源世界中,有一些活动实际上是建立工具,使这变得非常容易,因为正如我们所知,如果我们让它成为一个手动过程,它需要花费几个小时,人们会失去兴趣,做得很差。如果他们有一个自动化的工具,那么他们更有可能一遍又一遍地运行它,甚至生成报告来帮助他们改善姿势。
大型组织内部也在进行解决这个问题的研究。类似的研究之一是SLSA工作,即软件工件的软件供应链级别。它的目的实际上是在构建软件方面对我们所做的做一面镜子。他们的作品之一是这个非常简单的CD系统图。即使在这个简单的CD系统图中,他们也表明,即使在这个简单的图中,也有大约9个门可以被攻击。我们从实践中知道,典型的CD系统要复杂得多,涉及得多,有更多的步骤,因此有更多的门或攻击向量。SLSA体系结构表明,我们需要在所有这些地方放置控制,而不仅仅依赖于二进制文件的来源。这通常发生在人们在GitHub中提交代码或最终将二进制文件提交到二进制包持有人(如Ruby Gems或PiPY或NPM)时。
但在两者之间的任何地方,它都有很多被攻击和滥用的方式。Pyrsia在JFrog,既然我们在讨论这个问题,我们意识到对于这些情况,从B到edge,我们实际上是在构建二进制文件,我们知道二进制文件去了哪里,我们知道依赖从哪里来,我们知道包是如何构建的,我们根据我们的工件经验来管理所有这些,我们认为这是我们进入并提供我们所知道的技术的正确地方,并具有与我们在封闭或本地软件中对开源世界相同的效果,因此我们可以利用我们通过技术呈现的相同数量的严谨性。这就是Jfrog在思考这个问题时所遇到的情况。当我们在Jfrog内部谈论软件时,我们有这样的愿景,即在未来,软件将是流动的。
如果你看到这个愿景,我们需要什么?我们需要一个像钢铁侠一样100%自动化的供应链。它像神奇女侠一样值得信赖。它是可靠的,对吧?它是可靠的。我们必须能够像黑豹一样在任何时候都依赖它,并确保我们可以在供应链上投入资金,这样我们最终交付的软件是值得的,它实际上是可追溯的。我们可以用它制作一个物料清单。
让我们来介绍一下Pyrsia, Pyrsia实际上是多种东西。这是一个基于共识的构建网络。这是你可以从Git漫画中构建二进制文件的地方,你可以以独立的方式构建它,我们会讨论一下它。Pyrsia也将有一个来源日志。在特定的开源软件产生的每一个时间点,它发生了什么,什么是不和谐,采取了什么行动,什么是修复,等等。所以会有一个中心的地方,你可以去问这些问题,并打印你的SBOM。此外,Pyrsia意味着从地面开始,一个分散的产品。它是一个分散的包注册表,它将帮助您并保护您免受单点故障的影响,这些故障是由AWS系统或NPM本身一起停机数小时造成的,从而阻碍了生产软件的持续交付。
对于Pyrsia,我们想要创造一些东西,这就是我们创造Pyrsia的原则。我们想要的东西从一开始就是安全的,不能妥协。我们想要一些可靠的东西,因此我们想要去中心化的本质,我们想要在开放的基础上构建它,因为它是为开源软件构建的,它意味着被每个使用开源软件的人使用,它意味着巩固这个正在受到伤害的社区。所以我们想把它建立在开放的环境中,我们认为这将带来信任,这是带来信任的最好方式。当它处于开放状态时,人们可以评论、批评并构建一个更好的软件工具,比如Pyrsia。
如果你想知道Pyrsia这个名字是从哪里来的?Pyrsia实际上是古希腊人使用的一种分布式通信机制,用于在即将到来的危险或即将到来的圆顶的山顶进行通信。我们认为这是一个很好的比喻,适用于同样的问题,我们正面临着即将到来的供应链厄运。由于我们正在建立一个分布式机制,我们认为Pyrsia是个好名字。如果你想了解更多,这里有一些链接来了解他们是如何做到的。对我们来说很有趣的历史课。
那么我们来谈谈皮西亚以及皮西亚和古代的皮西亚有什么相似之处。所以Pyrsia是基于点对点技术的。点对点,因为我们从集中式互联网中知道,当我们试图跨网络、跨地区、跨地域进行持续交付时,有许多单点故障会伤害我们。所以从一开始,它就是基于点对点的。将会有受信任的包注册库,它们会钩住我们已经信任的节点,比如Docker hub和NPM等等。但是这个网络本身会对它们的故障有弹性,因为现在这个网络正在下载和缓存所有的信息,所有的二进制文件,给你所需的弹性。你可以用类似的方式来思考分布式的Git,对吧?Git用于代码,Pyrsia用于二进制文件。Pyrsia还将包含一个基于共识的构建网络,开源通勤者可以来提交提交哈希。
前提是开源必须是开源的,这意味着它必须在GitHub存储库上,Pyrsia可以访问它。Pyrsia将做的是提取提交者给我们的提交哈希值,并在网络上随机选择节点来独立构建相同的软件。Pyrsia将提供基础设施,使它们成为独立的构建,并最终验证它们是否产生相同的结果。一旦他们进行了验证,结果将被提交给网络,然后所有消费者都可以使用。这样我们就知道它不是由这个开发者在这台机器上开发的它可能有自己的情况可能有自己的恶意软件,对吧?我们正在独立建造它。这就是Pyrsia所做的。
今天缺少的另一件事是,没有一个地方可以让你们去问这些问题。比如这个二进制从何而来?到底是谁造的?我们可以从各种来源收集信息,但这又增加了人工因素。一旦您添加了手动因素,获取该信息的兴奋感就会减少。Pyrsia的目标是在一个地方提供所有这些。它会告诉你源代码来自哪里,它会告诉你二进制文件来自哪里,它会告诉你它是如何构建的,它会连接到漏洞扫描机制,它会告诉你是否有针对你试图拉取的软件或你试图拉取的版本的漏洞。它还会告诉你该漏洞是否在未来的版本中得到修复,这样你就不必下载和订购了。
这就是我们所说的出处日志。这个来源日志是这个系统的关键,所以它需要是不可变的,它需要易于分发,这就是我们试图利用加密货币技术变得非常流行的地方。但我们将使用基础技术,也就是区块链,不可变的分类账,这样这些信息是完整的,不能被修改和篡改,这些信息将是一个标志,表明有恶意活动针对Pyrsia网络本身,Pyrsia网络然后放弃新的更新,等等,做出决定。这就是信任将继续增长的方式,因为不可变分类帐将防止任何针对网络本身的攻击。从一开始,pyrsia就需要非常容易安装。因此,正如您将看到的,我们可以使用Pyrsia命令行(我们已经开始构建它)来获取图像并对其进行操作。
但我们也要确保您不必更改现有的工具。所以如果你今天在做Docker pool,我们不希望你改变它,因为这是最难的部分。有更多正在运行的CI/CD系统,它们比开发人员的机器更难更改。所以我们不太担心在单个开发机器上发生的事情。但是,如果您的CI/CD系统使用的是一个特定的Docker镜像,它是开源的,并且您必须将其从Docker更改为Pyrsia命令行,那么这是不允许的。所以当你在CI系统中使用它时,Pyrsia会确保它对你是透明的。在此之上,Pyrsia命令行将为您提供更多信息,将为您提供出处日志,我们将为您提供构建其他自动化所需的智能。
这对你们来说很容易用。所以我们已经开始构建最小可行产品,并开始构建第一次和第二次集成。我们从Docker开始。我们有一个演示,是这样的。我们可以启动两个Pyrsia节点,它们连接到Docker hub,或者其中一个连接到Docker hub并充当代理。然后在CI系统中,通过将Docker配置为Pyrsia,继续使用Docker池。当你把它拉出来时,Pyrsia会作为一个缓存来拉出来,下次你使用它或随后的构建运行它时,你不必去Docker hub。如果Docker hub关闭了,暂时没有问题,您仍然可以继续运行CI/CD系统。
如果另一个系统需要运行相同的镜像,并且在相同的网络上,或者可以通过点对点方式连接到相同的Pyrsia节点,那么您不需要依赖Docker hub来获取所有这些。当你需要下载非常大的图像和网络流量是一个挑战时,这尤其有用。我们正在做的是这个演示实际上在YouTube上你们可以下载看一下确保你们对它很熟悉。你也可以运行我们网站上的步骤来运行这个演示,我鼓励你这样做,并给我们反馈它是如何工作的。在过去的两三个月里,我们对演示版进行了修改,使其运行更加流畅。很多人都尝试过,所以这是一个非常基于反馈的机制,我也意识到我写的文档会不时地发生变化。
因此,我们感谢任何反馈,你想给我们,如果我们建立了良好的演示或如果我们做了一个坏的工作在文档。我们希望这是一个社区的努力,而不是我们说这是你如何使用它。所以我们希望它能越来越多地被社区所驱动。
关于我们正在建造的东西,它的核心是什么以及它的架构将会是什么样子。就像我说的,它将基于一个出处日志,它可以问那些关于你的SBOM的难题。将会有一个命令行界面。我们也在计划一个桌面客户端,但那是将来的事。我们从一个准备好的Docker集成开始。我用同样的蓝色强调了Conan集成,因为作为JFrog,我们了解Conan和C+源代码社区,我们认为我们可以构建它。
但对于一切伟大的东西,它在我们心中是真正伟大的。我们需要社区的支持。我们了解Java世界,但我们不是专家。所以我们需要像你这样的社区成员加入我们,告诉我们应该如何建立它。我们已经开始构建Maven和Gradle集成的基础,以便Java社区可以集成,但我们真的需要您的帮助。所以,如果你对这些语言中的任何一种充满热情,或者如果你没有看到你感兴趣的语言,请加入Pyrsia,我将在几分钟内展示的方式,告诉我们你想如何帮助我们。
在我们做的一些谈话中,人们问我们什么是安全模型,有一些问题我们必须回答。有一些语言生态系统可以产生可复制的构建,在这种情况下,在构建节点之间建立共识并证明某个二进制文件是正确的非常容易。对于无法进行可复制构建的语言,我们依赖于像Docker这样的可信注册表。在Docker的例子中,我们会问Docker,“嘿,Docker,我们建立了这个镜像,它和你的相似吗?”然后我们计划做一些比较,这样我们就知道它是相似的,并且可以提供相同的二进制结果。此外,我们依赖于像GitHub这样经过验证的系统,例如,他们有多因素身份验证,SSH密钥和DPG密钥,他们要求您登录,我们依赖于此,以便源本身得到验证。我们也计划添加这一点,但这方面的事情不会有太大的改变。但是我们将在现有的基础上增加更严格的安全要求。
所以要开始,你可以安装Pyrsia,发布在我们的GitHub回购,你可以安装Pyrsia。您将获得一些可以与Pyrsia命令行界面一起使用的基本命令。你需要稍微配置一下你的Docker桌面。演示文档中有说明,但您不需要更改CI/CD脚本。你可以继续做Docker pull,它会神奇地工作,你会得到Pyrsia所能提供的效率。
简单介绍一下波斯境内的情况。我们之所以选择Rust作为开发语言,是因为从一开始,我们就希望支持多种操作系统。我们希望压缩低攻击向量表面二进制文件,Rust似乎是实现这一目标的合适语言。话虽如此,我们仍在学习Rust的很多东西。
所以,如果你不关心我们正在构建的其他东西,但对Rust充满热情,请,我们也感谢在这个方向上的帮助。如果你两者都关心,那就更神奇了。我们正在雇人来帮助我们构建东西。所以如果你有兴趣以不同的方式加入我们的团队,请告诉我们。我们已经构建了与Docker的集成。我们正在用Java做类似的事情,这只是开始。它是基于一个已经存在并且已经成功的项目,IPFS,我们正在使用libp2p库。它们目前是开源的,我们正在使用Rust实现它,我们发现我们实际上打破了它的界限,即使通过这种努力,我们也在为libp2p做出贡献。
对于不可变账本的实现,我们使用AlephBFT作为共识机制,这样我们就可以证明我们向网络承诺的任何内容都是值得信赖的。接下来会发生什么?实际上,我们正在努力使出处日志可用,以便您可以使用它来构建您的SBOM。你可以查询元素,你可以在此基础上做出安全决策,你还可以在出处日志之上编写自动化,这样你就可以在此基础上做出发布决策。这就是我们要做的。
我们也在努力提供我们承诺的高吞吐量,这样我们就可以利用点对点网络快速地向您传输大型二进制文件。
然后我们在做构建节点方面的事情,我们将在Pyrsia上构建不同语言的二进制文件。
就Pyrsia与社区的合作而言,我们已经在使用libp2p rust实现。我们正在与构建它的团队进行沟通,我们实际上已经将一些更改从golang版本移植回libp2p,只是因为它缺乏rust实现。我们也在使用AlephBFT rust实现,并与该社区合作,了解它如何适合Pyrsia等。我们正在密切关注SigStore和公证V2的未来集成,因为我们不想重新发明这方面的东西。SigStore和公证人正在做的事情是正确的,在事物的源端签名的东西,我们不想忽视这部分。我们只是想利用这一点,把Pyrsia的严密性放在上面,这样你就可以使用SigStore和Pyrsia的自动化来建立你的供应链。
所以请大声喊出来。Pyrsia是开源的。我们已经开了超过25次公开会议。它们都是在openSSF, Linux基金会下发布的。你可以在我们的Slack频道上找到所有这些信息。我们有很多捐助组织。实际上,贡献组织的名单已经增加了。最近,华为、Futureway和Oracle也加入了我们的行列,他们已经开始为我们构建不同语言的集成做出贡献。我们在GitHub上非常活跃。如果你想和我们聊天或发送PR,我们欢迎所有这些互动。 So to get involved, just go to our website. At the bottom of the website you’ll find a bunch of links to YouTube and Twitter and Slack and Google groups so that you can join us in the right way. Download and install, give us feedback using our Twitter handle or any other means.
参加团队会议,听过去的录音,了解我们是如何做事的。如果你想开始编码,我们已经标记了一些好的第一个问题。因此,我们欢迎你们以任何方式参与进来。
总而言之,供应链攻击仍然存在。不管有没有COVID,攻击者都没有停止他们正在做的事情,他们中的很多人,我想说他们中的大多数人,都利用了开源领域的漏洞,并利用了这一点。记住这一点。甚至连国安局的黑客都睡不够,因为供应链每天都在发生,我们现在就需要确保它的安全,为此,我们需要你们每一个人。在JFrog,我们相信我们每个人都是一只超级青蛙,因此这张漂亮的图片。所以我们希望你们所有的超级青蛙都能加入我们,帮助我们建立一个更美好的明天。
非常感谢。在我们的网站上找到我们,pyrisa。很容易,或者在推特上找到我们pyrsiass。非常感谢。我很感谢您抽出时间来听我的演讲,并围绕Pyrsia和开源软件供应链的想法来逗我们开心。谢谢。
