早在几个月之前,我就已经写出来一个bypass 几乎所有杀软上线的程序,不过陆陆续续给予不同需求的人使用,就在几天前,我再度在本地测试,已经被捕获到相关的特征,由于已经有相关的特征,我这里也不会发表源码了。
早在之前使用不一样的编码,绕过静态查杀,不过整个程序是否免杀【bypass】,与你的编码,或者说是加密方式没有任何关系,重点取决于你是如何加载整个程序的。
一般的查杀方式:
计算程序的md5,对已经存在的特征库进行比较,如果没有,那么杀软可能会上传整个程序,这里也不要去信任杀软的官方解释【我们不上传任何程序,只获取md5 hash这些说法】,对于做免杀的来说,程序上传是一大忌讳,建议测试都是断网。
卡巴斯基的相关研究
本次就是对高级版的卡巴斯基的程序进行测试,测试了各种方式,一度让我陷入了自闭,真的bypass不了了吗?
几个月之前我曾使用syscall成功绕过卡巴斯基的动态检测,也使用其他的方式同样绕过,几个月之后,发现卡巴斯基的学习能力是真的快,我不敢保证程序没有被泄露。
经过一度的研究,发现卡巴斯基主要是流量监控和系统监控两个方便特别优秀:
流量监控:
对外部ip检测【这个就很纳闷了,卡巴斯基同样对白名单进行检测,我真的郁闷,白名单还有什么用呢?】
系统监控:
1. 对exe底层的挂钩【syscall已经成为过去时,卡巴斯基挂钩大部分的syscall函数】
2. 内存流量特征【也就是说,我们的shellcode,自解密之后是原始shellcode驻留在内存中,卡巴斯基也可检测到解密之后的特征,几个月之前,我测试卡巴斯基也没有被检测出来,现在也被检测到了】
其实测试exe的时候,有些方法也是过了的,不过它识别相关的流量特征,也就是说如果我们有一个全新的shellcode,那么同样也能绕过卡巴斯基。这样就需要去修改C2的源码,修改为全新的特征,基于目前来说,我暂时没有这样做。
测试
之前测试了windows defender ,node32,kaspersky.某绒,某60:
不过windows defender的查杀效果还是不是那么的好,同样syscall都windows defender同样适用的,不过像node32和kaspersky就不适用了:
NTSTATUS NTAVM = NtAllocateVirtualMemory(hProc, &base_addr, 0, (PSIZE_T)&calc_len, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
RtlMoveMemory(base_addr, calc_payload, calc_len);
NTSTATUS NTPVM = NtProtectVirtualMemory(hProc, &base_addr, (PSIZE_T)&calc_len, PAGE_EXECUTE_READ, &oldprotect);
NTSTATUS ct = NtCreateThreadEx(&thandle, GENERIC_EXECUTE, NULL, hProc, base_addr, NULL, FALSE, 0, 0, 0, NULL);
这种方式同样还可以使用于windows defender。但是某绒,某60本人没有去测试。
另外,解密方式的话,很多人都需要使用异或,建议使用复杂的加密算法,如果使用异或的同样可以【还有一种方式就是shellcode自解密,当然这个有长度限制,针对于cobaltstrike这种是不适用的】:
替换字符,比如加密的时候把f替换为a,解密就替换回去
最终程序测试
卡巴斯基:
某60:
某绒:
希望对大家有所帮助。
作者:angels,转载于:PWN安全汇
注:如有侵权请联系删除
热文推荐
欢迎关注LemonSec
觉得不错点个“赞”、“在看”