【网络安全】DRIDEX木马巧用VEH混淆API调用流程
情报背景
DRIDEX是自2014年起活动至今的著名恶意银行木马家族,通常以OFFICE文档的方式进行文档钓鱼攻击。0xCERT的研究人员将其描述为精于防御规避的信息与凭据窃取恶意软件,利用众多C&C服务器令针对其的网络·封锁无能为力。DRIDEX在其历史行动中曾多次运用高级防御规避技术隐匿其恶意行为,其v4版本是第一个使用AtomBombing进程注入技术的恶意软件。
【学习资料】
而本文中将对其近期样本中利用向量化异常处理(VEH)机制混淆其API函数调用的手法进行分析研判,该手法对于动态静态分析均有较好的对抗效果。
攻击技术分析
亮点:利用VEH进行API调用混淆
关于向量化异常处理(VEH)
向量化异常处理(VEH)是结构化异常处理(SEH)的扩展,VEH的优先级先于SEH,且不依赖栈结构,而是以双链表的形式保存在堆中。应用程序可通过AddVectoredContinueHandler函数注册异常处理函数来监视和处理程序所有的异常。当程序执行过程中发生异常,该异常处理函数将被首先调用以处理异常。
PVOID AddVectoredContinueHandler(
ULONG First,
PVECTORED_EXCEPTION_HANDLER Handler
);
当异常处理函数捕获到异常时,将会拿到类型为EXCEPTION_POINTERS的参数。其中的ContextRecord成员保存了触发异常时的寄存器上下文,并在异常处理完成后恢复,通过修改EIP/ESP等寄存器便可劫持程序执行流程。
typedef struct _EXCEPTION_POINTERS {PEXCEPTION_RECORD ExceptionRecord;
PCONTEXT ContextRecord;
} EXCEPTION_POINTERS, *PEXCEPTION_POINTERS;
插入代码破坏动静态分析
开始的流程比较中规中矩,利用哈希匹配动态解析API地址放入寄存器之后,将函数参数依次推入栈中,之后调用函数。
而DRIDEX独居匠心之处则是未使用call指令直接调用函数,而是使用“int3+retn”的组合完成函数调用。这是一种一箭双雕的反分析手段:通过插入int3断点实现反调试、利用retn指令破坏程序静态函数分析。
正常执行流程下int3指令会触发异常,进入到VEH处理函数中完成最终的跳转。而当程序被动态调试分析时,int3断点异常会被调试器捕获并中断,给程序分析带来阻碍。分析者必须理解DRIDEX的反调试意图,对插入的指令进行恰当的处理,增加了动态分析的成本。
而插入的retn指令则会使ida等反编译工具将retn地址视为函数的结尾,忽略剩余的函数执行流程(如下图,对返回值的检查及后续跳转被反编译器忽略了)。
精巧设计的VEH跳转流程
DRIDEX通过动态解析获取AddVectoredContinueHandler的地址之后,将sub_687D40注册新的VEH异常处理函数。这意味着代码段中被插入的int3指令被执行时,异常将被捕获并交由该函数处理。
该异常处理函数会通过传入的ExceptionRecord的传入参数获取异常类型,若是断点导致的异常则将异常交由下一个异常处理函数。在接下来的异常处理过程中,DRIDEX读取存储于ContextRecord中的eax寄存器值(保存之前被解析的API地址),将其置于栈顶,并将EIP指向int3之后的retn指令。
当寄存器的篡改操作完成后,函数返回EXCEPTION_CONTINUE_EXCUTION,使得程序以被修改的上下文继续执行。当retn执行被执行时,被解析的API函数地址从栈顶弹出并跳转,完成一次隐蔽的API调用过程。
总结
DRIDEX在本次活动中利用向量化异常处理(VEH)对其调用API的行为进行了隐藏,在对抗动静态分析方面起到了较好的效果。但其异常触发与异常处理函数中的流程还较为简单,导致研究者可通过编写patch脚本等方式对函数调用流程进行修改,复原其原始逻辑。
向量化异常处理的利用潜力远不只如此,更加灵活地对其进行利用,可以在不修改程序代码段的前提下对整个程序的执行流程进行篡改,实现更加复杂的反调试反分析技巧。
【网络安全】DRIDEX木马巧用VEH混淆API调用流程相关推荐
- novaclient的api调用流程与开发
novaclient的api调用流程与开发 2015年07月05日 19:27:17 qiushanjushi 阅读数:3915 http://blog.csdn.net/tpiperatgod/ar ...
- 腾讯(表格OCR)API调用流程
目录 1.调用费用: 2.调用流程 1)腾讯云账号进行注册 2)开通文字识别服务 2)1)进入文字识别控制台:https://console.cloud.tencent.com/ocr/overvie ...
- 阿里云(表格OCR)API调用流程
目录 1.调用费用 2.调用流程 1)注册阿里云账号 2)开通服务 3)获取accessKeyId.accessKeySecret 4)运行代码(当前输入图片格式为url) 3.本地文件生成URL 1 ...
- Glib2基本api调用流程(十五)
****************************************************************************** 一.Glib2基本api g_object ...
- 【网易云信】推流SDK API 调用流程
SDK API 提供了C++封装的代码 本质是一个比较古老的c sdk nls_instance : 基于C API 创建了C++ 实例 给 用户 G:\CDN\PUSH\LiveStreaming_ ...
- 如何通过API调用来分析恶意软件
导读 在今年的上一个季度,我们发现有越来越多的恶意软件开始使用各种加密.封装和加壳等保护技术来对恶意代码进行混淆处理,以防止系统或程序对其进行识别.除此之外,这些技术甚至还会让研究人员对其的静态分析变 ...
- 通过Hook API调用打造进程监控程序
*(收藏)http://hi.baidu.com/linuxetc/blog/item/1b91c813b017e4035baf53a7.html Hook(钩子)是Windows消息处理过程中的一个 ...
- 跟着Code走,详解Symbian OS API调用过程
作为一个被Symbian开发折磨过的人,当得知Symbian开源时,忍不住马上跑到developer.symbian.org上瞧一瞧,看看自己具体是怎样被折磨的.看了一段时间之后,想想还是把有些东西记 ...
- RPC 笔记(01)— RPC概念、调用流程、RPC 与 Restful API 区别
1. 基本概念 PRC 远程过程调用 Remote Procedure Call,其就是一个节点请求另外一个节点提供的服务.当两个物理分离的子系统需要建立逻辑上的关联时,RPC 是牵线搭桥的常见技术手 ...
- Tensorflow C++ API调用Keras模型实现RGB图像语义分割
我的实验是基于PSPNet模型实现二维图像的语义分割,下面的代码直接从得到的h5文件开始往下做... 也不知道是自己的检索能力出现了问题还是咋回事,搜遍全网都没有可以直接拿来用的语义分割代码,东拼西凑 ...
最新文章
- There is no Citrix MetaFrame server configured on the specified address错误的解决方法
- 怎样能做好百度竞价推广?不妨参考下这篇竞价推广的日常工作流程
- 在AD中恢复误删除的对象
- nginx https http2
- ASP.NET MVC 阻止通过URL访问服务器上的静态资源文件
- 如何做一个合格的面试官?
- 免費玩雲端運算,Amazon Web Service 雲端運算平台攻略 【1】
- Prometheus-普罗米修斯:高扩展性的监控和报警系统
- 一个老博士的经验顺口溜
- 世界末日倒计时 js代码
- 后端返回list前端如何处理_前端、后端、全栈是什么?薪资前景如何?
- C语言来实现链表创建
- 偏振光工业相机_工业相机选择六大参数必看
- shell脚本 插队
- 计算机科学排名靠前的大学,纽约州计算机科学学院排名前十的大学哪几所?
- 微信文章抓取:微信公众号文章抓取常识之临时链接、永久链接
- 软件工程作业之甘特图
- python中的eval函数
- ssm学生宿舍管理系统源码
- Python 用ARIMA、GARCH模型预测分析股票市场收益率时间序列
热门文章
- syn_sent mysql_服务器上出现大量的SYN_RECV或者SYN_SENT状态的TCP连接的问题分析
- 速卖通店铺流量下滑什么原因,如何做提升?(测评补单)
- 计算机无法正常启动安全模式开启,Win7电脑开机无法正常启动只能进入安全模式怎么解决...
- 23位子网掩码是多少_24 28 30 位的子网掩码是多少
- centos7 文件系统修复
- 精神小伙儿探秘JVM( 六)
- WPS Excel+windows批处理批量重排序文件夹
- 计算机无法连接steam,无法连接至steam网络怎么办 无法连接至steam网络解决方法【图文】...
- 内置平头哥玄铁的WiFi和蓝牙芯片
- w7忘记计算机密码,忘记电脑开机密码怎么办windows7_win7电脑忘记开机密码解决方法...