论文阅读笔记-Towards Paving the Way for Large-Scale Windows Malware Analysis

CCS
Towards Paving
the Way for Large-Scale Windows Malware Analysis:
Generic Binary Unpacking with Orders-of-Magnitude Performance
Boost
https://rbonichon.github.io/asi36/papers/p395-cheng.pdf

摘要部分
1.文中指出打包工具会混淆API调用的标准用法,恶意软件使用导入地址表IAT来充当动态链接的API查找表,而IAT在打包时会被打包工具删除,并在解包时IAT会在代码还原前重建。
打包的恶意软件在运行期间,如果通过查找重建的IAT成功调用了API,那么说明恶意软件中原本的payload已被还原
2.提出了一种解包方法,之前的解包方法会受到恶意软件“现写后执行”的影响,文中提出的解包方法通过对API进行监控来分析恶意软件

第一章 介绍
1.文中列举了一些恶意软件反分析技巧,如通过“先写后执行”的方式来规避检测,且这种“先写后执行”的方法可以进行多次迭代加大检测难度,但
恶意软件中的payload总会与windows系统进行恶意交互,其大部分恶意软件会调用用户级API而不是本机API,因为大多数API语义信息在本机级别上是缺失的
2.通常二进制代码通过访问PE头的IAT来解析Windows API的地址,该IAT是调用
动态链接库(DLL)导出的API时的地址查找表。payload中涉及的Windows API含有与恶意软件相关的丰富语义,因此可以为安全分析人员分析恶意软件提供便利

第二章 背景与动机
1.文中强调可以通过观察api的调用来确定恶意软件解包的结束,即如果通过查找重建的IAT调用了API,则表明原始
代码已还原,并且执行流程已达到OEP,所以可以通过查找第一个使用重建后的IAT来调用的API,然后回溯来找到OEP
2.由于编译器在编译时不知道DLL API地址,因此PE文件必须动态解析DLL API地址,主要有两种方式:标准API解析,又名隐式链接;动
态API解析,也就是显式链接。前者通过访问PE文件头的导入地址表(IAT)获取API地址,后者必须进行函数调用以显式加载
DLL并在运行时获取导入函数地址。

第三章 概述
1.文中指出payload IAT的重建在进入OEP之前,在程序运行时若通过重建的IAT调用API那么说明payload代码已经被还原
文中提出的BinUnpack通过监控API的调用来追溯OEP

第四章 api监视器
在这里插入图片描述

  1. 文中首先指出通过监控用户级api和内核级api具有一定的局限性,并列举了一些恶意软件逃避api监控的方法。
  2. 文中的binunpack通过dll劫持的方法,用自定义的dll文件替换系统默认dll文件,来实现api监控,因大部分恶意软件都会调用NtMapViewOfSection

在这里插入图片描述
3. 文中提到了另一种非标准显示链接方式,不调用NtMapViewOfSection来加载dll,而是通过调用 “ CreateFile” , “ ReadFile”和“ VirtualAlloc”将DLL映射到非文件映射的内存中。不过binunpack依然可以通过监控内核级别的“ NtCreateFile”来捕获特征、加载自定义的dll文件。

第五章IAT比较
1.binunpack会仿制需要劫持的dll,并将用于监视的代码添加到每个api中

2.lastIAT这个变量代表最近一次重建的IAT,如果“ currentIAT”与 “ lastIAT”不同,则表明存在“重新建表再调用”的阶段,如果相同则将执行流程、参数等转发到原始API,以便继续拆包。在第7行之后,代码对OEP(第8行)执行回溯搜索。如果找到OEP (第9行),将首先恢复受此打包程序保护的解压缩代码(第 10行),然后更新“ lastIAT”(第11行)以进行下一轮比较。
在这里插入图片描述

第六章 OEP搜索以及过程存储
1.文中说明的查找过程:首先找到用于重建payload的IAT(图1中的“ T1”)的最后一 个“ GetProcAddress”的检查点, 然后从payload(“ T2”) 中确定第一个API调用的检查点,OEP会在这两者之间,同时使用了Binshape,一种二进制库函数匹配来快速识别自定义导入API的内存特征
在这里插入图片描述
在这里插入图片描述
2.文中提到了恶意软件会把PE头的访问设置为NO_ACESS,Binunpack使用了进程转储工具Scylla来应对这种情况

7.可能的攻击和应对手段
1.文中列举了几种Binunpack可能受到的攻击,如恶意软件可以没有IAT,但这样会使得恶意软件的运行变得极不稳定且兼容性低,或者恶意软件使用伪造的IAT, Binunpack通过一种叫做MalGene的方法来绕过伪造的API调用
2.恶意软件可以对dll文件进行哈希计算来确认内核是否被修改,Binunpack使用了shadow walker rootkit来应对,其原理是将自定义的DLL的数据转发给目标DLL,并将自定义DLL的代码转发给自身。

8 评估
1.恶意软件样本来自VX Heaven(http://vxheaven.org/),VirusShare(http://virusshare.com/)和VirusTotal,在实验前通过签名匹配工具
具Exeinfo PE(http://exeinfo.atwebpages.com/)和PEiD(https://www.aldeid.com/wiki/PEiD)来排除未打包的文件样本以 及仅受代码虚拟化保护的样本,
2.文中提到了因为没有恶意软件的源码,所以判断恶意软件是否解包完成的指标是熵偏差和代码-数据比,未打包和打包的恶意软件之间的熵偏差约为0.4,当恶意软件解包时代码与数据的比率会增加,阈值一般为0.5。文中提到了有些恶意软件会刻意降低熵,但是这会使得代码-数据比增加

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值