Cover V12, I10

Article

oct2003.tar

Using Tripwire on a Network with LANTrip

Sean Mostafavi

Tripwire is a great utility for checking the integrity of files on a system. Although more advanced file integrity tools exist, Tripwire, specifically Tripwire ASR (Academic Source Release), is already in wide use and has withstood the test of time. Tripwire works by checking to see what has changed on your system by monitoring key attributes of files that should not change, including size, file permissions, and ownership. It also checks the last access, modification, and change times. This makes Tripwire an ideal tool to be used with a network file integrity tool such as LANTrip.

Tripwire also checks to see whether binary signatures of the files being monitored have changed. To scan for all possible inconsistencies, Tripwire needs two databases: a database containing file information for all of the files that need to be monitored, and a comparison database containing all current file information. Tripwire then compares these two databases to determine what has changed. The initial database then ideally needs to be transferred to read-only media to prevent it from being altered in any way.

This is a great system for a single machine or even a handful, but it turns into a hassle in both time and money when it comes to a few dozen machines or more. Burning CDs for every system image is not practical, and making changes to these systems requires a new CD. Write-once hardware for every machine may also be outside your IT budget. This is where LANTrip comes in.

LANTrip works by storing Tripwire binary installations of each OS architecture combination where Tripwire is to be used on a central host. The machine that stores the Tripwire installations and copies them over to other machines for comparison is referred to here as the central host. Any machine on which Tripwire will run is called a client. At a certain time (optionally random), a copy of the Tripwire installation and file integrity databases are copied from the central host over to a random directory on each client to be executed. The results are recorded, and the Tripwire installation is deleted from the random directory.

Installing LANTrip on the Central Host

The central host should be a machine that is secure, preferably running no services at all. The central host can even be a primary authentication server, as if that machine is compromised; you are already in big trouble anyway. Not much in power or RAM is needed. A simple 133-MHz PC or Sparc Station with 64 MB will do. However, a large hard drive may be needed depending on how many LANTrip clients there will be. You can obtain the LANTrip tarball from the Sys Admin Web site or from:

http://www.undersea.net/seanm/software/lantrip/LANTrip-1.0.tar.gz
Decompress it into a directory you choose. I will use /opt/lantrip-1.0 as the install directory. Make sure the directory is located on a partition with plenty of space. Expect 70 MB of space for an installation of just five machines, and at least a gigabyte of space for a small network:

# gzip -dc LANTrip-1.0.tar.gz | tar -xf -
# cd lantrip-1.0/data
Edit the hosts.conf file. Entries for this configuration must conform to the following format:

Hostname       RemoteUser    OS_Architecture
Here is an example hosts.conf file:

damsel         tripwire    Linux_x86
chromis        tripwire    Linux_x86
clownfish      tripwire    OpenBSD_Alpha
trunkfish      tripwire    Tru64_Alpha
electriceel    tripwire    Solaris_SPARC
After you have edited the hosts.conf file, edit the rand_dir.conf file. This file provides the first layers of randomness in the location where the Tripwire binaries are to be copied onto the client machines. Randomness improves the overall security in the system by making it difficult for an intruder to determine where the Tripwire installation resides, and where it will show up next. The directories listed in this file must exist on all machines and must be writable by the Tripwire user on each machine. Here is a sample rand_dir.conf file:

/var/tmp
/tmp
A simple /tmp entry will also suffice, as almost every flavor of Unix has this directory available. The more directories available and writable by the Tripwire user, the better in terms of randomness. Edit lantrip_report.pl located in the parent directory of the current directory you are in and change the values of the email addresses so that the reports are sent to the appropriate people. Run the following commands after editing these files:

# ./mkdirs
# useradd -d /opt/tripwire tripwire -s /bin/sh
# groupadd tripwire
# mkdir /opt/tripwire
# mkdir /opt/tripwire/.ssh
# chown -R tripwire:tripwire /opt/tripwire
This will create all the necessary directories for each machine's OS and architecture listed in the hosts.conf file. The parameter syntax of the useradd command may differ according to platform. adduser will likely have to replace useradd and groupadd if your client system is a BSD variant. If you decide later to add another machine to your LANTrip network with a different OS and architecture than that listed in hosts.conf, simply run the mkdirs script again. In these directories, Tripwire binary installations will be stored, along with initial databases for each host.

Configuring the First Client Machine

The system requirements for the LANTrip client are no more than the recommended requirements for running Tripwire. If you plan to run LANTrip on a client machine that is heavily loaded, make sure that the program is executed during off-peak hours, as Tripwire can bog down a system at times. Download the Tripwire Academic Source Release, which can be found at:

http://www.tripwire.com/files/downloads/asr/Tripwire-1.3.1-1.tar.gz
Then run:

# gzip -dc Tripwire-1.3.1-1.tar.gz | tar -xf -
Create a user named "tripwire" on the client system:

# useradd -d /opt/tripwire tripwire -s /bin/sh
# groupadd tripwire
# mkdir /opt/tripwire
# mkdir /opt/tripwire/.ssh
# chown -R tripwire:tripwire /opt/tripwire
Do not compile the Tripwire source code at this point. Instead, download and install OpenSSH if you don't have it running already. The latest version (as of this article) is 3.6.1, and it requires OpenSSH, which can be found at:

http://www.openssh.org
For OpenBSD, sshd can be found at:

ftp://ftp.openbsd.org/pub/OpenBSD/OpenSSH/openssh-3.6.1.tgz
For all other platforms, sshd can be found at:

ftp://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-3.6p1.tar.gz
As usual, run the following commands to install:

# gzip -dc openssh-3.6p1.tar.gz | tar -xf -
# cd openssh-3.6p1 ; ./configure ; make ; make install
Copy LANTrip-1.0.tar.gz to a directory on the client machine and run:

# gzip -dc LANTrip-1.0.tar.gz | tar -xf -
# cd lantrip-1.0
# ./lantrip_client.pl
The last command will prompt you for the location of your Tripwire ASR source tree and the location of your sshd configuration file. It will edit Tripwire's makefile and config.h header file and set the location of its configuration files and database files to relative path names so that Tripwire can be executed from any directory. It will change sshd_config and set RSAHostsAllow to "Yes". Be sure to restart sshd after making the configuration changes, because sshd needs to be restarted to load them. The configuration script will also compile Tripwire. After it has completed, copy over your client's Tripwire installation to the central host. This needs to only be done once for each platform and architecture, and can be completed as follows:

# tar -cf - .  | gzip > tw_OS_ARCHITECTURE.tar.gz
# scp tw_OS_ARCHITECTURE.tar.gz central_host:/LOCATION_OF_LANTRIP/data/r_databases/ \
  OS_ARCHITECTURE/tw_OS_ARCHITECTURE.tar.gz
OS_ARCHITECTURE should be replaced with its respective value. For example, on a Solaris SPARC system, the compressed Tripwire installation should be named tw_Solaris_SPARC.tar.gz. This name should also match the OS_ARCHITECTURE value in your hosts.conf file. Failure to name the compressed Tripwire binary package will result in the client machine's being skipped, as LANTrip uses this value to identify the correct binary installation for your client's OS and architecture. You can skip copying a Tripwire installation if the next client machine on your list is of the same OS and architecture.

Final Configuration Steps on the Central Host

Back on the central host, there are still a few more steps that must be completed before the system is operational. The central host's id_dsa.pub key must be in the user's ~/.ssh2/authorized_keys2 file that will run LANTrip on the client machine. This needs to be done so that password-less access to the client machine can be allowed. The client machine's IP address and DSA key fingerprint must be added to the central host's ~/.ssh/known_hosts. The easiest way to accomplish these steps is simply to run the following on the central host:

# su - tripwire
$ ssh-keygen -t dsa
$ scp ~/.ssh/id_dsa.pub \
     root@client.example.com:/opt/tripwire/.ssh/new_key
$ ssh -l root client.example.com
  The authenticity of host 'client.example.com (192.168.10.1)' 
  can't be established.
  DSA key fingerprint is 9c:0a:9e:7a:74:c5:74:a6:8e:8a:e7:1b:c7:47:59:46.
  Are you sure you want to continue connecting (yes/no)? yes
  Warning: Permanently added 'client.example.com' (DSA) to the 
  list of known hosts.
# cd /opt/tripwire/.ssh ; cat new_key >> authorized_keys2 ; rm new_key
# chown -R tripwire:tripwire /opt/tripwire ; exit
$
When you are prompted as to whether you want to store the host's hostkey, answer "Yes".

Next, create an initial database for every host. This can be done by running:

$ ./lantrip.pl -i
If you are prompted for a password, then something is not set up correctly. Check the previous steps for setting up password-less ssh access. The last step that needs completion is to create a crontab entry for the LANTrip process. For a second layer of randomness, we shall add a random crontab entry. A random run time will even make it more difficult for a potential intruder to defeat the system. To do this, we will use the at command. Add the following crontab entry to your system:

$ crontab -e
  #
  # crontab
  #
  # Run tw_report @ 1:10am every day.
  10 1 * * *   /opt/lantrip-1.0/run_lantrip.pl
The run_lantrip.pl script will create a random at job for the LANTrip system. Edit run_lantrip.pl if you do not want LANTrip to run randomly, or for LANTrip to run randomly during a specified interval of time. Note that in this sample crontab entry I specified /opt/lantrip-1.0 as the install directory. If you installed LANTrip somewhere else, make sure you enter the correct path for run_lantrip.pl in your crontab entry.

Tripwire can be expensive in terms of system resource depending on your client's system. Care and consideration should be taken in scheduling what time LANTrip is to remotely execute Tripwire on the client machines.

The LANTrip reporter requires Mail::Sendmail to be installed. Install the module by issuing the following command:

# perl -MCPAN -e 'install Mail::Sendmail'
Pros and Cons

This system may even be more effective than having read-only media to do the file integrity comparison. An attacker has a very small amount of time to create a false database, analyze it, and place it in the random directory to fool the central host. Additionally, this system is not in wide use, so an attacker may not have planned for it. Any anomaly in the database comparison report or not receiving a report for a given client should be fully investigated.

One disadvantage in the system is that not all essential files can be monitored since the user running Tripwire (tripwire in our example) won't have access rights to some files. Changing the access rights on these files so that the tripwire user can monitor these files is one solution to this problem. Some people may be wary of setting RSAHostsAllow to Yes, but it is no greater threat than allowing keyboard input for authentication.

Analyzing the Data

LANTrip also comes with an output parser that generates an email-based report to be sent to a given address. When checking your Tripwire reports day to day, you may need to update certain host's databases if you have altered, removed, or added any new files to that system. To update a database (or more precisely re-initialize), run the following as the tripwire user:

$ lan_trip.pl -i <host_name>
To update all hosts databases, run:

$ lan_trip.pl -i
The Future of LANTrip

Future additions to LANTrip will be SQL support for the Tripwire databases, and support for database transfers via different mechanisms other than ssh. A Java-based GUI is also in the works. LANTrip will also support different file integrity tools such as AIDE and the open source version of Tripwire (http://www.tripwire.org).

Conclusion

A file integrity system is a must-have if you want piece of mind in your system's security. Combined with other security tools, you can rest assured that you will know whether a system of yours has been compromised. With the help of LANTrip, file integrity checking becomes a hassle no more.

Sean Mostafavi has been administering and developing applications on Unix systems for the past 11 years. He has also worked for a major security-based software development company. Sean is currently in his last year finishing a B.S. in Computational Mathematics at Arizona State University. He can be reached at: seanm@undersea.net.