EasyShell实现进程注入

前言

最近有师傅私信问我,能不能研究研究进程注入。短暂思考之后梳理了一下思路,趁着周末把之前写过的一些功能模块翻了出来,在AI的强力辅助下,拼凑了一个进程注入的demo。本文主要是简单记录一下实现流程,顺便把排查思路一并整理出来,算是给想入门的师傅们一个参考。

实现思路

先复习一下什么是进程注入。

说白了,这就是一种 “借壳上市” 。攻击者不自己起新进程——因为新进程容易被杀软盯上——而是把恶意代码塞进一个正在运行的、受信任的系统进程里,比如 explorer.exe 或 svchost.exe。宿主是“良民”,杀软和防火墙自然就放松了警惕,恶意代码也就跟着蒙混过关了。

核心原理其实不复杂:

Windows下每个进程都有自己独立的虚拟地址空间,进程之间默认是相互隔离的。但操作系统提供了一套API,允许一个进程在满足权限条件的情况下,去操纵另一个进程的内存空间。进程注入正是利用了这套机制——通过 OpenProcess 打开目标进程,VirtualAllocEx 在目标进程里申请内存,WriteProcessMemory 写入Shellcode或DLL路径,最后用 CreateRemoteThread 让代码跑起来。

知道了原理,实现就没那么玄乎了。

结合已经实现的Shellcode生成模块和插件执行框架,这次要做的事情很简单:在AI的辅助下,把这些模块拼到一起,再针对进程注入的场景做一些适配调整。前后折腾了几个小时,一个能正常跑的demo就出来了。

效果展示

先说一下前提:进程注入通常需要管理员权限或SYSTEM权限,所以这次实验我直接用管理员权限启动。

测试流程是这样的:

先用我的工具生成一段Shellcode,上线到C2(这里用的是easyshell)。

随机挑选了几个系统进程作为目标,包括 svchost.exe 和 notepad.exe。

执行注入,观察目标进程是否成功上线,同时打开任务管理器和Process Explorer监控进程变化。

在注入完成后,我特意用某杀软的内存扫描功能做了一次全盘扫描,测试是否能被检出。

实测结果: 注入成功,目标进程顺利上线,且杀软的内存查杀在静默状态下没有触发告警。不过需要说明的是,这只是一个功能demo,并没有做深度的免杀处理,如果大家拿去做进一步的对抗测试,效果可能会有所不同。

⚠️ 友情提示: 本文仅供技术交流,请勿用于非法用途。

进程注入排查思路

聊完实现,咱们再站在防守的角度唠唠怎么查。毕竟搞安全的,不能光会“攻”,还得会“防”。

如果怀疑服务器被注入了,不要只看进程名,要看 “异常行为” 。下面是我整理的几个排查重点:

  1. 盯内存权限 —— RWX是最显眼的红旗
    正常系统进程的内存区域通常有明确的权限划分:代码段是只读+执行(RX),数据段是只读或读写(RW)。如果在某个进程里发现一块内存同时具备写入(Write)和执行(Execute)权限(也就是RWX),这就是一个非常危险的信号,大概率是Shellcode在蹲着。

怎么查: 用Process Explorer,双击进程查看属性,切换到“Memory”标签页,按权限排序,重点看有没有RWX的内存块。PCHunter里也有类似的内存扫描功能,可以一键筛选可疑内存。

  1. 查远程线程创建
    注入的核心动作就是在目标进程里创建一个远程线程。如果你看到一个系统进程里突然冒出了一些来路不明的线程,一定要追查下去。

怎么查: Process Explorer里,双击进程,切换到“Threads”标签页,看线程的起始地址(Start Address)。如果起始地址指向一个动态申请的堆内存(Heap)或者一个来历不明的DLL,那十有八九有问题。

  1. 捋进程链 —— 抓住异常的父子关系
    这是最直观的破绽。一个正常的 word.exe 不应该去启动 powershell.exe,一个 notepad.exe 也不应该去访问外网IP。如果发现异常的父子进程关系,顺着这条链挖下去,往往能找到注入的源头。

怎么查: 可以用Process Explorer的“进程树”视图,或者用Sysmon的Event 1(进程创建)日志来分析。重点关注那些父进程和子进程类型不匹配的情况。

  1. 一些额外的辅助手段
    验证数字签名:检查进程对应的可执行文件是否有有效的数字签名,很多假冒的系统进程在这一关就会露馅。

关注异常网络连接:用 netstat -ano 或 TCPView 查看进程的网络连接,一个系统进程突然连到外网IP,绝对值得深挖。

写在最后

这次从搞demo到整理排查方法,最大的感触就是:攻防两端看的都是“行为”。

攻击者想尽办法让自己看起来像正常的,而防守者则需要从海量日志里揪出那一丝“违和感”。不管工具怎么升级,这个底层逻辑始终没变。

这次demo只实现了最基础的CreateRemoteThread注入,后面如果有时间,我准备把进程镂空(Process Hollowing)和APC注入的代码也补上,到时候再来和师傅们分享。

师傅们如果有更好的排查姿势,或者遇到过什么有趣的注入案例,欢迎在评论区一起交流! 😊

© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享
评论 抢沙发

请登录后发表评论

    请登录后查看评论内容