rfhpc8133% ls -l /etc/passwd -rw-rw-rw- 1 root wheel 678 Feb 6 14:31 /etc/passwdAufspü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/exeIntrusion Detection Tools wie tripwire etc.
Korrigieren der Zugriffsrechte mit chmod(1), chown(8), chgrp(8).
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/feyrerAufspü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/uscreensKorrigieren: chmod(1), chgrp(1), chown(1)
Aufspüren: crack, ...
Korrigieren: passwd(8), yppasswd(8)
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.
Aufspüren: Host-basierte Intrusion Detection Systems, die Dateien (Inhalte, Zugriffsrechte, ...) überwachen und bei Manipulation Alarm schlagen. Überwachen:
Korrigieren: Einbruch verhindern, s.u.
% 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 disketteKorrigieren: chmod, chown, chgrp
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
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
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!)
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)
Aufspüren: ps, ipcs, vmstat -s, /dev/kmem + /usr/include
Korrigieren: kill, Systemlimits ernierigen (Solaris: /etc/system, BSD/Linux: Kernel config)
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:
% perl -e 'print "x" x 10000;' | programm
% programm `perl -e 'print "x" x 10000;'`
% setenv VARIABLE `perl -e 'print "x" x 10000;' ` % programmPraxisbeispiel: Irix syslog Auszug:
Jun 20 15:25:17 rfhsi8007.fh-regensburg.de telnetd[243748]: ignored attempt to setenv(_RLD, ^?D^X^\ ^?D^X^^ ^D^P^?^?$^B^Cs#^?^B^T#d~^H#e~^P/d~^P/`~^T#`~^O^C^?^?L/bin/sh%32614c%11$hn%86000c%12$hn)
% perl -e 'print "x" x 10000;' >/tmp/program.config % program --config-file /tmp/program.config
Aufspüren: find
Korrigieren: chmod 111, Kernel ohne ausführbarem Stack benutzen, Programm passende Fehlerabfrage beibringen (Patch, ...)
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.
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
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
Im Netzwerkbereich sind mehrere Angriffspunkte zu betrachten:
Programme zum Analysieren von Netzwerk-Traffic:
rfhs8036% ftp yui.fh-regensburg.de
Connected to rfhpc8323.fh-regensburg.de.
220-
220 rfhpc8323.fh-regensburg.de FTP server (NetBSD-ftpd 20010329) ready.
Name (yui.fh-regensburg.de:feyrer): install
331 Password required for install.
Password:
230-
NetBSD 1.5.3 (YUI-$Revision: 1.21 $) #34: Thu Apr 4 10:38:36 MEST 2002
Welcome to NetBSD!
230 User install logged in.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
yui# tcpdump host rfhs8036 tcpdump: listening on ex0 17:12:08.723350 rfhs8036.65524 > rfhpc8323.ftp: S 3017712967:3017712967(0) win 1638417:12:08.723426 rfhpc8323.ftp > rfhs8036.65524: S 190502990:190502990(0) ack 3017712968 win 16384 17:12:08.723579 rfhs8036.65524 > rfhpc8323.ftp: . ack 1 win 17520 17:12:08.749961 rfhpc8323.ftp > rfhs8036.65524: P 1:7(6) ack 1 win 17520 [tos 0x10] 17:12:08.944328 rfhs8036.65524 > rfhpc8323.ftp: . ack 7 win 17520 [tos 0x10] 17:12:08.944373 rfhpc8323.ftp > rfhs8036.65524: P 7:80(73) ack 1 win 17520 [tos 0x10]
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:
rfhpc8317% netstat | sed s/.fh-regensburg.de//g TCP: IPv4 Local Address Remote Address Swind Send-Q Rwind Recv-Q State -------------------- -------------------- ----- ------ ----- ------ ------- rfhpc8317.1023 rfhs8012.nfsd 24820 0 24820 0 ESTABLISHED rfhpc8317.1022 rfhs8012.sunrpc 24820 0 24820 0 ESTABLISHED rfhpc8317.6000 rfhs8012.56949 24820 0 24820 0 ESTABLISHED rfhpc8317.35704 rfhs8012.ssh 24820 0 24820 0 ESTABLISHED rfhpc8317.37590 rfhpc8317.ssh 32768 0 32768 0 ESTABLISHED rfhpc8317.ssh rfhpc8317.37590 32768 0 32768 0 ESTABLISHED rfhpc8317.38500 rfhpc8321.ssh 17520 0 24820 0 ESTABLISHED rfhpc8317.6000 rfhpc8321.65534 17520 0 24616 0 ESTABLISHED rfhpc8317.38501 rfhpc8320.ssh 24820 0 24820 0 ESTABLISHED rfhpc8317.38713 rfhs8012.80 24820 0 24820 0 ESTABLISHED
rfhpc8321# nmap rfhpc8317 Starting nmap V. 2.53 by fyodor@insecure.org ( www.insecure.org/nmap/ ) Interesting ports on rfhpc8317.fh-regensburg.de (194.95.108.65): (The 1504 ports scanned but not shown below are in state: closed) Port State Service 13/tcp open daytime 21/tcp open ftp 22/tcp open ssh 23/tcp open telnet 37/tcp open time 79/tcp open finger 111/tcp open sunrpc 113/tcp open auth 512/tcp open exec 513/tcp open login 514/tcp open shell 4045/tcp open lockd 6000/tcp open X11 32774/tcp open sometimes-rpc11 32775/tcp open sometimes-rpc13 32776/tcp open sometimes-rpc15 32777/tcp open sometimes-rpc17 32779/tcp open sometimes-rpc21 32780/tcp open sometimes-rpc23 Nmap run completed -- 1 IP address (1 host up) scanned in 2 seconds
rfhpc8317% lsof | grep 'TCP.*rfhpc8321.*:65534' Xsun 294 root 16u IPv4 0xe1f866dc 0t29793840 TCP rfhpc8317:6000->rfhpc8321.fh-regensburg.de:65534 (ESTABLISHED)
rfhpc8317% grep -v ^# /etc/inetd.conf | grep -v '^ *$' ftp stream tcp6 nowait root /usr/sbin/in.ftpd in.ftpd telnet stream tcp6 nowait root /usr/sbin/in.telnetd in.telnetd name dgram udp wait root /usr/sbin/in.tnamed in.tnamed shell stream tcp nowait root /usr/sbin/in.rshd in.rshd shell stream tcp6 nowait root /usr/sbin/in.rshd in.rshd login stream tcp6 nowait root /usr/sbin/in.rlogind in.rlogind exec stream tcp nowait root /usr/sbin/in.rexecd in.rexecd exec stream tcp6 nowait root /usr/sbin/in.rexecd in.rexecd comsat dgram udp wait root /usr/sbin/in.comsat in.comsat talk dgram udp wait root /usr/sbin/in.talkd in.talkd finger stream tcp6 nowait nobody /usr/sbin/in.fingerd in.fingerd time stream tcp6 nowait root internal time dgram udp6 wait root internal daytime stream tcp6 nowait root internal daytime dgram udp6 wait root internal rquotad/1 tli rpc/datagram_v wait root /usr/lib/nfs/rquotad rquotad walld/1 tli rpc/datagram_v wait root /usr/lib/netsvc/rwall/rpc.rwalld rpc.rwalld ident stream tcp nowait sys /soft/pidentd-3.0.4/sbin/in.identd in.identd
rfhs8012# more /etc/inetd.conf | grep tcpd | grep -v ^#
ftp stream tcp6 nowait root /soft/tcp-wrappers-7.6-ipv6.1/bin/tcpd in.ftpd
telnet stream tcp6 nowait root /soft/tcp-wrappers-7.6-ipv6.1/bin/tcpd in.telnetd
finger stream tcp6 nowait nobody /soft/tcp-wrappers-7.6-ipv6.1/bin/tcpd in.fingerd
rfhs8012# cat /etc/hosts.allow
in.telnetd : feyrer@rfhpc8325 ALL@194.95.108.95 ALL@localhost
in.ftpd : feyrer@rfhpc8325 ALL@194.95.108.95 ALL@localhost
in.rshd : feyrer@rfhpc8325 ALL@194.95.108.95 ALL@localhost
in.rlogind : feyrer@rfhpc8325 ALL@194.95.108.95 ALL@localhost
in.rexecd : feyrer@rfhpc8325 ALL@194.95.108.95 ALL@localhost
in.fingerd : ALL
rfhs8012# cat /etc/hosts.deny
ALL : ALL : banners /soft/tcp-wrappers-7.3/lib/banners
rfhpc8317% telnet rfhs8012
Trying 194.95.108.29...
Connected to rfhs8012.fh-regensburg.de.
Escape character is '^]'.
Go away, unknown@rfhpc8317, you're not my friend.
Connection closed by foreign host.
Netzwerk-Verkehr wird evtl. Umgeleitet (durch publizieren falscher MAC Adressen - ARP Spoofing), und dann evtl. nach Modifikation weitergeleitet.
Siehe Vorträge.
Auf Dienste, Maschinen (WinNuke, Teardrop, ...), und ganze Netzwerk-Segmente (DDoS, auf Router).
Aufspüren: mrtg, rrdtool,
Korrigieren: IDS, Firewalling