最近,有软件安全研究者发现了Python包索引(PyPI)上12个恶意库,其中包含恶意代码,可以导致安全隐患,开启后门,甚至盗取比特币。
该发现是安全研究者Bertus对PyPI做安全扫描时候发现的,先后两次共发现12个有问题的软件包,目前官方已经将他们删除。今天虫虫就和大家一起来了解下这些恶意攻击注入方法和原理。
攻击方法和涉及的包
这些类包以所有以相同的模式打包。先是复制流行软件包的代码创建新库,取了个相近但不同的名称。例如有问题的四个包名字为:diango,djago,dajngo,djanga都模仿了Django,这是一个非常流行的Python Web框架的名称。然后给库源码的某些文件中注入了恶意代码,主要是安装文件setup.py中。 Setup.py文件包含一组指令,Python库安装程序(如"pip")在Python项目中下载和设置新包时会自动执行这些指令。这些问题类库增加了额外指令执行各种恶意操作,并且每个库都内容有所不同。
Bertus于10月13日发现了第一批11个恶意软件包(见下表),并于10月21日发现了另一个恶意软件包。
这些恶意库将尝试收集感染机器的环境的数据,并添加到自动启动,并开启了一个反向shell后门,一旦启动,恶意攻击者就能远程登陆该机器,并获得全部权限。
比特币劫持攻击原理和载荷(colourama)
另一个恶意类库"colourama"则会劫持了受感染用户的操作系统剪贴板,并每隔500毫秒(接近试试)扫描一个类似比特币地址的字符串,并将其替换为攻击者自己的比特币地址,这样如果感染用户如果有比特币的支付/转账操作时候,比特币就会进入攻击者的账户,因为比特币加密地址都是类似字串,基本上我们很难察觉。
上面是Setup.py中插入的恶意行,请求一个地址,改地址内容(base64加密)解密后:
最后复原的攻击载荷(Vbscript代码)
上面代码显示,在注册表CurrentVersion\Run 开机启动项目增加自启动项目,并且增加了个服务BTCS监控粘贴板并修改其中复制的类似比特币地址的字串。
该包也是模仿了一个名为"colorama"的流行Python库,用来美化命令行终端的。
不过幸运是的是,绝大多数用户都没有收到这些恶意包的影响。由于及时发现和删除,据PyPI 统计,只有54个用户在被删除前一个月下载了该软件包。涉及攻击者的比特币账户也仅有40美元入账,并且转账时间也是在该包发布之前,所以,通过colourama应该是么有偷到钱。
安全研究人员声称他是通过使用自己创建的自动化系统发现了所有12个软件包,该系统扫描了PyPI存储库,在对软件包名称对比时候做"拼写错误"时候发现了这些恶意包的。
研究人员说他是在看到去年斯洛伐克国家安全办公室发出的安全警报后创建了扫描程序,警告Python开发人员在PyPI上发布了10个恶意Python库。那些图书馆也使用了拼写错误的名字,直到数周后,用户在由于意外或粗心安装它们。
该次注入的恶意代码载荷大概为:
针对其他语言集中式类库,Bertus表示还准备修改程序,并考虑增加对其他存储库,如RubyGems或JavaScript语言的npm也做类似扫描。
比如去年年8月,瑞典开发人员就在npm repo上发现了38个恶意的JavaScript库。这类库通过恶意代码收集用户信息,并将数据上传到攻击者的服务器。
虫虫在此可以预期针对开发语言基本类库包的篡改,劫持会是将来恶意攻击的一个方向,程序开发者在下载安装类库的时候一定要擦亮眼睛,谨防中标!