CAUTION: This project is still in beta. There are plenty of rough edges still remaining. SHORT DESCRIPTION OF THIS PROJECT: The Enforcer is a Linux Security Module designed to improve integrity of a computer running Linux by ensuring no tampering of the file system. It can interact with TCPA hardware to provide higher levels of assurance for software and sensitive data. LONGER DESCRIPTION OF THIS PROJECT (general announcement): The Bear/Enforcer Project Dartmouth College http://enforcer.sourceforge.net http://www.cs.dartmouth.edu/~sws/abstracts/mswm03.shtml How can you verify that a remote computer is the "real thing, doing the right thing?" High-end secure coprocessors are expensive and computationally limited; lower-end desktop enhancements like TCPA and the former Palladium have been mainly limited to Windows and proprietary development. In contrast, this code is part of our ongoing effort to use open source and TCPA to turn ordinary computers into "virtual" secure coprocessors---more powerful but less secure than their high-assurance cousins. Our current beta release includes the Linux Enforcer Module, a TCPA enabled LILO, and a user-level TCPA library. All source is available from the SourceForge site. The Linux Enforcer Module is a Linux Security Module designed to help improve integrity of a computer running Linux. The Enforcer provides a subset of Tripwire-like functionality. It runs continuously and as each protected file is opened its SHA1 is calculated and compared to a previously stored value. The Enforcer is designed to integrate with TCPA hardware to provide a secure boot when booted with a TCPA enabled boot loader. TCPA hardware can protect secrets and other sensitive data (for example, the secrets for an encrypted loopback file system) and bind those secrets to specific software. When the Enforcer detects a modified file it can, on a per-file basis, do any combination of the following: deny access to that file, write an entry in the system log, panic the system, or lock the TCPA hardware. If the TCPA hardware is locked then a reboot with a un-hacked system is required to obtain access to the protected secret. We developed our own TCPA support library concurrently with, but independently from, IBM's recently announced TCPA code. Our library was an initial component of the Enforcer project. However, our in-kernel TCPA support and the enforcer-seal tool are derived from IBM's TCPA code because of its ease of adaptation for in-kernel use. We plan to use our more complete library for user-level applications. (IBM's TCPA code and documentation is available from .) For more information on our project, see Dartmouth College Technical Report TR2003-476 available from You can contact Omen Wild for Enforcer questions: Or John Marchesini for TCPA questions: HOW IT WORKS: The Enforcer is a Linux Security Module (LSM). It taps the inode_permission hook. This hook is called every time a file is opened for access. The SHA1 of the file is calculated and compared against a value stored in a configuration file. If the values match, then the contents of the file have not been tampered with and the open succeeds. If the SHA1 values do not match, then the Enforcer can do any combination of the following (configurable on a per-file basis): deny access, log an error, lock the TPM, call a user-space helper, or panic the system. TCPA INTERACTION: If you have make it this far, we will assume you have a general knowledge of TCPA, what it is, and why we might be using it. For general background see some of the papers linked off the IBM TCPA site . The August 2003 edition of the 'Linux Journal' has an excellent article from IBM's TCPA research titled 'Take Control of TCPA', starting on page 50. Our primary design goal is to protect the encryption key of an encrypted loopback file system. The Enforcer monitors the critical system files, and when it detects tampering, denies further access to the protected secret. DOWNSIDE: There is a fairly hefty memory requirement to store the database of files and their SHA1s. Currently each file takes about 40 bytes plus the length of the full path of the file. For 60,000 files that could be as high as 20 megabytes. There is a performance penalty as well. The contents of every protected file get SHA1'd every time they get loaded off of disk (see the TODO about caching results). The actual slowdown depends on your workload. Bottom line, if your CPU is close to maxed and you are constantly loading protected files, you will probably have a problem. For detailed benchmarks see the Dartmouth Tech Report or the BENCHMARK file. CAVEATS: One of the PCRs that the Enforcer depends on is the MBR. This block gets written by lilo. If you change ANY lilo options then the MBR changes and you will not be able to get your secret out of the TPM. The TPM module distributed with the Enforcer is not SMP compatible. You will be unable to build with the Enforcer if SMP is enabled. REPORTING BUGS: If you find a bug, or have any comments/ideas, please report them via the SourceForge bug tracking system so we can fix them. PROJECT HOME PAGE: