Mit Tripwire ein einzelnes Verzeichniss oder eine einzelne Datei Ueberwachen

Installation von Tripwire um als nicht-Root ein einzelnes Verzeichniss und seine Unterverzeichniss auf Veraenderungen zu Ueberwachen.


Normalerweise wird Tripwire auf einem System Installiert und genutzt um das System als solches auf Veraenderungen hin zu Ueberwachen. Das wird wegen der Zugriffsrechteproblematik normalerweise nur als root durchgefuehrt. Die Konfigurationsdateien von Tripwire liegen ueberlicherweise in /etc/tripwire und sind nur mit Root Rechten zu bearbeiten.
Was aber wenn ich als normaler Benutzer ein Verzeichniss auf Veraenderungen hin ueberpruefen will?

Das geht, man muss Tripwire allerdings die zu verwendenden Konfigurationsdateien manuell ueber die Kommandozeile miteilen. Macht man das nicht versucht Tripwire auf die Systemweiten Konfigurationsdateien zuzugreifen und schlaegt fehl wegen fehlender Zugriffsrechte. Die Zugriffsrechte der systemweiten Tripwire Konfigurationsdateien so abzuaendern das ein normaler Nutzer darauf zugreifen kann halte ich fuer ein Sicherheitsloch das NICHT in Frage kommt. Die ausfuehrbaren Dateien von Tripwire muessen entweder auf dem System Installiert sein , in einem lokalen Verzeichniss vorhanden, oder auf einem externen Datentraeger hinterlegt sein. Zuerst wird ein Verzeichniss erstellt werden in dem der Benutzer die Konfigurationsdateien , die keys und die Datenbank ablegen kann. In diesem Beispiel ist das /home/JoeUser/trip
Darin enthalten sind die unterverzeichnisse:
/home/JoeUser/trip/bin – Fuer die Binaeris
/home/JoeUser/trip/etc – Fuer die Config Dateien
/home/JoeUser/trip/lib – Fuer die Datenbank
/home/JoeUser/trip/lib/report – Fuer die Reports
/home/JoeUser/trip/data – Das Verzeichniss in dem die zu ueberwachenden Daten abgelegt sind.

Im Verzeichniss bin finden sich die Programme
siggen
tripwire
twadmin
twprint

Im Verzeichniss etc finden sich die Dateien:
twpol.txt
twcfg.txt

Die anderen Verzeichniss muessen vorhanden sein, sind aber noch leer.

Die twpol.txt und twcfg.txt


Die twpol.txt sieht so aus:

@@section GLOBAL
TWBIN = /usr/sbin;
TWETC = /etc/tripwire;
TWVAR = /var/lib/tripwire;

#
# File System Definitions
#
@@section FS

#
# First, some variables to make configuration easier
#
SEC_CRIT      = $(IgnoreNone)-SHa ; # Critical files that cannot change

SEC_BIN       = $(ReadOnly) ;        # Binaries that should not change

SEC_CONFIG    = $(Dynamic) ;         # Config files that are changed
                        # infrequently but accessed
                        # often
SEC_LOG       = $(Growing) ;         # Files that grow, but that
                                     # should never change ownership

SEC_INVARIANT = +tpug ;              # Directories that should never
                        # change permission or ownership

SIG_LOW       = 33 ;                 # Non-critical files that are of
                                     # minimal security impact

SIG_MED       = 66 ;                 # Non-critical files that are of
                                     # significant security impact

SIG_HI        = 100 ;                # Critical files that are
                                     # significant points of
                                     # vulnerability

#
# Mein Wichtiges Verzeichniss
#
(
  rulename = "Mein Wichtiges Verzeichniss",
  severity = $(SIG_HI)
)
{
        /home/JoeUser/trip/data              -> $(SEC_BIN) ;
}

Diese twpol.txt ist im prinzip identisch mit der Debian Standartversion nur das ich saemtliche vorgegebenen Verzeichniss geloescht und nur ein Verzeichniss im home Directory des Testusers eingetragen habe.

Die tw.cfg sieht so aus:

ROOT          =/home/JoeUser/trip/bin
POLFILE       =/home/JoeUser/trip/etc/tw.pol
DBFILE        =/home/JoeUser/trip/lib/$(HOSTNAME).twd
REPORTFILE    =/home/JoeUser/trip/lib/report/$(HOSTNAME)-$(DATE).twr
SITEKEYFILE   =/home/JoeUser/trip/etc/site.key
LOCALKEYFILE  =/home/JoeUser/trip/etc/$(HOSTNAME)-local.key
EDITOR        =/usr/bin/editor
LATEPROMPTING =false
LOOSEDIRECTORYCHECKING =false
MAILNOVIOLATIONS =true
EMAILREPORTLEVEL =3
REPORTLEVEL   =3
SYSLOGREPORTING =true
MAILMETHOD    =SMTP
SMTPHOST      =localhost
SMTPPORT      =25
TEMPDIRECTORY =/tmp

Erstellen der Config Dateien


Nun muss der Site Key Generiert werden:

/home/JoeUser/trip/bin/twadmin --generate-keys --site-keyfile /etc/JoeUser/trip/etc/site.key

Den Local Key Generieren:

/home/JoeUser/trip/bin/twadmin --generate-keys --local-keyfile /etc/JoeUser/trip/etc/rechnername-local.key

Die signierte allgemeine Konfigurationsdatei erstellen:

/home/JoeUser/trip/bin/twadmin --create-cfgfile --cfgfile /home/JoeUser/trip/etc/tw.cfg --site-keyfile /etc/JoeUser/trip/etc/site.key /home/JoeUser/trip/etc/twcfg.txt

