python 库劫持:原理、利用与防御

Python 库劫持(Library Hijacking)是一种常见的权限提升或持久化攻击手段。其核心逻辑在于利用 Python 解析器加载模块时的搜索路径优先级,诱使程序加载攻击者伪造的恶意模块,而非合法的标准库或第三方库。


一、 Python 模块搜索机制

了解劫持的前提是掌握 Python 的 sys.path 加载顺序。当执行 import 语句时,Python 会按以下优先级依次查找:

  1. 当前脚本目录 :执行脚本(如 python test.py)所在的文件夹优先级最高。
  2. PYTHONPATH 环境变量:用户手动设置的附加搜索路径。
  3. 标准库路径 :Python 安装时的内置库目录(如 /usr/lib/python3.x)。
  4. 第三方库路径 :通过 pip 安装的模块所在目录(site-packages)。

二、 库劫持的实现方式

如果攻击者拥有目标系统的高优先级路径写入权限,即可实施劫持。

1. 目录种植(Path Planting)

这是最简单的方式。若目标脚本 admin.py 中引用了 import os,攻击者只需在 admin.py 同级目录下创建一个名为 os.py 的文件。由于当前目录优先级最高,Python 会忽略系统标准库,直接运行攻击者的 os.py。

2. 环境变量污染

通过修改 PYTHONPATH 环境变量,攻击者可以强制 Python 优先从其控制的目录(如 /tmp)中搜索模块。

  • 示例 :设置 PYTHONPATH=/tmp,并将恶意模块放入 /tmp 中。

三、 恶意代码构造

劫持成功后,攻击者通常会编写后门代码。为了不让程序崩溃(暴露攻击),恶意脚本通常会在执行攻击逻辑后,再通过绝对路径加载真正的原始库。

  • 常规劫持示例:

    python 复制代码
    import os
    # 提权逻辑:复制 bash 并赋予 SUID 权限
    os.system("cp /bin/sh /tmp/sh; chmod u+s /tmp/sh")
  • 若劫持目标正是 os 库 :

    为避免递归导入错误,可使用 subprocess 替代:

    python 复制代码
    import subprocess
    # 为系统 bash 增加 SUID 权限
    subprocess.run(["chmod", "+s", "/bin/bash"])

四、 防御与安全建议

  1. 权限控制 :严格限制生产环境和敏感脚本所在目录的写入权限,防止被植入非法 .py 文件。
  2. 清理环境变量 :在运行关键脚本前,重置或清理 PYTHONPATH,避免被外部注入。
  3. 使用绝对路径 :在极其敏感的场景下,检查 sys.path 的合法性。
  4. 运行参数 :使用 python3 -I (Isolated mode) 运行脚本。该模式会忽略环境变量和当前工作目录,强制使用隔离的标准搜索路径,能有效防御此类劫持攻击。
相关推荐
东莞市云毅网络有限公司5 分钟前
AI 引用句逐条回指原文:让回答可回溯的校验实现
python·数据清洗·rag·企业知识库·文档解析
数字融合2 小时前
透明化视频三维矿山井下照明重建技术
人工智能·python·数码相机
yi0112 小时前
LeetCode 219:存在重复元素 II——哈希表记录“最近一次出现的位置”
数据结构·人工智能·笔记·python·算法·leetcode·哈希表
Marst Code3 小时前
上位机开发日记 · 第 2 篇 · 架构先行:六层分层与边界
python
李日华大战鸡红4 小时前
FOC状态空间方程模型推导(学习记录)
python·学习·线性代数
黄金龙PLUS6 小时前
如何基于置换算法来设计对称加密算法
算法·网络安全·密码学·哈希算法·同态加密
外收内放6 小时前
Python基础语法练习题(57-58)
开发语言·python
朝朝辞暮i7 小时前
VLA 系统学习第 3 课:从一次机器人示范,到真正送进神经网络的 Batch
人工智能·python·深度学习·神经网络·vla
小鹿的周先生7 小时前
第11章-Structured-Output
开发语言·人工智能·python
梦在远山后7 小时前
通过 WSS 让 Server 安全调用 Desktop 本地工具(下01):Ticket、人工确认、幂等与断线对账
python·langchain·agent