Using the N-Variant System Framework

Introduction

The N-Variant System framework builds upon artificial diversity to provide provable security properties. It works by running multiple artificially diversified variants in parallel giving the variants identical inputs and ensuring that all the variants behave identically. We can construct variants that have disjoint attack precondition, for certain classes of attacks. As a result, any attack (of the protected attack classes), that can successfully compromise one variant in the system, will necessarily cause another variant to raise an alarm such as a segmentation fault. For more details on the framework itself please read our paper. Our kernel implementation of this framework monitors the variants by ensuring that all the variants make identical system calls, and replicates the input by performing the system call and giving all the variants the same result. More details about the implementation can also be found in our paper.

To use our implementation you will first need to install our modified Linux kernel. Please be sure you meet the system requirements. Second you will need to install NV Exec. This program is needed bring a N-Variant System into execution, giving each variant the environment variables and parameters you specify. Details on how to use this program can be found below.

System Requirements

Installing the N-Variant Kernel

  1. Download linux-2.6.16.i686-nvariant.tar.bz
  2. Unpack the archive (tar -xjvf linux-2.6.16.i686-nvariant.tar.bz)
  3. Become root
  4. If you do not have the qt-devel package installed get it (yum -y install qt-devel)
  5. Enter linux-2.6.16.i686 directory (cd linux-2.6.16.i686)
  6. Copy the kernel-2.6.16-i686.config to the current directory (cp configs/kernel-2.6.16-i686.config .config)
  7. Type make xconfig and check that the configuration matches your machine
  8. Type make bzImage (Takes 10-15 minutes)
  9. Type make modules (Takes about 1 hour)
  10. Type make modules_install
  11. Type make install

Installing NV Exec

  1. Download nvexec.tar.gz
  2. Unpack the archive (tar -xzvf nvexec.tar.gz)
  3. Build the archive. (make)
  4. Copy the nvexec executable to a directory in your PATH

Executing a N-Variant System

Before bringing an N-Variant system into execution, be sure that you are running our modified kernel. You can verify this by typing "uname -r" into the shell. It should say "2.6.16-nvariant". If not reboot the machine and select "Fedora Core(2.6.16-nvariant)" from the boot menu. To invoke a N-Variant System using NV Exec, you need to call NV Exec with the command lines of the different variants separated by "---". For example:

nvexec ENV=V1 ./v1_prog v1_arg --- ENV=V2 ./v2_prog v2_arg

This command will invoke an N-Variant system with the first variant executing v1_prog with the environment variable ENV=V1 and v1_arg as its only argument. The second variant will execute v2_prog with the environment variable ENV=V2 and v2_arg as its only argument. The current implementation does not support all system calls and some of them are currently disabled in N-Variant System processes (they still work for regular processes). Some of the disabled system calls include those required for loading dynamic libraries. As a result your variants will need to be statically linked. For more information please see the README, included in the nvexec.tar.gz archive.

Questions or Comments? Email Me: <First Name (8 letters)> at cs dot virginia dot edu


Valid HTML 4.01!