Die Signierte Policydatei mit den Verzeichnissnamen erstellen:

/home/JoeUser/trip/bin/twadmin --create-polfile --cfgfile /home/JoeUser/trip/etc/tw.cfg --site-keyfile /etc/JoeUser/trip/etc/site.key /home/JoeUser/trip/etc/twpol.txt

Initialisieren der Datenbank


Hier beginnt die 3er Folge (init / check / update) die bei einer Konfigurationsaenderung immer durchgefuehrt werden muss:
Inititalisieren der Tripwire Database:

/home/JoeUser/trip/bin/tripwire --init -c /home/JoeUser/trip/etc/tw.cfg -p /home/JoeUser/trip/etc/tw.pol

Hier muss die local Passphrase eingegeben werden!!! Parst das Policy File, Schreibt das database File .

Integritaet Ueberpruefen


Integrity Checking Mode – Hier wird ueberprueft ob das was in der Datenbank steht noch aktuell ist, wenn nicht wird angegeben welche Dateien veraendert worden sind.

/home/JoeUser/trip/bin/tripwire --check -c /home/JoeUser/trip/etc/tw.cfg -p /home/JoeUser/trip/etc/tw.pol

(Schreibt eine Report Datei nach z.b /home/JoeUser/trip/lib/report/debian-20120301-122000.twr)

Wenn alles in Ordnung ist und die Aenderungen in die Datenbank eingetragen werden sollen,

Datenbank Updaten


Database Update Mode:

/home/JoeUser/trip/bin/tripwire --update -c /home/JoeUser/trip/etc/tw.cfg -p /home/JoeUser/trip/etc/tw.pol --twrfile /home/JoeUser/trip/lib/report/debian-20120301-122052.twr

Der Report wird in einem Editor angezeigt und ist im Klartext lesbar. Danach muss die local passphrase eingegeben werden. Dann wird auf Basis dieses Reports die Datenbank geupdatet.

Kurzversion:
/home/JoeUser/trip/bin/tripwire –init (Bei Ersteinrichtung und Aenderung der tw.pol(bzw twpol.txt)
/home/JoeUser/trip/bin/tripwire –check
/home/JoeUser/trip/bin/tripwire –update

Das –check Kommando muss in Abstaenden wiederholt werden. Sollten dabei aenderungen festgestellt werden koennen diese mittels –update in die Datenbank eingetragen werden.

Wenn Aenderungen an der Konfigurationsdatei twpol.txt oder twcfg.txt vorgenommen werden muessen, muessen diese daraufhin neu signiert werden. Wenn twpol.txt neu signiert wurde muss auch die Datenbank mittels tripwire –init neu erstellt werden.

Neu signiert wird mit den folgenden Kommandos:

/home/JoeUser/trip/bin/twadmin --create-cfgfile --cfgfile /home/JoeUser/trip/etc/tw.cfg --site-keyfile /home/JoeUser/trip/etc/site.key /home/JoeUser/trip/etc/twcfg.txt
/home/JoeUser/trip/bin/twadmin --create-polfile --cfgfile /home/JoeUser/trip/etc/tw.cfg --site-keyfile /home/JoeUser/trip/etc/site.key /home/JoeUser/trip/etc/twpol.txt

Die Report Dateien sind nicht in einem direkt lesbaren Format. Wenn man einen bestimmten Report nochmal lesen will dann kann man das mittels

/home/JoeUser/trip/bin/twprint --print-report --twrfile /var/lib/tripwire/report/reportname.twr

tun.

Einzelne Dateien und Rules Ueberpruefen


Es ist auch moeglich einzelne Dateien zu ueberpruefen die in der Datenbank enthalten sind.
z.b mit

/home/JoeUser/trip/bin/tripwire --check -c /home/JoeUser/trip/etc/tw.cfg -p /home/JoeUser/trip/etc/tw.pol /home/JoeUser/trip/data/meine-wichtige-datei.doc

Das geht dann erheblich schneller als das komplette Verzeichniss inklusive der Unterverzeichnisse zu Scannen. In der angehaengten Beispielkonfiguration ist nur eine Rule „Mein Wichtiges Verzeichniss“ definiert. Es ist aber moeglich mehrere Rules zu definieren. Anhand dieser Rules ist es moeglich nur die in der Rule benanntgen Dateien oder Verzeichnisse zu Scannen. z.b mit:

/home/JoeUser/trip/bin/tripwire --check -c /home/JoeUser/trip/etc/tw.cfg -p /home/JoeUser/trip/etc/tw.pol --rule-name "Mein Wichtiges Verzeichniss"

Scannen auf dem Netzwerkfilsystem sshfs

Wenn das Verzeichniss /home/JoeUser/trip/data z.b ueber sshfs eingebunden wurde dann funktioniert die oben beschriebene Konfiguration grundsaetzlich auch. Ohne weitere Aenderungen der Konifguration bekommt man aber nach jedem mounten/unmounten des Verzeichnisses fuer jede Datei eine Fehlermeldung bzw eine Violation. Es hat den Anschein als ob saemtliche Dateien modifiziert worden seien. Das aendert sich erst wenn in /home/sb/trip/etc/twpol.cfg in der Rule „Mein Wichtiges Verzeichniss“ die Suchmaske(mask) wie folgt angepasst worden ist:

/home/JoeUser/trip/data              -> $(SEC_BIN)-ci ;

das -ci steht fuer
– pruefe nicht
c Inode timestamp (create/modify)
i Inode number

Danach funktioniert Tripwire wie erwartet ueber sshfs.

Weitere anpassungen fuer die masks finden sich in der Manpage twpolicy (4).