12. Security

Inhalt:

12.1 Bereiche

Vortraege:

12.2 Host Security

Die "Sicherheit" eines Rechners kann auf verschiedene Arten beeinträchtigt werden:

12.2.1 Datenmanipulation

  1. Problem: ungenügender Schutz wichtiger Dateien
    rfhpc8133% ls -l /etc/passwd
    -rw-rw-rw-  1 root  wheel  678 Feb  6 14:31 /etc/passwd 
    Aufspüren:
    rfhpc8317% find $HOME -perm -777 -type f -ls
    1382021    2 -rwxrwxrwx  1 feyrer   bedienst     1486 Feb 22  1995 /net/rfhs8012/home3/bedienst/feyrer/PoolDoku/bla.html
    1389623   48 -rwxrwxrwx  1 feyrer   bedienst    49152 Mar 22  1996 /net/rfhs8012/home3/bedienst/feyrer/bin/munpack
    1389627    1 -rwsrwxrwx  1 feyrer   bedienst    49152 Mar 22  2002 /net/rfhs8012/home3/bedienst/feyrer/bin/exe
    
    Intrusion Detection Tools wie tripwire etc.

    Korrigieren der Zugriffsrechte mit chmod(1), chown(8), chgrp(8).

  2. Problem: ungenügender Schutz wichtiger Verzeichnisse:
    rfhpc8317% ls -ld /etc $HOME
    drwxrwxrwx  40 root     sys         4096 May  8 13:33 /etc
    drwxrwxrwx  89 feyrer   bedienst    9216 May 16 14:36 /net/rfhs8012/home3/bedienst/feyrer     
    Aufspüren:
    rfhpc8317% find /tmp -type d -perm -777 -ls
    471765068    4 drwxrwxrwt  7 root     sys          1458 May 16 10:46 /tmp
    472614616    4 drwxrwxrwx  2 root     nobody         69 Apr 23 14:04 /tmp/.removable
    472978697    4 drwxrwxrwx  3 feyrer   bedienst      110 Apr 23 11:19 /tmp/uscreens      
    Korrigieren: chmod(1), chgrp(1), chown(1)

  3. Problem: schwache Passworte sind leicht zu raten, da sie oft den Namen des Besitzers, seine Lieblingsfarbe, Autonummer, etc. enthalten, also mit etwas Kenntnis der Person zu erraten sind. V.a. Angriffe mit Hilfe von Wörterbüchern aber auch Brute-Force Angriffe finden solche Passworte sehr schnell.

    Aufspüren: crack, ...

    Korrigieren: passwd(8), yppasswd(8)

  4. Problem: schwache Authentifizierungsverfahren - wie auch schwache Passworte sind sie durch Brute Force Angriffe relativ leicht zu knacken. Interessant ist hier die "Länge":

    Problem bei Hashes: es werden viele Eingabebit zu einem Bit zusammengefasst, so dass für mehrere Eingaben derselbe Hash-Wert generiert werden kann.

    Abhilfe: Starke Passworte (viele Bits) verwenden, auch verschlüsselte Passworte nicht zugänglich speichern.

  5. Problem: Datenmanipulation nach Einbruch

    Aufspüren: Host-basierte Intrusion Detection Systems, die Dateien (Inhalte, Zugriffsrechte, ...) überwachen und bei Manipulation Alarm schlagen. Überwachen:

    Korrigieren: Einbruch verhindern, s.u.

12.2.2 Unberechtigtes Benutzen von Ressourcen

  1. Problem: Unberechtigter Zugriff auf Datenträger - meist durch falsche Zugriffsrechte für Disketten, Bänder, CDROM, ...

    % ssh rechner mdir a: 
    Aufspüren:
    rfhpc8317% ls -l /dev | head
    total 490
    lrwxrwxrwx   1 root     other         27 Jan  3  2001 arp -> ../devices/pseudo/arp@0:arp
    lrwxrwxrwx   1 root     other          7 Jan  3  2001 audio -> sound/0
    lrwxrwxrwx   1 root     other         10 Jan  3  2001 audioctl -> sound/0ctl
    lrwxrwxrwx   1 root     other         31 Jan  3  2001 conslog -> ../devices/pseudo/log@0:conslog
    lrwxrwxrwx   1 root     other         30 Jan  3  2001 console -> ../devices/pseudo/cn@0:console
    drwxr-xr-x   2 root     other        512 Jan  3  2001 cua
    lrwxrwxrwx   1 root     other         29 Jan  3  2001 cua0 -> ../devices/isa/asy@1,3f8:a,cu
    lrwxrwxrwx   1 root     other         29 Jan  3  2001 cua1 -> ../devices/isa/asy@1,2f8:b,cu
    lrwxrwxrwx   1 root     other         33 Jan  3  2001 diskette -> ../devices/isa/fdc@1,3f0/fd@0,0:c
    rfhpc8317% ls -lL /dev | head
    total 30
    crw-rw-rw-   1 root     sys       44,  0 Jan  3  2001 arp
    crw-------   1 feyrer   other    118,  0 Jan  3  2001 audio
    crw-------   1 feyrer   other    118,  1 Jan  3  2001 audioctl
    crw-rw-rw-   1 root     sys       21,  0 Jan  3  2001 conslog
    crw--w----   1 feyrer   tty        0,  0 May 14 13:08 console
    drwxr-xr-x   2 root     other        512 Jan  3  2001 cua
    crw-------   1 uucp     uucp     106,131072 Jan  3  2001 cua0
    crw-------   1 uucp     uucp     106,131073 Jan  3  2001 cua1
    brw-rw-rw-   1 root     sys       36,  2 Jan 10  2001 diskette     
    Korrigieren: chmod, chown, chgrp

  2. Problem: Keine/fehlende/falsche Kontingentierung von Plattenplatz Aufspüren:
    rfhpc8317% quota -v
    Disk quotas for feyrer (uid 102):
    Filesystem     usage  quota  limit    timeleft  files  quota  limit    timeleft
    /home3       1562698 1900000 4200000               7012      0      0            
    /net/rfhs8012/home3
                 1562698 1900000 4200000               7012      0      0
    rfhpc8317% df -kl
    Filesystem            kbytes    used   avail capacity  Mounted on
    /dev/dsk/c0d0s0      5493582 2389662 3048985    44%    /
    /proc                      0       0       0     0%    /proc
    fd                         0       0       0     0%    /dev/fd
    mnttab                     0       0       0     0%    /etc/mnttab
    swap                  545432       4  545428     1%    /var/run
    swap                  545548     120  545428     1%    /tmp
    rfhpc8317% ls -ld /var/tmp
    drwxrwxrwt   5 root     sys          512 May 22 10:47 /var/tmp
    rfhpc8317% df -k /var/tmp
    Filesystem            kbytes    used   avail capacity  Mounted on
    /dev/dsk/c0d0s0      5493582 2389662 3048985    44%    /
         
    Korrigieren: edquota, rm, oder Platten nachkaufen

  3. Problem: Benutzung von zu viel Arbeitsspeicher
    rfhpc8317% perl -e 'while(1) { $s .= "x" x 1000; }' 
    Aufspüren: top, systat vm (BSD), swap -l/-s (Solaris), swapctl (BSD), limit (csh), limit -h (csh), ulimit -a (sh)
      PID USERNAME PRI NICE   SIZE   RES STATE      TIME   WCPU    CPU COMMAND
     6371 feyrer    -5    0   131M   66M biowait    0:11  8.99%  8.69% perl
         
    Korrigieren: limit/ulimit, kill

  4. Problem: Benutzung von zu viel CPU-Zeit
    rfhpc8317% sh -c 'while true ; do echo \\c ; done'
    rfhpc8317% perl -e 'while(1){ ; }'      
    Aufspüren: top, iostat/vmstat

    Korrigieren: renice, kill, oder mehr CPU power (ggf. Applikation tunen!)

  5. Problem: Benutzen von I/O Bandbreite - übertragen großer Datenmengen oder (schlimmer) hohe Seek-Last

    Aufspüren: top (iowait), vmstat, iostat

    rfhpc8317% iostat 1
       tty       cmdk0          sd0           sd1           nfs1           cpu
     tin tout kps tps serv  kps tps serv  kps tps serv  kps tps serv   us sy wt id
       0   80 340  89   16    0   0    0    0   0    0    0   0    0    0 11 35 54
       0   80 346  93   15    0   0    0    0   0    0    0   0    0    0 10 37 53
       0   80 118  33   15    0   0    0    0   0    0    0   0    0    0  2 13 85
       0   80   0   0    0    0   0    0    0   0    0    0   0    0    0  1  0 99
       2  128   0   0    0    0   0    0    0   0    0    0   0    0    1  0  0 99 

    Korrigieren: kill, Last über mehrere Platten verteilen (striping bzw. Daten umverteilen)

  6. Problem: Benutzen von System-Verwaltungsstrukturen

    Aufspüren: ps, ipcs, vmstat -s, /dev/kmem + /usr/include

    Korrigieren: kill, Systemlimits ernierigen (Solaris: /etc/system, BSD/Linux: Kernel config)

