文/图 阿里安全猎户座实验室

近日,国外媒体有安全人员爆出Python pip ssh-decorate被发现存在后门代码!对,又是pip污染。

pip是python的开源包资源库。然而,这个开源库的管理是十分松散的。尤其在安全方面并没有严格的审核机制。一个用户只需要一个email即可注册账户,然后即可上传其源文件到pip资源中。而这个pip资源是被世界上所有python用户使用下载的。如果有人夹杂恶意代码上传了某个包,并以常见程序的名字命名,比如zip,ssh,smb,ftp。那么当有用户尝试搜索并下载使用这个名字的包时,这个用户就会中招,可谓神不知鬼不觉。这就是存在于pip中的供应链安全问题。回头看,针对pip的攻击已经并不新鲜,早在几年前就有国外研究者进行过类似实验。而真正让大家重视起来是在2017年,国内白帽子也针对pip源进行了投毒测试,结果令人震惊,各大厂商主机纷纷被感染。但是无论如何,之前我们看到的全部都是以渗透测试为目的的pip污染事件,而这次,我们看到的真正的backdoor!我们看一下其具体技术相关的内容。

ssh-decorate是一个github开源项目,其地址:https://github/urigoren/ssh_decorate。其功能应该是实现类似ssh client一样的功能,python实现,提供一些更友好的接口。现在这个工程已经被原作者删除干净,只有google cache中的可以看一下其之前的内容。在pypi上的ssh_decorate的地址是:https://pypi.org/project/ssh-decorate。当前的恶意包也已经被pypi移除,目前页面也无法找到了。

这个backdoor的事件最早被爆出是reddit上的用户发帖,并且贴出了恶意代码片段,如图1所示。从图中可以看出,恶意代码的实现是比较直接的,没有代码加密、混淆之类的对抗手段。主要的动作就是发送ssh服务器的用户名,密码,ip地址,端口,私钥信息到远程服务器。服务器地址:http://ssh-decorate.cf/index.php。这其中的很重要一点就是其收集了密码和私钥信息。有了这些信息,相当于盗取了ssh服务器的账户。再看这个攻击者的服务器网址,可见域名还是有很大迷惑性的,使用ssh-decorate字符串。另外,有安全研究人员通过其DNS Record系统发现这个域名注册时间是2018-05-08。也就是这次攻击这个域名的存活期,其实还比较短。

图1

那么,一个很重要的问题:这个pip的恶意包到底是怎么来的呢?实际上ssh-decorate这个开源包存在github和pypi都已经很久了,作者是urigoren。那么,为什么这个pypi上的包被插入了恶意代码了呢?原作者没必要这么做。终于,通过github的一个issue我们发现了原因。这个issue是一个发现恶意代码的用户质问开发者urigoren,为什么其pypi源中包含有恶意代码。这个issue已经被删除,但是可以从cache链接https://webcache.googleusercontent/search?q=cache:vjUIkPX1-0EJ:https://github/urigoren/ssh_decorator/issues/11+&cd=6&hl=zh-CN&ct=clnk 查看,同时,图2,图3是也是来源于这个issue的讨论的截图。

图2

图3

通过对话,我们得出推测:urigoren的pypi账号很可能被黑了。这样导致,攻击者利用他的账号就可以push更新包到pypi,这就造成了github是好的代码,但是pypi的包已经被污染。经过这个事情,urigoren一气之下(也许是惊吓)删除了github和pypi的所有相关repo。对于这个情况,Pypi之前已经我们提过,其安全很脆弱,其账户体系也是一样的。当然,到底是原作者使用弱密码还是pypi有其他弱点来让攻击者达到最后盗取其账户,这个我们暂时不得而知。但是,这是一种巧妙的攻击方式。黑掉一个缺乏安全意识的开发者的账户并不那么复杂,而这个开发者的背后可能掌管着世界级的开源应用的代码更新权限。这又是一个相对低成本的攻击。

