没有坏处,

喂,你的休息中有恶意——pypi是最近被滥用的

开源存储库可以是恶意的向量,所以在运行之前看起来。

喂,你的休息中有恶意——pypi是最近被滥用的
盖蒂张照片

一名安全研究人员发现,从官方Python库下载的仿冒包中包含了在受感染机器上安装加密挖矿软件的密码,下载次数约为5000次。

安全公司Sonatype的研究员Ax Sharma说,在许多情况下,在PyPI存储库中可用的恶意软件包的名称模仿了合法的、经常被广泛使用的软件包的名称报道。当目标意外错误地屏蔽诸如键入“mplatlib”或“maratlib”而不是合法和流行的包装时,所谓的键盘攻击成功matplotlib.

Sharma表示,他发现了六个包装安装了加密软件,这些软件将使用受感染的计算机的资源来挖掘加密和存放在攻击者的钱包中。所有六人都由使用PYPI用户名的人发布Nedog123.在某些情况下,最早可以追溯到4月。软件包和下载编号如下:

  • 马拉塔布:2,371
  • 马拉提莱布1:379
  • matplatlib-plus:913
  • mllearnlib:305
  • mplatlib:318
  • learninglib: 626

恶意代码包含在每个包中的每个包的setup.py文件中。它会导致感染的计算机使用ubqminer.或者T-REX.Cryptominer在以下地址中挖掘数字硬币并将其存入其中:0x510AEC7F266557B7DE753231820571B13EB31B57

PYPI.已经一种经常滥用 存储库2016年,一名大学生骗了17000名程序员运行了他发布在那里的粗略脚本。

不是那个PYPI被滥用了任何比其他存储库都是 - 去年,包裹从中下载了数千次rubygems.安装了试图拦截比特币付款的恶意软件。两年前,有人回到了NPM中托管了200亿用户代码库。SONATYPE有追踪了超过12000个恶意NPM包自2019年以来。

认为在这些事件中计算的公平数量是自动完成的,从未导致计算机被感染的电脑,但上面联系的大学生的实验否则似乎又称。他的假冒Python模块在超过17,000个单独的域名,一些属于美国政府和军事组织的域名。这种滥交从来都不是一个好主意,但应该严格禁止前进。

