首页
社区
课程
招聘
[原创]杀软浅析及cobaltstrike免杀wd卡巴实践
发表于: 2021-12-29 10:22 44660

[原创]杀软浅析及cobaltstrike免杀wd卡巴实践

2021-12-29 10:22
44660

一起小结下浅析常见杀软及cobaltstrike过windows defender、卡巴实践。文章有很多待补充及实践的地方,谢谢大家。

静态查杀:主要基于hash和特征码,hash可以是文件的hash或导入表之类的hash,特征码可以是是PE头、pdb、全局字符串、互斥体之类的信息。
动态查杀:基于API的监控和沙箱执行,杀软会通过对ntdll的关键API进行hook,实现对程序的API监控。另外可以在内核中注册一系列的回调函数实现对行为的监控。
启发式:多数杀软采用的是基于权重的启发式,就是一套加减分的规则,用于检测程序的潜在恶意行为,如程序在沙盒或模拟器环境运行,在此过程中有操作端口和通讯的函数,并将自身加载到启动项中等上述行为,则很有可能被判定为恶意,另外一些畸形区块也可触发。

杀软的基本功能包括:反病毒内核、扫描引擎、特征库、解包程序、模拟器、流量监控、浏览器安全插件、自我保护及更新等。
首先我们可以先从相应的驱动着手,杀软已经在system进程中加载了不同功能的驱动:

我们可以简单瞅瞅里面的驱动,先以360FsFlt.sys为例子:
根据导入表中的回调函数,可见该驱动对进程、线程、模块、对象及注册表均进行了相应的监控操作:


然后一系列Flt系列的函数,可见该驱动是Minifilter文件监控:

其中FltRegisterFilter()是用来注册为过滤器的(注意第二个参数是一个微过滤器注册结构体),然后通过FltCreateCommonicationProt()注册通讯端口与用户态通讯,最后调用FltStartFiltering()开始过滤操作:


微过滤器注册结构体,注意其第五个属性Operation Registion,为文件操作的回调函数注册的地方。

我们再外后看,像比较敏感explorer、wscript等程序运行时也会挂载相应的dll:

当我们的文件落盘后360的托盘程序也会拉起,:

我们自身程序在双机运行后,360的托盘程序也同样会拉起:

对我们所运行的程序进行一系列文件相关的操作:

我们可以观察其调用堆栈,由此可以决定处出每次createFile是由那个dll拉起的:

同样我们可以使用Autorun 过滤关键字得知360在注册表哪些地方做了持久化:
HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run:

HKLM\System\CurrentControlSet\Services:

HKLM\System\CurrentControlSet\Services:

Ntdll HOOK
Edr通常会hook住ntdll,是程序后续的操作走入edr的流程,下面在edr中是被hook住的函数:

下面图片中红色框中的是正常的NtWriteVirtualMemey()流程,而在下方的NtWriteVirtualMemory()已经被hook住了 jmp指令跳转到了其他的流程。

内核回调:
内核回调是杀软检测出敏感行为的一个重要手段,常用的由进程监控、线程监控、模块监控、对象监控、文件的过滤器、网络监控等等,如下图所示。

花指令本质上是一段可有可无的代码,插入花指令后会使反汇编器出错,但不影响程序的实际执行。如下图,用xor/cmp/jz/jnz方式迷惑了x32dbg,使其不能正确显示出call eax:

对comodo类型沙箱,可以尝试使用不常见的系统API,如SetErrorMode;当我们自己的代码调用SetErrorMode并向其传入参数为1024,然后再次调用SetErrorMode,但传入不为1024的参数值,此时第二次调用SetErrorMode的返回值一定为第一次所设的参数值;尝试修改在用户态不能修改的寄存器,如CR0等;当文件区块数为0或大于96个时,部分杀软有可能会认为该PE文件已损坏,因为当在xp时最大支持的区段块为96个,超过就无法执行,目前vista开始最大支持65535个;区块数也可为0,即NumberOfSections值为NULL。另外AddressOfEntryPoint值也可为NULL,即表示入口点在偏移量在0x00处。

对微步、VT类型沙箱,可以从进程,有几个用来分析的进程检测,process name : AcrylicService.exe // DNS代理程序,用来检测DNS流量;
壁纸,微步沙箱的壁纸(桌面图标)每次是不变的
C:\Users\vbccsb\AppData\Roaming\Microsoft\Windows\Themes\TranscodedWallpaper.jpg //路径
1645643018 //壁纸文件的hash
系统用户名 ,每次运行沙箱的用户名不变 ,都是vbccsb
主机名:VBCCSB-PC
用户名:vbccsb_*
系统制作厂商和型号 , 正常PC的系统制作厂商都是电脑的牌子 DELL、LENEVO、ASUS
// 微步
System Manufacturer: System manufacturer
System Model: System manufacturer
性能指标,例如 内存大小、CPU核数等,现在很少见内存少于4G的PC
Total Physical Memory: 3,071 MB

