-----BEGIN PGP SIGNED MESSAGE-----

                Cryptographic File System under Linux HOW-TO
                             LINUX SECURITY FAQ
                               March 14, 1996
      Copyright (C) 1996 Alexander O. Yuriev (alex@bach.cis.temple.edu)
                              CIS Laboratories
                              TEMPLE UNIVERSITY
                                     USA

 	This document describes how to compile, install and setup CFS 
	that was written by Matt Blaze of AT&T, under Linux.  The following 
	copyright statement copied directly from CFS 1.12 describes 
	the restrictions on the CFS usage:
 
 * The author of this software is Matt Blaze.
 *              Copyright (c) 1992, 1993, 1994 by AT&T.
 * Permission to use, copy, and modify this software without fee
 * is hereby granted, provided that this entire notice is included in
 * all copies of any software which is or includes a copy or
 * modification of this software and in all copies of the supporting
 * documentation for such software.
 *
 * This software is subject to United States export controls.  You may
 * not export it, in whole or in part, or cause or allow such export,
 * through act or omission, without prior authorization from the United
 * States government and written permission from AT&T.  In particular,
 * you may not make any part of this software available for general or
 * unrestricted distribution to others, nor may you disclose this software
 * to persons other than citizens and permanent residents of the United
 * States and Canada. 
 *
 * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
 * WARRANTY.  IN PARTICULAR, NEITHER THE AUTHORS NOR AT&T MAKE ANY
 * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY
 * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.

	Although the information in this document is believed to be
	correct, neither the Author nor CIS Laboratories, nor Temple University
	provides any kind of WARRANTIES and is not/are not responsible for
	what happens if you follow these guidelines. The information in this
	document is provided AS IS! 

ABOUT CFS

	CFS provides application-independent encryption/decryption of the
 	filesystem layer that does not require modification of the
 	underlying filesystem code nor any kind of modification of the
 	kernel source.  The symmetric cipher implemented in the mainstream
 	version of CFS is based on the modified DES cipher running in CBC
 	mode making the brute-force attack against the usual 56-bit DES
 	key-space unrealistic.  The structure of CFS makes replacement of
 	the mainstream DES cipher with a Fast-DES or any other symmetric
 	cipher an extremely straightforward process.  Please refer to the
 	"White" paper about CFS for more information
 	(ftp://bach.cis.temple.edu/pub/Papers/cfs.ps)

COMPILING AND INSTALLING CFS

	CFS does not compile "out of the box" under Linux. Follow these
	instructions to get CFS running or your Linux system. There are
	several methods to make CFS work under Linux, the cleanest one of
	which is based on the modifications performed by Olaf Kirch. His
	version of CFS is available from:

	ftp://ftp.mathematik.th-darmstadt.de/pub/linux/okir/cfs-1.1.2.tar.gz

	Olaf signed the modified archive. The PGP signature for the modified 
	version of the cfs-1.1.2 can be obtained from 

	ftp://ftp.mathematik.th-darmstadt.de/pub/linux/okir/cfs-1.1.2.pgp

	In single-user mode, compile CFS by using the "make" command.

	After compilation is completed, install "cfsd", "cdetach", "ccat",
	"cmkdir", "cname" and "cattach" to the /usr/local/sbin directory
	with the ownership "root:wheel" and the access mode "551".
	Generate a list of MD5 hashes of the clean binaries. Now copy these
	files together with the "md5sum" to a media such as an image of a CD
	or a floppy and make the media write protected.

	Create the directory /.cfsfs which will be used as a hook for the
	CFS server.  Make that directory owned by root:root and protected
	with access mode "000".  Create the directory /securefs which will
	become a root of the CFS tree.

	Add the following lines into your /etc/rc.d/rc.local:

	echo -n "Initializing secure filesystem: "
        if [ -x /usr/local/sbin/cfsd ]; then
                /usr/local/sbin/cfsd > /dev/null
		echo -n "cfsd "
                /bin/mount -o port=3049,intr localhost:/.cfsfs /securefs
		echo -n "loopback "
                echo "done"
        else 
	   echo "Cryptographic Filesystem is not installed"
	fi

	Users of the Caldera Network Desktop and Red Hat Commercial Linux
	distributions should add the file "cfsfs" that is attached at the end
	of this document to their /etc/rc.d/init.d directory. Then symlink
	the file "S65cfsfs" to it in the appropriate run-level directories
	using the command:

		ln -s ../init.d/cfsfs S65cfsfs

	in /etc/rc.d/rcX.d, where X is a run-level number, add the line:

		/.cfsfs		localhost

	to /etc/exports. Finally, add the line:

		portmap: 127.0.0.1

	to the /etc/hosts.allow file. 

	You should now restart your computer.  When it comes back into a
	multiuser mode, issue a mount command to verify that CFS is running.
	If everything was successful, you should see a new line in a list of
	filesystems:
		
localhost:/.cfsfs on /securefs type nfs (rw,port=3049,intr,addr=127.0.0.1)


CREATING CFS DIRECTORY

	To create a CFS protected directory called "secret" use the command

		cmkdir secret

	You will be requested to supply and verify the passphrase.  If you
	succeed, a new directory named "secret" will appear in the current
	directory. This directory will contain encrypted information which
	will be accessible only in the encrypted form unless it is attached
	to the CFS tree.
	
	In order to add the "secret" directory to a list of directories
	managed by CFS, it has to be attached to the CFS tree using the
	command:
	
		cattach secret Big-Secret
				  
	CFS will request you to type the access passphrase. If it matches
	the passphrase supplied to the "cmkdir" command that created the
	directory originally, then the information in the secret directory
	will be accessible in a non-encrypted form under /securefs/Big-Secret
	to the user who supplied the correct passphrase.  Please note that
	usually it takes about a minute to attach a protected directory to
	the CFS tree. When the user is finished manipulating the information 
	they should issue the command:
	
	        cdetach Big-Secret
		
	to destroy the access key. This command removes the directory
	"secret" from the list of directories managed by CFS making it
	impossible to access cleartext information in that directory until
	it is again attached using the "cattach" command.

PROTECTION OF CFS

	In order to grant a user access to encrypted parts of the directory
	tree, CFS requires the user to supply a passphrase that is used to
	generate a set of access keys. A compromise of a passphrase allows
	an intruder to access the encrypted information through the Unix
	security model. Therefore it is extremely important to protect
	access passphrases. There are two basic ways that can be used by
	intruders to gain access to your passphrase. They are (1) Sniffer
	attacks (2) Attack against the protocol.  The following simple
	guidelines can be used to minimize the possibility of a successful
	attack against CFS:

		1. Make sure that the CFS binaries are not compromised in
		   any form. 

			* Ensure that "cattach", "ccat", "cmkdir", "cname",
		          the CFS server "cfsd" and finally, "cdattach" 
			  are not replaced with Trojan versions that record 
			  access passphrases or, in a case of "cfsd", 
			  access keys.  

			* Ensure that the CFS server is not compromised in a 
			  way that it does not perform the encryption 
			  procedure correctly. 

			* An attack against "cdeattach" usually involves a 
			  small modification that prevents correct 
			  destruction of access keys allowing an intruder 
			  to gain access to a supposedly detached part of 
			  the directory tree.

		   The simplest way to verify that binaries are not
		   compromised is to statically link them and place them on
		   a CD.  Another way is to again statically link the
		   binaries, use "md5sum" message-digest calculator and
		   write their MD5 hashes onto a write-protected media.
		   Prior to using any CFS programs on a system, mount
		   the floppy disk and compare MD5 hashes of binaries on the
		   system with the hashes of the clean statically linked
		   copies located on the floppy disk, replacing the
		   compromised versions.
		   
		2. Keyboard grabbers used to grab passphrases as they are
		   being typed rely on the fact that most users are careless
		   enough to ignore the following simple guidelines:
		   
		   	1. When typing a passphrase in an xterm, make sure
			   that the xterm program is not compromised and use
			   the "Secure Keyboard" option while typing the
			   passphrase. This prevents keystrokes from being
			   intercepted by X grabbers.
			   
			2. Type passphrases from a terminal attached directly
			   to a serial port of the system when such terminal
			   is available.
			   
			3. Make sure that your pty and ttys permissions
			   disallow others from reading your keystrokes
			   directly from the device node.

		3. Never type your passphrase across the network, even if
		   the network is located behind a firewall and you trust
		   everybody who is connected to your network not to use
		   sniffers. This also applies to networks that use
		   scrambling routers, because there is absolutely no
		   guarantee that routers use a strong encryption or do not
		   have a back door or a loophole that potentially can allow
		   an intruder to defeat encryption used by a router.  If
		   you have to type your password across the network, do it
		   only if you are using an encrypted tunnel between systems
		   such as the one created by the deslogin(8) protocol.
		   		
		4. Always de-attach CFS protected trees from the  filesystem when
		   not using them, even when you are leaving your system for 
		   "only" a couple of minutes.

KNOWN PROBLEMS WITH CFS

	At this moment there is only one problem that can be reproduced. 
	"Permission denied" error is generated when a user attempts to 
	access the files located on a compact disc.


CREDITS

	The following people helped in the preporation process of this
	document: Topher Hughes of the Dickinson College, Elie Rosenblum of
	the Montgomery Blair High School, Mario D. Santana of the Florida
	State University, Daniel P Zepeda and Olaf Kirch.


====================[cfsfs]======================
#!/bin/sh
#
# $Header: /Secure/secure-doc/linux/CFS/RCS/CFS-Doc,v 1.4 1996/03/15 04:49:37 alex Exp alex $
#
# cfsfs		Crypto filesystem 
#
# Author:	Alexander O. Yuriev <alex@bach.cis.temple.edu>
#		Derived from cron		

# Source function library.
. /etc/rc.d/init.d/functions

# See how we were called.
case "$1" in
  start)
	echo -n "Starting Crypto Filesystem: "
	if [ -x /usr/local/sbin/cfsd ]; then
		/usr/local/sbin/cfsd > /dev/null
		/bin/mount -o port=3049,intr localhost:/.cfsfs /securefs
		echo "done"
	else 
		echo -n "Crypto Filesystem is not installed"
	fi
	touch /var/lock/subsys/cfsfs
	;;
  stop)
	echo -n "Stopping Crypto filesystem: "
	umount /securefs
	killproc cfsd
	echo
	rm -f /var/lock/subsys/cfsfs
	;;
  *)
	echo "Usage: cfsfs {start|stop}"
	exit 1
esac

exit 0
====================[end of cfsfs]======================

-----BEGIN PGP SIGNATURE-----
Version: 2.6.2

iQCVAwUBMXVewoxFUz2t8+6VAQHHoAP/WEZ9luRJ/gFgQydBbEfM2vXTF/1VCe7D
KoT3X5bRP+zZVufGt6B6n0IjDUXFX/Lv6264ZZ6jF/BKO9mrLxoGI5sA6Y6HQ7fb
DFy8+XdZhponnuih3eJ5z46bRwLWVd+lr2+ORK17ukTLbsY65kzF3wTzczRNqL9G
wPN6j3+LVXE=
=BEE2
-----END PGP SIGNATURE-----
