Python加载机制的信任盲区导致木马产生

admin 2026-10-03 04:37:09 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文揭示Python加载机制中的信任盲区可被利用植入木马。攻击者利用Python启动时自动加载同目录pythonXY.zip的机制,通过zipimport将恶意模块置于搜索路径最前,替换encodings等未冻结模块实现代码执行。该攻击无需利用漏洞,仅组合正常机制即可绕过签名验证。检测方法为检查encodings.file是否指向zip内部,清理只需删除恶意zip文件。文章强调只看签名和文件完整性可能漏检此类攻击。 综合评分: 82 文章分类: 恶意软件,漏洞分析,安全意识


Python加载机制的信任盲区导致木马产生

原创

MicroPest MicroPest

MicroPest

2026年10月2日 22:19 安徽

在小说阅读器读本章

去阅读

在公众号小说中沉浸阅读

一、一种新型加载木马的方式

1、一个 zip 文件如何悄悄接管你的 Python

你可能见过这种场景:从官网下载 Python,安装包签名干净,目录里除了 python.exe 和几个 dll什么都没有。一切看起来都很正常。

但攻击者已经把恶意代码塞进了一个同目录的 zip 文件里。这个 zip 文件没有签名,没有版本号,也不会出现在任何依赖清单中。它甚至不需要被系统主动打开——Python 启动时,它会自己跳出来。

2、三个正常机制,拼成一条攻击链

这套攻击手法没有利用任何新漏洞,纯粹是三个正常机制叠出了风险:

• 路径被篡改:Python 启动时会无条件加载同目录的 pythonXY.zip(XY 对应版本号)。只要这个文件存在,它就会被加入 sys.path。

• 模块被替换:zip 排在搜索顺序最前面。如果里面放一个和 Python 标准库同名的模块,它会盖过原版。encodings 是启动必跑且未被冻结的模块,成了攻击者的首选入口。

• 签名看不见:exe 和 dll 都是官方原装,签名核验天然看不到 zip 里的内容。杀毒软件只看签名的话,完全查不出问题。

3、为什么是 encodings?

Python 启动过程中,有几个模块是早期就必须导入的。但 os、codecs 等模块在 CPython 中是被”冻结”的(frozen),放进 zip 也轮不到执行。而 encodings 恰好是未冻结的,且每次启动都会执行。它成了这条链上最合适的”门把手”。

4、怎么判断自己有没有中招

在命令行输入: import encodings; print(encodings.\_\_file\_\_) 如果输出路径指向一个.zip 文件内部(比如 python39.zip\encodings),就是中招了。

注意:sys.path 里出现 zip 路径不等于中招。正常环境也会这样。实锤要看

encodings.\_\_file\_\_ 是否指向 zip 内部。

5、怎么清理

找到并删除那个 pythonXY.zip 文件即可,不需要动任何程序文件。如果反复出现,说明有持久化机制,建议直接重装。

6、信任盲区在哪

这套手法最值得警惕的地方在于:

• 官方文件、正常签名、常见启动行为——一切看起来都干净

• 真正异常藏在一个普通的 zip 文件里,不触发任何告警

• 它利用的是设计层面的行为组合,而非某个具体漏洞,因此很难通过打补丁修复

对于安全人员来说,这提醒了一个事实:只看签名、只看文件完整性、只看进程行为,都可能漏掉这种藏在”合法机制”背后的攻击路径。

二、说人话

将上面的语言换种方法来说:

下载的 Python 解释器看着干干净净,其实可能已经被调了包。

攻击者把恶意代码塞进一个 zip 文件,跟官方程序放在同一个文件夹里。这个 zip 文件每次启动都会自动运行,全程不碰签名文件。

这套手法没钻漏洞,纯粹是三个正常机制叠出了风险:

路径被篡改:Python 启动时会无条件加载同目录的特定 zip。就算这文件不存在,系统也会给它留个位置。

模块被替换:zip 排在了标准库前面。只要里面放个同名文件,就能盖过原版。 encodings  是启动必跑且没被锁死的模块,成了首选目标。

签名看不见:exe 和 dll 都是官方原装,签名没问题。杀毒软件光看签名根本查不出 zip 里的猫腻。

三、危险性所在

1、这种攻击的危险性:

危险性为把一条合法启动链拆成了攻击路径。它没有利用某个新漏洞,而是把 Python 的加载机制串了起来。

签名只覆盖 exe 和 dll:恶意代码藏在同目录的 zip 里。签名核验天然看不到它。

zip 被无条件加入搜索路径:文件名还要严格匹配版本。错一个字都不会加载。

zipimport 让压缩包能被导入:它排在搜索顺序最前面。同名模块会盖过标准库。

encodings 是最佳入口:它是启动必经、且未冻结的模块。os、codecs 等更早被冻结,放进 zip 也轮不到执行 。

补上防御者容易漏掉的一点: sys.path  里有 zip 路径不等于中招。正常环境也会这样。实锤要看  encodings.__file__  是否指向 zip 内部。

所以,最有价值的是这条信任盲区:官方文件、正常签名、常见启动行为都看着干净,真正异常却藏在一个普通 zip 里。

2、这种危险性所利用的路径劫持是人为设定的还是python自带的:

是 Python 自带的,不是攻击者临时加的。 文章里的恶意 zip 只是利用了这套机制。

可以分两层看:

Python 自带的能力: zipimport  是标准库。 sys.path  里出现 zip 路径时,导入系统会自动用它加载模块。官方文档也写明,这通常由内置 import 机制自动触发 。

人为设定的规则:文件名  pythonXY.zip 、放进  sys.path 、排在标准库前面——这些都属于 CPython 启动代码的设计。CPython 就是 Python 官方那个标准实现。

真正的问题是:设计各自合理,叠在一起就形成了隐蔽的执行入口。

所以准确说法是:机制是 Python 自带的,利用方式是攻击者设计的。

四、举例演示

1、##probe.py

import sys

open(r”D:\out.txt”, “w”).write(“\n”.join(sys.path))

运行后,打开out.txt,看到:

python311.zip是优先于DLLs和Lib路径的,这样就产生了上面所讲到的路径优先问题,正常情况下python安装路径中是没有这个zip文件的,如果被人设计了这个zip,就会被python加载起来,这非常类似以前的DLL劫持攻击。

2、生成的python311.zip放在python安装目录中,如下:

运行效果如下图:当运行后自动弹出示例exe程序。

如果python311.zip中包含木马,就当python运行时会优先启动木马,隐蔽性很强。


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。

本文转载自:MicroPest MicroPest MicroPest《Python加载机制的信任盲区导致木马产生》

    评论:0   参与:  0