假冒包下载大约5000次从官方的Python库包含秘密被感染的机器上安装cryptomining软件的代码,安全研究人员发现。
恶意包,PyPI上可用存储库,在许多情况下使用名字经常模仿合法和广泛使用的包可用,Ax沙玛,安全公司Sonatype研究员报道。所谓受害攻击成功时目标不小心误输入一个名称,如输入“mplatlib”或“maratlib”而不是合法的和受欢迎的包matplotlib。
Sharma说,他发现六包安装cryptomining软件,会使用被感染的计算机的资源开采cryptocurrency和存款在攻击者的钱包。所有六个被某人使用PyPI用户名发表nedog123早在4月,在某些情况下。包,下载数字是:
- maratlib: 2371
- maratlib1: 379
- matplatlib-plus: 913
- mllearnlib: 305
- mplatlib: 318
- learninglib: 626
中包含的恶意代码的设置。py文件每个包的。它会导致被感染的电脑使用ubqminer或霸王龙cryptominer矿山数字硬币和存款在以下地址:0 x510aec7f266557b7de753231820571b13eb31b57。
PyPI一直一个经常虐待 存储库自2016年大学生骗17000程序员粗略的脚本运行他。不是PyPI滥用任何超过其他存储库是最后一年,包下载了成千上万次RubyGems安装恶意软件,它试图拦截比特币支付。两年之前,有人后门NPM主办的200万用户代码库。Sonatype已经跟踪超过12000恶意NPM包自2019年以来。
人们很容易认为,相当多的下载数在这些事件是自动完成,从不导致电脑被感染,但上面的大学生的实验与认为否则。他假冒Python模块执行了超过45000次超过17000个独立的领域,一些属于我们政府和军事组织。这种滥交从来不是一个好主意,但它应该是严格禁止的。
76年读者评论
我说,那只是垃圾。
短版:我们不会解决这个问题,不是因为我们不知道(审核第三方代码将在您的项目之前,主机而不是你自己的版本,升级时重复),而是因为这样做太大的难度和费用对于大多数组织。
老实说,有多少dev商店,人才,和资源审计他们的第三方代码供应链,尤其是一旦你玩chase-the-dependnecy一路下来吗?我敢打赌,答案是足够接近零,承认没有区别。
第二最好的——从有信誉的销售渠道获取代码,检查你的签名,控制你的版本,只有升级当有理由这样做可以实现的,但除非某人,某个地方,是执行“审计代码”的步骤,你被困在这样的事情发生了。
完全正确。我参与了公司的销售的代码到财富500强公司。iirc,大公司雇佣了一家保安公司来审计我们每使用图书馆。所以我列出了每一个图书馆,递归地,在我们的代码库。原来我们有大约100库直接相关,但递归数超过了10000。作为一个创业公司没有办法我们会看,或支付人,看这一切。你需要丰富的公司(买方信贷做作为最佳实践)。
但是每个人都说“检查每一个图书馆”实际上从未试图这样做,或者他们在投资公司工作。并不是每个人都编码在这种情况下。
试过的人(由于需要建立在一个系统没有互联网)即使你没有审计只是跟踪的所有依赖项将auto-fetched包管理器是疯狂的。即使没有“审计”我花了几个星期的时间寻找所需的所有东西手工构建/成功地运行一个程序。
现在想象一下审计所有无稽之谈与数百万行代码…
短版:我们不会解决这个问题,不是因为我们不知道(审核第三方代码将在您的项目之前,主机而不是你自己的版本,升级时重复),而是因为这样做太大的难度和费用对于大多数组织。
老实说,有多少dev商店,人才,和资源审计他们的第三方代码供应链,尤其是一旦你玩chase-the-dependnecy一路下来吗?我敢打赌,答案是足够接近零,承认没有区别。
第二最好的——从有信誉的销售渠道获取代码,检查你的签名,控制你的版本,只有升级当有理由这样做可以实现的,但除非某人,某个地方,是执行“审计代码”的步骤,你被困在这样的事情发生了。
我希望有更多的标准库。c++、Java和有良好的和丰富的。它违反了javascript精神但是它会帮助(我认为)。
就其价值而言,NodeJS虽然不是完美的,本质上是“标准库”相当于JavaScript。
包管理器的概念了,管理就走了。
存储库可以由任何人,不做额外的QA检查包,允许他们在潜在的疯狂的方式安装。
存储库概念需要一个开发商和发行商的分离。开发人员不喜欢这样,因为我们产生错误代码。因此devops诞生了。
码头工人的顶峰,“我的机器上可以正常工作!让船机”
pypi至少应该有两个单独的存储库:一个限于建立包,和一个开放的,用户安装包在自己的风险。默认模式应该访问代码建立了回购,与安装需要一个特定的标志,允许从打开的包库的依赖关系。它不解决问题,但是至少让问题更容易为以盈利组织和为行业创造激励捐赠基金来帮助确保pypi。
这一点。
它还让我想起了很多powershell实用程序,微软已经“协议得以接受从而抛弃”,但没有替代品,他们从字面上链接到github上随机人的存储库,这是粗略的。
如果一个大公司像微软做类似的事情,没有希望的较小的,我发现疯狂的行动。
短版:我们不会解决这个问题,不是因为我们不知道(审核第三方代码将在您的项目之前,主机而不是你自己的版本,升级时重复),而是因为这样做太大的难度和费用对于大多数组织。
老实说,有多少dev商店,人才,和资源审计他们的第三方代码供应链,尤其是一旦你玩chase-the-dependnecy一路下来吗?我敢打赌,答案是足够接近零,承认没有区别。
第二最好的——从有信誉的销售渠道获取代码,检查你的签名,控制你的版本,只有升级当有理由这样做可以实现的,但除非某人,某个地方,是执行“审计代码”的步骤,你被困在这样的事情发生了。
完全正确。我参与了公司的销售的代码到财富500强公司。iirc,大公司雇佣了一家保安公司来审计我们每使用图书馆。所以我列出了每一个图书馆,递归地,在我们的代码库。原来我们有大约100库直接相关,但递归数超过了10000。作为一个创业公司没有办法我们会看,或支付人,看这一切。你需要丰富的公司(买方信贷做作为最佳实践)。
但是每个人都说“检查每一个图书馆”实际上从未试图这样做,或者他们在投资公司工作。并不是每个人都编码在这种情况下。
你看看这些100年图书馆实际需要多少和更少的依赖——或者如果有替代品吗?如果顶级应用程序一直使用这样的要求,而不仅仅是放弃,然后低水平较少或没有运行时库依赖关系最终会蓬勃发展。这是一个鸡生蛋和蛋生鸡的问题。
这一点,更多的任何其他安全改进节点。js,可能最终把Deno,及其图书馆,向上。的服务器端。
短版:我们不会解决这个问题,不是因为我们不知道(审核第三方代码将在您的项目之前,主机而不是你自己的版本,升级时重复),而是因为这样做太大的难度和费用对于大多数组织。
老实说,有多少dev商店,人才,和资源审计他们的第三方代码供应链,尤其是一旦你玩chase-the-dependnecy一路下来吗?我敢打赌,答案是足够接近零,承认没有区别。
第二最好的——从有信誉的销售渠道获取代码,检查你的签名,控制你的版本,只有升级当有理由这样做可以实现的,但除非某人,某个地方,是执行“审计代码”的步骤,你被困在这样的事情发生了。
完全正确。我参与了公司的销售的代码到财富500强公司。iirc,大公司雇佣了一家保安公司来审计我们每使用图书馆。所以我列出了每一个图书馆,递归地,在我们的代码库。原来我们有大约100库直接相关,但递归数超过了10000。作为一个创业公司没有办法我们会看,或支付人,看这一切。你需要丰富的公司(买方信贷做作为最佳实践)。
但是每个人都说“检查每一个图书馆”实际上从未试图这样做,或者他们在投资公司工作。并不是每个人都编码在这种情况下。
你看看这些100年图书馆实际需要多少和更少的依赖——或者如果有替代品吗?如果顶级应用程序一直使用这样的要求,而不仅仅是放弃,然后低水平较少或没有运行时库依赖关系最终会蓬勃发展。这是一个鸡生蛋和蛋生鸡的问题。
我们精选死库在做这项工作之前,是的。我不明白你说的“选择用更少的依赖。”Are you suggesting that we should have recoded to rely on different libraries that provide similar functionality? If so, why would a startup do that? We'd do a bunch of work and then end up with exactly the same functionality as before (a very anti-startup thing to do).
我也不明白你的意思关于“顶级应用程序…放弃。”I think you're suggesting that we should have more libraries without dependencies or with fewer dependencies? If so, again, I think this misses the point: libraries are valuable because they do a lot for you, so you don't have to write that code. Same is true for the libraries themselves: if they can leverage underlying functionality, they can provide more value. When people say "software is eating the world" this is what they mean: When I was working in web dev in the mid-90s, it would take a team of 20 engineers to build the functionality that I can build with a single part-time developer today. I'm not going back to the old way, and I don't think many other engineering professionals are either.
所以我们要找出如何使这个“依赖/安全地狱”复杂的开源库工作,因为它创造了世界的价值太大了。我见过很多伟大的建议在这个论坛已经今天。一些例子
1。不可信的填词的沙箱代码减少访问
2。分区代码库中心可信和不可信的,防止信任库链接到不可信的填词。有一个过程,促进可信不可信的开发者和填词。
似乎是个不错的主意!
官方的存储库的维护者可能不允许来自不受信任的程序员。不可信的程序员可能导致另一个高风险的存储库。
程序员如何成为值得信赖的,我把读者作为练习,原则上这看起来简单,但如果违反开源精神。
在我看来像Python是一种足够高风险,广泛使用的语言,毫无理由,任何旧雅虎应该能够受害后包。
在这一点上你讲的标准库。Python。然而有许多许多标准库不做的事和不应该做。图书馆需要第二手来源PyPi发挥作用的地方。
存储库像PyPi低门槛的好处,但一定程度的人群来源审查最喜欢开源。如果项目有很多社区吸收足够的人们使用和检查它广泛使用的项目被下毒的可能性下降,如果一个新项目出现开发者可以检查源在大多数情况下才使用它。这些存储库是高风险的。但是有足够的好项目在他们大量使用。
一个可以与现实世界联系信息审查存储库为开发者和安全审计并使其可为费用免费(因为这样做是不可能的)。这样的存储库将几乎没有吸收由于费用和可能遇到的实现问题,与一些常见的开放源码许可问题。
还在踢的过程中最后一个Oracle安装。
短版:我们不会解决这个问题,不是因为我们不知道(审核第三方代码将在您的项目之前,主机而不是你自己的版本,升级时重复),而是因为这样做太大的难度和费用对于大多数组织。
老实说,有多少dev商店,人才,和资源审计他们的第三方代码供应链,尤其是一旦你玩chase-the-dependnecy一路下来吗?我敢打赌,答案是足够接近零,承认没有区别。
第二最好的——从有信誉的销售渠道获取代码,检查你的签名,控制你的版本,只有升级当有理由这样做可以实现的,但除非某人,某个地方,是执行“审计代码”的步骤,你被困在这样的事情发生了。
并选择包没有,或者很少的选择(例如,lodash) -依赖关系。当然现在几乎没有这样的包。但是会有更多如果标准选择包是使用(而不是放弃)。鸡肉和鸡蛋。
除非绝对必要——不使用库
——只使用顶级流行的库
——冻结deps和照看他们的github问题页面
——有其他软件观察你的不正常使用
猴子打补丁,async-unfriendly库做随机阻塞屎和缺乏长期支持不够的原因。东西这看似重要,比如异步dns库,最终在刺激,因为它不支持,打破由业余爱好者。我曾经使用地理定位库,没有提及它,会定期阻塞http调用将打破异步代码。
我不喜欢golang的原因之一是语言是光秃秃的骨头,所有预计将提供的开源社区。它导致应用程序根据大量的库,在广泛的变量的成熟度级别。很难运行生产垃圾代码,因此我们必须通过设计CI / CD,金丝雀一切,和我的日志麻烦的迹象。
这并不能改变一件事情。(如果)坏代码时推到一个“建立”包,你从头再来。看到SolarWinds。
签名也不能解决任何问题,它保证包是真的来自给定的出版商。同样,SolarWinds。
你必须记住,没有一个包经理故意让恶意代码通过和他们维护人员很清楚的问题。大部分(如果不是全部)“简单”,“简单,或“明显的”解决方案实际上并没有解决任何问题或在现实生活中的工作。
编辑:如果你以为签名是一个解决方案: //www.calpashop.com/gadgets/2021/06…it-driver /
最后一次编辑Zertz在结婚2021年6月30日,43
我们只使用特定的版本号和主机自己重要的事情在我们的构建系统。真的,它不会阻止恶意代码进入供应链,但是如果我们总是一年在断开连接的副本,我们不太可能被病人零。
如果你一年,你几乎肯定会有多个已知的漏洞,一般来说可能是更安全的不是最新的版本。
同样,如果发现一个漏洞,升级将是更危险和痛苦的时间越长你让事情停滞不前。
最后一次编辑炎兔子在结婚2021年6月23日下午2:30
短版:我们不会解决这个问题,不是因为我们不知道(审核第三方代码将在您的项目之前,主机而不是你自己的版本,升级时重复),而是因为这样做太大的难度和费用对于大多数组织。
老实说,有多少dev商店,人才,和资源审计他们的第三方代码供应链,尤其是一旦你玩chase-the-dependnecy一路下来吗?我敢打赌,答案是足够接近零,承认没有区别。
第二最好的——从有信誉的销售渠道获取代码,检查你的签名,控制你的版本,只有升级当有理由这样做可以实现的,但除非某人,某个地方,是执行“审计代码”的步骤,你被困在这样的事情发生了。
完全正确。我参与了公司的销售的代码到财富500强公司。iirc,大公司雇佣了一家保安公司来审计我们每使用图书馆。所以我列出了每一个图书馆,递归地,在我们的代码库。原来我们有大约100库直接相关,但递归数超过了10000。作为一个创业公司没有办法我们会看,或支付人,看这一切。你需要丰富的公司(买方信贷做作为最佳实践)。
但是每个人都说“检查每一个图书馆”实际上从未试图这样做,或者他们在投资公司工作。并不是每个人都编码在这种情况下。
你看看这些100年图书馆实际需要多少和更少的依赖——或者如果有替代品吗?如果顶级应用程序一直使用这样的要求,而不仅仅是放弃,然后低水平较少或没有运行时库依赖关系最终会蓬勃发展。这是一个鸡生蛋和蛋生鸡的问题。
我们精选死库在做这项工作之前,是的。我不明白你说的“选择用更少的依赖。”Are you suggesting that we should have recoded to rely on different libraries that provide similar functionality? If so, why would a startup do that? We'd do a bunch of work and then end up with exactly the same functionality as before (a very anti-startup thing to do).
我也不明白你的意思关于“顶级应用程序…放弃。”I think you're suggesting that we should have more libraries without dependencies or with fewer dependencies? If so, again, I think this misses the point: libraries are valuable because they do a lot for you, so you don't have to write that code. Same is true for the libraries themselves: if they can leverage underlying functionality, they can provide more value. When people say "software is eating the world" this is what they mean: When I was working in web dev in the mid-90s, it would take a team of 20 engineers to build the functionality that I can build with a single part-time developer today. I'm not going back to the old way, and I don't think many other engineering professionals are either.
所以我们要找出如何使这个“依赖/安全地狱”复杂的开源库工作,因为它创造了世界的价值太大了。我见过很多伟大的建议在这个论坛已经今天。一些例子
1。不可信的填词的沙箱代码减少访问
2。分区代码库中心可信和不可信的,防止信任库链接到不可信的填词。有一个过程,促进可信不可信的开发者和填词。
似乎是个不错的主意!
我认为你是想念我的主要观点——包写如何长期变化响应包消费者对选择标准包(值得注意的是,更少的依赖关系)。这就是为什么“鸡和蛋”。
>“分区代码库中心可信和不可信,并防止信任库链接到不可信的填词”。
无法确定你的意思,“防止”——但显然依赖越少就越容易验证方案。这样的“分区”实际上是我提到的标准,所以我们完全达成一致。如果这样的“分区”然后从长远来看包作家将自己的“分区”,使用较短的依赖链包括没有运行时依赖,因为这将增加usabilty和流行的包。
注意,“分区”是一个动词,而不是名词。我们不能指望一个通用和npm的完美分区或PyPi。有受欢迎的竞争策划“分区”——可能是有益的。
>沙箱代码来减少不可信的填词的访问
这确实是一个好主意虽然并非没有风险和困难。值得注意的是,Deno(替代节点。js造物主创造的node . js)包含了这个想法的细粒度的权限配置应用程序,例如,文件系统的权限。顺便Deno没有推荐第三方npm等效,而不是Deno正在慢慢发展策划的第一方库和Deno-verified包。Deno打赌是一个内部的“分区”将把Deno拉上来。
短版:我们不会解决这个问题,不是因为我们不知道(审核第三方代码将在您的项目之前,主机而不是你自己的版本,升级时重复),而是因为这样做太大的难度和费用对于大多数组织。
老实说,有多少dev商店,人才,和资源审计他们的第三方代码供应链,尤其是一旦你玩chase-the-dependnecy一路下来吗?我敢打赌,答案是足够接近零,承认没有区别。
第二最好的——从有信誉的销售渠道获取代码,检查你的签名,控制你的版本,只有升级当有理由这样做可以实现的,但除非某人,某个地方,是执行“审计代码”的步骤,你被困在这样的事情发生了。
我同意你的现状的总结,尤其是作为一个维护者PyPI上一些比较流行的包,缺乏企业花钱支持他们的供应链,但我认为你的结论是有点宿命论的。我们不会解决这个问题与当前模型,但我们可以改变游戏大大:Python包装社区已经调查需要更换什么设置。py和不可执行(如pyproject.toml),我们可以得到很多里程沙盒和检查,有不同程度的疼痛。
例如,它会有趣的探索为包有不同的安装需求,使用exec, ctypes或子流程,使用沙盒或类似的框架在MacOS, Windows, Linux等所以你可以“pip安装foo”任何不想访问任意文件,但需要一些额外的批准允许文件系统访问以外的项目目录或运行其他进程。我想知道是否会有一些类型的污染机制,基本上你需要声明在包清单所需的特权和使用沙箱政策声明只允许访问,与一些社会努力迁移现有的包。
我绝对不是说很容易,但我想离开这的唯一方式是改变模型减少不平衡。它就像我们没有如何减少汽车事故,告诉大家小心开车,而是立法安全玻璃时,更好的刹车,安全气囊等。
你只是把一个创可贴,虽然。
当然,它不会发生在包安装,但想必你要运行的东西包括依赖性。当这种情况发生时,您运行恶意代码。你必须极大地改变了很多关于开发过程是如何工作的产生有意义的影响问题从这个向量。实际上,你应该把任何第三方依赖关系是完全不受信任的代码并运行它隔绝一切。
如果你看一些依赖项(npm的微小辅助函数包,例如),可以减少你的接触,不是要找到一个包来做每一个愚蠢的小事情。你真的需要作为一个依赖/攻击向量?
我只是偶然发现了“pad-left”npm包依赖于“repeat-string”包。repeat-string包有一些有趣的特性你都不知道,除非你实际阅读代码。我不是想成为“非我发明”,但你应该退一步,问是否真的值得。
短版:我们不会解决这个问题,不是因为我们不知道(审核第三方代码将在您的项目之前,主机而不是你自己的版本,升级时重复),而是因为这样做太大的难度和费用对于大多数组织。
老实说,有多少dev商店,人才,和资源审计他们的第三方代码供应链,尤其是一旦你玩chase-the-dependnecy一路下来吗?我敢打赌,答案是足够接近零,承认没有区别。
第二最好的——从有信誉的销售渠道获取代码,检查你的签名,控制你的版本,只有升级当有理由这样做可以实现的,但除非某人,某个地方,是执行“审计代码”的步骤,你被困在这样的事情发生了。
完全正确。我参与了公司的销售的代码到财富500强公司。iirc,大公司雇佣了一家保安公司来审计我们每使用图书馆。所以我列出了每一个图书馆,递归地,在我们的代码库。原来我们有大约100库直接相关,但递归数超过了10000。作为一个创业公司没有办法我们会看,或支付人,看这一切。你需要丰富的公司(买方信贷做作为最佳实践)。
但是每个人都说“检查每一个图书馆”实际上从未试图这样做,或者他们在投资公司工作。并不是每个人都编码在这种情况下。
真的,启动时不应安装“mplatlib”或“maratlib”而不是“matlibplot”首先是大多数这些问题发生。任何买家应该做检查来验证所有的外部库是在某种程度上官方如在github上或相似。
有某种程度的信任,可以减少大部分的检查。我先看看图书馆,打包我的Linux发行版的依赖关系尤其是经常避免未来的痛苦。支持多种操作系统也应该确定一些问题库。
短版:我们不会解决这个问题,不是因为我们不知道(审核第三方代码将在您的项目之前,主机而不是你自己的版本,升级时重复),而是因为这样做太大的难度和费用对于大多数组织。
老实说,有多少dev商店,人才,和资源审计他们的第三方代码供应链,尤其是一旦你玩chase-the-dependnecy一路下来吗?我敢打赌,答案是足够接近零,承认没有区别。
第二最好的——从有信誉的销售渠道获取代码,检查你的签名,控制你的版本,只有升级当有理由这样做可以实现的,但除非某人,某个地方,是执行“审计代码”的步骤,你被困在这样的事情发生了。
虽然我同意大部分你说,是一些简单的,相对便宜,你可以采取的预防措施。例如,Sonatype(原文中提到的)工具Nexus防火墙( https://www.sonatype.com/products/firewall ),自动检测并阻止恶意包。当然,它不是完美的,但我认为这是更好的比任何新的包/包版本由开发人员手动审查,因为我们都知道,。
供应链的所有文章和依赖混乱攻击的新闻,毫无疑问将会有数十家公司竞相提供更好和更好的解决这些问题。
Base64Url总是一个很好的例子。它包括很多项目,添加了一个共有两个函数,它们只有3行。只是base64, PHP nativley,一个字符串替换为“+ /”和“_”。在代码中完全没有理由把你不控制从因特网上六行。
我们只使用特定的版本号和主机自己重要的事情在我们的构建系统。真的,它不会阻止恶意代码进入供应链,但是如果我们总是一年在断开连接的副本,我们不太可能被病人零。
我直言“任何依赖自动下载并运行它,因为它要求”,而不是“失败对美元的依赖不是安装在本地环境”或者“失败在本地网络不依赖美元回购”。这里发生了什么,对吧?耶稣看起来懒惰和愚蠢的。
至少你可以有一个短绒进口白名单什么的,对吧?
如果我们只担心在本文中描述的类型的攻击,确定。
但现实是,人们不断寻找安全漏洞合法的包。如果你呆在一个固定的版本的依赖几个月或几年,你会有更大的问题比依赖担心混乱攻击。看看cf的列表附加到任何重大Maven / NPM NuGet从几年前包版本。你更有可能得到利用其中的一个比一个毒包。
短版:我们不会解决这个问题,不是因为我们不知道(审核第三方代码将在您的项目之前,主机而不是你自己的版本,升级时重复),而是因为这样做太大的难度和费用对于大多数组织。
老实说,有多少dev商店,人才,和资源审计他们的第三方代码供应链,尤其是一旦你玩chase-the-dependnecy一路下来吗?我敢打赌,答案是足够接近零,承认没有区别。
第二最好的——从有信誉的销售渠道获取代码,检查你的签名,控制你的版本,只有升级当有理由这样做可以实现的,但除非某人,某个地方,是执行“审计代码”的步骤,你被困在这样的事情发生了。
完全正确。我参与了公司的销售的代码到财富500强公司。iirc,大公司雇佣了一家保安公司来审计我们每使用图书馆。所以我列出了每一个图书馆,递归地,在我们的代码库。原来我们有大约100库直接相关,但递归数超过了10000。作为一个创业公司没有办法我们会看,或支付人,看这一切。你需要丰富的公司(买方信贷做作为最佳实践)。
但是每个人都说“检查每一个图书馆”实际上从未试图这样做,或者他们在投资公司工作。并不是每个人都编码在这种情况下。
风险管理是一个谱系。不是第一个升级到最新的版本,和使用第三方的漏洞扫描器/报告,可能是“足够好”为规模较小的公司。这样做的目的是降低风险以合理的成本,而不是消除。
如果只有20包的用户协作和分手的工作可能使其可行的审计的开源软件包。
这并不能改变一件事情。(如果)坏代码时推到一个“建立”包,你从头再来。看到SolarWinds。
签名也不能解决任何问题,它保证包是真的来自给定的出版商。同样,SolarWinds。
你必须记住,没有一个包经理故意让恶意代码通过和他们维护人员很清楚的问题。大部分(如果不是全部)“简单”,“简单,或“明显的”解决方案实际上并没有解决任何问题或在现实生活中的工作。
并不是所有的攻击都是SolarWinds-level复杂和资源。有名称空间或建立声誉防止hijaack但块受害情况不像我们看过很多次。签署不会阻止的人完全控制但它给另一个工具,防止部分妥协数千台服务器上运行任意代码如果你保持签名密钥不同,它打开了后卫的可能性考虑信任决策改变签名密钥时,特别是如果有一个电子邮件地址或域名变化表明你以前信任维修工把项目交给别人。
它不完美但你可以得到很多里程分层措施,自己并不是一个完整的解决方案,就像我家的锁不需要能够阻止摩萨德值得拥有。
Base64Url总是一个很好的例子。它包括很多项目,添加了一个共有两个函数,它们只有3行。只是base64, PHP nativley,一个字符串替换为“+ /”和“_”。在代码中完全没有理由把你不控制从因特网上六行。
甚至简单的事情像base64url PHP可以有惊人的边界情况;严格测试的实现通常可以比自己滚动,这取决于你的用例。
只是,呃,也许不使用。解码函数是错误的,因为它接受_除了/ +(而不是相反)。
…
第二最好的——从有信誉的销售渠道获取代码,检查你的签名,控制你的版本,只有升级当有理由这么做
不,不,不,不,不。如果这是唯一的解决方案,那么答案是肯定的当然我们永远不会解决这个问题,因为没有人的资源。但是你的前提是误将一位更好的世界是可能的。
考虑在本文的示例中,受害matplotlib,库生成漂亮的图,我假冒库cryptocurrency。有趣的事实:你需要我有用cryptocurrency互联网接入。奇怪的事实:你不需要上网来生成漂亮的图表。那么为什么这些假冒库给上网的?
这可能听起来像我呼吁沙盒,但我实际上要求相反的“沙盒”的传统理解:使用沙盒删除insecure-by-default访问的事情,我们需要缺省安全,默认代码应该获得什么,只有获得访问的事情明确传递给它。“沙盒”不应成为你曾经明确;每一个函数调用应该“沙箱”,和你明确的是你通过获得的东西。
具体的例子:
1。在大多数语言中,sandboxing-every-function-call只需要一些简单的修改(概念):在Python中,你会阻止任何模块除了“__main__”进口C扩展和内置模块像“操作系统”,“http”等,使系统访问,和独特的Python,删除”。__closure__”功能(Ruby / JS / Java /去/等)没有等价。
2。然后,重写matplotlib要么输出一个PNG“字节”对象,也可以是给定一个对象,它可以编写PNG文件。它就不会上网和其他文件。如果你不通过一个可写文件对象,它不会获得任何文件。
重要的是要注意,在切换到新的世界将很多工作,新matplotlib不是比旧matplotlib难写。如果正常的每个人都是传送文件对象,这是一样容易传递filepath字符串。
这个想法被称为基于权力的安全,我认为的最小授权原则采取极端的,如果你到身份验证或授权分类的信息安全问题,我相信这个想法可以几乎完全解决问题的授权(零日除外)。这就是为什么我如此兴奋的最新进展将这些原则付诸实践,WebAssembly来libcapsicum,从谷歌紫红色来seL4。
一个更美好的世界是可能开始今天将这些原则应用到您自己的代码!
短版:我们不会解决这个问题,不是因为我们不知道(审核第三方代码将在您的项目之前,主机而不是你自己的版本,升级时重复),而是因为这样做太大的难度和费用对于大多数组织。
老实说,有多少dev商店,人才,和资源审计他们的第三方代码供应链,尤其是一旦你玩chase-the-dependnecy一路下来吗?我敢打赌,答案是足够接近零,承认没有区别。
第二最好的——从有信誉的销售渠道获取代码,检查你的签名,控制你的版本,只有升级当有理由这样做可以实现的,但除非某人,某个地方,是执行“审计代码”的步骤,你被困在这样的事情发生了。
完全正确。我参与了公司的销售的代码到财富500强公司。iirc,大公司雇佣了一家保安公司来审计我们每使用图书馆。所以我列出了每一个图书馆,递归地,在我们的代码库。原来我们有大约100库直接相关,但递归数超过了10000。作为一个创业公司没有办法我们会看,或支付人,看这一切。你需要丰富的公司(买方信贷做作为最佳实践)。
但是每个人都说“检查每一个图书馆”实际上从未试图这样做,或者他们在投资公司工作。并不是每个人都编码在这种情况下。
是的,但是:现在有整个sub-industry工具旨在为你做这种审计。确实有些工具是该死的昂贵,和closed-source-only,但其他社区版本(例如Anchore)允许您把这些审计-和恶意组件检测到配置/编程练习。
所以,这是不尽你做它。在2021年,它不再是一个可选的活动(如果它真的是)-景观的威胁(和失败的后果!)太高继续掷骰子,你不会被咬。毫无疑问,任何少于漏洞扫描和component-auditing CI管道,事实上,掷骰子……可能在你的组织的未来。大公司可以可笑地选择预算诉讼失败时一个真实的安全漏洞。小公司?并非如此。
…
第二最好的——从有信誉的销售渠道获取代码,检查你的签名,控制你的版本,只有升级当有理由这么做
不,不,不,不,不。如果这是唯一的解决方案,那么答案是肯定的当然我们永远不会解决这个问题,因为没有人的资源。但是你的前提是误将一位更好的世界是可能的。
考虑在本文的示例中,受害matplotlib,库生成漂亮的图,我假冒库cryptocurrency。有趣的事实:你需要我有用cryptocurrency互联网接入。奇怪的事实:你不需要上网来生成漂亮的图表。那么为什么这些假冒库给上网的?
这可能听起来像我呼吁沙盒,但我实际上要求相反的“沙盒”的传统理解:使用沙盒删除insecure-by-default访问的事情,我们需要缺省安全,默认代码应该获得什么,只有获得访问的事情明确传递给它。“沙盒”不应成为你曾经明确;每一个函数调用应该“沙箱”,和你明确的是你通过获得的东西。
具体的例子:
1。在大多数语言中,sandboxing-every-function-call只需要一些简单的修改(概念):在Python中,你会阻止任何模块除了“__main__”进口C扩展和内置模块像“操作系统”,“http”等,使系统访问,和独特的Python,删除”。__closure__”功能(Ruby / JS / Java /去/等)没有等价。
2。然后,重写matplotlib要么输出一个PNG“字节”对象,也可以是给定一个对象,它可以编写PNG文件。它就不会上网和其他文件。如果你不通过一个可写文件对象,它不会获得任何文件。
重要的是要注意,在切换到新的世界将很多工作,新matplotlib不是比旧matplotlib难写。如果正常的每个人都是传送文件对象,这是一样容易传递filepath字符串。
这个想法被称为基于权力的安全,我认为的最小授权原则采取极端的,如果你到身份验证或授权分类的信息安全问题,我相信这个想法可以几乎完全解决问题的授权(零日除外)。这就是为什么我如此兴奋的最新进展将这些原则付诸实践,WebAssembly来libcapsicum,从谷歌紫红色来seL4。
一个更美好的世界是可能开始今天将这些原则应用到您自己的代码!
感谢分享,它基本上是写所有函数为幂等,这是一个众所周知的编程概念。需要依赖注入一个更极端的形式,在函数传递所需的所有资源。(但最极端形式——我见过一些幂等系统传入数据类型(“int”或“字符串”),这样系统会访问这些数据类型(但没有其他人)。时可以麻烦带到一个极端,不过白名单模块访问核心库不是大一步,作为整个包库的方法,这对非核心库在应用程序级别的。
是的!
白名单访问核心填词是不够的。考虑的例子使用matplotlib生成的文件/道路/ / pretty_graph。今天的png”:它的工作方式是你给matplotlib字符串“文件/道路/ / pretty_graph。png”, matplotlib本质上可以访问你的整个文件系统,你希望matplotlib只是写到一个文件中并没有删除你的/ usr目录或重新格式化你的硬盘。
你可以白名单访问单个文件,但这更麻烦,尤其是如果文件名是在运行时动态地确定的。注意,缺省安全要求至少麻烦地做事情是安全的方法。
基于权力安全不太繁琐和更有趣:一个关键的原则“不要单独指定授权”。filepath字符串指定文件写入,但它是分离的授权写入该文件(和所有其他文件)。解决方案是结合他们通过matplotlib可写文件对象指定文件的编写也授权书面文件(和任何其他文件)。
这是非常不同于java风格的依赖项注入这是你去的,而在文件名传递给图书馆是你必须做的事不管什么。也有可能传入文件对象到图书馆吗是显式白名单。没有文件对象,没有访问。这是缺省安全。
是的!
白名单访问核心填词是不够的。考虑的例子使用matplotlib生成的文件/道路/ / pretty_graph。今天的png”:它的工作方式是你给matplotlib字符串“文件/道路/ / pretty_graph。png”, matplotlib本质上可以访问你的整个文件系统,你希望matplotlib只是写到一个文件中并没有删除你的/ usr目录或重新格式化你的硬盘。
你可以白名单访问单个文件,但这更麻烦,尤其是如果文件名是在运行时动态地确定的。注意,缺省安全要求至少麻烦地做事情是安全的方法。
基于权力安全不太繁琐和更有趣:一个关键的原则“不要单独指定授权”。filepath字符串指定文件写入,但它是分离的授权写入该文件(和所有其他文件)。解决方案是结合他们通过matplotlib可写文件对象指定文件的编写也授权书面文件(和任何其他文件)。
这是非常不同于java风格的依赖项注入这是你去的,而在文件名传递给图书馆是你必须做的事不管什么。也有可能传入文件对象到图书馆吗是显式白名单。没有文件对象,没有访问。这是缺省安全。
同意,我的观点是相同的:如果文件系统是一个系统自由磁盘,你不能没有它,然后你被白低水平限制清单核心库。并非所有语言将允许这个但是我猜一些常见的. .但你是更明确和具体,谢谢。
这并不能改变一件事情。(如果)坏代码时推到一个“建立”包,你从头再来。看到SolarWinds。
签名也不能解决任何问题,它保证包是真的来自给定的出版商。同样,SolarWinds。
你必须记住,没有一个包经理故意让恶意代码通过和他们维护人员很清楚的问题。大部分(如果不是全部)“简单”,“简单,或“明显的”解决方案实际上并没有解决任何问题或在现实生活中的工作。
它不完美但你可以得到很多里程分层措施,自己并不是一个完整的解决方案,就像我家的锁不需要能够阻止摩萨德值得拥有。
我同意,但很多人把它看起来像包经理在某种程度上缺失的最简单的解决方案。签署特别痛苦的数以百万计的个人贡献者发布免费开源包,在自己的时间。据我所知,目前还没有好的解决方案,。
很容易把SolarWinds例子但也容易忽视“保护”的复杂性开源包。
这并不能改变一件事情。(如果)坏代码时推到一个“建立”包,你从头再来。看到SolarWinds。
签名也不能解决任何问题,它保证包是真的来自给定的出版商。同样,SolarWinds。
你必须记住,没有一个包经理故意让恶意代码通过和他们维护人员很清楚的问题。大部分(如果不是全部)“简单”,“简单,或“明显的”解决方案实际上并没有解决任何问题或在现实生活中的工作。
它不完美但你可以得到很多里程分层措施,自己并不是一个完整的解决方案,就像我家的锁不需要能够阻止摩萨德值得拥有。
我同意,但很多人把它看起来像包经理在某种程度上缺失的最简单的解决方案。签署特别痛苦的数以百万计的个人贡献者发布免费开源包,在自己的时间。据我所知,目前还没有好的解决方案,。
很容易把SolarWinds例子但也容易忽视“保护”的复杂性开源包。
同意:我对待命名空间和类似的更高的优先级,不会推动签署没有好的UI。我真正喜欢的是类似OpenSSH狗键支持:推动模型,基于硬件的签名,和你可以得到一点如果你购买一个20美元的令牌我们大多数人已经(谢谢,Ars)警告,停止自动更新为新签署的钥匙,不是旧的。x509 / GPG添加大量的摩擦,但应该有一个方法确认与人类签订一揽子批准并不是非常假如果有人文件阅读利用开发人员的笔记本电脑或CI服务器上。
你必须登录或创建一个帐户置评。