由于云端杀毒的流行,病毒基本上都会加上anti-sandboxes手段来躲避沙箱的探测,在这点上,由于一些原因,最近也一直在做这一块,所以算是总结一下吧。

一:什么是沙箱以及其他:

  根据受控环境中的观察行为确定文件是否恶意。沙箱允许恶意软件执行所有恶意​​操作,并记录生成的行为。过了一段时间后,分析停止,检查结果并扫描典型的恶意行为模式。基于行为的恶意软件检测仅在观察文件在其分析期间实际执行恶意操作时有效。如果 - 无论什么原因 - 在分析过程中都没有执行有害的操作,则沙箱得出结论:被检查的文件是良性的。

  所以,这也得出了anti-sandboxes的两种方式,一种是检测到沙箱之后,直接退出进程,另一种就是检测在沙箱时,显示良性行为。

anti-sandbox大致可以分为三种类型:

  1:直接检查沙箱

  2:利用沙箱的一些缺陷进行检测

  3:利用运行时环境进行检测

二:沙箱anti方式

1:直接检查沙箱

  关于沙箱的检查,其实任何和正常主机不相似的地方都可以作为anti方法。这里选取几种特别典型的方式

  1:检测设备名:

    通过使用诸如SetupDiGetClassDevsA,SetupDiEnumDeviceInfo和SetupDiGetDeviceRegistryPropertyA之类的API枚举设备细节来检测虚拟化软件的存在。在枚举之后,可以将其与Sandboxes中使用的已知值(如VMware Pointing,VMware Accelerated,VMware SCSI,VMware SVGA,VMware Replay,VMware服务器内存,CWSandbox,Virtual HD,QEMU等)进行比较,下面是一个病毒对于sandboxes的检测:

  2.利用注册表进行查询:

    注册表的查询各种各样,这里选取一些经典的例子:

    HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Disk\Enum 像vmware,qume,xen等虚拟化产品的值为0。

    除此之外,类似于  HKEY_CLASSES_ROOT\Applications\VMwareHostOpen.exe 还有 KEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\VideoBiosVersion等等.....

  3.利用硬件信息:

    这里包括但不限于:productId(在注册表里可以查),productName,mac地址以及CPUID等等........这里的原理在于,每一个沙箱沙箱的产品的这些信息一般是相同的。

  4.进程遍历:

    一个沙箱里,总有运行一些敏感的进程,做类似于hook或者其他的操作,一般使用Process32First()/Process32Next()进行便利,下面是一些常见的进程名称:

      "VBoxTray.exe"
"VBoxService.exe"
"VMwareUser.exe"
"VMwareTray.exe"
"VMUpgradeHelper.exe"
"vmtoolsd.exe"
"vmacthlp.exe"
    ....

  5.特有模块查询:

    这里的一般的套路是:

    沙盒在一个进程中注入模块以记录其执行的活动。由于安全沙箱使用的某些模块名称是公开的,因此它们被病毒用来通过以下方法来检测沙箱的存在:在模块名称上调用GetModuleHandleA()。如果返回的句柄为非空,则表示模块已加载。它通过调用  FreeLibrary()来卸载。一旦完成,沙箱将不会记录恶意软件执行的任何活动。病毒经常搜索的常见模块名称是dbghelp.dll,sbiedll.dll等。

  6.SSDT和shadowSSDT等结构进行校验:

    一般在沙箱中,需要对一个SSDT的函数指针进行hook,病毒可以通过加载内核模块,并进行读取。得到原始的ssdt表,利用zwSystemControlDebug(windows xp以前)函数读取内存中的ssdt表,进行比较校验。

    7.内核驱动遍历:

    不同的虚拟机都一些相关的驱动模块,可以利用zwSystemcontrolDebug函数进行遍历

2:利用沙箱的一些缺陷进行检测

  明确寻找沙箱的存在可以在分析过程中被检测为可疑活动。因此,更高级的恶意软件方法利用了沙箱技术中的弱点,无需检测即可执行操作。通过利用这些沙箱的弱点,恶意软件无需担心即使在沙盒系统中执行也被检测到。

  大多数沙盒在客户端进行监控,即将代码,进程,挂钩等放在分析​​环境中。如果这些修改被撤销或规避,则沙箱就不会起作用的 - 换句话说,分析环境的可见性将会丢失。可以采取以下形式:

  • 钩子去除

    • 可以通过恢复原始指令或数据来删除钩
  • 钩规避
    • 通过使用直接的系统调用代替API,调用私有函数(no hook)或执行未对齐的函数调用(跳过“挂钩代码”),可以避免钩子。我们可以在本分析报告  中看到一个例子,  其中检测到恶意软件使用非法的API来启动和破坏explorer.exe和regedit.exe。虽然这个问题可以通过这些特定内部函数的钩子解决,但是在操作系统中存在许多这些问题,并且它们随着每个Windows版本而变化。而且,通过挂钩,不能很好地解决未对齐的函数调用问题。
    • 系统文件替换:
    • 挂钩通常驻留在映射到内存中的系统文件中。某些恶意软件将取消映射这些文件并重新加载它们。新加载的文件版本然后是“未挂钩”
    • 内核代码。许多沙盒不能监视系统的内核代码或启动过程:晦涩的文件格式:许多沙箱不支持所有文件格式

      • Powershell,.hta,.dzip等是一些文件格式的例子,这些文件格式可能会在沙盒环境中滑倒,而且无法执行
  • ·系统文件替换:
    • 挂钩通常驻留在映射到内存中的系统文件中。某些恶意软件将取消映射这些文件并重新加载它们。新加载的文件版本然后是“未挂钩”
  • 内核代码。许多沙盒不能监视系统的内核代码或启动过程:
  • 晦涩的文件格式:许多沙箱不支持所有文件格式
    • Powershell,.hta,.dzip等是一些文件格式的例子,这些文件格式可能会在沙盒环境中滑倒,而且无法执行。
  • 许多沙箱不支持所有技术。虽然最初的感染向量(例如,具有宏的Word文档)可能会打开,并且宏在沙箱中运行,但宏将下载并运行使用隐藏的分析隐藏技术的有效内容。
  • 操作系统重启:
    • 许多沙盒无法在重新启动后生存。某些系统尝试通过重新登录用户来模拟重新启动,但是可以检测到这一点,并且不会执行所有重新启动的触发器。

   

    通过简单地压制目标分析环境,恶意软件也可以避免使用这种粗略但有时有效的方法进行分析。例如,

  • 一些沙箱仅支持一定大小的文件,例如10 MB
  • 其他人不支持多个压缩层

3:利用运行时环境进行检测 

  1.最常见的技术之一是延迟执行一段时间,因为沙箱通常只运行几分钟的采样。与许多其他逃避技术一样,特别是使用时间炸弹是一个持续的猫和老鼠游戏:恶意软件睡着了,沙箱尝试检测睡眠并缩短时间,恶意软件检测缩短的时间,沙盒试图隐藏时间向前还更新系统计时器等。

技术包括:

  简单到非常复杂的睡眠,例如彼此观看或相互依赖的并发线程。

  仅在特定时间或特定日期执行,例如星期一或上午12点或3月12日。

  如,通过注入数百万个无效的任意系统调用,除了减慢执行速度,特别是在被监视或仿真的环境中执行时,会显着降低执行速度。

  

  1. 系统事件
  • 仅在关机,重新启动或有人登录或关闭后才能生效。
  • 图2显示了一个示例,其中仅在重新启动后才将二级有效负载下拉。我们可以在VTI分数中看到可执行文件由恶意软件(初始有效载荷)安装,这将在启动后自动运行。正是这个启动过程获取第二个有效载荷。

  

  3.用户互动

  • 等待鼠标移动(但不要太快,因为这是一个沙盒)或键盘输入。
  • 与某些应用程序进行交互,例如浏览器,电子邮件,Skype,在线银行应用程序。
  • 假安装程序:恶意软件只有在用户单击多个按钮并检查各种复选框后才会激活(参见图2)。
  • 具有恶意嵌入式内容的Office文档:当用户向下滚动(查看)或单击时,恶意内容才会生效。

  

  4.检测特定的目标系统  

  复杂的有针对性的恶意软件只适用于预期的目标系统。标识通常基于当前用户名,时区,键盘布局,IP地址或其他系统工件。支票本身可以通过各种方式完成,从简单到非常复杂的方法。

  • 简单检查包括字符串检查。
  • 如果预期的目标环境不知道,复杂检查(例如,从环境设置中获取的散列解密)几乎不可破坏。

   如果恶意软件确定它在预期的目标环境中,则只进入第二阶段(即下载主要有效载荷)。

