摘要
PANDA是一个开源的动态分析平台。它建立在QEMU全系统仿真器之上,因此分析可以访问所有正在执行的代码并且可在客户虚拟机操作所有数据。PANDA增加了记录和重放执行的能力,支持迭代、深入、完整的系统分析。此外,重播日志文件是紧凑和可共享的,允许重复实验。PANDA利用QEMU对13种不同CPU体系结构的支持,使得在LLVM-IR中分析这些不同的指令集成为可能。PANDA分析是在一个简单的插件架构中编写的,该架构包括一种在插件之间共享功能、增加分析代码重用和简化复杂分析开发的机制。
1.动机
****是发现一段代码的未经记录的内部原理的过程。
1) 启用旧代码以继续运行。
2) 识别关键漏洞。
3) 理解代码的真正目的和行为。
如果不逆向,就很难区分不重要的bug和关键漏洞。
审查代码以确定它是否做了它所声称要做的事情,而没有其他事情。
PANDA基本上是一个动态分析工具。首先,捕捉到一些整个系统执行的记录。然后,以插件的形式编写分析代码,在适当的时候注册回调函数,以供PANDA调用,例如在来宾代码的基本块执行之前或在虚拟内存读取时。这些插件收集数据并咨询或控制其他插件。插件通常是快速而迭代地编写的,反复运行回放,以便在重新执行任务的情况下,对系统执行的重要方面有越来越深入的了解。一个初始的插件可能只是得到一个粗略的大纲,什么进程执行,什么时候发生关键事件。第二个过程可能集中在某个特定程序或重播的一部分的活动上。进一步的迭代可能会调用污点分析,该分析有选择地标记感兴趣的数据,并在它在系统中流动时跟踪它。
2.创新点
- 记录/回放功能
- 插件架构
- 对多个架构使用单一分析
- 支持Android系统
3.常用插件
A. Tappan Zee (North) Bridge
B. System Calls
C. Shadow Callstack
D. Scissors
4.限制
性能:PANDA响应能力已足以满足我们的目的,而且其基于重放的分析不需要交互。不过,记录时间开销还有减少的空间。开销的主要来源是需要在指令级跟踪执行的指令数和当前程序计数器。
架构支持:虽然PANDA在原则上与架构无关,但有许多特性尚未移植到所有架构。其中最重要的是记录/重放:虽然原则上支持更多的体系结构应该是一个简单的问题,它决定了非确定性的体系结构源并将它们封装在我们现有的记录和重放机制中,但我们还没有在所有体系结构上做出这样的努力。最高优先级的情况是MIPS和PowerPC,因为这些cpu在我们希望分析的嵌入式设备中广泛使用。目前还没有为所有架构启用LLVM转换,但这需要做的工作要少得多,因为在其他架构上支持LLVM转换和执行所需的更改相对较少。
内省:一些分析可能需要关于运行系统状态的附加的、更高级别的信息。