免杀对抗初探

免杀

Posted by hmoytx on October 20, 2019

免杀对抗初探

简介

所谓免杀就是对抗各种防御软件的查杀,针对不通层面的查杀,需要分多种角度去进行响应的处理,绕过查杀。

  • 静态扫描
  • 内存扫描
  • 流量分析
  • 行为分析

因为我是个彩笔,所以我这就简单的过下几个基础的查杀,杀软对抗,还有行为分析,流量什么的不会改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。
191020_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。
    191020_4
    191020_3

    总结

    实话说效果不是很好,也不想贴图了,360和windows defender会查杀。
    191020_2
    还是要努力啊。。。