Group of Software Security In Progress

GoSSIP @ LoCCS.Shanghai Jiao Tong University

Towards Automatic Inference of Kernel Object Semantics From Binary Code

论文下载:https://www.utdallas.edu/~zxl111930/file/RAID15.pdf

Abstract && Introduction

  • 理解内核对象语义是很有意义的,比如可以帮助识别内核函数,这对于VM Introspection、内存取证等等都是有帮助的
  • 这篇文章提出了第一个直接从内核二进制自动化获取内核对象语义的系统Argos
  • 方法基础是Zhiqiang Lin过去工作,即API+系统调用统计
  • 工作亮点:显性定义了语义,通过系统调用集合反映

System Overview

Fig

  • 主要提取两类信息,一个是内核对象,一个是系统调用
  • 先要知道哪一团数据是内核对象,并要在这些对象当中做区分,因为这些信息都是动态获取的
  • 而后根据这些对象相关的系统调用获取语义

Design and Implementation

Object Tracing

  • All objects need to be allocated
  • 所以用调用malloc相关allocation函数的指令地址标志每个不同的对象
  • 数据表明,80.3%的对象得到了一一对应
  • 对象size动态根据指针偏移最大量得到

Bit-Vector Generation

  • 系统调用追踪是老问题了,这里说明一下语义表示方法
  • 每个内核对象都有一个比特向量
  • 每4个bit代表一个系统调用:

Fig

Evaluation

  • 这是一个侧重经验的实验
  • 以为是投RAID的文章,重点分析的是安全相关的数据结构(内核对象)
  • Fig

  • 作者经验型地总结了一些规则,当满足时,认定是相关数据结构

  • (并没有正式讨论正确率等问题)
  • (没有显性解释规则当中-这个符号的含义)
  • 以上也有一个规则对应多个结构的情况,之后通过已知的数据结构指向(point-to)关系区分

Application

  • 内核函数识别
  • 一个简单的启发式规则:the function calls the allocation process for a object, is the creator of the object

Fig

  • 已经识别出某个结构,根据已有知识,则可以通过调用allocation过程的函数识别出相应的创建函数