反沙箱对抗技术
IDEA3
- 双视图+IPT获取指令序列,静态分析出恶意指令的”Memory Regions”
- 利用执行路径与”Memory Regions”的距离评定输入的优先级,优化种子策略,使其倾向于发现恶意行为
思路
多路径探索/执行
- 探索被测试执行程序的多条路径
- 探索由监控程序的某些特定输入所驱动
方法
- 追踪程序读入的有趣输入
- 遇到使用该输入的控制流分支决策时,产生两个可能分支
- 存储当前进程快照,沿着第一条路径执行
- 之后,回溯快照,探索另一条路径
问题
- 存储和和恢复快照的开销太大
IDEA
路径探索
- 路径探索:路径探索技术选出有趣路径
- 强制执行:沙箱中强制执行有趣路径
问题:
- 路径探索主要解决的是基于触发的逃逸行为(SP’07,Botnet’08)
Idea 1 (✘)
Driller利用的是fuzzing stuck时切换符号执行,利用符号执行fuzzing的有趣输入,发现crashes后将输入返回fuzzing,如此循环。
分析fuzzing结合符号执行的本质,就是为了解决magic byte等问题。
将fuzzing和符号执行顺序反过来,先获得magic byte值,生成输入后fuzzing。
Idea from WZ (✘)
- DigFuzz换为概率最大的进行符号执行
- Redqueen替换Magic Byte生成输入
IDEA:
多路径执行通过执行到恶意样本的多条路径来发现潜在的隐藏恶意行为,但目前多路径执行存在的问题:
每次回溯执行另一条路径的时候都需要save and restore进程的快照,单次回溯的开销较大,因此可回溯的路径比较有限。
1、尽可能减少单次回溯的开销。
2、采用fuzzing使用的启发式方法尽量减少重复无用路径的回溯。
单次回溯开销减少的思路:
双视图 + IPT,能够获取到恶意样本执行的指令序列,我们对这些指令序列进行静态分析(类似于value-set,参考论文《what you see is not what you execute》),分析出执行过的恶意指令操作的“Memory-Regions”。然后在outdoor_view切回indoor_view的时候,保存这些Memory-Regions的增量修改内存。
这种方法一方面能够记录完整的指令流,从而能够采用log and replay的思路边记录边进行分析,另一方面,在分支回溯的时候,要回溯到之前的某个分支点时,只需要恢复记录的增量修改的Memory-Regions就可以,因此单次回溯的开销会减少(比如如果当前执行点距离回溯的分支点很近,那增量修改的Memory-Regions就会很少,相对于整个进程内存save and log开销就会少很多,尤其是对于需要大量分支回溯的fuzzing场景)
另一方面,我们需要针对恶意代码分析的场景,研究启发式的方法高效地去回溯可能的存在隐藏恶意行为路径。
这两个块结合起来,如果能够有还不错的效果,那我感觉是可以投稿顶会论文的。论文名字可以为:Efficient fuzzing for malware analysis
希望大家按照我的思路去调研和思考,尽量把相关的论文都找出来,以后我们每周开会例行讨论相关的论文,以及后面的可行思路。
路径探索
A Survey On Automated Dynamic Malware Analysis Evasion and Counter-Evasion: PC, Mobile, and Web
基于路径探索的方法迫使恶意软件代码执行多个可能的条件分支,以实现更好的代码覆盖并减轻逃避。 这些技术在恶意软件分析中具有广泛的适用性,除了抵制逃避(例如,在命令和控制基础设施不可用时探索恶意软件行为,或分析基于触发的恶意软件)。
请注意,路径探索技术可能很脆弱,并且倾向于执行导致程序崩溃的路径。 恶意软件可以通过反符号执行混淆[13]或反模糊[175]的技术积极地破坏探索。
4.3.1 PC
Moser等人 [118]建议强制探索多个执行路径,以识别有条件执行的恶意软件行为。虽然作者的重点不是专门用于减轻回避行为,而是更广泛地用于探索代码路径和分析基于触发器的恶意软件,但我们在此注意到它由于其对该领域的早期和开创性影响。系统在QEMU中运行受测试的恶意软件,并记录执行期间进行的系统调用。通过给予程序的污染输入,系统能够跟踪何时输入值用来做控制流决策。然后可以使用不同的输入重新分析程序,以便探索替代的执行路径。在评估来自92个家庭的308个恶意软件样本时,作者发现229个基于至少一个受污染的输入源有条件地行动,172个(55.8%)在强制路径探索下表现出额外的行为。
虽然我们更注重分析基于触发器的恶意软件,但我们也注意到Brumley等人[29]关于MINESWEEPER的开创性工作.类似于Moser等人的[118]工作,但能够处理更复杂的公式和位级别的操作;系统可以自动检测基于触发器的行为,找到触发它的条件,并识别满足这些条件的输入。 MINESWEEPER象征性地表示潜在触发器(例如,定时,网络输入或键盘输入)的输入,并执行它们以符号方式处理它们的代码,而具体处理其他输入和代码。当触发输入用于条件分支时,MINESWEEPER可以求解触发每个路径执行的输入值,然后可以强制执行每个代码,以便能够观察代码的行为。在评估中,作者测试了四个恶意软件样本,并根据每个中的触发输入识别出多个条件分支。
MINESWEEPER is a plugin for TEMU, a dynamic analysis platform from the BitBlaze binary analysis program [155].
4.3.2 网络
Cova等人[40]。如果在常规执行期间没有调用函数,则JSAND强制在Web恶意软件中调用JavaScript函数。该探索用于缓解潜在的逃避攻击,以及检测目标恶意软件的方法(例如,仅在浏览器的语言被设置为特定值时才运行的恶意软件)。
Kolbitsch等人的ROZZLE [102]试图通过使用多路径JavaScript探索来识别网络恶意软件。 ROZZLE的重点是分析针对特定浏览器配置的环境敏感网络恶意软件,作者指出该方法适用于减轻规避。
Kim等人的J-FORCE [92]通过记录分支结果并对其进行变异来强制进行路径探索。由于强制执行系统可能因为缺少DOM元素的引用而崩溃,因此J-FORCE能够根据需要动态创建新的DOM元素,以允许继续执行。在评估中,作者在50个Exploit Kit漏洞利用中的41个中发现了逃避检查背后隐藏的代码,并发现在12,132个Chrome浏览器扩展中的322个广告注入。
4.3.3 其他工作
Peng等人的[132] X-FORCE强制执行恶意软件而不使用任何输入或环境设置。 John-son等[83]的工作强制执行Dalvik字节码,以发现Android应用程序中的潜在行为,包括恶意软件。 Ugarte-Pedrero等人[162]关于RAMBO的工作提出了优化,以提高基于路径探索的二进制解包的效率。 Flash:Wressnegger等人[180]在GORDON上的工作提出了一种用于对抗Flash恶意软件的路径探索算法。虽然作者没有引用任何在野外观察到的回避性Flash恶意软件,但他们注意到了这种可能性,并讨论了可能的检测和缓解方法。
ref
[13] Code Obfuscation Against Symbolic Execution Attacks. (ACSAC’16)
[29] Automatically Identifying Trigger-based Behavior in Malware.(Botnet’08)
[40] Detection and Analysis of Drive-by-Download Attacks and Malicious JavaScript Code.(WWW’10)
[83] Forced-Path Execution for Android Applications on x86 Platforms. (SERE-C’13)
[92] J-Force: Forced Execution on JavaScript. (WWW’17)
[102] Rozzle: De-Cloaking Internet Malware. (S&P’12)
[118] Exploring Multiple Execution Paths for Malware Analysis. (S&P’07)
[132] X-Force: Force-Executing Binary Programs for Security Applications. (USENIX Security’14)
[162] RAMBO: Run-Time Packer Analysis with Multiple Branch Observation. (DIMVA’16)
DIMVA C class
[175] Introduction to Anti-Fuzzing: A Defence in Depth Aid.(blog’14)
[180] Comprehensive Analysis and Detection of Flash-based Malware. (DIMVA’16)