温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Shellcode中怎么躲避安全检测

发布时间:2021-08-13 13:47:09 来源:亿速云 阅读:217 作者:Leah 栏目:编程语言

Shellcode中怎么躲避安全检测,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

CreateThread工作流程

1、为当前进程分配内存;

2、将Shellcode拷贝到分配的内存中;

3、修改新分配内存的保护机制,以允许Shellcode在内存空间中运行;

4、使用已分配内存段的基地址创建线程;

5、等待返回线程句柄;

CreateRemoteThread

1、获取目标注入进程的进程ID;

2、打开目标进程;

3、在目标内存中分配可执行内存;

4、将Shellcode写入到已分配内存中;

5、使用已分配内存段的起始地址在远程进程中创建一个线程;

Shellcode中怎么躲避安全检测

QueueUserAPC

1、获取目标注入进程的进程ID;

2、打开目标进程;

3、为目标进程分配内存;

4、向已分配内存中写入Shellcode;

5、修改新分配内存的保护机制,以允许Shellcode在内存空间中运行;

6、使用已分配内存段的起始地址在远程进程中创建一个线程;

7、当线程进入“预警”状态时,将线程提交至执行队列;

8、将线程恢复至“预警”状态;

Shellcode中怎么躲避安全检测

命令执行

大家先停一下,我们整理一下:

1、恶意代码就是我们的Shellcode - stage 0或stage 1代码是真正执行恶意操作的代码。

2、标准的“Shellcode运行程序”会通过注入或直接执行的方式来运行恶意代码。

接下来,我们还需要一种执行已编译代码的方法,一般来说,我们可以通过可执行程序(exe)或动态链接库(DLL)来实现,不过红队研究人员更愿意使用lolbins命令来执行。

信息整合

我们将开发一个Shellcode运行工具(DLL),它可以利用lolbins实现,并且可以在不需要更新代码库的情况下实现注入式或非注入式的Shellcode,以此来保证灵活性。完成之后,我们将得到一个名叫DueDlligence的C# Shellcode运行程序,源代码可以点击【这里】获取。

DueDlligence项目可以快速地在之前提到的技术之间进行切换,我们只需要修改下图中的全局变量值即可:

Shellcode中怎么躲避安全检测

DueDLLigence DLL包含三个非托管的导出函数,这三个导出函数使用了Rasautou,Control,和Coregen这三个原生的Windows命令(本文所使用的Shellcode样本只会弹出calc.exe):

Shellcode中怎么躲避安全检测

打开源代码之后,你会发现样本使用了下列导出函数:

Shellcode中怎么躲避安全检测

首先,我们要生成我们的Shellcode,下图中,我们使用了Cobalt Strike来生成“rev_dns”监听器的原始Shellcode。完成之后,我们需要在Linux中运行下列命令来生成base64编码版本的Shellcode:

base64 -w0 payload.bin > [outputFileName]

Shellcode中怎么躲避安全检测

Shellcode中怎么躲避安全检测

接下来,我们需要用base64编码的我们自己的x86或x64 Payload替换第58行的base64编码的Shellcode,上图中我们生成了一个x86 Payload,有需要的话你可以修改“use x64 Payload”来生成一个x64 Payload。

此时,我们需要重新安装DueDLLigence(Visual Studio项目)中的未托管导出库,,因为有时当你使用不同的项目时,可能会导致DueDLLigence项目出现问题。你可以打开NuGet包管理终端,然后运行下列命令:

Install-Package UnmanagedExports -Version 1.2.7 command

Shellcode中怎么躲避安全检测

完成上述所有操作之后,需要构建源码和DLL。Visual Studio Pro自带的Dumpbin.exe可以帮助我们运行和测试生成的DLL,并查看导出函数:

Shellcode中怎么躲避安全检测

我们可以使用其他的lolbin技术来扩展上图中的导出函数列表,不过大家尽量把不需要使用的移除掉以减小Payload的体积。

Shellcode注入技术的现代检测方法

尽管Shellcode可以帮助我们规避检测,但还是有可能被检测到的,下面我们来分析几种进程注入技术。

在我们的Shellcode运行程序中,Shellcode注入技术(CreateRemoteThread和QueueUserAPC)会以挂起状态生成一个进程,然后向目标进程中注入Shellcode。比如说,我们选择explorer.exe来作为注入目标,我们的Payload将通过MSIExec来运行。之后会生成一个进程树,cmd.exe将生成msiexec.exe,并最终生成explorer.exe。

Shellcode中怎么躲避安全检测

在企业环境中,可以使用SIEM来收集遥测数据,以检测cmd.exe -> msiexec.exe -> explorer.exe进程树的执行情况。根据父-子进程的关系,防御端可以通过异常检测来识别潜在的恶意软件。

API钩子是EDR和反病毒产品常用的恶意软件检测技术,很多攻击者会使用类似PsSetCreateProcessNotifyRoutine(Ex)和PsSetCreateThreadNotifyRoutine(Ex)这样的内核程序来实现攻击。当进程注入发生时,一个进程会修改另一个进程地址空间中的内存保护机制,通过检测类似API的调用情况,随着红队和恶意攻击者继续开发新的进程注入技术,网络防御人员以及安全软件需要继续适应不断变化的环境。监视诸如virtualAllocex、virtualProtectEx、createRemoteThread和ntQueueAPCThread之类的Windows API函数调用可以为识别潜在恶意软件提供有价值的数据。除此之外,监视create process与create_suspended和create_hidden标志的使用可能有助于检测攻击者要注入的挂起或隐藏的进程。

Shellcode中怎么躲避安全检测

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI