Skåne Sjælland Linux User Group - http://www.sslug.dk Home   Subscribe   Mail Archive   Index   Calendar   Search
 

Har du haft net-indbrud ?

Artikel 5 - Sikkerhed på Linux

Hanne Munkholm <hanne@geekgirl.dk> og Peter Toft <pto@sslug.dk>


Take One!
Forfatterne har copyright på artiklen, men udgiver den under OpenContent License.
Alle kan trykke artiklen så længe OPL licensen overholdes, men vi vil gerne vide hvor den bringes.

Licensen, der skal overholdes, kan findes på http://www.opencontent.org/opl.shtml.


Denne artikel er en del af en artikel serie om netværkssikkerhed, som kan findes på http://www.sslug.dk/artikler/Linux_sikkerhed

Selvom du er omhyggelig med, hvordan din Linux maskine er konfigureret, og du håndterer passwords forsigtigt, er dit system aldrig fuldstændig sikkert. Et nyt sikkerhedshul i et af de programmer du anvender, kan blive opdaget. Et password kan være sluppet ud eller være blevet knækket, eller du kan have overset noget i opsætningen af din maskine. Det kan også være, at du af funktionalitetshensyn har valgt fortsat at benytte en usikker service til trods for de sikkerhedsproblemer, det medfører. Derfor er det vigtigt, at du holder øje med, om der har været fremmede inde på dit system.

Lad os nu uden at tænke på hvordan antage, at en dygtig eller heldig cracker har fået root-adgang til din maskine. Denne cracker har med andre ord adgang til alt på din maskine, og har måske endda installeret nye programmer med hemmelige bagdøre på maskinen, der gør det nemmere at komme ind næste gang.

En person, der trænger ind på andres computere, har ofte et formål med det. Det kan være en som vil snuse rundt efter informationer, eller en som alene skal bruge maskinen til at angribe andres maskiner. Ofte vil han samtidig forsøge at sløre sit eget spor. Der er mange muligheder for adfærd for en cracker, som du skal kunne følge. I denne situation er det crackeren, der vælger angrebstidspunkt og metode, og du kan i praksis ikke overvåge alt 24 timer i døgnet på maskinen. Men ligesom du kan opdage en indbrudstyv i dit hjem, kan du opdage ham på din computer ved at lytte efter unormal adfærd og sætte tyverialarmer op, som vækker dig ved indbrud.

Det, vi skal se nærmere på i denne artikel, er den interne overvågning af din maskine. Vi vil se på, hvordan du som systemadministrator kan finde ud af, at der har været indbrud, og hvordan du kan se hvad crackeren har lavet om på maskinen. Vi vil komme ind på de generelle forholdsregler, du som systemadministrator kan tage, samt en række værktøjer, som kan hjælpe dig.

En cracker kan finde på at installere skadelige programmer på din computer. Her en stribe fra User Friendly

Log-filer

En Linux maskine gemmer løbende en masse information om, hvad der sker på maskinen. Informationen gemmes i log-filer, som kan bl.a. bruges til at spore unormal anvendelse.

/var/log/messages

Den vigtigste log-fil er /var/log/messages, hvor mange af de vigtige systeminformationer gemmes, såsom

og meget andet.

Lad os se på fire eksempler som alle er brudstykker fra /var/log/messages. Vi ser, at det kræver lidt øvelse at overskue alt i messages-filen, men modsat er der mange nyttige informationer om systemets drift. Lad os først se på eksempel 1 nedenfor, som viser de linier, der kommer i messages-filen, når systemet startes.

Eksempel 1 - /var/log/messages ved systemstart