常见的特征码有字节流、某段数据的校验和、文件的hash、模糊散列算法(针对变化较小的样本集合)、基于流程图调用图的散列算法(一般不用),这里以字节流特征码为例。
特征码定位是比较经典的技术了,主要用于静态文件查杀的对抗,常用的工具有myccl、virtest等,其工具原理在保留pe格式下不断抹去其中的数据(逐块暴露),最终得到一个免杀的文件,而被抹去的数据就是相应的特征码(还是分治算法那套)。
同一个样本在不同杀软下定位出来的特征码是有很大差别的,特征码可以在数据段、代码段、导入表、重定位表等地方出现,下面分别以cs生成的bin在wd和火绒作为例子:
在wd环境下定位出3处特征,两处在代码段一处在重定位表中,代码段第一处为FF 15call 调用了writeProcessMemory


第二处是在sub_10009708函数中,其中dword_10039888这个全局变量为被异或后的配置信息:

第三处特征码在LoadConfigurationDirectory载入配置表中:

在火绒下所定位到的特征,在data段和rdata。


由上图可见左图的单一循环,在控制流平坦化后分成多个case代码块和一个入口块。前驱模块(case 2)主要是进行基本块的分发,分发通过改变switch变量来实现。后继模块(case3)也可用于更新switch变量的值,并跳转到switch开始处。
项目参考:https://github.com/obfuscator-llvm/obfuscator/tree/llvm-4.0
下图是加入混淆后的main函数,可见函数的流程已经被混淆。
-mllvm -sub -mllvm -fla -mllvm -split -mllvm -split_num=2

通过BeyondCompare观察得每次所生成的可执行文件中的代码段会发生明显差异(也可通过BIndiff观察):

UINT_PTR SetTimer(
HWND hWnd, // 窗口句柄
UINT_PTR nIDEvent, // 定时器ID,多个定时器时,可以通过该ID判断是哪个定时器
UINT uElapse, // 时间间隔,单位为毫秒
TIMERPROC lpTimerFunc // 回调函数
);
我们可以在第四个参数(即回调函数)中填入shellcode地址;

更多的执行方式可以参考这个项目:https://github.com/S4R1N/AlternativeShellcodeExec
同样复制shellcode到内存中的操作可以使用不同的API,如LdapUTF8ToUnicode、UuidFromStringA,或者使用挂在pe节,使用系统对其自行加载,我们再执行。

因为ntdll.dll是普通应用程序从3环进0环的必经之路,而通过hook ntdll中的敏感函数可以使得改程序的后续流程走到杀软程序,从而对其后续行为做相应的检测,常用的syscall项目有HellsGate、syswhipers。当程序使用syscall就像红色的箭头,直接到达syscall table,绕过了被hook所圈起来的ntdll。

分离加载(Installer、Code、Loader)的方式,这种三端分离的方式能更好的反沙箱,因为通常情况下只会上传Loader进沙箱,而Code是可以在伪装成bmp图片后另外存放的,Install将加密后的Core隐藏在注册表、UUID、WMI中,最后Loader在相应空间提取出Core后,再利用保存在自身中的Key将其解密,最后内存加载执行加载。

参考项目:https://github.com/plackyhacker/Suspended-Thread-Injection/blob/main/injection.cs



