吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 8871|回复: 26
收起左侧

[PC样本分析] 魔改cobalstrike免杀:三板斧再锤卡巴

  [复制链接]
mai1zhi2 发表于 2021-5-15 09:57
使用论坛附件上传样本压缩包时必须使用压缩密码保护,压缩密码:52pojie,否则会导致论坛被杀毒软件等误报,论坛有权随时删除相关附件和帖子!
病毒分析分区附件样本、网址谨慎下载点击,可能对计算机产生破坏,仅供安全人员在法律允许范围内研究,禁止非法用途!
禁止求非法渗透测试、非法网络攻击、获取隐私等违法内容,即使对方是非法内容,也应向警方求助!
本帖最后由 mai1zhi2 于 2021-5-15 10:04 编辑

一、 概述
这次我们一起来探究如何规避卡巴的内存扫描,使得cobalstrike的beacon能够存活,主要原理就是:在beacon 发送完心跳包sleep,对自身的内存属性进行修改去除可执行属性和相关加密,其实现的方式有以下三种:
1、VEH Hook
2、SMC
3、InlineHook
下面会详细讲述各种方法。同时感谢BGWill师傅的文章,让我拓宽了见识。
相关代码已上传到项目中:https://github.com/mai1zhi2/CobaltstrikeSource/  


二、 前置操作
在项目使用了自定义资源,并把beacon放在项目的资源中,然后通过解析自身的pe结构找到自身的资源,从而进行加载,beacon放在资源可以自己异或加密,放在bmp图片后也是可以的:
图片1.png
图片2.png


三、VEH Hook   

  VEHHook是基于windows异常的一种Hook,所以这里要介绍下windows异常处理机制。
在windows中,当程序执行过程中发生异常时,系统内核的异常处理过程(nt!KiDispatchException)便开始工作。当在没有内核调试器存在且异常程序没有调试的情况下,windows系统就会把异常处理过程转交给用户层的异常处理过程(ntdll!RtlDispatchException),用户层会查找异常程序中是否安装了VEH、SHE、TopLevelExceptionHandler等异常处理过程,如果已安装则交给其处理。   

    所以,我们需要先在beacon端安装相应的异常处理过程,然后在发送心跳包时硬编码写下int3断点指令,当程序执行到int3就会触发异常,就会在windows用户态触发相应的处理过程,VEH->SHE->TopLevelExceptionHandler。在这里我们使用int 3+VEH Hook,因为VEH是全局的、基于进程、优先级高。 先找到发送心跳包处:
图片3.png

然后在对应pe文件中找到相应的位置,硬编码上int 3即CC:
图片4.png

然后安装VectoredHandler过程,当程序执行到断定时产生异常,该异常会被VectoredHandler所捕获:
_1.png

图片5.png


VectoredHandler()如下,在函数中我们需要判断发生异常的地址是否与预期一致,里面的context结构体有详细的栈、寄存器信息:
图片6.png
图片7.png

Win10 x64执行效果:
图片8.png
图片9.png

Win7 x86执行效果:
图片10.png
图片11.png


执行任务时内存属性:
图片12.png

内存中的断点位置:
_2.png

Sleep时的内存属性:
图片13.png


四、SMC
SMC(Self-Modifying Code),即能修改自身代码,对自己的代码进行打内存补丁。在beacon中,我们需要对心跳包的sleep()进行打补丁,将其修改我们自定义的MySleep()。
这里需要注意的操作有,
1)因为CS的beacon是反射注入的,其反射注入的函数会对其进行重定位,所以我们需要对其pe的重定位数据进行修改,否则,在打内存补丁后,又被反射注入函数进行重定位,MySleep的函数地址就会出错。这也是不能使用IineHook Call IAT的原因。   

   经过pe下数两行半等一系列数手指操作,找到需要修改的重定位数据:
图片14.png

2)自定义的MySleep()函数是stdcall的,不然栈会不平衡:
图片15.png

在Mysleep()中,需要找到反射注入dll所申请的内存区域,所以要从栈上找到返回地址,再去进行相应的判断,应该也能使用egghunter在内存中捞出所在区域。
3)修改资源中心跳包的sleep()函数地址:
图片16.png

