免杀对抗初探
简介
所谓免杀就是对抗各种防御软件的查杀,针对不通层面的查杀,需要分多种角度去进行响应的处理,绕过查杀。
- 静态扫描
- 内存扫描
- 流量分析
- 行为分析
因为我是个彩笔,所以我这就简单的过下几个基础的查杀,杀软对抗,还有行为分析,流量什么的不会改C2文件,不要问。
静态扫描
对抗起来相对简单,常见就是shellcode加密,内存加载不落地,各有优缺点,这里就以shellcode加密为例进行尝试,加密对抗免杀原理是:使杀软无法直接获取到执行的shellcode,杀软不会去尝试解密,性能在那里。缺点也很明显,引入了加解密函数,size可能会不可控。
内存扫描
常见的方式是DLL还有使用自定义的shellcode加载器,杀软通常对DLL的审查会宽松点,不同语言的加载器特征不同,查杀起来没办法很好跟进。
流量分析
常见就是域名前置,使用白域名,这里不是重点,其实我也不会。
行为分析
恶意行为只在特定情况下在执行,在vm中,沙箱中不执行。
开始实践
环境
用了个veil的docker,这里是以veil来进行免杀示范。
docker pull mattiasohlsson/veil
docker run -it -v /tmp/veil-out:/var/lib/veil/output:Z mattiasohlsson/veil
将docker中veil生成的可执行文件映射保存到本地的目录下。
启动后:
===============================================================================
Veil | [Version]: 3.1.11
===============================================================================
[Web]: https://www.veil-framework.com/ | [Twitter]: @VeilFramework
===============================================================================
Main Menu
2 tools loaded
Available Tools:
1) Evasion
2) Ordnance
Available Commands:
exit Completely exit Veil
info Information on a specific tool
list List available tools
options Show Veil configuration
update Update Veil
use Use a specific tool
Veil>:use 1
这里呢是对文件做免杀,所以选1,use 1。
我选择了go语言生成的shellcode注入,然后看选项:
Name Value Description
---- ----- -----------
BADMACS FALSE Check for VM based MAC addresses
CLICKTRACK X Require X number of clicks before execution
COMPILE_TO_EXE Y Compile to an executable
CURSORCHECK FALSE Check for mouse movements
DISKSIZE X Check for a minimum number of gigs for hard disk
HOSTNAME X Optional: Required system hostname
INJECT_METHOD Virtual Virtual or Heap
MINPROCS X Minimum number of running processes
PROCCHECK FALSE Check for active VM processes
PROCESSORS X Optional: Minimum number of processors
RAMCHECK FALSE Check for at least 3 gigs of RAM
SLEEP X Optional: Sleep "Y" seconds, check if accelerated
USERNAME X Optional: The required user account
USERPROMPT FALSE Prompt user prior to injection
UTCCHECK FALSE Check if system uses UTC time
介绍下这些参数:
- BADMACS 设置为Y表示 查看运行环境的MAC地址如果不是虚拟机才会执行payload (反调试)
- CLICKTRACK 设置为4表示 表示需要4次点击才会执行
- DISKSIZE 设置为100表示 运行环境的硬盘大小如果大于100GB才会执行payload (反沙箱)
- COMPILE_TO_EXE 设置为Y表示 编译为exe文件
- HOSTNAME 设置为Comp1表示 只有在Hostname计算机名为Comp1时才会执行payload(指定目标环境 反沙箱的方式)
- INJECT_METHOD 可设置为Virtual 或 Heap
- MINPROCS 设置为20表示 只有运行环境的运行进程数大于20时才会执行payload(指定目标环境 反沙箱的方式)
- PROCCHECK 设置为Y表示 只有运行环境的进程中没有虚拟机进程时才会执行payload(指定目标环境 反沙箱的方式)
- PROCESSORS 设置为2表示 只在至少2核的机器中才会执行payload(指定目标环境 反沙箱的方式)
- RAMCHECK 设置为Y表示 只在运行环境的内存为3G以上时才会执行payload(指定目标环境 反沙箱的方式)
- SLEEP 设置为10表示 休眠10秒 以检测是否运行过程中被加速(反沙箱)
- USERNAME 设置为Tom表示 只有在当前用户名为Tom的机器中才执行payload。
- USERPROMPT 设置为Y表示 在injection之前提醒用户(提示一个错误框,让用户误以为该程序执行错误才无法打开)
- DEBUGGER 设置为Y表示 当被调试器不被attached时才会执行payload (反调试)
- DOMAIN 设置为Comp表示 受害者计算机只有加入Comp域中时,才会执行payload(指定目标环境 反沙箱的方式)
- UTCCHECK 设置为Y表示 只在运行环境的系统使用UTC时间时,才会执行payload。
根据需求进行设置。
我这里设置一下内核数量,内存,硬盘大小检测,尝试下过沙箱虚拟机。[go/shellcode_inject/virtual>>]: set MINPROCS 20 [go/shellcode_inject/virtual>>]: set DISKSIZE 100 [go/shellcode_inject/virtual>>]: set RAMCHECK yes [go/shellcode_inject/virtual>>]: set SLEEP 10
然后generate即可。
填入cs生成的shellcode。
总结
实话说效果不是很好,也不想贴图了,360和windows defender会查杀。
还是要努力啊。。。