Jun 30 20:17:45 sherwood syslogd 1.3-3: restart.
Jun 30 20:17:45 sherwood syslog: syslogd startup succeeded
Jun 30 20:17:45 sherwood syslog: klogd startup succeeded
Jun 30 20:17:45 sherwood kernel: klogd 1.3-3, log source = /proc/kmsg started.
Jun 30 20:17:45 sherwood kernel: Inspecting /boot/System.map-2.2.5-15
Jun 30 22:17:16 sherwood rc.sysinit: Loading default keymap succeeded 
Jun 30 22:17:16 sherwood rc.sysinit: Setting default font succeeded 
Jun 30 22:17:16 sherwood swapon: swapon: warning: /dev/hdb1 has insecure permissions 0660, 0600 suggested 
Jun 30 22:17:16 sherwood rc.sysinit: Activating swap partitions succeeded 
Jun 30 22:17:16 sherwood rc.sysinit: Setting hostname sherwood.galaxy.dk succeeded 
Jun 30 22:17:16 sherwood fsck: /dev/hda3: clean, 56029/311296 files, 748112/1242864 blocks 
Jun 30 22:17:16 sherwood rc.sysinit: Checking root filesystem succeeded 
Jun 30 22:17:16 sherwood isapnp: Board 1 has Identity 70 01 00 00 00 01 00 93 05:  ALS0001 Serial No 16777216 [checksum 70] 
Jun 30 22:17:16 sherwood isapnp: ALS0001/16777216[0]{ALS100 Media Audio Controller}: Ports 0x220 0x330; IRQ5 DMA1 DMA5 --- Enabled OK 
Jun 30 22:17:16 sherwood isapnp: /etc/isapnp.conf:293 -- Fatal - resource conflict allocating 8 bytes of IO at 388 (see /etc/isapnp.conf) 
Jun 30 20:17:47 sherwood kernel: Loaded 6721 symbols from /boot/System.map-2.2.5-15.
Jun 30 20:17:47 sherwood kernel: Symbols match kernel version 2.2.5.
Jun 30 20:17:47 sherwood kernel: Loaded 146 symbols from 11 modules.
Jun 30 20:17:47 sherwood kernel: Linux version 2.2.5-15 (root@porky.devel.redhat.com) (gcc version egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)) #1 Mon Apr 19 22:21:09 EDT 1999 
Jun 30 20:17:47 sherwood kernel: Detected 120003903 Hz processor. 
Jun 30 20:17:47 sherwood kernel: Console: colour VGA+ 80x25 
Jun 30 20:17:47 sherwood kernel: Calibrating delay loop... 47.82 BogoMIPS 
Jun 30 20:17:47 sherwood kernel: Memory: 63140k/65536k available (996k kernel code, 412k reserved, 928k data, 60k init) 
Jun 30 20:17:47 sherwood kernel: VFS: Diskquotas version dquot_6.4.0 initialized 
Jun 30 20:17:47 sherwood kernel: CPU: Intel Pentium 75 - 200 stepping 06 
Jun 30 20:17:47 sherwood kernel: Checking 386/387 coupling... OK, FPU using exception 16 error reporting. 
Jun 30 20:17:47 sherwood kernel: Checking 'hlt' instruction... OK. 

Ud fra den ottende linie kan vi se, at harddisk partitionen /dev/hdb1 ikke har fornuftige læse/skriverettigheder. Vi kan også se, et ISA lydkort ALS100 bliver detekteret af isapnp-pakken, men at det ikke er konfigureret rigtigt. Derefter en del information om selve maskin-typen, CPU-hastighed (det er fra en Pentium 120 MHz PC). Du bør lige checke fra tid til anden, at der ikke logges fejl, såsom problemet med forkerte læse/skrive rettigheder eller hardwareproblemer. I øvrigt kan den opmærksomme læser se, at nogle tidspunkter er kl. 22 og andre 20. Dette skyldes, at nogle dele af systemet kører med lokaltid og andre med GMT. Vi kan også her nævne, at du med kommandoen "dmesg" kan se de fleste af de systemmeddelelser, som blev vist på skærmen under systemopstart. Tilsvarende information findes i /var/log/dmesg.

Eksempel 2 viser hvordan telnet, ftp og SSH logins gemmes i messages-filen. Den 3. juli kl. 10.06 kommer brugeren robin ind fra IP nummer 192.168.0.10 via secure shell (SSH). To minutter efter logges der ud igen. Dagen efter er det en telnet login, som går igennem PAM-password check (PAM_pwdb). Kun et minut er robin inde. Endelig er brugeren tuck kommet ind via ftp (ftpd) den 4. juli og kun blevet fire sekunder.

Eksempel 2 - /var/log/messages ved remote logins

Jul  3 10:06:51 sherwood sshd[763]: log: Connection from 192.168.0.10 port 1023
Jul  3 10:06:57 sherwood sshd[763]: log: RSA authentication for robin accepted.
Jul  3 10:06:57 sherwood sshd[765]: log: executing remote command as user robin
Jul  3 10:08:58 sherwood sshd[763]: log: Closing connection to 192.168.0.10
Jul  4 23:07:07 sherwood PAM_pwdb[24298]: (login) session opened for user robin by (uid=0)
Jul  4 23:08:10 sherwood PAM_pwdb[24298]: (login) session closed for user robin
Jul  4 23:10:28 sherwood ftpd[24757]: FTP LOGIN FROM tuck @ vinglad.sherwood.dk [192.168.0.199], 
Jul  4 23:10:32 sherwood ftpd[24757]: FTP session closed

