大约一年前,Python软件基金会(Python Software Foundation)发起了一个信息请求(RFI)活动,讨论如何检测上传到PyPI的恶意程序包。无论是接管废弃的程序包、在流行的库中误植域名(Typosquatting),还是使用凭证填充劫持程序包,很明显,这是一个影响几乎每一个程序包管理器的实际问题。误植域名(Typosquatting),也称作URL劫持,假URL等,是一种域名抢注的形式,常常会导致品牌劫持。这种劫持的方式通常有赖于用户在浏览器中输入网址时,犯下诸如错误拼写等错误。用户一旦不小心输入了一个错误的网址,便有可能被导向任何一个其他的网址(比如说一个域名抢注者运营的网站)。
事实上,像PyPI这样的程序包管理器是几乎所有公司都依赖的关键基础设施。关于这个主题,我可以写好几天,但是我现在只写这篇xkcd就够了。
这是我感兴趣的领域,因此我对如何处理此问题提出了自己的想法。但还有一件事困扰我:考虑安装程序包后会发生什么。
尽管对于某些设置活动可能是必需的,但应始终使用相关查看工具来查看诸如在pip安装过程中建立网络连接或执行命令之类的事情,因为它没有给开发人员太多机会在糟糕的事情发生之前检查代码。
我想对此做进一步的研究,因此在本文中,我将逐步介绍如何安装和分析PyPI中的每个程序包以寻找恶意活动。
如何发现恶意库
为了在安装过程中运行任意命令,开发者通常会将代码添加到程序包中的setup.py文件中,你可以在此存储库中看到一些示例。
在更高层次上讲,你可以执行以下两项操作来查找潜在的恶意依赖项:你可以查看代码中的不良内容(静态分析),或者危险地安装它们看看会发生什么(动态分析)。
虽然静态分析非常有趣(我发现了npm上使用手工grep的恶意程序包),但在这篇文章中,我将重点关注动态分析。毕竟,动态分析的能力更加强大,因为你看到的是实际发生的事情,而不是只寻找可能发生的恶意行为。
那么我们到底在寻找什么呢?
重要事情如何完成
通常,任何重要的事情在发生时都由内核完成。希望通过内核执行重要操作的普通程序(如pip)是通过使用syscall来完成的。使用syscall可以完成打开文件,建立网络连接和执行命令的所有操作!你可以点此了解到更多的信息。
这意味着,如果我们可以在安装Python程序包期间系统调用,则可以查看是否发生了任何可疑事件。好处是,代码的混淆程度无关紧要,我们将看到实际发生的情况。
需要注意的是,系统调用的想法并不是我想出来的。自2017年以来,亚当·鲍德温(Adam Baldwin) 等人一直在讨论这个问题。乔治亚理工学院的研究人员发表了一篇很好的论文采用了同样的方法。老实说,本文的大部分内容只是试图复制他们的想法。
因此,我们想要知道系统调用具体是如何做到这一点呢?
用Sysdig查看系统调用
Sysdig 是一个超级系统工具,比 strace、tcpdump、lsof 加起来还强大。可用来捕获系统状态信息,保存数据并进行过滤和分析。使用 Lua 开发,提供命令行接口以及强大的交互界面。
有许多旨在让你查看系统调用的工具,本文中使用的是sysdig,因为它既提供结构化输出,又提供了一些非常好的过滤功能。
为了实现这一点,在启动安装程序包的Docker容器时,我还启动了一个sysdig进程,该进程仅监控该容器中的事件。我也过滤掉了要从pypi.org或files.pythonhosted.com进行的网络读/写操作,因为我不想用与程序包下载相关的流量来填充日志。
通过捕获系统调用的方法,我不得不解决另一个问题:如何获取所有PyPI程序包的列表。
获取Python包
幸运的是,PyPI有一个称为“简单API”的API,它也可以被认为是“一个非常大的HTML页面,其中包含指向每个程序包的链接”,它简单、干净而且比我可能会写的任何HTML都要好。
我们可以抓取这个页面并使用pup解析所有链接,从而为我们提供约268000个程序包:
在这个测试中,我只关心每个程序包的最新版本。较旧的版本中可能埋藏着恶意版本的程序包,但AWS账单不会自己承担。
我最终得到了一个看起来像这样的管道:
简而言之,我们将每个程序包名称发送到一组EC2实例(我希望将来使用Fargate或其他东西,但我也不知道Fargate),从PyPI获取一些关于程序包的元数据,然后开始sysdig以及一系列的容器pip安装程序包,系统调用和网络流量被收集。然后,将所有数据发送到S3,以供future-Jordan处理。
这个过程如下所示:
查看结果
一旦完成上面的步骤,我将在一个S3存储桶中存储大约1TB的数据,覆盖大约245000个程序包。一些程序包没有发布的版本,一些程序包具有各种处理错误,但是这似乎是一个很好的示例。
以下是具体分析过程
我合并了元数据和输出,得到如下的一系列JSON文件:
然后,我编写了一系列脚本来开始汇总数据,以试图了解什么是良性的,什么是恶性的。让我们深入研究一下这些输出结果。
网络请求
在安装过程中,程序包需要建立网络连接的原因有很多,他们可能需要下载合法的二进制组件或其他资源,这可能是一种分析形式,或者可能正试图从系统中窃取数据或凭据。
结果发现,有460个数据程序包连接到109个独立的主机,就像上面提到的文章一样,很多这样的程序包都是由于程序包共享了网络连接的依赖关系而产生的。可以通过映射依赖关系来过滤掉它们,但在本文的示范中我还没有这样做,这是安装过程中看到的DNS请求明细。
命令执行
像网络连接一样,在安装过程中,程序包有合理的理由运行系统命令。这可能是编译本机二进制文件,设置正确的环境等。
查看我们的样本集,发现60725个程序包在安装过程中正在执行命令。就像网络连接一样,我们必须牢记,其中许多是下游依赖项(运行命令的程序包)的结果。
有趣的程序包
正如预期的那样,经过深入研究结果,大多数网络连接和命令似乎都是合法的。但也有一些奇怪行为的例子,我想列举出来作为案例研究,以说明这种类型的分析是多么有用。
(1) i-am-malicious
一个名为i-am-malicious的程序包似乎是一个恶意程序包的概念验证,以下是一些有趣的细节,使我们认为该程序包值得研究:
我们已经知道这里发生了什么,可以看到一个到gist.github.com的连接,正在执行一个Python文件,正在创建一个名为/tmp/malicious-was-here的文件。当然,这正是setup.py中所发生的事情:
正在讨论的malicious.py只是向/tmp/malicious-was-here添加了一个“我曾在这里”类型消息,表明这确实是一个概念验证。
(2) maliciouspackage
另一个自称为恶意程序的程序包则有创意地命名为maliciouspackage,它的攻击能力要稍高一些。以下是相关输出:
和前面一样,根据输出结果我们可以对正在发生的事情有了一个很好的了解。在本例中,程序包似乎从.git/config文件中提取了一个令牌,并将其上传到laforge.xyz,我们发现确实是这样:
(3) easyIoCtl
easyIoCtl程序包确实是一个有趣的程序包。它声称提供了“远离无聊的IO操作的抽象”,但我们看到下面的命令正在执行:
结果很可疑,但并不是非常的有攻击性。然而,这是一个展示跟踪系统调用攻击能力的完美示例。下面是该项目setup.py中的相关代码:
有这么多的混淆,很难知道发生了什么。传统的静态分析可能会捕获对exec的调用,但仅此而已。
要查看它在做什么,我们可以用print替换exec,结果如下:
这正是我们记录的命令,表明即使代码混淆也不会影响我们的结果,因为我们是在系统调用级别进行监控。
当我们发现恶意程序包时会发生什么?
这个问题有必要简要讨论一下,当我们发现恶意程序包时,我们能做些什么。要做的第一件事是通知PyPI开发者,让他们可以得到这个程序包。这可以通过联系[emailprotected]来实现
之后,我们可以使用BigQuery上的PyPI公共数据集查看程序包被下载了多少次。
这是一个示例查询,用于查找在过去30天内安装了恶意软件包的次数:
运行这个查询可以查出它被下载400次以上:
maliciouspackage下载
总结
第一步只是初步了解了整个PyPI,通过查看数据,我没有发现有任何程序包做了明显的有害活动,而且也没有看起来恶意的名称,虽然情况很乐观,但是我总是有可能错过某些事情,或者将来会发生。如果你有兴趣深入研究数据,你可以在这里找到它。
接下来,我将设置一个Lambda函数来使用PyPI的RSS feed获取最新的程序包更改,每个更新后的程序包都将经过相同的处理,并在检测到可疑活动时发送警报。
我仍然不喜欢仅通过用户 pip install就可以在用户系统上运行任意命令,我知道的大多数用例都是良性的,但带来的风险也必须考虑。希望通过越来越多地监控各种程序包管理器,我们可以在恶意活动产生重大影响之前识别其迹象。
开源再爆雷,NPM JavaScript存储库暗藏后门
研究人员最近在开源NPM JavaScript存储库中发现两个恶意AWS软件包,这些包在开发者的计算机上植入后门程序。 假冒软件包试图冒充合法的JavaScript库aws-s3-object-multipart-copy,它们包含所有合法库中的代码,并添加了一个名为的JavaScript文件,表面上包含无害的代码和三个JPG图像。 然而,隐藏在其中一个图像中的恶意代码片段被重建后可组成后门程序代码。 这两个软件包在npm项目中存续期间已经被下载了数百次。 假冒软件包包括img-aws-s3-object-multipart-copy和legacyaws-s3-object-multipart-copy。 研究人员警告,当前大多数系统无法检测并及时报告这些软件包,导致开发者长时间暴露在攻击风险中。 绝大多数杀毒软件产品未能发现隐藏在这两个软件包中的后门。 研究主管Ross Bryant透露,img-aws-s3-object-multipart-copy在被删除前被下载了134次,另一个文件legacyaws-s3-object-multipart-copy被下载了48次。 这些恶意软件包的开发者对代码的精心设计及其策略的有效性突显了针对上游开源代码库的攻击日益复杂化。 除了NPM外,其他热门攻击目标还包括PyPI、GitHub和RubyGems等。 近年来,针对开发者的开源供应链攻击威胁不断恶化。 在过去17个月里,由朝鲜政府支持的黑客组织曾两次针对开发者,其中一次利用了一个零日漏洞。 近期发现的最具创新性的一种开源后门隐藏方法是今年3月曝光的XZ Utils后门,只差一步进入生产版本中。 黑客组织花费数年时间来开发后门,除了隐蔽方法的复杂性,还投入大量时间为开源项目编写高质量代码以赢得其他开发者的信任。 今年5月,Phylum阻止了另一个使用隐写术来植入后门的PyPI软件包攻击活动。 在过去几年中,发布到开源生态系统的恶意软件包的复杂性和数量显著增加。 毫无疑问,这些攻击是成功的。 开发者和企业必须高度警惕所使用的开源库。
win10软件出现未知错误怎么解决
win如何解决10软件未知错误?
(win10打开软件提示未知错误。
这年头Windows电脑还需要杀毒软件吗?
现在搜索这个问题,你会发现很多建议都是裸奔就行”。
也就是说,对于普通人来说,只有微软出厂自带的免费Windows Defender足够了。
那么非普通人,比如网络安全工程师,黑客自己用什么呢?
没想到,他们也说Windows自带就够了,只需要再强化一下。
一个黑客大神,曾经是公司的网络安全主管,现在是自己的漏洞猎人h0ek抛出这个观点,在Hacker News引起热议。
大神所说的强化并不复杂,即微软原本为企业客户准备的隐藏功能已经开启。
他们公司过去使用的计划是Windows Defender配合微软Azure云原生防护服务Sentinel。
他发现,一些高级功能也可以在个人版本和家庭版本的操作系统中打开,这样个人电脑也可以有企业级的保护。
打开隐藏功能h0ek隐藏功能,全称微软高级保护服务MAPS。
这是一种由知识图谱和机器学习驱动的云安全防护,用于识别病毒库中从未出现过的新威胁。
需要使用组策略编辑器此功能。
在Windows 专业版和企业版10/11,按下Win R→输入””即可。
在组策略编辑器中找到它计算机配置模版→管理模版→Windows 组件→Windows Defender 防病毒→MAPS。
进入启用条目。 基本或先进的选项可以选择以下选项,只上传少量必要的数据。
在个人版和家庭版中,默认情况下不能使用组策略编辑器,需要用脚本打开MAPS功能。
打开管理员的权限PowerShell,输入“Get-MpRreference检查安全设置。
其中MAPSReporting控制MAPS设置,0是关闭,1是基本模式,2是高级模式。
输入“Set-MpPreference -MAPSReporting 2可以打开高级模式
其他一些设置也可以在这里进行,比如SignatureUpdateInterval控制签名更新间隔,h0ek建议每小时设置一次。
CloudBlockLevel控制云阻挡级别,可设置为0、1、2、4、6,最高为6,阻挡所有未知的可执行程序。
下一步是打开勒索软件的专项保护。
这个更简单,直接在Windows有安全控制面板。
最后,h0ek觉得网上总有人吹嘘自己不需要杀毒软件,以裸奔为荣,也有人觉得免费软件是垃圾,没必要。
在他看来,Windows Defender现在比刚推出的时候进步了很多,加上强化,对于普通用户来说就够了。
也要带脑子上网。看到这个分享,微软安全中心的一位员工也来自夸。
他还透露,微软近年来收购了许多小型安全公司。 比如他一开始只负责自己的项目,现在全球有几百名成员。
这很好,抓住一名内部员工吸引了更多的人提问和建议。
比如Nim编程语言的开发者来求助。
因为使用Nim现在黑客太多了Windows Defender直接把Nim所有的安装程序都被误报为病毒,目前还没有结果。
也有Web开发者来吐槽,说Windows Defender安全防护能力确实足够,即硬盘读写性能太差。
尤其是用npm他还使用付费杀毒软件的唯一原因是安装了太多的包文件。
在这种情况下,一些评论建议他将开发目录从杀毒扫描范围中删除,恶意程序不会出现在那里。
他不这么认为,因为现在npm包里藏病毒并不少见。
除了Web开发常用的npm,常用的机器学习Python包管理工具PyPI病毒也藏在里面,伪装成普通的软件包,不小心输错了名字就会被抓住。
正如h0ek最后提醒大家,没有完美的解决方案。
开车需要考驾照,上网不需要考试,但也要注意自己,不要点击来历不明的链接,保持警惕。
参考链接:[1]— 完 —

量子位 QbitAI · 头条号签约
关注我们,第一时间获知前沿科技动态
python2.7如何安装pip(python35如何安装pip)
Mac下pip的安装,入python的坑,都离不开pippip是常用的python包管理工具,类似于java的Maven。 用python的同学,都离不开pip。
1、pip是python的包管理工具,在Python2.7的安装包中,easy_是默认安装的,而pip需要我们手动安装。
打开终端:
即可安装pip
值得注意的是:这样将安装在系统自带的python2.7的路径下,而我们要的开发环境却是python3
于是,我们采用下面的方式(上面的方式不用安装的,麻痹,入了个坑?):
安装完后,查看版本
如图
如果--version查不到版本信息,打开/usr/local/bin查看pip名称是什么吧,例如我的为pip3
命令查看已安装的包及其版本
中间非黑色的字体是警告信息,先跳过。
至此,pip安装成功。
如果文章对你有用,麻烦关注一下或者点点手指喜欢一下,Python入坑持续更新中...敬请期待...
Python包管理工具pip的安装和使用Python有两个著名的包管理工具easy_和pip。 在Python2.7的安装包中,easy_是默认安装的,而pip需要我们手动安装。
方法1:利用常用curl获取
后面是指定获取的pip脚本的名字,也可以是
方法2:利用wget获取,先要安装wget
备注:看网上还有利用easy_install安装pip,但是我尝试了并没有成功
原因是终止支持TLS1.0和1.1版本,TLS需要=1.2
参考:
主要命令:
所有命令中,最重要的两个命令是install和uninstall。
pip支持四种方式安装python包。
从PyPI安装一个包
安装一个全局区域的包,一般需要sudo权限。 在mac系统上,即使是管理员也无法安装,自从OSXElCapitan及以后的版本包含了一套安全技术(SystemIntegrityProtection简称为SIP)来防止恶意软件修改系统保护区域。 具体可参考SIP。 因此,我们有时候需要将PyPI包安装到用户区,这个时候,可以用.
pip在升级软件包之前会自动卸载旧的软件包。
可以将所有需要安装的包放入一个文件中,然后可以一次安装。 文件的每一行都要表明安装的内容,而且尽量不要依赖文件中指定包的前后安装顺序。
从git安装
从svn安装
从一个分支安装
还有很多其他的包安装功能,但是上面的已经满足了大部分需求。 其他的请参考文档。
pipuninstall可以卸载大部分的包,除了一下两种情况
使用方式主要有两种:
卸载单个包
卸载多个包
pipcheck用来验证已安装的包是否有兼容的依赖性问题。
上面的结果说明matplotlib包有两个依赖包没有安装。
pipsearch用来搜索名字或者摘要中包含搜索关键字的PyPI包。
选项只有一个,就是指定PyPI的url,默认url为
例如,searchfrida
以下两者都可以用,结果同上。
piplist命令会按照字典序排列列举已安装的包,包括可编辑的包。
主要有如下选项:
输出格式:
legacy:将要被废弃
当某些时候debug的时候,需要提供一个完整的python环境,pythonfreeze提供了此功能,它能够输出机器上python环境的快照(所有已安装的包)。
下面是freeze命令的选项:
输出用户区安装的前5个安装包:
pipshow可以用来显示每个包的具体信息。 show命令只有一个选项-f,用来显示安装包的文件列表。
$pipshow-f|--filespackageName
更多命令请参考文档
pip默认的index-url是,
为了提高速度,我们可以更改pip源为国内的阿里云源。更改方法如下:
创建配置文件
添加阿里源
内容如下:
我想问问python如何安装pip1、可以将版本升级到Python2.7.9+或Python3.4+以上,这些版本都自带pip工具,可以不用安装pip。
2、pip是Python包管理工具,该工具提供了对Python包的查找、下载、安装、卸载的功能。
windows下如何安装pip
方法如下:
1、pip是依赖python的,首先检查下windows机器上有没有安装python,或者有没有添加到环境变量中,如果都没有需要安装或者加入环境变量
2、下载并安装python,选择和自己操作系统匹配的版本进行下载,我这里下载的是Windows64位2.7.14,有很多模块不支持python3,所以还是选择python2.x中最新也是最后一个版本。
3、配置好python的环境变量,将python的安装路径C:\Python27配置在path中即可
4、安装pip,将pip的tar包下载到本地并解压,这个格式的是windows和Linux通用的包,在Windows下用常规的解压工具即可解压,下载地址如下
5、进入到pip的解压目录,执行进行安装,安装完成之后出现finished说明安装成功。
6、执行pip命令的提示找不到这个命令,需要将pip的安装路径加入到环境变量中,路径一般为python所在目录的Scripts目录中
7、下图是环境变量添加成功之后,执行piplist成功,现在pip已经安装成功了,可以用来安装python的一些模块了
扩展资料:
pip是一个现代的,通用的Python包管理工具。 提供了对Python包的查找、下载、安装、卸载的功能。
indows10是Windows8.1的下一代操作系统。 Windows8.1的发布并未能满足用户对于新一代主流Windows系统的期待。 代号为“WindowsThreshold”的Windows10于2014年10月2日发布技术预览版。 于2015年7月29日发行正式版。
新特性
全设备平台制霸,Win10将实现大一统壮举
从4英寸屏幕的“迷你”手机到80英寸的巨屏电脑,都将统一采用Windows10这个名称。 这些设备将会拥有类似的功能,微软正在从小功能到云端整体构建这一统一平台,跨平台共享的通用技术也在开发中。
目前的Windows10预览版主要为台式机和笔记本打造,WindowsInsiderProgram也会登陆。 与此同时,Windows10手机版的名称敲定:Windows10Mobile,从此再无WindowsPhone。
高效的多桌面、多任务、多窗口
分屏多窗口功能增强,现在你可以在屏幕中同时摆放四个窗口,Win10还会在单独窗口内显示正在运行的其他应用程序。 同时,Win10还会智能给出分屏建议。
多桌面,现在你可以根据不同的目的和需要来创建多个虚拟桌面,切换也十分方便。 点击加号即可添加一个新的虚拟桌面。
资料链接:网络百科PIP?网络百科windows
发表评论