初生牛犊:Windows下Anti-sandboxes技术探究
由于云端杀毒的流行,病毒基本上都会加上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日。
如,通过注入数百万个无效的任意系统调用,除了减慢执行速度,特别是在被监视或仿真的环境中执行时,会显着降低执行速度。
- 系统事件
- 仅在关机,重新启动或有人登录或关闭后才能生效。
- 图2显示了一个示例,其中仅在重新启动后才将二级有效负载下拉。我们可以在VTI分数中看到可执行文件由恶意软件(初始有效载荷)安装,这将在启动后自动运行。正是这个启动过程获取第二个有效载荷。
3.用户互动
- 等待鼠标移动(但不要太快,因为这是一个沙盒)或键盘输入。
- 与某些应用程序进行交互,例如浏览器,电子邮件,Skype,在线银行应用程序。
- 假安装程序:恶意软件只有在用户单击多个按钮并检查各种复选框后才会激活(参见图2)。
- 具有恶意嵌入式内容的Office文档:当用户向下滚动(查看)或单击时,恶意内容才会生效。
4.检测特定的目标系统
复杂的有针对性的恶意软件只适用于预期的目标系统。标识通常基于当前用户名,时区,键盘布局,IP地址或其他系统工件。支票本身可以通过各种方式完成,从简单到非常复杂的方法。
- 简单检查包括字符串检查。
- 如果预期的目标环境不知道,复杂检查(例如,从环境设置中获取的散列解密)几乎不可破坏。
如果恶意软件确定它在预期的目标环境中,则只进入第二阶段(即下载主要有效载荷)。
初生牛犊:Windows下Anti-sandboxes技术探究的更多相关文章
- Windows 下多线程编程技术
(1) 线程的创建:(主要以下2种) CWinThread* AfxBeginThread(AFX_THREADPROC pfnThreadProc, LPVOID lParam, int nPrio ...
- Windows下查看硬连接引用技术
Win10有了bash,可以方便的进入并用ll查看文件的硬连接数. 但是用powershell直接查看就比较麻烦了,比较曲折的找到了方法: fsutil hardlink list [filename ...
- [技术博客] 利用Vagrant+virtualbox在windows下进行linux开发
目录 加速box安装的方法 root账户登录 换源教程 安装rvm 访问rails server RubyMine连接虚拟机上的解释器 作者:庄廓然 在windows下进行linux开发:利用Vagr ...
- 网站相关技术探究keepalive_timeout(转)
网站相关技术探究keepalive设多少: /proc/$PID/fd/$number 0:标准输入 1:标准输出 2:标准错误 Test: [root@KTQT ~]# ll /proc/12 ...
- Windows下构建ASP.NET Core+Code First+Docker
背景介绍 本文将会示范如何在Windows系统下基于ASP.NET Core构建跨平台服务,并通过Docker容器运行发布. 首先说一下为什么选择这一套组合: 我本人和我们Code4Thought团队 ...
- .Net环境下的缓存技术介绍 (转)
.Net环境下的缓存技术介绍 (转) 摘要:介绍缓存的基本概念和常用的缓存技术,给出了各种技术的实现机制的简单介绍和适用范围说明,以及设计缓存方案应该考虑的问题(共17页) 1 概念 ...
- windows下nginx安装、配置与使用(转载)
目前国内各大门户网站已经部署了Nginx,如新浪.网易.腾讯等:国内几个重要的视频分享网站也部署了Nginx,如六房间.酷6等.新近发现Nginx 技术在国内日趋火热,越来越多的网站开始部署Nginx ...
- Redhat/Ubuntu/Windows下安装Docker
Redhat/Ubuntu/Windows下安装Docker 什么是Docker Docker是Docker.inc公司开源的一个基于LXC技术之上构建的Container容器引擎,基于Go语言并遵从 ...
- windows下使用火狐浏览器插件AutoProxy+MyEnTunnel+SSH访问海外站点(转)
windows下使用火狐浏览器插件AutoProxy+MyEnTunnel+SSH访问海外站点 平时需要查阅一些技术资料,光走VPN太浪费流量,所以这儿教大家一种使用火狐浏览器的插件 AutoPr ...
- Windows下底层数据包发送实战
1.简介 所谓“底层数据包”指的是在“运行”于数据链路层的数据包,简单的说就是“以太网帧”,而我们常用的Socket只能发送“运行”在传输层的TCP.UDP等包,这些传输层数据包已经能满足绝大部分需求 ...
随机推荐
- JAVA JDBC(存储过程和事务管理)
1.什么是存储过程 存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程 ...
- 【bzoj3648】环套树+点分治+树状数组
tree 1s 128M by hzw czy神犇种了一棵树,他想知道地球的质量 给定一棵n个点的树,求树上经过点的个数≥K的路径数量ans 对于部分数据,树上某两点间会多出最多一条无向边 输入数据 ...
- bzoj 2762: [JLOI2011]不等式组——树状数组
旺汪与旺喵最近在做一些不等式的练习.这些不等式都是形如ax+b>c 的一元不等式.当然,解这些不等式对旺汪来说太简单了,所以旺喵想挑战旺汪.旺喵给出一组一元不等式,并给出一个数值 .旺汪需要回答 ...
- iOS-Apple苹果iPhone开发公开API
iOS-Apple苹果iPhone开发 //技术博客http://www.cnblogs.com/ChenYilong/ 新浪微博http://weibo.com/luohanchenyilo ...
- 【洛谷 P4180】【模板】严格次小生成树[BJWC2010](倍增)
题目链接 题意如题. 这题作为我们KS图论的T4,我直接打了个很暴力的暴力,骗了20分.. 当然,我们KS里的数据范围远不及这题. 这题我debug了整整一个晚上还没debug出来,第二天早上眼前一亮 ...
- 边绘边理解prototype跟__proto__
网上流传着一张讲解prototype跟__proto__关系的图,尽管他已经描绘的很清楚了,但对于初学者来说,江太公感觉还是过于纠结,于是起心重绘,让他们之间的关系更加明晰可理解,一方面出于分享目的, ...
- Part2-HttpClient官方教程-Chapter7-高级主题(Advanced topics) (HTTP Caching)
原文链接 7.1 自定义客户端连接 在某些情况下,为了能够处理非标准的.不兼容的行为,可能需要自定义HTTP消息通过网络传输的方式,而不是使用HTTP参数.例如,对于web爬虫,可能有必要迫使Http ...
- [Leetcode Week12]Unique Paths
Unique Paths 题解 原创文章,拒绝转载 题目来源:https://leetcode.com/problems/unique-paths/description/ Description A ...
- printk %pF %pS含义【转】
作者:啐楼链接:https://www.zhihu.com/question/37769890/answer/73532192来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出 ...
- 2017多校第4场 HDU 6078 Wavel Sequence DP
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6078 题意:求两个序列的公共波形子序列的个数. 解法: 类似于最长公共上升子序列,对于每个i,只考虑存 ...