12.2.3 Unberechtigtes Erlangen besonderer Zugriffsrechte

  1. Problem: Ungenügende Sicherheitsabfragen/Längenüberprüfungen in Programmen/Diensten

    Durch falsche Eingaben in Programmen die nicht angefangen werden können Speicherbereiche überschrieben werden ("Buffer Overflow") und beliebiger Code ausgeführt werden. Puffer mit fester Größe (wie in C/C++ üblich) werden mit mehr Daten beschrieben als sie aufnehmen können. Bei falschen/fehlender Längenprüfung werden dabei auch Daten überschrieben, die dahinter liegen, üblicherweise weitere Lokale Variablen und v.a. Rücksprungadresse aus der Funktion.

    Code-Fragment:

    	main() {
    		funktion();
    		}
    
    	funktion() {
    		int i=23;
    		
    		char puffer[5];
    		/* Benutzer-Eingabe in Puffer kopieren */
    		} 
    Stackaufbau:

    Die falsche, zum Buffer Overflow führende Eingabe kann dabei auf mehrere Arten geschehen:

    Aufspüren: find

    Korrigieren: chmod 111, Kernel ohne ausführbarem Stack benutzen, Programm passende Fehlerabfrage beibringen (Patch, ...)

  2. Problem: Format String Attacks

    Banutzer-Eingaben werden als erstes Argument von printf() weitergegeben. Eingebettete %s etc. greifen auf Speicherbereiche zu in denen keine Daten bereitgehalten werden.

         printf(argv[1]);          ->   printf("%s");     
         
    Aufspüren: Code Audit

    Korrigieren: nur auf Programm-Ebene, bzw. Programm nicht mit (besonderen) Privilegien (setuid root, ...) laufen lassen.

  3. Problem: Sniffing

    Mitlesen von Daten und Nachrichten sowohl auf Netzwerk- als auch auf Terminal- und Modem-Leitungen, zum Ausspionieren von Zugangsdaten (Login, Passwort, ...). Besonders anfällig sind hier Netzwerk-Protokolle ohne Verschlüsselung: telnet, POP, FTP, auch X

    Aufspüren: schwierig.

    Korrigieren: verschlüsselte Übertragungsprotokolle verwenden (ssh, ...; kein telnet, POP, FTP), Paranoia

  4. Problem: Social Engineering, Phishing

    Nicht-technischer Angriff, bei dem versucht wird, Zugangsdaten durch Tricks (vorspielen falscher Identität, ...) zu entlocken. Beispiel: Angriff auf GMX

    Aufspüren: ...

    Korrigieren: gesundes Sicherheitsbewusstsein, Paranoia

Weitere Infos: siehe CERT: UNIX Configuration Guidelines.

12.3 Network Security

Grundlagen: TCP/IP Stack und Angriffe auf jede Layer

Im Netzwerkbereich sind mehrere Angriffspunkte zu betrachten:

Probleme:
  1. Problem: sniffing (s.o.)

    Programme zum Analysieren von Netzwerk-Traffic:

  2. Problem: Einbrüche über's Netz

    Einbrüche über's Netzwerk geschehen eigentlich durch die Bank aufgrund mangelhafter Überprüfung von vom Benutzer eingegebenen Daten, und daraus resultierend Buffer Overflows, Format String Attacks etc. Siehe oben.

    Aufspüren: Netzwerk-basierte Intrusion Detection Systems, Monitoring von Logfiles, nmap, netstat, lsof, nessus:

    Korrigieren: Nicht benötigte und/oder unsichere Dienste abstellen (anstatt: sinnlos Firewalling einschalten)

  3. Problem: spoofing

    Netzwerk-Verkehr wird evtl. Umgeleitet (durch publizieren falscher MAC Adressen - ARP Spoofing), und dann evtl. nach Modifikation weitergeleitet.

    Siehe Vorträge.

  4. Problem: Denial of Service Attacks

    Auf Dienste, Maschinen (WinNuke, Teardrop, ...), und ganze Netzwerk-Segmente (DDoS, auf Router).

    Aufspüren: mrtg, rrdtool,

    Korrigieren: IDS, Firewalling

12.4 Informationsquellen

Die folgenden Websites befassen sich mit dem Thema "Sicherheit" größtenteils aus technischer Sicht:

Literatur

Übungen
(c) Copyright 1998-2010 Hubert Feyrer <hubert@feyrer.de>
$Id: 11-security.html,v 1.21 2010-10-01 09:52:08 feyrer Exp $