早上刷x, litellm 投毒事件闹得沸沸扬扬,手头的项目也没啥成功,无聊决定研究一下这套供应链攻击
整套流程走下来,我最大的感触是供应链的攻击好吓人,有时候真的是很难察觉,笔者对于下载的github项目涉及的python包根本不会检查,不知道背地里被黑几次了....绷不住了
1.漏洞初探
大概看了眼github发的报告 全是英语不想看 大概原理就是在Python 的 site-packages 目录,python启动时会触发pth文件的执行,pth本身就是python文件,只是有格式要求 这次供应链攻击黑客在litellm项目里投了pth恶意文件 语句大概是import os, base64; exec(base64.b64decode('....')) 实际很简单 但是很多edr和杀软其实不怎么关注非exe,dll,sys外的文件,当然也有特殊的 实际python被投毒已经无数次了 但很多时候都需要import或者调用函数 但这次无需调用 只需写在目标目录下就可以触发 所以一瞬间也来了兴趣
2. 漏洞复现
漏洞复现也很简单 往目标目录写pth然后启动python就行
我就懒得复现这个供应链攻击 本来还想复现了 瞅了一眼时间 算了 后面突然想到这玩意好像用来维权不错啊 但是缺点需要python环境
优点那就很多了 首先父进程是python 其次pth文件一般不会被监控 就算被监控 python也有很多丰富的语法供我们混淆 文件静态被杀这个完全没必要担心 所以思路就是写入pth调用我们的恶意文件 每当python运行时都会触发木马上线
3.问题一:父进程问题
复现的时候我用的os.system 后面发现父进程是cmd 瞬间觉得没啥用 研究了一下用subprocess.Popen(..., shell=False)就行 因为他是python调用底层winapi实现的 所以父进程是python
4.复现全过程
1.生成cs的马子 这里演示就没做免杀
2.写到目标目录 注意用subprocess.Popen实现 不然父进程是cmd
3.可以看到python启动时马子的父进程是python 对我们十分有利
4.成功在某绒下上线 命令执行成功 这里本来想测某60 但是机子没安装环境 懒得去试了 读者可以自己尝试 我也不知道
5.权限维持
上面这种做法当然也能维权 只要python触发就一定上线 不过我们要的是稳定的上线方式 于是想到将python的快捷方式放到自启动目录上 开机自启动python触发pth文件触发马子的调用 可以看到自启动成功上线 这里因为python本身属于签名程序 虽然一般也不会放到自启动 触发有特殊需求 但是放进去实际也不会很诡异
问题二:黑窗口
聪明的读者应该能注意到触发自启动的python会弹出黑窗口 总不能在受害者上开机突然弹出python吧 也太诡异了 于是研究了一下python的目录 发现使用pythonw就可以解决了 将pythonw的快捷方式放到自启动一样能维权
总结:
对于维权,如果在对方环境有python的情况下确实很好用 因为本身python放自启动也不好报毒,其次就是恶意文件是pth,一般也不会被严重监控,哪怕监控用静态也是随便绕过,而且还有白的父进程,这个也让我深深意识到供应链攻击的可怕之处,至于这个滥用维权也只是衍生的一个小小的滥用,可怕的是这种受信任的软件被恶意投毒,因为大多数人包括读者也不可能每时每刻都查看文件是否恶意....太累了,危险无处不在