通过对这个真实的供应链安全问题的分享,希望提高大家对这类安全问题的感知。供应链安全是个复杂而庞大的问题。需要不断地去重视,思考,一步一步地去解决。出于对近几年来供应链安全问题的重视,为了促进安全行业内相关方向的发展以及对此类攻击解法的探索,阿里巴巴安全部在今年专门举办了一届“软件供应链安全大赛”,赛事目前正在紧张进行中,测试赛即将打响,有兴趣的同学请移步官方网站(https://softsec.security.alibaba)了解更多信息,现在加入PK还来得及!

python中怎么安装pip-python中怎么安装pip相关推荐

  1. pip安装更新、第三方库对应的python解释器版本、pip安装第三方库,压缩包离线安装,pycharm快捷安装及pycharm中terminal的使用,timeout超时报错

    文章有点长,但是很详细,还望大家耐心看 之前在安装python的文章中已经给大家配置了pip环境变量(不了解的点这里去看看),这里就能直接在cmd窗口,不用切换路径,就能使用pip了. 首先 使用pi ...

  2. Jupyter notebook 中使用pip install安装第三方Python包

    一句话概括Jupyter notebook pip install(适合比较着急的读者) 使用方式: 在pip install -[Package]前加上一个!即可,比如想要使用pip install ...

  3. 如何安装Python中numpy,在DOS验证下一步步解决安装问题(DOS下从python的验证到pip验证到Numpy安装成功)

    注:我在安装过程中,按照一些博主的安装流程,并未安装成功.最后发现了大概是我出现的问题和其他的博主不一样吧.反正就是要对症下药,其实每个人的问题都不太一样,自己设定的安装路径,各种权限,各种不同的系统 ...

  4. win10 64位下Python中NLTK,pip,numpy等安装方法

    win64下Python中NLTK的安装方法 Python已经更新至3.6版本,但是2.7.3的版本也足以使用.但是win64版本之下却没有Python中NLTK的安装包,网络之上的NLTK安装方法也 ...

  5. 如何用pip指令将python包安装到虚拟环境中

    1说明 在创建虚拟环境后,要想安装python包,需要指定装入哪个虚拟环境(路径),否则安装不成.这里以虚拟环境安装一个opencv为例,说明正确安装过程. 2 常规安装的误区 如果直接安装,如:&q ...

  6. python中arch模块_在Arch下安装pip

    1. 首先安装一个命令行下载工具,我这里使用axel: $ axel https://bootstrap.pypa.io/get-pip.py #下载完成之后得到一个python文件 $ ls get ...

  7. 群晖python套件包_群晖中给Python3安装pip工具以安装扩展包

    重要:本文最后更新于2021-02-01 22:34:49,某些文章具有时效性,若有错误或已失效,请在下方留言或联系代码狗. 今天折腾这群晖迷你Linux系统的时候遇到一个问题,Python写的程序基 ...

  8. python中import cv2遇到的错误及安装方法_独家利用OpenCV,Python和Ubidots来构建行人计数器程序(附代码amp;解析)...

    作者:Jose Garcia 翻译:吴振东 校对:张一豪 本文约4000字,建议阅读14分钟. 本文将利用OpenCV,Python和Ubidots来编写一个行人计数器程序,并对代码进行了较为详细的讲 ...

  9. 怎么检查python是否安装成功-如何在Docker中检查是否安装了python包?

    我用Dockerfile成功构建了一个容器.但是,我的代码在容器中不起作用.如果我手动安装所有包,它确实有效.我假设我弄乱了导致docker没有正确安装软件包的东西.所以,我想检查是否在Docker容 ...

  10. NVIDIA Jetson Xavier NX中安装的python库包的版本

    文章目录: 1 导出Jetson NX中已经安装的python库包 2 sicpy库包安装 1 导出Jetson NX中已经安装的python库包 1.导出Jetson NX中已经安装的库包版本 pi ...

最新文章

  1. Ubuntu根目录文件作用分析
  2. 2015蓝桥杯省赛---java---A---3(九数分三组)
  3. 流式传输大数据:Storm,Spark和Samza
  4. php 管理员表和用户表,求discuz的管理员数据表和用户数据表结构
  5. 这样写Java,同事直呼666
  6. 微课|中学生可以这样学Python(例9.1):Excel导入SQLite(2)
  7. 很高兴,自己申请到了一个.net的blog
  8. 【推荐】JSON在线格式化工具
  9. Q133:PBRT-V3,BSSRDF的采样(15.4章节)
  10. JavaScript案例一:Window弹窗案例
  11. java解析本地wsdl_关于解析本地wsdl文件
  12. Hyperledger Fabric定制联盟链网络工程实践
  13. 微信朋友圈抓取 附近人自动加 附近人朋友圈抓取 最近一直在研究(有兴趣的看网址)...
  14. 视频太大怎么压缩,视频压缩怎么弄?
  15. Ubuntu18.04 安装QQ、Tim、微信与win无差异
  16. 减少杠杆炒股风险的5种方法
  17. html编写邮件发送_如何编写HTML电子邮件通讯
  18. 鸿蒙系统能玩魔兽世界吗,《魔兽世界》7.0配置公布:仍不放弃XP
  19. 情不知所起,一 网 而深
  20. [1]数据分析中变量取对数的意义

热门文章

  1. “无效数字” ;java.lang.Integer cannot be cast to java.lang.String
  2. Mysql学习笔记004
  3. angularjs(1)
  4. 正则判断 手机邮箱的正确格式
  5. GridControl详解(十)BandedGridView
  6. POJ 3469 Dual Core CPU (最小割建模)
  7. 【随感】看老科和当当的回眸相视
  8. 可以获取python整数类型帮助的是什么-PYthon如何把一个字符串类型转换为整数类型?...
  9. python编程语法大全-Python编程入门——基础语法详解
  10. python代码示例图形-Python使用统计函数绘制简单图形实例代码