68读者评论

  1. 一个良好的提醒,只是因为某人能够检查开源代码是否有错误或恶意更改,它并不意味着任何人检查代码。
    935帖子|挂号的
  2. 这就是为什么我们不能拥有美好的东西。
    635帖子|挂号的
  3. 昨天叹了口气 - 只要在我对Ransomeware故事中的评论中才能从我的评论中粘贴,所以我不需要在这里重新键入它,好吗?

    简短版本:我们不会解决这个问题,而不是因为我们不知道如何(审计第三方代码在将它纳入项目之前,托管您自己的已知良好版本,在升级时重复),但是因为对大多数组织承担的困难和费用对此来说太大了。

    老实说,有多少开发商店有时间,人才和资源来审计他们的第三方代码供应链,特别是一旦你追逐追逐的一路呢?我打赌答案足够接近零,以便承认没有区别。

    第二次 - 从信誉良好的来源获取代码,检查你的签名,控制你的版本,只有在有理由这样做时才升级,但除非有人,某个地方,否则正在进行“审计代码”,除非是“审计代码”,否则你当这样的事情发生时,困住了。
    2983帖子|挂号的
  4. 喵喵写道:
    一个良好的提醒,只是因为某人能够检查开源代码是否有错误或恶意更改,它并不意味着任何人检查代码。


    没有人发现的瑕疵检查代码?:)它更像:时间可能不适合您的日程表。
    |注册了1656个帖子
  5. 喵喵写道:
    一个良好的提醒,只是因为某人能够检查开源代码是否有错误或恶意更改,它并不意味着任何人检查代码。


    确实。我一直在使用OSS连续集成工具,并考虑企业版本。我注意到主仓库,在从源编译时,拉动数十个上游项目。因此,我坦白地询问了他们如何验证上游追溯的安全性以缓解供应链攻击。他们没有答案,他们的头部开发人员尚未发出回应。

    他们的商业模式从未超越过,发出销售。
    87帖子|挂号的
  6. 这是疯狂的。如今,每个项目都有巨大的传递依赖关系,不可能保证拉出的库不掺杂。没有对每个工件和源进行审核和签名。然而,审计链将像最薄弱的环节一样牢固。
    598帖子|挂号的
  7. 喵喵写道:
    fknuckles.写道:
    喵喵写道:
    一个良好的提醒,只是因为某人能够检查开源代码是否有错误或恶意更改,它并不意味着任何人检查代码。


    没有人发现的瑕疵检查代码?:)它更像:时间可能不适合您的日程表。


    随便对着不认识的人微笑是令人毛骨悚然的。

    但我的观点是,开源本身并不意味着任何东西都要经过任何一致性的审查,就像我们不能假设封闭的源代码也要经过审查一样。这是人们的一个坏习惯,假设开放源码仅仅依靠代码可以检查就神奇地安全了,并假设实际上有很多人在做跑腿的工作。


    微笑是人类最基本的非语言暗示之一。它通常意味着“我没有敌意”。

    你的更广泛的观点是有道理的,但你的原始总结丢失了细微差别,我只是打电话。

    我在这里陈述了明显的,但是,开源软件正在被检查,只是因为代码可以使用更多的人,但是它多久,它的频率都是undefined,而且你指出,你由于这个原因,不能假设它更安全或更可靠。

    这是一个问题,看起来将变得越来越令人必然。
    |注册了1656个帖子
  8. 喵喵写道:
    一个良好的提醒,只是因为某人能够检查开源代码是否有错误或恶意更改,它并不意味着任何人检查代码。


    真实但鉴于此处攻击(播放包裹后),更好的问题是您检查了正确的开源包吗?
    480帖子|挂号的
  9. jhodge.写道:
    昨天叹了口气 - 只要在我对Ransomeware故事中的评论中才能从我的评论中粘贴,所以我不需要在这里重新键入它,好吗?

    简短版本:我们不会解决这个问题,而不是因为我们不知道如何(审计第三方代码在将它纳入项目之前,托管您自己的已知良好版本,在升级时重复),但是因为对大多数组织承担的困难和费用对此来说太大了。

    老实说,有多少开发商店有时间,人才和资源来审计他们的第三方代码供应链,特别是一旦你追逐追逐的一路呢?我打赌答案足够接近零,以便承认没有区别。

    第二次 - 从信誉良好的来源获取代码,检查你的签名,控制你的版本,只有在有理由这样做时才升级,但除非有人,某个地方,否则正在进行“审计代码”,除非是“审计代码”,否则你当这样的事情发生时,困住了。


    我同意您的现状摘要 - 以及作为对PYPI的一些中度流行套餐的维护者,缺乏公司花钱支持其供应链 - 但我认为你的结论是有点太致命的。我们不会解决这个问题随着当前的模型, but we can change the game considerably: the Python packaging community is already looking into what it would take to replace setup.py with something non-executable (e.g. pyproject.toml) and we could get a lot of mileage out of sandboxing and inspection, with varying levels of pain.

    例如,探索具有不同安装要求的选项对使用exec,ctypes或子过程的包,或者在麦斯卡斯特,Windows,Linux等上使用沙箱框架等的东西来探索不同的安装要求。安装foo“对于任何不想访问任意文件的任何东西,但需要某种额外批准,以允许在项目目录之外或运行其他进程之外的文件系统访问。我想知道是否可能存在某种污染机制,您基本上必须在包装中声明,表明所需的权限并使用沙箱策略只允许声明的访问,并有一些社区努力迁移现有包。

    我肯定不是说这很容易,但我认为唯一一个摆脱这一点的方法是改变模型不平衡。这就像我们如何通过告诉大家在驾驶时要小心,而是通过立法安全玻璃,更好的制动器,安全气囊等来减少汽车死亡。
    2402帖子|挂号的
  10. jhodge.写道:
    昨天叹了口气 - 只要在我对Ransomeware故事中的评论中才能从我的评论中粘贴,所以我不需要在这里重新键入它,好吗?

    简短版本:我们不会解决这个问题,而不是因为我们不知道如何(审计第三方代码在将它纳入项目之前,托管您自己的已知良好版本,在升级时重复),但是因为对大多数组织承担的困难和费用对此来说太大了。

    老实说,有多少开发商店有时间,人才和资源来审计他们的第三方代码供应链,特别是一旦你追逐追逐的一路呢?我打赌答案足够接近零,以便承认没有区别。

    第二次 - 从信誉良好的来源获取代码,检查你的签名,控制你的版本,只有在有理由这样做时才升级,但除非有人,某个地方,否则正在进行“审计代码”,除非是“审计代码”,否则你当这样的事情发生时,困住了。


    我希望有更多的标准图书馆。C ++,Java,以及Go有良好和丰富的。它反对JavaScript Ethos,但它会有所帮助(我认为)。
    5701帖子|挂号的
  11. jhodge.写道:
    昨天叹了口气 - 只要在我对Ransomeware故事中的评论中才能从我的评论中粘贴,所以我不需要在这里重新键入它,好吗?

    简短版本:我们不会解决这个问题,而不是因为我们不知道如何(审计第三方代码在将它纳入项目之前,托管您自己的已知良好版本,在升级时重复),但是因为对大多数组织承担的困难和费用对此来说太大了。

    老实说,有多少开发商店有时间,人才和资源来审计他们的第三方代码供应链,特别是一旦你追逐追逐的一路呢?我打赌答案足够接近零,以便承认没有区别。

    第二次 - 从信誉良好的来源获取代码,检查你的签名,控制你的版本,只有在有理由这样做时才升级,但除非有人,某个地方,否则正在进行“审计代码”,除非是“审计代码”,否则你当这样的事情发生时,困住了。


    确切地。我参与了一个初创公司的代码到财富500强公司。IIRC大公司聘请了一家安全公司审核我们使用的每个图书馆。因此,我编译了每个库的列表,递归地,在我们的代码库中链接。事实证明我们有大约100个图书馆直接联系,但递归数量超过10,000。作为一个创业公司,我们无法查看,或者一切都要支付某人。您必须成为一个有钱的公司,为此(信贷到买家作为最好的做法)。

    但是,每个人说“检查每个图书馆”的人从未实际尝试过这样做,或者他们在融资公司工作。不是每个人都在这些情况下编码。
    2892帖子|挂号的
  12. adamsc.写道:
    jhodge.写道:
    昨天叹了口气 - 只要在我对Ransomeware故事中的评论中才能从我的评论中粘贴,所以我不需要在这里重新键入它,好吗?

    简短版本:我们不会解决这个问题,而不是因为我们不知道如何(审计第三方代码在将它纳入项目之前,托管您自己的已知良好版本,在升级时重复),但是因为对大多数组织承担的困难和费用对此来说太大了。

    老实说,有多少开发商店有时间,人才和资源来审计他们的第三方代码供应链,特别是一旦你追逐追逐的一路呢?我打赌答案足够接近零,以便承认没有区别。

    第二次 - 从信誉良好的来源获取代码,检查你的签名,控制你的版本,只有在有理由这样做时才升级,但除非有人,某个地方,否则正在进行“审计代码”,除非是“审计代码”,否则你当这样的事情发生时,困住了。


    我同意您的现状摘要 - 以及作为对PYPI的一些中度流行套餐的维护者,缺乏公司花钱支持其供应链 - 但我认为你的结论是有点太致命的。我们不会解决这个问题随着当前的模型, but we can change the game considerably: the Python packaging community is already looking into what it would take to replace setup.py with something non-executable (e.g. pyproject.toml) and we could get a lot of mileage out of sandboxing and inspection, with varying levels of pain.

    例如,探索具有不同安装要求的选项对使用exec,ctypes或子过程的包,或者在麦斯卡斯特,Windows,Linux等上使用沙箱框架等的东西来探索不同的安装要求。安装foo“对于任何不想访问任意文件的任何东西,但需要某种额外批准,以允许在项目目录之外或运行其他进程之外的文件系统访问。我想知道是否可能存在某种污染机制,您基本上必须在包装中声明,表明所需的权限并使用沙箱策略只允许声明的访问,并有一些社区努力迁移现有包。

    我肯定不是说这很容易,但我认为唯一一个摆脱这一点的方法是改变模型不平衡。这就像我们如何通过告诉大家在驾驶时要小心,而是通过立法安全玻璃,更好的制动器,安全气囊等来减少汽车死亡。



    这将有助于肯定,但它仍然让代码群本身易受太阳风风格攻击。如果开发人员安装了中毒库并且被推到了生产网络服务器,即使代码是沙箱,它仍然是一个巨大的问题。它将有HTTP访问和连接到DB服务器。有点游戏。通过加密攻击来阻止更多的驱动器,但我不确定我们如何真正解决这个而无需跨越生产率..

    也许是已知的好图书馆和版本的一些批准和审查的白名单?肯定是棘手和令人不快的。
    2892帖子|挂号的
  13. 喵喵写道:

    随便对着不认识的人微笑是令人毛骨悚然的。


    图像
    13688帖子|挂号的
  14. 有PYPI,那么有公寓/曼巴频道,坐在通常分布的特定存储库的顶部。与PYPI不同 - Conda用于超过Python环境/包管理 - Bioconda频道,例如也是普通使用的生物信息学包的船舶二进制文件。这些渠道通常由人们在空闲时间管理,没有任何财务激励。

    在雷达下,某种东西要过去的机会很高,因为他们无法在较小的版本变化或次要的东西后调查每个配方,而且大多数食谱都与上游相关联(这引入了另一个问题,例如。整个Gentoo崩溃)。

    由于包围包复杂的包装及其来源,我猜最终会有一个主动* nix“反病毒”。

    编辑: - 不是我喜欢另一个程序的想法在系统中引入更多漏洞,但如上所述,毒性图书馆等向量非常难以管理,并需要积极抵御他们的东西。
    44帖子|挂号的
  15. 所以......时间开始严格强制执行要求.txt文件?
    58帖子|挂号的
  16. 喵喵写道:
    一个良好的提醒,只是因为某人能够检查开源代码是否有错误或恶意更改,它并不意味着任何人检查代码。

    是的,这对我来说常见的评论是那些经常宣传一块特定开源软件的人,因为它是封闭来源的。

    没有人完全检查他们运行的一切代码。没有时间。因此,大多数情况下,您认为其他人有 - 软件通常会有一个“某人elses问题”字段。通过封闭来源,这是通过设计,因为您认为公司的某人负责通过该代码,并且该公司在某种程度上是责任(以某种方式),如果它真的是令人震惊的话。通过开源,您只想别人看了。问题是大多数人都假设它,所以它往往没有看过,除了积极采伐的人,这可能是坏行为者(见这个故事从4月当两个大学研究人员试图故意提交纸张的坏代码)。

    事实证明,一些非常重要的代码库并没有让它们的源代码被很多人读取——“心脏流血”有多久了?(26个月!)

    谁在钩子上呢?没有人。因为在许多情况下并不容易了解它是否有意思或偶然,或者在某些情况下贡献代码。没有一个负责任的,除了自己,这意味着你必须阅读所有代码,没有时间有时间。
    2192个帖子|注册
  17. fknuckles.写道:
    喵喵写道:
    一个良好的提醒,只是因为某人能够检查开源代码是否有错误或恶意更改,它并不意味着任何人检查代码。


    没有人发现的瑕疵检查代码?:)它更像:时间可能不适合您的日程表。

    确切地。这就是为什么药用药物需要一段时间才能获得批准(或被拒绝)。

    标记某些版本的“vetted by [name]”,其中
    良好的检查人员最终将建立一个声誉,也可能是一个职业生涯。
    1115帖子|挂号的
  18. 引用:
    这种滥交从来都不是一个好主意,但应该严格禁止前进。


    这个报价是出乎意料的。您是否提出了法律罚款?对抗黑客或包装消费者?

    或者你只是说应该有使用OSS包repos的组织政策吗?或者需要检查每一系列传入包裹?
    1860年帖子|挂号的
  19. 这是头图中的一些看起来很时髦的Python代码。Python 4000看起来很像Java!
    429个帖子|注册
  20. 喵喵写道:
    ......没有一个负责任的,除了自己,这意味着你必须阅读所有代码,没有时间有时间。


    你的意思是,没人愿意花时间去做。这里的“一个”指的是你或你的组织,等等。我觉得这是现代软件开发的一大缺陷。每个人都在争先恐后地推出“最小可行产品”。然后在震惊中举起手,脆弱的一面不断出现。

    我现在会播放老人卡。我在当天的C / C ++ / ASM上切上牙齿。如果您想要重复使用代码,则必须在手动或剪切/粘贴它。我觉得自己更加了解代码中正在发生的事情。类似于您如何更好地掌握问题,如果您写出来而不是将它保持在你的头上。但我明白,那些日子已经走了马和越野车。我承认,几年前我在一个Android开发课上有了一些文化冲击,我们展示了如何(和所需)来使用依赖注入。我绝对震惊了;自动从互联网上抓取代码而不查看和将其编译到我的项目中?!疯狂的。我只能假设使用第三方代码的那种使用是现代CS教学的重要组成部分。

    虽然文章来说,这些是由于拼写错误。这似乎只能在人类水平造成某种智能仪器的东西,这表明了正确的回购。
    107帖子|挂号的
  21. 让我们面对现实吧,这并不奇怪。当然,我可以检查一些我下载的存储库,但我会,答案很可能是没有。时间限制、对代码和语言的熟悉都将大大减慢你的速度,但仍然不能保证你能掌握它。

    案例和点,我认识,但如果有人做了类似的东西 http://www.underhanded-c.org/ 我相信我不会抓住任何粗略检查的恶意。在一些例子中,我知道有些东西不得不在那里,因为这是一个比赛,但我并没有弄明白,直到他们解释它。
    193帖子|挂号的
  22. 喵喵写道:
    一个良好的提醒,只是因为某人能够检查开源代码是否有错误或恶意更改,它并不意味着任何人检查代码。


    恶意代码嵌入到文件中setup . py如果他们检查代码是什么,那么很多人都会跳过或快速浏览。它几乎是400行的设置东西。没有任何有趣的东西。事实上,恶意代码可能只是一行的进口陈述。谁有时间检查那些?任何人都很难在进行代码审查时捕获它。

    几年前,发现Perl的CPAN存储库有一个积极的漏洞利用。exproit不在模块代码中,但在安装期间运行的测试代码。疯狂的事情是测试代码没有改变,但测试代码从远程服务器下载了一个文件。最初,该文件不是漏洞利用。但是,谁接管该服务器将该文件更改为漏洞。

    仅仅是“开源”,每个人都可以看到代码不够好。并非所有开发人员都可以花费时间和费用检查何种代码系列。
    2416帖子|挂号的
  23. fknuckles.写道:
    喵喵写道:
    一个良好的提醒,只是因为某人能够检查开源代码是否有错误或恶意更改,它并不意味着任何人检查代码。


    没有人发现的瑕疵检查代码?:)它更像:时间可能不适合您的日程表。

    审计已经在这里 - 他们只是没有非常均匀分布?
    1240帖子|挂号的
  24. 原谅我的无知 - 真的 - 但不是这是一个相当容易的(如果长期)问题是为了解决恶意软件包在官方Python存储库上托管吗?

    官方存储库的维护者可以禁止不受信任的程序员的贡献。不受信任的程序员可能会创建另一个风险更高的存储库。

    程序员如何信任,我作为读者留下锻炼,但原则上这似乎很简单,如果违背开源精神。

    在我看来,像Python是一个足够高的赌注,广泛使用的语言是,任何旧的雅虎都应该能够发布底缝包裹。
    2个帖子|挂号的
  25. 不确定写道:
    adamsc.写道:
    jhodge.写道:
    昨天叹了口气 - 只要在我对Ransomeware故事中的评论中才能从我的评论中粘贴,所以我不需要在这里重新键入它,好吗?

    简短版本:我们不会解决这个问题,而不是因为我们不知道如何(审计第三方代码在将它纳入项目之前,托管您自己的已知良好版本,在升级时重复),但是因为对大多数组织承担的困难和费用对此来说太大了。

    老实说,有多少开发商店有时间,人才和资源来审计他们的第三方代码供应链,特别是一旦你追逐追逐的一路呢?我打赌答案足够接近零,以便承认没有区别。

    第二次 - 从信誉良好的来源获取代码,检查你的签名,控制你的版本,只有在有理由这样做时才升级,但除非有人,某个地方,否则正在进行“审计代码”,除非是“审计代码”,否则你当这样的事情发生时,困住了。


    我同意您的现状摘要 - 以及作为对PYPI的一些中度流行套餐的维护者,缺乏公司花钱支持其供应链 - 但我认为你的结论是有点太致命的。我们不会解决这个问题随着当前的模型, but we can change the game considerably: the Python packaging community is already looking into what it would take to replace setup.py with something non-executable (e.g. pyproject.toml) and we could get a lot of mileage out of sandboxing and inspection, with varying levels of pain.

    例如,探索具有不同安装要求的选项对使用exec,ctypes或子过程的包,或者在麦斯卡斯特,Windows,Linux等上使用沙箱框架等的东西来探索不同的安装要求。安装foo“对于任何不想访问任意文件的任何东西,但需要某种额外批准,以允许在项目目录之外或运行其他进程之外的文件系统访问。我想知道是否可能存在某种污染机制,您基本上必须在包装中声明,表明所需的权限并使用沙箱策略只允许声明的访问,并有一些社区努力迁移现有包。

    我肯定不是说这很容易,但我认为唯一一个摆脱这一点的方法是改变模型不平衡。这就像我们如何通过告诉大家在驾驶时要小心,而是通过立法安全玻璃,更好的制动器,安全气囊等来减少汽车死亡。



    这将有助于肯定,但它仍然让代码群本身易受太阳风风格攻击。如果开发人员安装了中毒库并且被推到了生产网络服务器,即使代码是沙箱,它仍然是一个巨大的问题。它将有HTTP访问和连接到DB服务器。有点游戏。通过加密攻击来阻止更多的驱动器,但我不确定我们如何真正解决这个而无需跨越生产率..

    也许是已知的好图书馆和版本的一些批准和审查的白名单?肯定是棘手和令人不快的。


    它绝对不完美,但如果您安装的每个库都有一个清单,它会使防守者有点容易,这表示它是否需要网络或文件系统访问以及如何宽泛地关注那些尤其是何时何时何时更改作为新版本的一部分所请求的访问级别。即使过程本身需要进行网络请求,这并不一定意味着该过程中使用的所有100个库。如果您可以将事物缩小到可用于为系统级沙盒工具或代理生成更细微的策略(“我需要网络访问,但只有端口443到* .googleapis.com),那就特别有趣或者“我需要文件系统访问,而是只读取X509 CA存储和配置文件”)。

    SolarWinds几乎是最难防御的案例,因为它完全被破坏了软件类别需要异常广泛的访问。我肯定想考虑你如何阻止,但是我认为仍然可以从可能阻止的措施中有很多价值,但是会让云凭证/加密钱包等更容易捕获的情况下捕获,但是通过攻击。
    2402帖子|挂号的
  26. “这种滥交从来都不是一个好主意,但应该严格禁止前进”

    如何?其中一些包的名称有点钝。他们都托管了一个“可信赖的”存储库网站。

    我可以在我的客户端上启用什么功能来“禁止”它下载这些损坏的软件包?他们是无符号吗?(有多少合法的包裹被签署了?)认真地说-我如何配置我的PC(或Pi),使这些内容不会意外下拉?

    我需要一个苹果控制的图书馆“商店”吗?:-P

    在vs(和代码)中,我使用像/ nuget /下载库的东西,有时附加组件(用于代码)。我读了发布者语句并查看它是否已签名。我倾向于相信来自微软和纽特罗特的人 - 但我从未听说过的其他人(特别是代码扩展)。

    对于NPM - 我下载了一个“看似信任”的包裹。但这可能稍后增加一个新的依赖。NPM安装宝贝。可以拉下某些东西,即我甚至不知道(是的,我们经常审查NPM审核的结果)。
    475帖子|挂号的
  27. Carpetsmoker写道:
    这是头图中的一些看起来很时髦的Python代码。Python 4000看起来很像Java!

    真的吗?因为我觉得它看起来更像Visual Basic!
    732帖子|挂号的
  28. 解决这个问题有一个越来越多的工具。大多数沸腾到“我们将为您审查软件包,我们的包管理器只允许您下载我们认为安全的代码”。另一种选择是要小心。不要在没有小心的情况下升级到最新版本。检查您尝试下载错误的包。

    免费公共包裹经理是一件好事,但他们对企业的风险以及您从网络中下载的任何其他软件,都需要关心。
    558个帖子|注册
  29. 电力推动写道:
    Carpetsmoker写道:
    这是头图中的一些看起来很时髦的Python代码。Python 4000看起来很像Java!

    真的吗?因为我觉得它看起来更像Visual Basic!

    我想知道为什么1不能成为素数。排除1的素数的定义似乎是相当任意的。

    编辑:维基百科实际上有一个关于这一部分!!
    引用:
    一个原始的

    大多数早期的希腊人甚至不认为1是数字[36][37],所以他们不认为1是原始数字。从那时起,一些数学家也认为质数是奇数的细分,所以他们也不认为2是质数。然而,欧几里得和大多数其他希腊数学家认为2是质数。中世纪的伊斯兰数学家在很大程度上沿袭了希腊人的观点,认为1不是数字到了中世纪和文艺复兴时期,数学家们开始把1当作一个数,有些人还把它当作第一个质数[38]18世纪中期,克里斯蒂安·哥德巴赫在与莱昂哈德·欧拉的通信中把1列为质数;但是欧拉自己并不认为1是质数[39]在19世纪,许多数学家仍然认为1是质数,[40]和包含1的质数列表直到1956年还在继续发表

    如果改变了素数的定义以调用1件,则需要以更尴尬的方式重写涉及素数的许多陈述。例如,算术的基本定理需要在将要素中重现为大于1的素数,因为每个数字都有多个因素,具有不同数量的副本。[40]同样,如果将1作为素数处理1,则eRatosthenes的筛子将无法正常工作,因为它将消除所有倍数1(即,所有其他数字)并仅输出单个数字1. [42]素数的其他一些技术特性也不适用于数字1:例如,欧拉的总函数或除数函数总和的公式对于素数不同于它们的素数不同。[43]到20世纪初,数学家开始同意1不应该被列为素数,而是在自己的特殊类别中作为“单位”。[40]
    |注册了7623个帖子
  30. NPM和PYPI肯定会更新他们的客户,以便如果您尝试下载一个看起来像另一个流行套餐但具有更少的下载较少的包,则它们会致大声警告。他们还可以要求新包的名称与流行的姓名不同。
    558个帖子|注册
  31. 我从来没有理解为什么每个人都没有在左右进口依赖关系,通常不是特定的版本号,而只是“最新”。

    我们只使用特定的版本号,并在构建系统中自行承载重要的内容。没错,这并不能阻止糟糕的代码进入供应链,但如果我们总是在一个断开连接的副本上落后一年,我们就不太可能成为零患者。
    269帖子|挂号的
  32. 喵喵写道:
    一个良好的提醒,只是因为某人能够检查开源代码是否有错误或恶意更改,它并不意味着任何人检查代码。


    这听起来像是一个有人开始开放的源审计组的好理由。
    1145帖子|挂号的
  33. fo写道:
    免费公共包裹经理是一件好事,但他们对企业的风险以及您从网络中下载的任何其他软件,都需要关心。

    人们会假设在企业开发时,项目的预算较高和时间框架,还考虑了对所有内部和第三方组件的仔细检查。

    但这种假设往往是错误的。
    1115帖子|挂号的
  34. perholmes写道:
    我从来没有理解为什么每个人都没有在左右进口依赖关系,通常不是特定的版本号,而只是“最新”。

    我们只使用特定的版本号,并在构建系统中自行承载重要的内容。没错,这并不能阻止糟糕的代码进入供应链,但如果我们总是在一个断开连接的副本上落后一年,我们就不太可能成为零患者。


    我在“自动下载任何依赖性并在请求时运行它”而不是“在本地环境中未安装的依赖性失败”,或者在本地网络中的依赖性失败,而不是在本地网络中的依赖性下载,并不安装。这必须是在这里发生的事情,对吧?耶稣似乎懒惰和愚蠢。

    至少你可以有一个带有多人进口或其他东西的喷壶?
    |注册了49个帖子
  35. 我可以看到这种要减轻的唯一方法是您有一个第三方,其中提出了库,并在从该第三方下载之前,您可以为该服务支付服务。问题是,有这么多的图书馆他们只能通过说出300个最受欢迎的图书馆来处理工作。

    我甚至知道自己,有时候我要尝试做一个实验,看看是否有些东西可以工作,我需要快速做到,我不想拍摄代码只是为了30分钟来看看它是否会做我想要的是。

    这种类型的问题不会像目前结构的那样消失。
    440帖子|挂号的
  36. adamsc.写道:
    jhodge.写道:
    昨天叹了口气 - 只要在我对Ransomeware故事中的评论中才能从我的评论中粘贴,所以我不需要在这里重新键入它,好吗?

    简短版本:我们不会解决这个问题,而不是因为我们不知道如何(审计第三方代码在将它纳入项目之前,托管您自己的已知良好版本,在升级时重复),但是因为对大多数组织承担的困难和费用对此来说太大了。

    老实说,有多少开发商店有时间,人才和资源来审计他们的第三方代码供应链,特别是一旦你追逐追逐的一路呢?我打赌答案足够接近零,以便承认没有区别。

    第二次 - 从信誉良好的来源获取代码,检查你的签名,控制你的版本,只有在有理由这样做时才升级,但除非有人,某个地方,否则正在进行“审计代码”,除非是“审计代码”,否则你当这样的事情发生时,困住了。


    我同意您的现状摘要 - 以及作为对PYPI的一些中度流行套餐的维护者,缺乏公司花钱支持其供应链 - 但我认为你的结论是有点太致命的。我们不会解决这个问题随着当前的模型, but we can change the game considerably: the Python packaging community is already looking into what it would take to replace setup.py with something non-executable (e.g. pyproject.toml) and we could get a lot of mileage out of sandboxing and inspection, with varying levels of pain.

    例如,探索具有不同安装要求的选项对使用exec,ctypes或子过程的包,或者在麦斯卡斯特,Windows,Linux等上使用沙箱框架等的东西来探索不同的安装要求。安装foo“对于任何不想访问任意文件的任何东西,但需要某种额外批准,以允许在项目目录之外或运行其他进程之外的文件系统访问。我想知道是否可能存在某种污染机制,您基本上必须在包装中声明,表明所需的权限并使用沙箱策略只允许声明的访问,并有一些社区努力迁移现有包。

    我肯定不是说这很容易,但我认为唯一一个摆脱这一点的方法是改变模型不平衡。这就像我们如何通过告诉大家在驾驶时要小心,而是通过立法安全玻璃,更好的制动器,安全气囊等来减少汽车死亡。


    让我们不要忘记不引用对另一个库的依赖的库,而是在自己的库中打包。
    22533个帖子|注册
  37. 所有道路都带来了自己的依赖地狱。

    PYPI至少应该有两个单独的存储库:一个限制为已建立的软件包,一个打开用户以自己的风险安装包的开放。默认模式应在已建立的repo中访问代码,安装需要特定标志以允许从打开的包存储库中的依赖项。它没有解决问题,但至少使问题更加适用于非营利组织,并为行业创造捐赠资金的激励,以帮助安全的PYPI。
    495帖子|挂号的
  38. jhodge.写道:
    昨天叹了口气 - 只要在我对Ransomeware故事中的评论中才能从我的评论中粘贴,所以我不需要在这里重新键入它,好吗?

    简短版本:我们不会解决这个问题,而不是因为我们不知道如何(审计第三方代码在将它纳入项目之前,托管您自己的已知良好版本,在升级时重复),但是因为对大多数组织承担的困难和费用对此来说太大了。

    老实说,有多少开发商店有时间,人才和资源来审计他们的第三方代码供应链,特别是一旦你追逐追逐的一路呢?我打赌答案足够接近零,以便承认没有区别。

    第二次 - 从信誉良好的来源获取代码,检查你的签名,控制你的版本,只有在有理由这样做时才升级,但除非有人,某个地方,否则正在进行“审计代码”,除非是“审计代码”,否则你当这样的事情发生时,困住了。



    这听起来像是我们需要一个数字公共卫生部门,有代码检查员,就像现在公共卫生部门有食品安全,x光设备和其他检查员一样!
    1858年帖子|挂号的

你必须评论。

渠道ARS Technica