初生牛犊:Windows下Anti-sandboxes技术探究的更多相关文章

  1. Windows 下多线程编程技术

    (1) 线程的创建:(主要以下2种) CWinThread* AfxBeginThread(AFX_THREADPROC pfnThreadProc, LPVOID lParam, int nPrio ...

  2. Windows下查看硬连接引用技术

    Win10有了bash,可以方便的进入并用ll查看文件的硬连接数. 但是用powershell直接查看就比较麻烦了,比较曲折的找到了方法: fsutil hardlink list [filename ...

  3. [技术博客] 利用Vagrant+virtualbox在windows下进行linux开发

    目录 加速box安装的方法 root账户登录 换源教程 安装rvm 访问rails server RubyMine连接虚拟机上的解释器 作者:庄廓然 在windows下进行linux开发:利用Vagr ...

  4. 网站相关技术探究keepalive_timeout(转)

    网站相关技术探究keepalive设多少: /proc/$PID/fd/$number  0:标准输入 1:标准输出 2:标准错误   Test: [root@KTQT ~]# ll /proc/12 ...

  5. Windows下构建ASP.NET Core+Code First+Docker

    背景介绍 本文将会示范如何在Windows系统下基于ASP.NET Core构建跨平台服务,并通过Docker容器运行发布. 首先说一下为什么选择这一套组合: 我本人和我们Code4Thought团队 ...

  6. .Net环境下的缓存技术介绍 (转)

    .Net环境下的缓存技术介绍 (转) 摘要:介绍缓存的基本概念和常用的缓存技术,给出了各种技术的实现机制的简单介绍和适用范围说明,以及设计缓存方案应该考虑的问题(共17页) 1         概念 ...

  7. windows下nginx安装、配置与使用(转载)

    目前国内各大门户网站已经部署了Nginx,如新浪.网易.腾讯等:国内几个重要的视频分享网站也部署了Nginx,如六房间.酷6等.新近发现Nginx 技术在国内日趋火热,越来越多的网站开始部署Nginx ...

  8. Redhat/Ubuntu/Windows下安装Docker

    Redhat/Ubuntu/Windows下安装Docker 什么是Docker Docker是Docker.inc公司开源的一个基于LXC技术之上构建的Container容器引擎,基于Go语言并遵从 ...

  9. windows下使用火狐浏览器插件AutoProxy+MyEnTunnel+SSH访问海外站点(转)

    windows下使用火狐浏览器插件AutoProxy+MyEnTunnel+SSH访问海外站点   平时需要查阅一些技术资料,光走VPN太浪费流量,所以这儿教大家一种使用火狐浏览器的插件 AutoPr ...

  10. Windows下底层数据包发送实战

    1.简介 所谓“底层数据包”指的是在“运行”于数据链路层的数据包,简单的说就是“以太网帧”,而我们常用的Socket只能发送“运行”在传输层的TCP.UDP等包,这些传输层数据包已经能满足绝大部分需求 ...

随机推荐

  1. PowerDesigner16 时序图

    时序图(Sequence Diagram)是显示对象之间交互的图,这些对象是按时间顺序排列的.顺序图中显示的是参与交互的对象及其对象之间消息交互的顺序.时序图中包括的建模元素主要有:角色(Actor) ...

  2. Maven-Dependency Mechanism

    依赖管理是maven的一个广为人知的特性, 这也是maven擅长的一个领域. 为单一的工程管理依赖不是很难, 但当你着手处理多模块工程和包含数十或数百个模块的应用时, maven可以帮助你很好地保持高 ...

  3. 【BZOJ4816】【SDOI2017】数字表格 [莫比乌斯反演]

    数字表格 Time Limit: 50 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description Doris刚刚学习了fibonac ...

  4. 「6月雅礼集训 2017 Day5」吃干饭

    [题目大意] 询问[L,R]中选若干个数异或起来得到的答案集合大小.多组数据. 对于50%的数据,$R - L \leq 10^4$ 对于100%的数据,$R - L \leq 10^{18}, T ...

  5. [BZOJ2946][Poi2000]公共串解题报告|后缀自动机

    鉴于SAM要简洁一些...于是又写了一遍这题... 不过很好呢又学到了一些新的东西... 这里是用SA做这道题的方法 首先还是和两个字符串的一样,为第一个字符串建SAM 然后每一个字符串再在这个SAM ...

  6. Spring4+SpringMVC+MyBatis整合思路(山东数漫江湖)

    1.Spring框架的搭建 这个很简单,只需要web容器中注册org.springframework.web.context.ContextLoaderListener,并指定spring加载配置文件 ...

  7. Different Integers(牛客多校第一场+莫队做法)

    题目链接:https://www.nowcoder.com/acm/contest/139/J 题目: 题意:给你n个数,q次查询,对于每次查询得l,r,求1~l和r~n元素得种类. 莫队思路:1.将 ...

  8. cart回归树算法过程

    回归树:使用平方误差最小准则 训练集为:D={(x1,y1), (x2,y2), …, (xn,yn)}. 输出Y为连续变量,将输入划分为M个区域,分别为R1,R2,…,RM,每个区域的输出值分别为: ...

  9. mysql not null default / default

    not null default 说明不能是NULL, 并设置默认值 default 设置默认值 , 但值也可能是NULL mysql> create table test (id int, n ...

  10. 【bzoj4868】期末考试

    我还第一次见到省选考三分……? #include<bits/stdc++.h> #define N 200005 using namespace std; typedef long lon ...