为了说明DECAF是如何启用和解决各种二进制分析问题的,我们展示了三种插件。通过hook配置文件中指定的APIs的入口和出口,API Tracer可以跟踪指定进程以及其子进程的API的调用。Keylogger Detector支持在系统层面跟踪键盘操作的污点传播,并穿过用户态的进程来检查键盘记录器。Instruction Tracer记录了指定上下文中指令执行(比如用户进程或者一个内核模块)。这些插件基本都是平台无关的。
API tracer
API tracer是一个简单的插件,通过一个包含一系列APIs和它们参数的配置文件,监控程序的执行并打印这些APIs的执行过程到一个跟踪文件中。按照下面方式使用API Tracer:
1. 编译DECAF时启用vmi
./confiure --enable-vmi
make
2. 编译API Tracer插件
./configure --decaf-path=/home/decaf #进入插件的源码目录执行,指定DECAF的根目录路径,假设为/home/decaf
make
3. 使用DECAF来启动Guest操作系统并加载apitracer的插件
cd /home/decaf/i386-softmmu/
./qemu-system-i386 -monitor stdio -m 512 -netdev user,id=mynet -device rtl8139,netdev=mynet /opt/kvm/winxp.img
load_plugin path/to/apitracer/plugin/apitracer.so
4. 设置需要跟踪的进程
trace_by_name
5. 在虚拟机中,开启需要跟踪的进程
6. 停止跟踪
trace_stop
Keylogger Detector
利用DECAF的VMI、污点分析和事件驱动的机制,Keylogger Detector能识别键盘记录器并分析它的行为。通过向客户系统发送设置污点的键盘操作,并观察是否有任何未信任的代码模块访问这个污点信息,我们能检测键盘记录的行为。这个简单插件将污点的击键信息传给客户系统并通过注册到READ_TAINTMEM_CB 和DECAF_KEYSTROKE_CB 的回调事件来识别出那个模块读取了污点击键信息。为了捕获详细的隐秘行为,Key-logger Detector通过注册DECAF_BLOCK_END回调来执行影子调用栈。当回调被触发时,我们检查当前的指令,如果是个调用指令,我们通过VMI和将当前的程序计数器压进影子调用栈来获取对应的函数信息。如果是个返回指令并且与影子调用栈的入口配对,我们将其从栈中弹出。当DECAF_READ_TAINTMEM_CB 回调被调用了,我们通过函数调用栈获取读取被污染的击键信息的那些进程、模块以及函数。
按照如步骤使用键盘记录器检测插件:
1. 编译DECAF时,启用tcg和vmi
./configure --enable-tcg-taint --enable-vmi
make
2. 编译键盘记录器检测插件
./configure --decaf-path=/home/decaf #decaf的根目录
make
3. 使用DECAF来启用客户系统并加载键盘记录器检测插件
./qemu-system-i386 -monitor -stdio -m 512 -netdev user,id=mynet -device rtl8139,netdev=mynet /opt/kvm/winxp.img
load_plugin path/to/keylogger/plugin/keylogger.so
4. 启用键盘记录检测,可以使用"help"命令来检测被DECAF和键盘记录检测插件支持的命令
enable_key_logger_check LOCATION_OF_LOG_FILE
5. 开启指针污点跟踪, 客户系统需要将每个击键扫描码转换为ASCII码。这个转换是个表查找操作,因此我们需要开启指针污点跟踪。为了避免跟踪过多的污点信息,我们只开启指针读取的污点跟踪。
enable_tainting
taint_pointers on off
6. 启用可疑程序,并且向记事本中输入一个污染的击键操作
taint_sendkey c
7. 当你在记事本中看到'c'时,你可以关闭污点模块的检测
disable_keylogger_check
8. 现在检查日志看看键盘操作是不是被可疑程序获取过,如果获取过,它就是一个键盘记录器的恶意软件
阅读(1832) | 评论(0) | 转发(0) |