Panda安装及基础操作

动态分析是计算机安全中的一项基本技术,在处理真实程序时,动态分析通常必须在整个系统上运行,而不是仅仅在一个二进制文件上运行,在受控环境中执行样本,然后监视该环境以了解软件的行为。

Panda(Platform for Architecture-Neutral Dynamic Analysis)是目前基于QEMU 2.9.1的全系统动态分析引擎,是一个用于架构中性动态分析的开源平台。优势在于软件的快速逆向工程。

包括一个用于记录和回放执行的系统、一个用于在执行代码上运行 LLVM 分析的框架,以及一个易于扩展的插件架构。

优势:可以收集一段感兴趣的执行记录,然后一遍又一遍地分析该记录。记录/重放能够一遍又一遍地重复执行跟踪,所有数据完全相同。然后,可以分析执行情况并慢慢了解事物的存储位置、正在运行的进程、关键执行事件何时发生等。

PANDA 还具有将 QEMU 的中间表示 TCG 转换为 LLVM 代码的功能,这使得通过 LLVM 通道编写全系统动态分析工具成为可能。这是一个强大的功能,它将两个程序分析框架 QEMU 和 LLVM 连接在一起,以利用两者之间的协同作用。

  • 项目地址

https://github.com/panda-re/panda

  • 用户使用文档:

panda/manual.md at dev · panda-re/panda

插件系统

Panda插件通过两种主要方式(插件接口)与 QEMU 交互:

  • 通过检测回调
  • 通过公开客户系统状态的检查 API,例如内存状态

常见的一些回调在:https://github.com/panda-re/panda/blob/dev/panda/docs/manual.md#callback-and-plugin-management

使用回调来hook程序的执行并执行分析代码

安装


环境:Ubuntu20.04

编译安装(采用)

./install_ubuntu.sh

panda/install_ubuntu.sh at dev · panda-re/panda

编译完成后,QEMU二进制文件位于build文件夹下;

还需要创建一个用于PANDA的Qcow(磁盘映像)

PIP安装Python接口:PyPanda

安装一些依赖:

apt install libvdeplug-dev libpng16-16 libsdl2-2.0-0

pip3 install pandare

这将安装基于 python 的 PANDA 分析所需的一切,但不会安装独立的 PANDA 二进制文件。 这个包不会自动更新,所以它可能落后于 PANDA 的 master 分支。

Docker安装

panda容器:安装了 Panda 和 PyPANDA 以及它们的运行时依赖项的容器,但没有构建工件或源代码以减小容器的大小。

pandadev容器:安装了 Panda和 PyPANDA 以及它们的运行时依赖项的容器,所有构建工件和源代码以及目录中此存储库的内容。(适合开发者)

$ docker pull pandare/pandadev
$ docker run --rm pandare/pandadev /panda/build/panda-system-i386 --help

记录Record和重放Replay


确定性记录和重放是一种用于捕获系统的 非确定性输入的技术(如果系统使用相同的输入从同一点重新启动,会导致系统行为不同的事物。)

  • Panda记录的非确定性输入是对 CPU 状态和内存所做的更改——DMA、中断、in指令等等
  • Panda不记录设备的输入
  • 想象在CPU与RAM外画个圈,记录从外部世界跨过这条线的东西

记录Record

可以使用 QEMU 监视器中的 begin_recordend_record 命令来记录执行情况。

  • begin_record
    • 开始录制会话,另存为,会覆盖之前的记录
    • 会生成两个文件:
      • VM 快照<name>-rr-snp
      • 所有非确定性输入的日志<name>-rr-nondet.log
  • end_record
    • 结束活动的录制会话,guest将被暂停,但可以恢复,并且一旦恢复guest,就可以进行另一次录制。

监视器,使用 -monitor stdio 运行 QEMU(也有更复杂的设置)。 输入 begin_record "replay_name" 开始录制过程,并使用 end_record 结束它。

重放Replay

重放记录(replay recording):可以使用 (这两个文件)panda-system-$arch -replay replay_name。确保将相同的内存大小传递给 VM,就像记录所做的那样。否则 QEMU 将失败并出现无法理解的错误。

仅仅运行重放本身并不是很有用,可以启用一些插件,对重放的执行进行分析。

分享记录

Pande支持打包和解压记录

  • 打包记录(这将捆绑<name>-rr-snp<name>-rr-nondet.log放入 <name>.rr): scripts/rrpack.py <name>
  • 解压记录 scripts/rrunpack.py <name>.rr

分析

捕获重放(Replay)后,可以多次播放它。通常首先使用标准分析来尝试了解正在发生的事情的基本情况,然后使用自定义插件(panda_plugins目录)来进行更具体的分析。

常用于开始分析的插件:asidstorystringsearchfile_taint

文章作者: HotSpurzzZ
文章链接: http://example.com/2022/03/26/Panda安装及基础/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 HotSpurzzZ