Lad os dernæst se på en Internet opkobling via modem (ppp). Vi kan i de følgende linier fra messages-filen se, at brugeren har koblet op via "/dev/ppp0". De to linier med identd skyldes secure shell. Der er lavet en SSH-login til www.sslug.dk under opkoblingen. De sidste linier viser, at der er sendt 55395 bytes til maskinen og 80884 bytes fra maskinen under opkoblingen.

Eksempel 3 - /var/log/messages ved Internet opkobling

Aug 18 21:28:35 sherwood ifup-ppp: pppd started for ppp0 on /dev/modem at 115200
Aug 18 21:28:36 sherwood pppd[10800]: pppd 2.3.7 started by root, uid 0
Aug 18 21:29:03 sherwood pppd[10800]: Serial connection established.
Aug 18 21:29:03 sherwood pppd[10800]: Using interface ppp0
Aug 18 21:29:03 sherwood pppd[10800]: Connect: ppp0 <--> /dev/modem
Aug 18 21:29:11 sherwood pppd[10800]: Remote message: Login Succeeded
Aug 18 21:29:12 sherwood pppd[10800]: local  IP address 212.54.78.125
Aug 18 21:29:12 sherwood pppd[10800]: remote IP address 212.54.64.66
Aug 18 21:29:16 sherwood identd[10930]: Connection from www.sslug.dk
Aug 18 21:29:16 sherwood identd[10930]: from: 192.38.71.98 ( www.sslug.dk ) for: 1132, 25
Aug 18 21:35:14 sherwood pppd[10800]: Terminating on signal 15.
Aug 18 21:35:14 sherwood pppd[10800]: Connection terminated.
Aug 18 21:35:14 sherwood pppd[10800]: Connect time 6.2 minutes.
Aug 18 21:35:14 sherwood pppd[10800]: Sent 80884 bytes, received 55395 bytes.
Aug 18 21:35:14 sherwood pppd[10800]: Exit.

Det sidste eksempel fra messages-filen er et sted, hvor man kan se, at bruger nummer 500 (robin) skifter bruger-ID over til root for at kunne stoppe sendmail. Derefter logges det at su-root sessionen afsluttes.

Eksempel 4 - /var/log/messages ved su og nedlukning af sendmail

jul 26 22:15:04 sherwood PAM_pwdb[4220]: (su) session opened for user root by (uid=500)
jul 26 22:15:25 sherwood sendmail: sendmail shutdown succeeded
jul 26 22:15:41 sherwood PAM_pwdb[4220]: (su) session closed for user root

/var/log/messages kan blive meget stor. Da alle systemhændelser bliver logget i mellem hinanden, kan det således være svært umiddelbart at skelne de interessante beskeder i mængden.

Rotering af log-filer

Du kan opleve at finde filer i /var/log, der f.eks. hedder messages.1 og messages.2, eller messages.1.gz. Dette skyldes, at man på Linux systemer ofte har et cron-job sat op til at rotere logfilerne, herunder messages-filen. Dette sker f.eks. en gang i døgnet eller en gang om ugen. I så fald indeholder /var/log/messages kun det nyeste log-information, som er sket siden sidste rotation.

Under Red Hat styres rotering med af logfiler med logrotate-pakken, som konfigureres i filen /etc/logrotate.conf

/var/log/secure

Fordi vigtig information så nemt kan drukne i anden information i messages-filen, findes filen /var/log/secure, som kun indeholder sikkerhedsrelateret information. Eksempel 5 viser /var/log/secure filen. Brugerne robin og john logget ind via terminal tty1 nogle gange, og en telnet og en ftp login findes i bunden af filen. /var/log/secure kan være en meget vigtig fil at se igennem jævnligt.

Eksempel 5 - /var/log/secure

Aug 15 14:45:16 sherwood login: LOGIN ON tty1 BY robin
Aug 16 15:13:53 sherwood login: LOGIN ON tty1 BY john
Aug 16 21:00:55 sherwood login: LOGIN ON tty1 BY robin
Aug 17 11:22:41 sherwood login: LOGIN ON tty1 BY john
Aug 17 17:45:16 sherwood login: LOGIN ON tty1 BY robin
Aug 18 07:11:29 sherwood login: LOGIN ON tty5 BY robin
Aug 18 12:49:56 sherwood login: LOGIN ON tty1 BY john
Aug 18 20:17:07 sherwood login: LOGIN ON tty1 BY robin
Aug 18 23:07:03 sherwood in.telnetd[24297]: connect from 192.168.0.1
Aug 18 23:07:07 sherwood login: LOGIN ON 3 BY robin FROM sherwood
Aug 18 23:10:24 sherwood in.ftpd[24757]: connect from 192.168.0.1

/var/log/maillog

En anden vigtig fil er /var/log/maillog, hvor information om email-trafik til og fra maskinen gemmes. Vi kan i eksempel 6 se, at robin sender en email fra sherwood.galaxy.dk til sslug-teknik@sslug.dk. Maillog-filen kan nemt blive ekstremt stor og svær at overskue.

Eksempel 6 - /var/log/maillog

Jun 18 23:00:42 robin sendmail[1966]: XAA01966: from=<robin@sherwood.dk>, size=496, class=0, pri=30496, nrcpts=1, msgid=<Pine.LNX.4.10.9906182300010.662-100000@sherwood.dk>, proto=ESMTP, relay=robin@localhost
Jun 18 23:00:44 sherwood sendmail[1968]: XAA01966: to=<sslug-teknik@sslug.dk>, delay=00:00:02, xdelay=00:00:02, mailer=esmtp, relay=mail.sslug.dk. [192.38.71.98], stat=Sent (ok 929739581 qp 27375)

Rapporting af log-meddelelser

I stedet for at læse logfiler direkte kan man installere programmer, der kan sortere i logfilerne og fremhæve vigtige ting. Vi vil nu se nærmere på LogWatch, der kan hentes fra http://www.kaybee.org/~kirk/html/linux.html.

LogWatch sættes normalt op til at køre en gang i døgnet via Linux maskinens crontab system. LogWatch skanner alle log-filerne og sender en samlet rapport til systemadministratoren som en email. I filen /etc/log.d/logwatch.conf er det muligt at konfigurere LogWatch. Det kan f.eks. anbefales at sætte parameteren "Detail" fra "Low" til "High", så alle login og "su" hændelser rapporteres.

LogWatch kan f.eks. give følgende email tilbage for en dags trafik for en maskine, der ikke kører telnet, men som tillader ftp download og kører SSH. Man kan se, at ftp dæmonen har overført 5MB, og filerne er vist sammen med navnet på modtagermaskinen. På maskinen har der i PAM_pwdb (dvs. password håndteringen) været en række skift af bruger-id. Desuden er alle SSH opkoblinger til maskinen vist, derefter cron kørsler og endelig de problemer, som navneserveren har haft igennem dagen. Let og overskueligt at se igennem. Har man pludselig logins fra uventede domæner, er det noget, der skal kigges nærmere på.

Eksempel 7 - logwatch
 --------------------- ftpd-messages Begin ------------------------ 

Anonymous FTP Logins:
   laptop.etsted.dk (192.168.0.10) : IE40user@ - 4 Time(s)
   dbserver.etandetsted.dk (192.168.0.98) :  mozilla@ - 1 Time(s)
   dbserver.etandetsted.dk (192.168.0.99) :  getright@ - 2 Time(s)

 ---------------------- ftpd-messages End ------------------------- 



 --------------------- ftpd-xferlog Begin ------------------------ 
TOTAL KB OUT: 5339KB (5MB)
TOTAL KB IN: 0KB (0MB)

Outgoing Anonymous FTP Transfers:
   /pub/linuxbog.pdf.gz -> dbserver.etandetsted.dk
   /pub/utils/cvsstat -> 192.168.1.10
   /pub/linuxbog.pdf.gz -> 192.168.10.12
   /pub/videoclips/Linux1601.mpg -> ns.etandetsted.dk
   /pub/utils/cvs2html -> cvs.etandetsted.dk

 ---------------------- ftpd-xferlog End ------------------------- 



 --------------------- Identd Begin ------------------------ 
Identd Lookups:


 ---------------------- Identd End ------------------------- 



 --------------------- PAM_pwdb Begin ------------------------ 

SU Sessions:
      robin(uid=71) -> john - 1 Time(s)
      john(uid=0) -> root - 3 Time(s)
      robin(uid=0) -> root - 5 Time(s)
      sherif(uid=0) -> root - 1 Time(s)
      john(uid=5192) -> charles - 1 Time(s)
      robin(uid=5192) -> charles - 5 Time(s)

Opened Sessions:
   Service: su
      User nobody - 1 Time(s)
      User news - 1 Time(s)

 ---------------------- PAM_pwdb End ------------------------- 



 --------------------- SSHD Begin ------------------------ 

Connections:
   laptop.etsted.dk (192.168.0.10) : 1 Connection(s)
   dbserver.etandetsted.dk (192.168.0.98) : 27 Connection(s)

 ---------------------- SSHD End ------------------------- 



 --------------------- Cron Begin ------------------------ 

Commands Run:
   User root:
      /usr/bin/mrtg /etc/mrtg/mrtg.cfg >/dev/null 2>&1: 288 Time(s)
      /usr/local/bin/daily_backup: 1 Time(s)
      run-parts /etc/cron.daily: 1 Time(s)
      run-parts /etc/cron.hourly: 24 Time(s)


 ---------------------- Cron End ------------------------- 


 --------------------- Named Begin ------------------------ 

**Unmatched Entries**
   Response from unexpected source ([157.151.95.204].53): 1 Time(s)
   bad referral (US !< RESTON.VA.US): 6 Time(s)
   bad referral (US !< SF.CA.US): 6 Time(s)

 ---------------------- Named End ------------------------- 

Et alternativ til LogWatch er logcheck, som kan downloades fra http://www.psionic.com/download/. Ideen er den samme, og virkemåden er umiddelbart også ens. Blot er formatteringen af log-rapporter ikke sorteret så elegant som med LogWatch. Prøv begge programmer, og vælg selv dit foretrukne.

Problemet med programmer som LogWatch og logcheck er bl.a., at programmet normalt køres en gang per døgn (dette kan ændres). Ergo kan et eventuelt indbrud sløres, f.eks. ved at personen blot sletter linier i log-filerne svarende til egen adfærd. Det eneste alternativ er nok, at væsentlig log-information skrives til en enhed som kun accepterer tilføjelser - ikke redigering af data. Nogle bruger f.eks. en almindelig gammel linie-printer, som udskriver log-meddelelser straks efter hændelsen.

Alarmer

Du kan lave dine egne hjemmelavede alarmer på dit Linux system. Har du en maskine med meget få logins, kan det være interessant, at der afsendes en email til en fast ekstern modtager, hver gang der laves login på din maskine. Emailen kan f.eks. sendes til en mobiltelefon eller pager, for at du med det samme kan få at vide, når der er gæster. Der er mange muligheder for, hvordan dette kan gøres. Den enkle måde er at tilføje følgende til filerne /etc/csh.login og /etc/profile.

mail < /dev/null > /dev/null -s "login at `date`" robin@sherwood.herne.dk

Derved får "robin@sherwood.herne.dk" en email med tidspunkt for login, uden at den, der logger ind, kan se det. Personen kan dog bagefter selv læse /etc/csh.login og /etc/profile og se, at der er lagt en fælde, og evt. vælge at forsvinde. En interessant beskrivelse af indbrud, alarmer og fælder kan læses på http://www.ja.net/CERT/Cheswick/berferd.txt

En anden mulighed er at bruge en almindelig brugerkonto på systemet til at have et crontab job, der køres hvert minut, og ser hvem der er logget ind (via "who") og sender resultatet til din eksterne maskine, hvis der er brugere logget ind. Man vælger selv hvordan den type og niveau af alarm der sættes op, alt efter hvor paranoid man er :-)

Man skal dog passe på, at de alarmsystemer, der sættes op, ikke åbner et nyt sikkerhedshul. Som eksempel kan det være, at du har ændret kildeteksten til /bin/login, så der logges mere information til f.eks. /var/log/messages, men du kom måske ved et uheld til at få en buffer overflow fejl, som efterfølgende udnyttes af en ihærdig cracker. Det er heldigvis sådan, at den person, som bryder ind på din maskine, ikke i forvejen ved, hvor du lægger fælder, og forhåbentlig ikke har en chance for at vide, hvordan de virker, før du har opdaget indbruddet.

Husk også de følgende tre ting: Backup, backup og backup. Lav jævnligt backup af din maskine. Har du haft besøg af en ondsindet cracker, kan du have mistet alt. Sørg også for at have ældre backups. Hvis dit system har været inficeret igennem et stykke tid, er dine nyeste backups også inficerede. En sund strategi er, at have en system backup, som du laver før systemet sættes i drift - alle ændringer skrives ned, så de kan geninstalleres fra din sikre backup. Derudover skal du lave jævnlige separate backups af dine brugeres data.

Ændringer af filsystemet

Du bør holde øje med hvilke filer på dit system, der ændrer sig. Forestil dig, at en person er kommet ind på din maskine og har haft held til at erstatte passwd kommandoen med en ny binær fil, som dels laver det den skal men samtidig emailer login-navn og password til supercracker@passwordcracker.net. Det er ikke urealistisk svært at lave sådan et program, idet alle har adgang til kildeteksten til Linux systemet, og dermed kan lave ændringerne uden at behøve at skrive hele programmet forfra. Er crackeren først inde på dit system, og har han lavet programændringerne på forhånd, skal han blot erstatte de rigtige programmer med de nye. Det er normalt de binære filer i /usr/bin, /bin, /usr/sbin/, /usr/X11R6/bin og /sbin, man skal passe på, samt biblioteker, som normalt findes i /lib, /usr/X11R6/lib og /usr/lib.

Generelt leder man efter ændringer af filsystemet ved at checke fire ting:

Hvis vi kan stole på output af kommandoen "ls", så er de tre første nemme at undersøge. Man kan f.eks. sammenligne output fra "ls -l FILNAVN" før og efter ændringer.

Det er dog straks sværere at checke, om indholdet af filen er intakt. For et filsystem med en stor mængde data er det ikke muligt at have en kopi af hele filsystemet og checke byte for byte, om de er ens. Det tager for meget diskplads og alt for lang tid. Derfor er en del matematisk forskning gået på at udtænke metoder til at generere en funktion, som tager f.eks. indholdet af en fil og ud fra dette genererer et langt tal, som i princippet skal være unikt. Denne hash-funktion må således kun give det samme tal for to filer, hvis de er helt ens. Dermed kan man kontrollere, om en fil er ændret, blot ved at generere et tal for filen med hash-funktionen og sammenligne med det tal, filen gav sidste gang. Giver hash-funktionen samme output, antager vi, at filen er urørt.

En simpel hashfunktion kunne være summen af alle de tal, som filen består af. Den er blot alt for nem at forfalske. I litteraturen vil man ofte støde på CRC checks, som er relativt nemme funktioner at beregne. Mange komprimeringsprogrammer anvender CRC til at kontrollere, om det, der pakkes ud, er i orden. Til at opdage ændringer af filer med tanke på sikkerhed, er CRC checks ikke gode nok. Et hyppigt anvendt alternativ er MD5, som genererer en 128 bit kode ud fra en fil. På de fleste Linux systemer findes programmet md5sum, som køres med et filnavn som argument.

[robin@sherwood robin]$ md5sum /bin/ls
dc2ac9d1c1658d5b4381ca2c280425ee  /bin/ls

Det er meget meget svært at ændre i filen /bin/ls og stadig få samme MD5 checksum. Lad os lave et eksempel med en lille fil, der får indholdet ændret, men hvor man kan ikke se udefra, at den er ændret.

[robin@sherwood robin]$ echo "robin og tuck" > testfil 
[robin@sherwood robin]$ touch -d 19990719 testfil
[robin@sherwood robin]$ ls -al testfil
-rw-r--r--   1 robin      robin            14 Jul 19 00:00 testfil  

[robin@sherwood robin]$ md5sum testfil 
e829f144f6e43d55daa442baf1462544  testfil   

[robin@sherwood robin]$ echo "tuck og robin" > testfil 
[robin@sherwood robin]$ touch -d 19990719 testfil
[robin@sherwood robin]$ ls -al testfil
-rw-r--r--   1 robin      robin            14 Jul 19 00:00 testfil  

[robin@sherwood robin]$ md5sum testfil 
18b8426e71e781dc68f8f4ee415963cc  testfil   

Vi ser, at filen i de to tilfælde indeholder de samme bogstaver, har samme længde (14 tegn), har samme datostempel (efter lidt snyd med touch-kommandoen) - men MD5 checksummen er helt forskellig. Derfor ved vi, at indholdet ikke det samme. Prøv selv at eksperimentere med dette.

Der er andre hash-funktioner end MD5, såsom MD4 og snefnu. Det er i praksis ikke så vigtigt, om det er den ene eller den anden eller kombinationer af dem alle, man anvender - de er meget sikre. En inkarneret matematiker vil naturligvis protestere... men vi er jo kun ingeniører :-)

Vi vil nu omtale fire forskellige programmer til at hjælpe dig med at lave check af ændringer i filsystemet; RPM, Tripwire, L5 og Aide.

rpm -Va

Med Linux distributionerne SuSE, Caldera Open Linux, Mandrake og Red Hat følger programmet "rpm", som er et pakkestyringsprogram. Rpm holder styr på, hvad der er installeret. Samtidig er der mulighed for at holde styr på ændringer af filerne. Du kan checke alle RPM-styrede filer med kommandoen "rpm -Va". Denne kommando vil checke for følgende ændringer siden installation:

Bogstaverne til venstre er dem, der vises på skærmen, når man kører "rpm -Va". Alle de filer, der er ændret i siden installationen, bliver vist. Hver af de ændrede filer vises efter formatet "SM5?LDUGT c filnavn", hvor hver af bogstaverne er forklaret ovenfor. Hvis den enkelte test gik godt, vises et punktum, ellers vises det bogstav for testen, der gik galt. Et typisk output kan være (i forkortet form)

Eksempel 8 - rpm -Va