[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 17
支持
分享
打赏 + 1.00雪花
打赏次数 1 雪花 + 1.00
 
赞赏  mb_qdfvmltk   +1.00 2023/03/15 鸡哥,你好。想付费找你帮个忙。v心:nico789nico
最新回复 (22)
雪    币: 56
活跃值: (1397)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
2
鸡哥为何如此优秀
2021-12-29 11:41
0
雪    币: 2865
活跃值: (8493)
能力值: ( LV13,RANK:390 )
在线值:
发帖
回帖
粉丝
3
zhj张尼玛 鸡哥为何如此优秀
大佬见笑了
2021-12-29 11:58
0
雪    币: 3126
活跃值: (3416)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
4
补充4.8:有个工具叫Get-InjectedThread通过检测线程的起始地址内存属性是否存在MEM_IMAGE属性来判断进程是否被注入,在创建远程线程后可以通过两个方法绕过这种检测一是:CreateRemoteThread(挂起创建)回调改为一合法函数地址例如Loadlibrary,参数为空,随后设置线程上下文指向shellcode,二是通过寻找jmp ecx(针对64位)地址作为回调,同时参数传入shellcode地址。详见:https://blog.xpnsec.com/undersanding-and-evading-get-injectedthread/#Return-Oriented%E2%80%A6-urm-threading
2021-12-29 14:18
2
雪    币: 3126
活跃值: (3416)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
5

重复了。。。删除

最后于 2021-12-29 14:20 被dayday向上8编辑 ,原因:
2021-12-29 14:18
0
雪    币: 210
活跃值: (1847)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
哈哈哈哈 这款特征码免杀工具真的是太经典了 相比于MyCCL知名度不高但是贼好用啊 不愧是我鸡哥 看到标题我就知道估计是鸡哥写的
2021-12-29 15:28
0
雪    币: 2865
活跃值: (8493)
能力值: ( LV13,RANK:390 )
在线值:
发帖
回帖
粉丝
7
dayday向上8 补充4.8:有个工具叫Get-InjectedThread通过检测线程的起始地址内存属性是否存在MEM_IMAGE属性来判断进程是否被注入,在创建远程线程后可以通过两个方法绕过这种检测一是:Creat ...
nice!
2021-12-29 16:18
0
雪    币: 2865
活跃值: (8493)
能力值: ( LV13,RANK:390 )
在线值:
发帖
回帖
粉丝
8
wx_0xC05StackOver 哈哈哈哈 这款特征码免杀工具真的是太经典了 相比于MyCCL知名度不高但是贼好用啊 不愧是我鸡哥 看到标题我就知道估计是鸡哥写的
hh
2021-12-29 16:18
0
雪    币: 627
活跃值: (1578)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
9
带带弟弟
2021-12-29 16:20
0
雪    币: 3998
活跃值: (5136)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
10
鸡哥很久没发文章了,内力又增强不少。
2021-12-29 22:02
0
雪    币: 2865
活跃值: (8493)
能力值: ( LV13,RANK:390 )
在线值:
发帖
回帖
粉丝
11
舒默哦 [em_67]鸡哥很久没发文章了,内力又增强不少。
依旧的菜
2021-12-30 08:37
0
雪    币: 4820
活跃值: (3369)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
我不太理解360的云上传后,是在干什么,过几分钟就会给一个结果,暂未发现风险,安全文件,低风险等。他是上传进行一个类似哈勃的分析的启动时的形为吗,还有就是有时候编译的程序是暂未发现风险,放在电脑里面,几天后,又提示又杀了,我又没传播,一直在电脑上,怎么又会反复
2021-12-30 09:19
0
雪    币: 33
活跃值: (58)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
psr
13
鸡哥,  那个 :“三、杀软行为浅析”  这个章节下面的有颜色的 那个看进程的软件叫啥?谢谢!
2021-12-31 21:56
0
雪    币: 33
活跃值: (58)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
psr
14
鸡哥,还有一个软件,在  “然后一系列Flt系列的函数,可见该驱动是Minifilter文件监控:” 下面的这个图,好像是可以看这个导出函数的 工具叫啥?谢谢!
2021-12-31 22:29
0
雪    币: 2865
活跃值: (8493)
能力值: ( LV13,RANK:390 )
在线值:
发帖
回帖
粉丝
15
psr 鸡哥,还有一个软件,在 “然后一系列Flt系列的函数,可见该驱动是Minifilter文件监控:” 下面的这个图,好像是可以看这个导出函数的 工具叫啥?谢谢!
就微软的套件和IDA而已
2022-1-2 16:14
0
雪    币: 20
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
16
学习
2022-1-3 03:02
0
雪    币: 70
活跃值: (2125)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
鸡哥的文章读起来上瘾
2022-1-26 13:05
0
雪    币: 16
活跃值: (527)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
大佬,请问一下,为什么360的恢复区恢复文件时,我用procmon监控不到他这个恢复过程呢
2022-2-22 17:19
0
雪    币: 18
活跃值: (118)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
膜拜我鸡哥
2022-3-10 03:30
0
雪    币: 33
活跃值: (121)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
2022-6-5 22:13
0
雪    币: 107
活跃值: (1769)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
21
wx_0xC05StackOver 哈哈哈哈 这款特征码免杀工具真的是太经典了 相比于MyCCL知名度不高但是贼好用啊 不愧是我鸡哥 看到标题我就知道估计是鸡哥写的
啥工具,有下载地址么
2023-7-3 10:35
0
雪    币: 999
活跃值: (105)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
我电脑上上传msf马,360报毒以后为什么连int main() {return 0;}这样的空程序都杀,实在是搞不懂了,现在不管上传什么都会被杀。
2023-7-11 20:03
0
雪    币: 3739
活跃值: (31066)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
tql
2023-7-12 09:58
1
游客
登录 | 注册 方可回帖
返回
//