纤维执行:Windows中隐形的多流控制技术
FiberUsing fibers to run in-memory code.项目地址:https://gitcode.com/gh_mirrors/fiber1/Fiber
项目介绍
在Windows环境中,纤维(Fibers)是一种轻量级线程实现方式,允许在一个线程内部管理多个执行流程,而无需依赖系统级别的优先级调度机制。这个开源项目是一个简单但直观的Proof-of-Concept,它展示了如何利用纤维在内存中隐藏和控制代码执行。通过创建和切换纤维,项目提供了一种避开常规监控的方法,尤其适用于需要长期运行且要求低可见性的任务,如C2信标。
项目技术分析
此项目的核心在于使用Windows API来创建、切换和管理纤维。首先,一个加载器会使用DInvoke库动态映射目标DLL以载入有效负载。然后,主线程被转换为控制纤维,它拥有正常的堆栈。接着,创建一个新的纤维——有效载荷纤维,用于执行映射DLL中的run()
函数。控制纤维与有效载荷纤维之间可以自由切换:
- 当需要执行代码时,控制纤维切换到有效载荷纤维。
- 一旦有效载荷进入等待状态(如调用了Sleep),它会切换回控制纤维,隐藏其可能包含恶意活动指标的堆栈。
- 控制纤维完成Sleep操作后,再切回到有效载荷纤维,继续执行。
应用场景
这个项目适合于希望在不引起过多系统回调或者避免被EDR(Endpoint Detection and Response)工具检测到的情况下执行内存中代码的场景。例如,在开发隐蔽式持久化威胁(APT)或地下网络活动时,纤维技术能够提高隐蔽性。
项目特点
- 低显眼度:无需使用指向非分页内存的JMP或CALL指令,减少异常行为。
- 无新线程创建:避免了线程创建产生的系统回调,降低被检测风险。
- 堆栈隐藏:有效载荷纤维在等待期间可以通过控制纤维隐藏堆栈,较之传统的堆栈伪造方法更易于实施。
- 用户空间切换:所有的纤维切换都在用户空间完成,使得检测更为困难。
编译与使用
在编译之前,需要设置环境变量LITCRYPT_ENCRYPT_KEY
,然后分别对有效载荷和加载器进行编译并执行加载器。项目提供了清晰的注释来说明如何创建、管理和调度纤维,并且,通过ProcessHacker等工具观察线程堆栈,可以看到纤维之间的切换过程。
总之,这个开源项目提供了一个深入理解并应用Windows纤维技术的平台,对于开发者来说,无论是学习先进技术,还是构建高级隐蔽的内存执行策略,都是极好的实践资源。
FiberUsing fibers to run in-memory code.项目地址:https://gitcode.com/gh_mirrors/fiber1/Fiber
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考