函数监控的调研

1 基于函数监控的恶意程序行为自动分析方法研究与实现

https://d.wanfangdata.com.cn/thesis/ChJUaGVzaXNOZXdTMjAyMDEwMjgSB0Q3MjcwMzQaCDRzM2J6bTFi

此篇文章的函数监控,搭建了一个能捕获程序调用的 API 的系统,利用模拟器 QEMU 设计了 API 及参数信息捕获工具。在配有该系统的沙盒中运行恶意程序,监控并记录运行过程中被调用的系统 API,获得程序运行时完整的 API 调用序列及参数内容。


  • 拓展

QEMU 是一款基于动态二进制翻译机制的 PC 模拟器,其翻译技术基于代码基本块,即 QEMU 按顺序翻译执行指令块,该方式具有较高的执行效率,而且 QEMU 能够模拟完整的 PC,包括:处理器、显卡、硬盘等硬件设备。通过对 QEMU 的源代码的修改,可以实现在 QEMU 模拟的系统中捕获程序执行时调用的 API 信息。


在进一步的判定过程中,该文涉及我此前提出的一个在疑的问题,那就是:直接使用调用序列是无法完全正确地判定当前过程是否非法的。该文有一个行为抽象的过程,每个函数的信息抽象成一项行为信息,从行为中提取特征,随即从调用序列中得到样本行为。

行为抽象的具体过程

  1. 根据函数名判断是否是关键函数

    有些无法形成危险行为的函数需要被过滤掉。比较关键的函数比如:文件操作相关,注册表操作相关,进程线程相关,网络行为相关,系统服务相关等

  2. 获取参数位置并读取信息

    同样的也不是每个参数都需要被关注,主要参数内容包括:文件、注册表路径、操作权限等

  3. 宏转换,将宏转换成字符串

  4. 将分段参数合成为完整参数

    行为抽象过程中需要记录 API 函数中可以说明 API 功能的参数。有些函数可能有很多个参数,需要合到一起才能表征一种行为或者特征

  5. 形成行为

image-20210719173537881

2 一种统计应用程序中的函数调用的方法及组件

https://nxgp.cnki.net/kcms/detail?v=kxaUMs6x7-4I2jr5WTdXti3zQ9F92xu01YaOO4mI95VxvO7h7QlMcsuYQn77PKrH0As7W0iLBY14MHbYvq00pjSi1GxubV51&uniplatform=NZKPT

在应用程序运行时,利用钩子函数监控统计调用信息文件MAP文件中所有函数的函数头在预设时间内各自的调用次数及调用时刻,然后利用钩子函数监控统计

函数尾的调用时刻。基于MAP文件中所述函数头和函数尾的调用时刻,确定所有函数在所述预设时间内的调用时间。

MAP文件:map文件是通过编译器编译之后,集程序、数据及IO空间的一种映射文件。关于_map文件的全面解析 - 程序员大本营 (pianshen.com)

3 基于虚拟化的安全监控

https://d.wanfangdata.com.cn/periodical/rjxb201208019

[期刊论文全文] 项国富 , 金海 , 邹德清 , 陈学广 , XIANG Guo-Fu , JIN Hai , ZOU De-Qing , CHEN Xue-Guang - 《软件学报》 - 2012年8期

虚拟机管理器具有更高的权限和更小的可信计算基,其位于操作系统与真实硬件平台之间,比操作系统的特权级更高,代码量更小。

  1. 内部监控:在虚拟机中加载内核模块来拦截目标虚拟机的内部事件,而内核模块的安全通过虚拟机管理器来进行保护
  2. 外部监控:通过在虚拟机管理器中对虚拟机中事件进行拦截,从而在虚拟机外部进行检测

4 Kprobe

1)注册kprobe。注册的每个kprobe对应一个kprobe结构体,该结构体记录着插入点(位置),以及该插入点本来对应的指令original_opcode;

2)替换原有指令。使能kprobe的时候,将插入点位置的指令替换为一条异常(BRK)指令,这样当CPU执行到插入点位置时会陷入到异常态;

3)执行pre_handler。进入异常态后,首先执行pre_handler,然后利用CPU提供的单步调试(single-step)功能,设置好相应的寄存器,将下一条指令设置为插入点处本来的指令,从异常态返回;

4)再次陷入异常态。上一步骤中设置了single-step相关的寄存器,所以original_opcode刚一执行,便会二进宫:再次陷入异常态,此时将signle-step清楚,并且执行post_handler,然后从异常态安全返回。

步骤2),3),4)便是一次kprobe工作的过程,它的一个基本思路就是将本来执行一条指令扩展成执行kprobe->pre_handler—->指令—->kprobe—>post_handler这样三个过程。下面详细解释每个过程



----------- 本文结束 -----------




0%