Pioneer: Verifying Code Integrity and Enforcing
Untampered Code Execution on Legacy Systems

Pioneer is our first-step toward externally-verifiable code execution on legacy computing systems. We define legacy computing systems as those that do not have secure co-processors such as the Trusted Platform Module (TPM) or CPU-based security technologies like Intel's LaGrande Technology, and AMD's Pacifica and Presidio. Using Pioneer, an external verifier can obtain the guarantee that execution of an arbitrary piece of code on a legacy computing system is untampered by any malware that may be present. In particular, the verifier obtains the guarantee that any pre-existing malware does not: modify the code image, invoke an alternate (malicious) code, or modify the execution state of the code during execution. We have implemented Pioneer on the Intel Penitum IV Xeon processor with 64-bit extensions.

Known  issues

We are aware of the following two issues with our current Pioneer implementation. If you discover any other issues or attacks, please let us know. We will be happy to list them here and acknowledge your contribution.

Code and installation instructions
While we have tested our code, we do not make any guarantees. Use the code at your own risk.

Platform requirements:

Installation instructions for the untrusted platform:
  1. Uncompress the source code and copy resulting directory into /usr/src/linux-2.6.7/drivers/net.
  2. cd into /usr/src/linux-2.6.7/drivers/net/e1000.
  3. Change the arrays h_dest and h_source in the e1000_clean_rx_irq function in e1000_main.c to the MAC addresses of the dispatcher and the untrusted platform respectively.
  4. Run the makethis script.
  5. Run the copyover script.
  6. Run the restart script.
Source Code

Installation instructions for the dispatcher:
  1. Uncompress the source code and copy resulting directory into /usr/src/linux-2.6.11.8/drivers/net.
  2. cd into /usr/src/linux-2.6.11.8/drivers/net/3c59x
  3. Change the array self_addr in the isSelf_ether function and the array other_addr in the isOther_ether function in 3c59x.c to the MAC addresses of the dispatcher and the untrusted platform respectively.
  4. Run the makethis script.
  5. Run the copyover script.
  6. Run the restart script.
Source Code

The dispatcher and the untrusted platform should be on the same ethernet segment. To send a Pioneer challenge from the dispatcher to the untrusted platform, send a ping packet to the untrusted platform from the dispatcher. Both the untrusted platform and the dispatcher will print out the checksum computation times for the correct Pioneer checksum code and the attacker's checksum code.