5.3. Tripwire

Tripwire fra 1992, skabt af Eugene Spafford og Gene Kim, og kildeteksten stod fra begyndelsen til rådighed for brugerne. Siden dengang har en kvart million brugere downloadet Tripwire Academic Source. Siden da er der kommet en kommerciel version med lidt flere features og support. (se http://www.tripwire.com). Til Linux findes der stadig en Open Source udgave, som er udgivet under GNU General Public Licence. Open Source udgaven kan hentes fra http://www.tripwire.org. Der er flere svar på den slags spørgsmål på dette site.

Tripwire er et program, der kan tjekke filsystemet for ændringer. Der genereres en database for alle filer i filtræet. For hver fil gemmes informationer om sidste ændringsdato, størrelse, indhold, ejer osv. Når først databasen er genereret, er det nemt at tjekke og opdatere for ændringer.

Den database, der genereres med Tripwire sker ud fra en opsætningsfil /etc/tripwire/twpol.txt, som beskriver hvilke dele af filsystemet, som er med i overvågningen og den opførsel de enkelte filer må tillades. Til eksempel må filen /etc/shadow godt ændre sig - da dette sker hver gang en bruger ændrer password. Modsat så ville det være højst underligt hvis filen /bin/ps har ændret sig over en nat. Det program bruges til at vise hvilke processer, der kører på systemet. Ergo skal opsætningen af overvågningen være skræddersyet til det enkelte system. I praksis betyder det at den Red Hat-opsætningsfil, der kommer med Tripwire skal sandsynligvis modificeres, hvis man vil køre med Debian eller lign.

Tankegangen med Tripwire er at man sætter programmet op før maskinen kommer på netværket og før brugere kommer på - dvs. før maskinen er i risiko-zonen. På dette tidlige tidspunkt genereres en "snapshot" af hvordan det oprindelige system ser ud. For hver af de vigtige filer på systemet gemmes information om fil-størrelse, ændringsdatoer og tjeksummer på filerne, så man kan afgøre om filerne er ændret.

Når maskinen så kommer i drift skal man køre Tripwire hver dag, time eller hvad der nu passer systemadministratoren bedst. Hver eneste gang genereres en rapport typisk per e-post til systemadministratoren over systemets status i forhold til systemets oprindelige "snapshot" - denne rapport skal der være tid til at læse roligt igennem!

Hvis rapporten viser at der er ændringer, så må systemadministratoren tage stilling til om det er i orden eller om der er tegn på indbrud - hvis det sidste er tilfældet, bør maskinen tages af netværket med det samme.

Det kan også ske at der er ændringer på systemet, som er i orden. Hvis man f.eks. installerer en ny RPM-pakke (fra en betroet kilde) så vil Tripwire melde at der er nye programmer typisk i /usr/bin. I dette tilfælde skal man så opdatere Tripwire-databasen med ens "snapshot".

5.3.1. Tripwire installation og opsætning

Tripwire installeres på Red Hat ved at man henter en .tar.gz-fil, der indeholder en RPM-pakke, som kan installeres. Tjek at den fil du henter har den rigtige tjeksum - jfr. http://www.tripwire.org/downloads/index.php. Kør md5sum.tar.gz-filen:

[root@hven /root]# md5sum tripwire-2.3-47.i386.tar.gz
661a54a6429d4ecb0d756de5046da48f  tripwire-2.3-47.i386.tar.gz  
[root@hven /root]# tar xzvf tripwire-2.3-47.i386.tar.gz
[root@hven /root]# rpm -ivh tripwire-2.3-47.i386.rpm

Derefter kommer der tekst på skærmen om hvad der skal gøres følgende: Først skal filen /etc/tripwire/twpol.txt ses igennem og rettes til. Det vigtigste at starte med i denne fil er følgende sektion (som startes med @@). Her er kommentarerne oversat til dansk.

@@section FS
SEC_CRIT      # Kritiske filer, der ikke må ændre sig
SEC_SUID      # Binære SUID eller SGID-filer, der ikke må ændre sig
SEC_BIN       # Binære filer, der ikke må ændre sig
SEC_CONFIG    # Opsætningfiler, der tilgås ofte og ændres sjældent
SEC_LOG       # Filer, der vokser i størrelse - ændrer ikke ejerskab
SEC_INVARIANT # Kataloger, som aldrig ændrer ejerskab eller rettigheder

I slutningen af afsnittet er der også inddelinger efter risiko-niveau.

SIG_LOW       # Ikke-kritiske filer med lav sikkerheds-risiko
SIG_MED       # Ikke-kritiske filer med væsentlig sikkerheds-risiko
SIG_HI        # Kritiske filer med væsentlig sikkerheds-risiko

Ideen er at man kan betegne filer og kataloger med de ovennævnte risiko-niveau. Til eksempel kan vi fortsætte ned i opsætningsfilen til "OS-Utilities":

  ################
 #              ##
################ #
#              # #
# OS Utilities # #
#              ##
################
(
  rulename = "Operating System Utilities",
  severity = $(SIG_HI)
)
{
  /bin/cat                             -> $(SEC_CRIT) ;
  /bin/date                            -> $(SEC_CRIT) ;
  /bin/dd                              -> $(SEC_CRIT) ;
...
}

Afsnittet er forkortet her. Forståelsen er at filer såsom /bin/cat er meget kritiske og må aldrig ændre sig i indhold, ejerskab eller rettigheder. Den lille tekst box over "rulename" er kun til pynt.

Opsætningsfilen /etc/tripwire/twpol.txt bør redigeres svarende til det enkelte system - dette kræver systemkendskab. Alternativet er at bruge den originale fil og måske opnå en falsk sikkerhed. Så tag lige tiden til at se filen igennem. Bemærk at der flere steder står anført linjer med hash-tegn foran, f.eks.

# /dev/printer -> $(SEC_CONFIG) ; # Uncomment if you have a printer device   

Ideen er at man bør se disse linjer igennem specifikt for at se om du har de filer eller ej. Har man filen, så skal linjen typisk med ved at fjerne udkommenteringen.

Filer såsom /proc/rtc, /proc/mdstat og /usr/sbin/fixrmtab findes ikke på Red Hat 7.1 i standard installation - det er eksempler på filer, dermed linjer i opsætningsfilen som skal fjernes.

5.3.1.1. Opstart af Tripwire databasen

Efter opsætningsfilen er rettet til, så skal Tripwire opsætningen krypteres.

[root@hven /root]# /etc/tripwire/twinstall.sh

Det første der nu skal vælges er et løsen (eng. "passphrase") som anvendes til at kryptere databasen så andre ikke kan ændre den.

Nu skal der vælges fire løsener. De fire løsener bør principielt vælges forskellige, men en doven systemadministrator vil nok vælge dem ens (læs; dette er langt det nemmeste). Først for ens site, dvs. for hele maskin-parken. Dernæst for den enkelte maskine. Dernæst skal opsætningsfilen også signeres med et løsen – ideen er at man heller ikke skal have lov til at kunne ændre den opsætningfil, som databasen er laves til /etc/tripwire/tw.cfg (Gemmes også i klar tekst i /etc/tripwire/twcfg.txt). Denne fil gemmer kun på systemparametre, såsom hvilet program der anvendes når tripwire-rapportering skal sendes til systemadministratoren. Til slut skal der vælges et løsen for resten af opsætningen, dvs. "policy"-delen, dvs. hvilke filer skal skannes og hvordan. Filen der gemmes er /etc/tripwire/tw.pol (Gemmes også i klar tekst under /etc/tripwire/twpol.txt). De to filer i klar tekst, mens /etc/tripwire/tw.pol og /etc/tripwire/tw.cfg endelig ikke må ændres manuelt - de er binære og krypterede.

For at resultater af skanning af filsystemet kan sendes til systemadministatoren per e-post så skal man indsætte e-postadressen for hver af de afsnit, der er defineret i filen. Bemærk at der er et komma til at afslutte linjen før emailto = MODTAGERENS_ADRESSE. Hvis man har tænkt sig at køre tripwire tjek via crontab, så er dette ikke nødvendigt, da man får output i et brev alligevel.

# Tripwire Binaries
(
  rulename = "Tripwire Binaries",
  severity = $(SIG_HI),
  emailto = sysadm@hven.dk
)
{
  $(TWBIN)/siggen                      -> $(SEC_BIN) ;
  $(TWBIN)/tripwire                    -> $(SEC_BIN) ;
  $(TWBIN)/twadmin                     -> $(SEC_BIN) ;
  $(TWBIN)/twprint                     -> $(SEC_BIN) ;
}

Nu skal Tripwire databasen genereres og du skal bruge dit løsen til den lokale maskine, som blev sat lige før dette. Det kan let tage 5-10 minutter alt efter maskintype og diskkapacitet.

[root@hven /root]# /usr/sbin/tripwire --init

Det mest sandsynlige er at man får ca. 50 fejl af filer, der ikke findes på systemet. De filer bør man nu udkommentere i /etc/tripwire/twpol.txt og lave en ny database. Dette kunne man have undgået ved at gennemgå /etc/tripwire/twpol.txt meget forsigtigt.

[root@hven /root]# /usr/sbin/twadmin --create-polfile /etc/tripwire/twpol.txt
Please enter your site passphrase:
Wrote policy file: /etc/tripwire/tw.pol
[root@hven /root]# rm -f /var/lib/tripwire/*.twd
[root@hven /root]# /usr/sbin/tripwire --init
Please enter your local passphrase:
Parsing policy file: /etc/tripwire/tw.pol
Generating the database...
*** Processing Unix File System ***

5.3.1.2. Tjek af maskinen med Tripwire

Nu er man klar til at tjeke maskinen - dette kan køres manuelt (dette kan man gøre uden brug af løsen - men man skal dog være root).

[root@hven /root]# /usr/sbin/tripwire --check

Det er lidt bøvlet at se gamle tripwire rapporter, da disse også er krypterede. Kommandoen er som følger, hvor XX skal erstattes af det filnavn, man har på disken. De er navngivet efter maskinnavn og dato.

[root@hven /root]# /usr/sbin/twprint -m r --twrfile /var/lib/tripwire/report/XX.twr

Lad os nu prøve at lave om på maskinen. Vi opgraderer procmail RPM-pakken og se hvad Tripwire finder. Bemærk de 5 modificerede "user binaries", som dernæst vises nedenfor.

Note: Report is not encrypted.
Tripwire(R) 2.3.0 Integrity Check Report

Report generated by:          root
Report created on:            Wed Oct 31 00:29:46 2001
Database last updated on:     Never

===============================================================================
Report Summary:
===============================================================================

Host name:                    k6.sslug
Host IP address:              192.168.1.3
Host ID:                      None
Policy file used:             /etc/tripwire/tw.pol
Configuration file used:      /etc/tripwire/tw.cfg
Database file used:           /var/lib/tripwire/k6.sslug.twd
Command line used:            /usr/sbin/tripwire --check 

===============================================================================
Rule Summary: 
===============================================================================

-------------------------------------------------------------------------------
  Section: Unix File System
-------------------------------------------------------------------------------

  Rule Name                       Severity Level    Added    Removed  Modified 
  ---------                       --------------    -----    -------  -------- 
  Invariant Directories           66                0        0        0        
  Temporary directories           33                0        0        0        
* Tripwire Data Files             100               1        0        0        
  Critical devices                100               0        0        0        
* User binaries                   66                0        0        5        
  Tripwire Binaries               100               0        0        0        
  Libraries                       66                0        0        0        
  File System and Disk Administraton Programs
                                  100               0        0        0        
  Kernel Administration Programs  100               0        0        0        
  Networking Programs             100               0        0        0        
  System Administration Programs  100               0        0        0        
  Hardware and Device Control Programs
                                  100               0        0        0        
  System Information Programs     100               0        0        0        
  Application Information Programs
                                  100               0        0        0        
  Shell Releated Programs         100               0        0        0        
  (/sbin/getkey)
  Critical Utility Sym-Links      100               0        0        0        
  Critical system boot files      100               0        0        0        
  Critical configuration files    100               0        0        0        
  System boot changes             100               0        0        0        
  OS executables and libraries    100               0        0        0        
  Security Control                100               0        0        0        
  Login Scripts                   100               0        0        0        
  Operating System Utilities      100               0        0        0        
  Shell Binaries                  100               0        0        0        
  Root config files               100               0        0        0        

Total objects scanned:  19398
Total violations found:  6

===============================================================================
Object Detail: 
===============================================================================

-------------------------------------------------------------------------------
  Section: Unix File System
-------------------------------------------------------------------------------

-------------------------------------------------------------------------------
Rule Name: User binaries (/usr/bin)
Severity Level: 66
-------------------------------------------------------------------------------
  ----------------------------------------
  Modified Objects: 5
  ----------------------------------------

Modified object name:  /usr/bin

  Property:            Expected                    Observed                    
  -------------        -----------                 -----------                 
* Modify Time          Sat Oct 20 17:15:27 2001    Wed Oct 31 00:29:44 2001    


Modified object name:  /usr/bin/formail

  Property:            Expected                    Observed                    
  -------------        -----------                 -----------                 
* Inode Number         443138                      442309                      
* Size                 26736                       26900                       
* Modify Time          Sat Jan  6 23:13:11 2001    Wed Jul  4 00:55:12 2001    
* CRC32                CB/Sfy                      DJdys6                      
* MD5                  A4Lbe9dcQUPMqvFeZQ/qnF      CazhNDHWCoxKh46uXHElej      


Modified object name:  /usr/bin/lockfile

  Property:            Expected                    Observed                    
  -------------        -----------                 -----------                 
* Inode Number         443139                      442310                      
* Size                 11124                       12440                       
* Modify Time          Sat Jan  6 23:13:11 2001    Wed Jul  4 00:55:12 2001    
* Blocks               24                          32                          
* CRC32                CWnVmO                      A6qdab                      
* MD5                  C2Lvt5A+Kx3cjOYgGCdHd9      BQpFs92xGV/D+G+aPGbG8T      


Modified object name:  /usr/bin/mailstat

  Property:            Expected                    Observed                    
  -------------        -----------                 -----------                 
* Inode Number         443140                      442311                      
* Modify Time          Sat Jan  6 23:13:10 2001    Wed Jul  4 00:55:11 2001    


Modified object name:  /usr/bin/procmail

  Property:            Expected                    Observed                    
  -------------        -----------                 -----------                 
* Inode Number         443141                      442312                      
* Size                 63484                       75420                       
* Modify Time          Sat Jan  6 23:13:11 2001    Wed Jul  4 00:55:12 2001    
* Blocks               136                         160                         
* CRC32                A4Xs3q                      D/ZVXm                      
* MD5                  Af2+FBsxRo0LTeWeLim2iB      Bez1qNLwdxqPMYR4GPq8EB      



-------------------------------------------------------------------------------
Rule Name: Tripwire Data Files (/var/lib/tripwire)
Severity Level: 100
-------------------------------------------------------------------------------
  ----------------------------------------
  Added Objects: 1
  ----------------------------------------

Added object name:  /var/lib/tripwire/k6.sslug.twd

===============================================================================
Error Report: 
===============================================================================

No Errors

-------------------------------------------------------------------------------
*** End of report ***

Tripwire 2.3 Portions copyright 2000 Tripwire, Inc. Tripwire is a registered
trademark of Tripwire, Inc. This software comes with ABSOLUTELY NO WARRANTY;
for details use --version. This is free software which may be redistributed
or modified only under certain conditions; see COPYING for details.
All rights reserved.

5.3.1.3. Opdatering af Tripwire-databasen

Nu er der selvfølgelig problemer - er det rimeligt at de filer at ændret? I dette tilfælde er det, da filerne kommer fra den nye RPM-pakke. Generelt skal man køre Tripwire-skanningen før man installerer en RPM-pakke for at være sikker på at der ikke er andre ændringer. Dernæst skal man så opdatere databasen med systemets snapshot, så man ikke længere ser de opgraderede pakker med i listen. Igen skal XX erstattes med den seneste .twr-fil for maskinen.

[root@hven /root]# /usr/sbin/tripwire --update --twrfile /var/lib/tripwire/report/XX.twr

Op kommer en fil startet i vi-editoren, hvor en bid af den er som følger:

Remove the "x" from the adjacent box to prevent updating the database
with the new values for this object.
 
Modified:
[x] "/usr/bin"
[x] "/usr/bin/formail"
[x] "/usr/bin/lockfile"
[x] "/usr/bin/mailstat"
[x] "/usr/bin/procmail"

Tripwire foreslår, at man opdaterer alle de ændrede filer, så Tripwire ikke brokke sig over dem igen. Hvis du ikke vil ændre så fjern det kryds (dvs. x) som er i tekst-boksen. Når du forlader editoren skal man igen angive løsen for at opdatere. Herefter vil Tripwire ikke brokke sig over den opdaterede procmail pakke.

Tripwire bør indsættes i /etc/cron.daily, dvs. det bliver kørt en gang hver dag. Resultatet bliver sendt til root på maskinen per e-post.

[root@hven /root]# cat /etc/cron.daily/t
#!/bin/sh  

/usr/sbin/tripwire --check
[root@hven /root]# chmod +x /etc/cron.daily/t

Bemærk at det her ikke at valgt at kalde filen tripwire, som ville være naturligt. Men det giver jo kun en angriber nemmere ved at se at tripwire er sat op på maskinen. Det er vigtigt at holde øje med at brevet fra tripwire kommer på ca. det tidspunkt som de bør komme på jfr. /etc/crontab.

Du kan finde en anden vejledning til at installere og bruge Tripwire på http://www.net-security.org/text/articles/tripwire.shtml.