..?..... c /etc/securetty
S.5....T c /etc/services
....L...   /usr/local
.M......   /usr/local/bin
.M......   /usr/local/lib
..?.....   /usr/share/afterstep/ascp/help/animate.hlp
..?.....   /usr/share/afterstep/ascp/help/audio.hlp
..?.....   /usr/share/afterstep/ascp/help/autoexec.hlp
..?.....   /usr/share/afterstep/ascp/help/pager.hlp
missing    /usr/share/afterstep/ascp/icons/wharf2.xpm
missing    /usr/share/afterstep/ascp/icons/woptions.xpm
....L... c /etc/localtime
......G.   /etc/aliases.db
S.5....T c /etc/rc.d/init.d/sendmail
S.5....T c /etc/sendmail.cf
S.5....T c /etc/sendmail.cw
..5....T c /etc/sysconfig/sendmail
S.5....T   /var/log/sendmail.st

Nu er det op til dig, som systemadministrator, at vurdere hvilke ændringer, der er i orden, og hvilke, der kan være farlige. Der vil altid være ændringer, siden pakkerne er installeret, men nogle af ændringerne må gerne være der. Du ved forhåbentlig nogenlunde, hvad du selv har ændret. Ændringer, du ikke selv kan huske at have foretaget, kan vurderes ud fra, hvor filerne ligger og hvilken type filer, det drejer sig om. F.eks. virker filerne i /usr/share/afterstep/ ikke særlig farlige. Det er nok bare noget konfiguration af Window manageren Afterstep. Tegnet "?" tyder på at problemet i skyldes, at brugeren, der har udført kommandoen, ikke har rettigheder til at læse /etc/securetty og de fire hlp-filer. Vi kan se, at dette faktisk er tilfældet

[robin@sherwood robin]$ ls -al /etc/securetty
-rw-------  1 root  root  40 Sep 4  1995 /etc/securetty

Om filerne faktisk er ændrede, kan vi således først se, hvis vi kører "rpm -Va" som root. Vi kan også se, at der åbenbart mangler to xpm-filer (billeder) i "/usr/share/afterstep/ascp/icons".

Næste punkt er at kataloget /usr/local efter installation faktisk blev flyttet til en anden partition, så det er fint, at der er meldt fejl der. Filen /etc/localtime er et symbolsk link og en konfigurationsfil ("L" og det lille "c"). Da Linux blev installeret, skulle man vælge hvilken tidszone man var i - og så ændrede filen sig naturligvis. Kun ved at se hvor linket peger hen, kan man se, at det nok _nu_ er i orden. Bemærk, at linket senere kan ændres til at pege på noget andet, måske noget "farligt", men vi vil stadig kun se samme fejl-meddelelse.

lrwxrwxrwx  1 root  root  39 May 15 16:27 /etc/localtime -> ../usr/share/zoneinfo/Europe/Copenhagen

Det ses også, at en stribe sendmail filer er blevet ændret. Det passer med, hvad jeg som systemadministrator på maskinen ved, at der er lavet - men bemærk dog, at der kan være senere ændringer af de samme filer. På denne måde kan vi fortsætte. Viden om systemet er med andre ord nødvendig, men rpm er er godt sted at starte.

Ovenstående gennemgang med "rpm -Va" afslørede et grimt problem. Efter systeminstallation og systemtilpasning er der allerede sket en del ændringer. Man kan måske ikke overskue, hvad der er farlige ændringer, og hvilke der er banale. Et andet problem er, at "rpm -Va" ikke kan kontrollere programmer på systemet, der er installeret udenom rpm, såsom WordPerfect og StarOffice. Hvad værre er, så kan man teoretisk tænke sig, at en cracker afinstallerede en pakke, og installerede en farlig rpm-pakke i stedet for, hvor alle checks med rpm gik glat. Eller installerede en falsk udgave af selve rpm programmet! Derfor er det ønskeligt at få et godt supplement til rpm.

Desuden er der Linux distributioner, der ikke bruger rpm, f.eks. Slackware og Debian.

Tripwire

Tripwire er et program, der kan checke filsystemet for ændringer. Der genereres en database for alle filer i filtræet. For hver fil gemmes informationer om sidste ændringsdato, indhold (via en checksum), og det er nemt at checke og tilsvarende opdatere for ændringer, siden databasen er genereret.

Tripwire kan findes på http://www.tripwire.com/downloads/.

Tripwire er et godt produkt, men det er ikke Open Source. Det kan downloades gratis hvis man udfylder en formular med navn, adresse etc etc. Selv ens telefonnummer forlanger de...

Pt hedder det version 2.2.1 for Linux på intel, og skulle virke med de fleste Linux'er - se på Tripwires webside. Det er en tar.gz fil man downloader.

L5

Programmet L5 er skrevet et par år tilbage som en neddroslet udgave af Tripwire, og det kan findes på ftp://avian.org/src/hacks. L5 giver for hver fil en linie med modes, ejer/gruppe og MD5 checksum. Et eksempel er