Win10 x64执行效果:
图片17.png
图片18.png

Win7 x86执行效果:
图片19.png
图片20.png

Sleep时的内存属性:
图片21.png


五、Inline Hook
Inline Hook是直接修改指令的Hook,使得程序转移了所执行的流程,转移的方式也各异,主要有jmp xxxxxxxx、push xxxxxxxx/retn、mov eax,xxxxxxxx/jmp eax、call HookAddr(输入表地址)、HotPatch Hook。
使用Inline Hook要注意几个问题:
1、是当Hook操作时的线程安全问题,可以先暂停所有线程,再进行Hook操作,最后恢复线程去避免,而IAT Hook相当于原子操作,不存在这问题。因为我们这里是先Hook sleep(),再进行反射注入,所以也不存在这问题。
2、Detour函数重入,造成无限递归
3、Detour函数的线程安全问题,避免使用全局变量,若使用则要上锁。

这里我们稍改了下教主的框架,没有使用微软的InlineHook框架。这里先定义代替Sleep()函数的自定义函数,也即是Detour():
图片22.png

里面的OriginalSleep函数是一条跳转回去执行系统的Sleep()通道,里面需要恢复原来的指令,及绕过自己安装的Hook:
图片23.png

获取到需要Hook函数的地址并记录,通过LoadLibrary()GetProcAddress()获得系统Sleep()函数的地址,这里有个地方需要注意,或许因为编译版本不同,后面可能是FF25Jmp或E9 call 或者其他,这里debug编译的是FF25 Jmp,我们需要获取到Jmp后面地址所指向的值,该值才是真正系统Sleep()函数位置:
图片24.png

在系统Sleep()地址上,写入自己的跳转代码,一个E9 Jmp跳到先前自定义好的Sleep():
图片25.png

可以看到系统的Sleep()函数已经被Hook了:
图片26.png

一个Jmp跳转到我们自定义的MySleep()中:
图片27.png

其中有个E8 4E ED FF FF 这个Call是跳转回OriginalSleep函数,即跳转回去执行系统的Sleep()通道:
图片28.png

OriginalSleep函数中一个Jmp,绕过了Hook,执行回系统的Sleep()函数:
图片29.png

至此InlineHook完成。 Win10 x64执行效果:
图片30.png
图片31.png


六、小结      

这次我们通过相关Hook的方式,达到修改内存中Beacon的属性和数据等目的,但操作起来还是有点繁琐。谢谢大家观看,下次我们再继续深究。

参考:
https://xz.aliyun.com/t/9399#toc-1
加密与解密

免费评分

参与人数 11威望 +1 吾爱币 +31 热心值 +11 收起 理由
mdf3192078 + 1 + 1 谢谢@Thanks!
Hmily + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
zun925 + 1 + 1 谢谢@Thanks!
MFC + 1 + 1 谢谢@Thanks!
fxxxysh010 + 1 + 1 谢谢@Thanks!
不爱everyone + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
fengbolee + 2 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
nmy124 + 1 + 1 谢谢@Thanks!
小朋友呢 + 2 + 1 用心讨论,共获提升!
向天笑666 + 1 + 1 我很赞同!
爱吃西柚的狼 + 1 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

zhangzhixiang 发表于 2021-5-15 10:04
卡巴斯基:没想到吧,我有反反卡巴斯基软件
templs 发表于 2021-5-15 10:10
爱吃西柚的狼 发表于 2021-5-15 11:24
LDF806 发表于 2021-5-15 12:13
专业收藏了
W6983585035 发表于 2021-5-15 12:23
非常感谢楼主的分享,收藏了
jodiedavid 发表于 2021-5-15 12:56
现在用的就是卡巴,学习ing
蝈蝈有梦想 发表于 2021-5-15 13:11
太专业了,看不懂
zzd1029 发表于 2021-5-15 14:57
卡巴你都敢锤 666 厉害了我的哥
我滴法克233333 发表于 2021-5-15 16:20
好东西 用来试试
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 09:38

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表