Pyrsia -保护您的OSS供应链

使用OSS,不知道所有软件的来源意味着很难发现服务完整性的风险。如果没有持续的身份检查和密钥和秘密的安全协议,开源依赖可能会为破坏、利用和供应链攻击打开大门。

进入Pyrsia——点亮开源供应链的火炬!

从我们的产品工程团队了解这个新的OSS工具如何使您能够:

确保包的出处(例如,签名提交,构建日志认证,不可否认的发布者)
创建不可变的历史记录(例如,每个包的原始状态的透明日志及其随时间变化的元数据)
安全有效地分发(例如,包及其来源的可验证完整性)
独立的构建网络,以验证来自开源存储库的构建

从皮草开始

视频记录

演讲者1:
大家好,我是Sudhindra Rao,感谢大家参加我们主办的网络研讨会,展示Pyrsia并帮助你们保护OSS供应链。因此,今天我们具体讨论的是软件供应链,主要集中在开源软件上。我们专注于开源软件的原因是,这正是我们发现缺乏良好自动化的地方,而Pyrsia试图解决这个问题。如果你想在Twitter上找到我,我是Sudhindra Rao,你可以在Jfrog上找到Pyrsia团队,我会把Pyrsia所在的网站放在上面,你可以看看。但让我们看看今天的情况。
所以让我告诉你,今天的供应链是多么黑暗。当我谈到供应链时,我们意识到这条供应链在COVID期间发生了什么,以及我们作为消费者受到了多么严重的伤害。但我说的不是这个,我说的是对我伤害更大、我更关心的东西,那就是软件供应链。当我谈到软件供应链时,这是我最近想到的事情,也是大多数人的共鸣。太阳风袭击发生在新冠肺炎之前,然后继续伤害世界各地的组织和系统。这是一个典型的开源软件攻击,其中一个特定的补丁没有及时应用,并被利用对系统造成无法弥补的损害。
另一个著名的事件是几年前发生在Equifax公司的事件,大约在2017年的时候,数百万人的数据库被泄露,我们仍然可以看到人们的信用历史等数据泄露的影响。这是因为托管他们数据的Apache Struts没有及时打补丁。要做到这一点并不容易,因为开源软件到处都是。从我们的研究中,我们发现人们已经注意到了这个问题,现在大约75%的软件都包含开源组件,这是一个巨大的数字。所以我们需要解决这个问题的方法。最近发生的Log4Shell事件一直在我们的脑海中。这也显示了解决这些问题是多么困难因为通常只有一两个人在维护和管理这些问题,而真正解决这些问题的责任就落在了他们身上,这是一个负担。我们需要更好的工具和系统来解决这些问题。
就在最近的5月10日,最安全的编程语言Rust或社区面临着类似的问题。所以这个问题不会消失。有人写了一些方法,告诉人们如何真正接管开源软件,并在人们需要方法时恶意行事。这就是这个问题的深度。我们把我们的面包和黄油放在上面,我们把我们的医疗系统放在同样的软件上,这依赖于同样的软件等等,我们没有一个好的方法来管理它。到目前为止,我给你们的例子都只是冰山一角。这些是被谈论最多的,得到最多的媒体报道,收到最多的反馈,得到最多的关注。有大量的库要么是依赖关系,要么是传递依赖关系,要么是其他开源库,人们只是忽略了它们,因为他们没有适当的工具来解决它们。这只是一个等待探索的定时炸弹。
为了让事情变得简单,我们就隐式地信任这些系统。我们信任NPM是因为它是由微软托管的,而PiBY是因为它是由Python社区托管的,等等。我们依靠他们的系统来验证无论他们发布了什么,二进制文件和包,都是值得信赖的。但这种信任也建立在非常少的信任控制的基础上,也就是多因素身份验证,这样我们就知道特定的提交者提交了二进制文件,但没有办法验证二进制文件是否来自提交者所声明的来源,等等。所以他们声称的和实际可能发生的是有差距的,那些绿色的地区是值得关注的地区,也是被开发的地区。
本质上,考虑到目前的情况,这就是我们所做的。我们挑选在街上找到的软件并将其插入到我们的生产系统中,管理我们的财务,管理我们的健康,管理我们的交通自动化,我们的卫星和我们所做的各种通信,管理气候变化。他们都依赖于这样的软件,我们不能保证,或者我们不能证明,甚至我们自己,它已经通过了一些健全的测试,我们知道它是值得信赖的。那么我们该怎么做呢?
鉴于最近的攻击,甚至白宫也开始行动,有一个执行者命令,说你需要勤奋行动,弄清楚你的软件材料包含什么,发布它,并确保它是最新的等等。他们已经发布了一些关于如何做到这一点的文档。在开源世界中有一些活动,实际上可以构建工具,使这变得非常容易,因为我们知道,如果我们使它成为一个手动过程,它需要几个小时,人们会失去兴趣,做得很差。如果他们有一个自动化工具,那么他们更有可能一遍又一遍地运行它,甚至生成帮助他们改善姿势的报告。
大公司内部也在研究如何解决这个问题。类似的研究之一是SLSA的工作,软件工件的软件供应链级别。它的目的实际上是为我们在构建软件方面所做的事情提供一面镜子。他们的作品之一就是这个非常简单的CD系统图。即使在这个简单的CD系统图中,他们也显示了在这个简单的图中大约有9个门可以被攻击。我们从实践中知道,典型的CD系统要复杂得多,复杂得多,有更多的步骤,因此有更多的门或攻击向量。SLSA体系结构表明,我们需要把控件放在所有这些地方,而不是仅仅依赖于二进制文件的来源。这通常发生在人们在GitHub中提交他们的代码或最终将他们的二进制文件提交到二进制包持有者中,如Ruby Gems、PiPY或NPM。
但在两者之间的任何地方,都有很多方式可以被攻击和滥用。在JFrog的Pyrsia,因为我们在谈论这个问题,我们意识到对于这些情况,从B到边缘,我们实际上构建二进制文件,我们知道二进制文件去了哪里,我们知道依赖关系从哪里来,我们知道包是如何构建的,我们管理所有这些,根据我们对工件的经验,我们认为这是我们进入的正确地方,提供我们所知道的技术,并具有与我们在开源世界的封闭或自制软件相同的效果,这样我们就可以利用我们通过技术呈现的相同的严谨性。这就是Jfrog在思考这个问题时发现自己的所在。当我们谈论Jfrog中的软件时,我们有这样的愿景,在未来,软件将是流动的。
如果你看看这个愿景,我们需要什么?我们需要一个像钢铁侠一样百分之百自动化的供应链。它像神奇女侠一样值得信赖。它是可靠的,对吧?它是可靠的。我们必须能够像黑豹一样一直依赖它,并确保我们可以在供应链上投入资金,这样我们最终交付的软件是有价值的,它实际上是可追踪的。我们可以用它生产一个SBOM。
让我们来介绍一下皮里斯亚,这里的皮里斯亚其实是多重的。这是一个基于共识的构建网络。在这里,你可以从Git漫画中构建二进制文件,你可以以独立的方式构建它,我们会稍微讲一下。Pyrsia也会有一个出处日志。在特定的开源软件来源的每一个时间点,它发生了什么,[听不清00:10:18]有什么不和谐,采取了什么行动,修复了什么,等等。你可以去一个中心的地方问这些问题并打印你的SBOM。Pyrsia也意味着来自地面,一种分散的奉献。它是一个去中心化的包注册表,它将帮助您并保护您免受AWS系统或NPM本身连续数小时停机所观察到的单点故障的影响,从而阻碍您的生产软件的持续交付。
对于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中心,或者其中一个连接到Docker中心并充当代理。然后在CI系统中,通过将Docker配置为Pyrsia,继续使用Docker池。当你拉出那个Pyrsia会作为一个缓存来拉出那个下次你使用它或者后续构建运行它时,你不需要去Docker中心。如果Docker中心关闭了,暂时没关系,您仍然可以继续运行CI/CD系统。
如果另一个系统需要运行相同的映像,并且在同一网络上,或者可以通过点对点连接到相同的Pyrsia节点,则不需要依赖Docker中心来完成所有这些操作。当你必须下载非常大的图像和网络流量是一个挑战时,这尤其有用。我们正在做的是这个演示实际上在YouTube上所以你可以下载看看,确保你喜欢它。你也可以通过我们网站上的步骤来运行这个演示,我鼓励你这样做,并就它的工作方式给我们反馈。在过去的两三个月里,我们对演示版本进行了修改,使其运行得越来越流畅。很多人都尝试过,所以这是一个非常基于反馈的机制,我意识到我写的文档是不断变化的。
因此,我们非常感谢您想要给出的任何反馈,并告诉我们我们是否构建了很好的演示,或者我们在文档中做得不好。我们希望这是一个社区的努力,而不是我们说这是你如何使用它。所以我们希望更多地由社区驱动。
讲讲我们正在建造的东西,它的核心是什么以及它的架构会是什么样子。就像我说的,它将基于一个出处日志,它可以问那些关于你的SBOM的困难问题。将会有一个命令行界面。我们还计划开发桌面客户端,但那是将来的事了。我们从Docker集成开始,它已经准备好了。我用同样的蓝色突出了柯南的集成,因为作为JFrog,我们了解柯南和C+源代码社区,我们认为我们可以构建它。
但所有伟大的东西,在我们心中都是伟大的。我们需要社区的支持。我们了解Java世界,但我们不是专家。所以我们需要像你这样的社区成员加入我们,告诉我们应该如何建设它。我们已经开始构建Maven和Gradle集成的基础,以便Java社区可以集成,但我们真的需要您的帮助。所以,如果你对这些语言中的任何一种充满热情,或者如果你没有看到一种你感兴趣的语言,请加入Pyrsia,用我几分钟后将展示的方式,告诉我们你想如何帮助我们。
在我们做的一些演讲中,人们问我们什么是安全模式,我们必须回答一些问题。有一些语言生态系统可以生成可复制的构建,在这种情况下,很容易在构建节点之间建立共识,并证明某个二进制文件是正确的。对于无法进行可复制构建的语言,我们依赖于Docker这样的可信注册表。以Docker为例,我们求助于Docker,说:“嘿,Docker,我们构建了这个映像,它和你的类似吗?”然后我们计划做一些比较,这样我们就知道它是相似的,可以提供相同的二进制作为结果。此外,我们依赖于经过验证的系统,例如GitHub,在那里他们有多因素身份验证,SSH密钥和DPG密钥,他们需要你登录,我们依靠这些来验证源本身。我们也计划添加,但没有什么会显著改变这方面的事情。但我们将在现有基础上增加更严格的安全要求。
首先,你可以安装Pyrsia,在我们的GitHub repo上有发布,你可以安装Pyrsia。您将得到一些可以在Pyrsia命令行界面中使用的基本命令。您需要稍微配置一下Docker桌面。演示文档中有说明,但您不需要更改CI/CD脚本。你可以继续做Docker pull,它会神奇地工作,你会得到Pyrsia所能提供的效率。
讲讲皮里斯亚的内部情况。我们选择Rust作为开发语言,因为从一开始,我们就希望支持多种操作系统。我们想要压缩低攻击向量表面二进制文件,Rust似乎是做这件事的正确语言。话虽如此,关于Rust,我们还有很多东西要学。
所以,如果你不关心我们正在构建的其他东西,但对Rust充满热情,请,我们也感谢在这个方向上的帮助。如果你两者都关心,那就更神奇了。我们正在雇人来帮助我们如何建造东西。所以,如果你有兴趣以不同的方式加入团队,请告诉我们。我们已经构建了与Docker的集成。我们正在用Java做类似的事情,这只是它的开端。它是基于一个已经存在并且已经成功的项目,IPFS,我们正在使用libp2p库。他们目前是开源的,我们正在使用它的Rust实现,我们发现我们实际上打破了它的界限,即使通过这种努力,我们也在为libp2p做出贡献。
对于不可变账本实现,我们使用AlephBFT作为共识机制,以证明我们向网络提交的任何东西都是值得信任的。接下来是什么?我们实际上正在努力使出处日志可用,以便您可以使用它来构建您的SBOM。你可以查询元素,你可以基于它做出安全决策,你实际上可以在Provenance日志之上编写自动化,这样你就可以根据它做出发布决策。这就是我们要讲的。
我们还致力于提供我们承诺的高吞吐量,这样我们就可以利用点对点网络将大型二进制文件快速传输给您。
然后我们做构建节点方面的工作我们要在Pyrsia上用不同的语言构建二进制文件。
就Pyrsia与社区的合作而言,我们已经在使用libp2p rust实现。我们正在与构建它的小组讨论,我们实际上已经将golang版本的一些更改移植回libp2p,因为它在rust实现中缺乏。我们也在使用AlephBFT rust实现,并与该社区合作,以了解它如何适应Pyrsia等。我们正在密切关注SigStore和Notary V2的未来整合,因为我们不想重新发明这方面的东西。SigStore和Notary在源端的签名是正确的,我们不想忽略这一部分。我们只是想利用这一点,把Pyrsia的严格性放在上面,这样你就可以使用SigStore和Pyrsia的自动化来建立你的供应链。
所以请大声喊出来。Pyrsia是开源的。我们实际上已经开了超过25场公开会议。它们都是在openSSF下发布的,在Linux基金会下。所以你可以在我们的Slack频道上找到所有这些信息。我们有很多捐助机构。实际上,捐助组织的名单已经增加。最近,华为、Futureway和Oracle都加入了我们,他们已经开始为我们如何构建不同语言的集成做出贡献。我们在GitHub上非常活跃。如果你想和我们聊天或发送公关,我们欢迎所有这些互动。 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.
参加团队会议,听过去的录音,了解我们是如何做事的。如果你也想开始编写代码,我们已经标记了一些不错的第一期。因此,我们欢迎大家以各种方式参与进来。
总之,供应链攻击依然存在。不管有没有新冠病毒,攻击者都没有停止他们正在做的事情,他们中的很多人,我想说他们中的大多数人,利用了开源环境中的漏洞,他们利用了这一点。记住这一点。即使是美国国家安全局的黑客也睡不着觉,因为供应链每天都在发生,我们现在就需要保护它,为此,我们需要你们每一个人。在JFrog,我们相信我们每个人都是一只超级青蛙,因此有了这张美丽的图片。所以我们希望你们所有的超级青蛙加入我们,帮助我们建立一个更美好的明天。
非常感谢。在我们的网站上找到我们,pyrisa。io,非常简单或在Twitter上找到我们PyrsiaOSS。非常感谢。我很感谢你抽出时间来听我讲Pyrsia和开源软件供应链的想法。谢谢。

要么快速释放,要么死亡