[robin@sherwood robin]$ l5 l5 /bin/login
/bin/login//F 28765 104755 1 0/0 20164 3718bd8a 3a098UjgB8I2B5rzvRJp1N

Giver man et katalog som argument, får man L5 kørt for selve kataloget samt alle filer i dette katalog. Den store svaghed ved L5 er styringen af programmet. Der er ikke hjælp med til at styre hvilke filer, der gerne må ændre sig i de kataloger, man vil holde øje med. Eksempelvis må filer i /etc generelt ikke ændre sig ofte, men filen /etc/mtab vil for hver reboot have ændret tidsstempel. Derfor skal /etc/mtab og en mere statisk fil /etc/resolv.conf behandles forskelligt.
Programmet L5 er simpelt og hurtigt - men skal du bruge det på din maskine, skal du være forberedt på, at du selv skal skrive script-filer til styring af programmet. Script-filerne skal så holde øje med system filer, der oftest findes i følgende kataloger: /dev, /etc, /usr/bin, /sbin, /bin, /lib, /usr/lib og /usr/src.

Aide

Der er naturligvis folk, som har set problemet i, at Tripwire var et godt produkt, men at det ikke er holdt ajour med udviklingen. Tilsvarende er det et problem, at Tripwire ikke er Open Source Software, så det kunne blive holdt ved lige af internettets gode programmører i fællesskab.

Et særdeles interessant alternativ til Tripwire er Aide (Advanced Intrusion Detection Environment), der kan findes på http://www.cs.tut.fi/~rammer/aide.html. Versionsnummeret på Aide er 0.4, hvilket indikerer, at Aide ikke er færdigt, og man-siderne skriver også ærligt, at der kan forventes at være fejl. Aide er dog allerede nu lovende og programmet kan køres og finde ændringer i filer. Det er tydeligt, at man har set på, hvad Tripwire kan, og lavet helt tilsvarende funktionalitet.

Aide er Open Source (GPL), det vil sige, at den kommer med fuld kildetekst. Aide oversættes med ./configure og make, og installeres som root med make install.

Efter oversættelsen og installationen ligger der en test-konfigurationsfil i doc-kataloget under det katalog, hvor du oversatte aide. Du kan med man aide.conf se lidt om syntaksen i konfigurationsfilen. Selv aide-programmet er installeret under /usr/local/bin (medmindre du har ændret i opsætningen). For at generere en database over dine filer, skrives

[root@sherwood /root]# aide --init
Hvor databasen kommer til at ligge, afgøres af konfigurationsfilen, ligesom den afgør hvilke filer, der skal med i databasen. Ligeledes er de regler, der afgør hvilke checks, der skal udføres, defineret i aide.conf. Som standard leder aide efter konfigurationsfilen i det katalog, hvor du står, når du kører programmet. Opdatering af databasen sker med
[root@sherwood /root]# aide --update
og check af ændringer med
[root@sherwood /root]# aide --check

Se i øvrigt man aide.

Vi ville gerne anbefale dette lovende program, men det er ikke færdigt endnu, og hvis du bruger det, er det på eget ansvar. Vi tør imidlertid godt spå en lysende fremtid for aide og vil opfordre til, at man følger med i udviklingen og evt. bidrager til projektet.

Generelt om skanning af filsystemet

Når du skal checke filsystemet, bør du boote maskinen via en "sikker" Linux kerne. Det kan være fra en diskette eller CDROM. Ligeledes bør du bruge en CDROM eller andet read only medie, til at gemme program og database over filsystem på. Ellers kan du ikke checke filtræet mod tidligere skanninger og være sikker på, at du får de reelle forskelle, da en cracker så vil kunne ændre i din gemte database, filcheck programmet eller i selve Linux kernen.

Epilog

Som afslutning kan vi nævne at der er mange spændende ting på Internet omkring emnet "Intrusion Detection", som denne artikel omhandler. Programmet Gog&Magog http://www.multimania.com/cparisel/gog er værd at se på som et gratis alternativ til Tripwire, når et netværk af maskiner skal overvåges. Blot er det et problem, at man skal køre ftp mellem maskinerne.

Men uanset hvor mange fine programmer, du installerer, er det ikke en erstatning for at være vågen og kende sit system. Hold øje med dine log-filer, tag backup, og lad dig aldrig lulle ind i en falsk tro på, at dit system er helt sikkert. Det er det ikke.


Revisionshistorie

 
Home   Subscribe   Mail Archive   Index   Calendar   Search

 
 
Questions about the web-pages to <www_admin>. Last modified 2004-03-07, 21:25 CET .
 

Denne side vedligeholdes af Peter Toft (<pto@sslug.dk>)