TUM Logo

Bridging the Semantic Gap Through Static Code Analysis

The semantic gap is a challenge inherent in all applications of virtual machine introspection (VMI). It describes the disconnect between the low-level state that the hypervisor has access to and its semantics within the guest. A common approach to bridge this gap is to utilize the debugging symbols of an inspected operating system kernel, although it is well understood that this information does not reflect the dynamic pointer manipulations that an operating system kernel performs at runtime. In this work, we describe an analysis technique for capturing dynamic pointer manipulations and type casts in C code. Our approach analyzes the unmodified kernel source code to establish used-as relations between pointer types and to extract the arithmetic that is performed to transform a source pointer to a target address. We have implemented this technique in our VMI tool InSight for Linux to augment the type information retrieved from the debugging symbols. With this extended type information, our tool is able to cope with runtime pointer manipulations performed by the Linux kernel in a completely automated fashion and greatly eases the development of new VMI applications.

Bridging the Semantic Gap Through Static Code Analysis

Proceedings of {EuroSec}'12, 5th European Workshop on System Security

Authors: Christian Schneider, Jonas Pfoh, and Claudia Eckert
Year/month: 2012/4
Booktitle: Proceedings of {EuroSec}'12, 5th European Workshop on System Security
Publisher: ACM Press
Fulltext: eurosec_schneider2012.pdf

Abstract

The semantic gap is a challenge inherent in all applications of virtual machine introspection (VMI). It describes the disconnect between the low-level state that the hypervisor has access to and its semantics within the guest. A common approach to bridge this gap is to utilize the debugging symbols of an inspected operating system kernel, although it is well understood that this information does not reflect the dynamic pointer manipulations that an operating system kernel performs at runtime. In this work, we describe an analysis technique for capturing dynamic pointer manipulations and type casts in C code. Our approach analyzes the unmodified kernel source code to establish used-as relations between pointer types and to extract the arithmetic that is performed to transform a source pointer to a target address. We have implemented this technique in our VMI tool InSight for Linux to augment the type information retrieved from the debugging symbols. With this extended type information, our tool is able to cope with runtime pointer manipulations performed by the Linux kernel in a completely automated fashion and greatly eases the development of new VMI applications.

Bibtex:

@inproceedings { Schneider2012,
author = { Christian Schneider and Jonas Pfoh and Claudia Eckert},
title = { Bridging the Semantic Gap Through Static Code Analysis },
year = { 2012 },
month = { April },
booktitle = { Proceedings of {EuroSec}'12, 5th European Workshop on System Security },
publisher = { ACM Press },
url = {https://www.sec.in.tum.de/i20/publications/bridging-the-semantic-gap-through-static-code-analysis/@@download/file/eurosec_schneider2012.pdf}
}