6 Überwachungs- und Alarmsysteme Automatische Protokollierung sicherheitsrelevanter Ereignisse ermöglicht Entdeckung/Rekonstruktion von erfolgreichen - und erfolglosen - Angriffen, ermöglicht eventuell, den Angreifer auf frischer Tat zu erwischen, ist sinnvoll, weil hohe Sicherheit unverhältnismäßig teuer sein kann, ist sinnvoll, weil 100% Sicherheit unmöglich ist, ist empfehlenswert bei allen sicherheitskritischen Systemen SS-7 1
6.1 Protokollierung (security auditing) Betriebssystem protokolliert Ereignisse - zu Abrechnungszwecken, - zu Sicherheitszwecken Sicherheitsrelevante Ereignisse sind verzeichnet - teils in den Abrechnungsprotokollen, - teils in zusätzlichen Sicherheitsprotokollen. (audit logs, audit trails, audit data,...; audit = Buchprüfung ) SS-7 2
Aspekte der Protokollierung: was soll protokolliert werden? lokales Ein/Ausloggen, Zugang übers Netz, sicherheitsbezogene Systemaufrufe,... wie viel soll protokolliert werden? wenig unzureichende Information viel Informationsüberflutung wo kann das Protokoll sicher abgelegt werden? - schreibgeschützte Datei - andere Maschine, evtl. besonders gesichert (loghost) - Papier/sicherer Drucker! (+ physisch sichern) SS-7 3
Problematische Aspekte der Protokollierung: wie können die Daten sinnvoll ausgewertet werden? verstößt die Protokollierung gegen den Datenschutz? (aktuelle Forschung: pseudonymisierte Protokollierung mit Aufdeckung der Pseudonyme bei hinreichendem Verdacht) SS-7 4
6.1.1 Protokollierung in Unix wird (wenig) unterstützt - für Abrechnung, - für Systemverwaltung, - für Fehlerverfolgung, - in Ermangelung eines besseren auch für Sicherheitsüberwachung Was, wie viel, wo? Aufruf der Bibliotheksroutine syslog veranlasst Nachricht an Systemprozess syslogd, der die Protokollierung übernimmt. Verhalten von syslogd wird durch /etc/syslog.conf bestimmt: SS-7 5
jefe: m /etc/syslog.conf #ident "@(#)syslog.conf 1.5 98/12/14 SMI" /* SunOS 5.0 */ # # Copyright (c) 1991-1998 by Sun Microsystems, Inc. # All rights reserved. # # syslog configuration file. # # This file is processed by m4 so be careful to quote (`') names # that match m4 reserved words. Also, within ifdef's, arguments # containing commas must be quoted. # *.err; kern.notice; auth.notice /dev/sysmsg *.err; kern.debug; daemon.notice; mail.crit /var/adm/messages *.alert; kern.err; daemon.err *.alert operator root *.emerg *... usw. facilities : user, kern, mail, auth, daemon,... level : emerg, alert, err,... (von syslog) action : Datei/Gerät oder Benutzer (falls aktiv) oder loghost SS-7 6
Typische Dateien (viele Variationen bei Unix-Varianten!): /var/log/syslog /authlog /... /var/adm/utmp /wtmp Benutzungszeiten, anzeigbar mit Befehl last /messages Nachrichten für Systemverwalter /lastlog /... /var/audit/... SS-7 7
Beispiel Benutzungszeiten: jefe: last more lohr pts/2 lohr.dialup.fu-b Sun Jun 9 14:35 still logged in lohr pts/2 lohr.dialup.fu-b Sun Jun 9 13:10-14:07 (00:57) schweppe pts/2 tarent.icsi.berk Thu Jun 6 17:51-17:52 (00:00) idys pts/2 darwin Thu Jun 6 11:28-11:28 (00:00) schweppe pts/2 fondue.icsi.berk Wed Jun 5 21:39-21:53 (00:14) schweppe pts/2 fondue.icsi.berk Wed Jun 5 21:20-21:22 (00:02) schweppe pts/2 fondue.icsi.berk Wed Jun 5 20:28-20:33 (00:05) schweppe pts/2 fondue.icsi.berk Wed Jun 5 19:55-20:13 (00:18) schweppe pts/2 fondue.icsi.berk Wed Jun 5 19:01-19:18 (00:16) idys pts/2 i40s12.ipd.uni-k Tue Jun 4 14:35-14:35 (00:00) oracle pts/2 elfe Mon Jun 3 12:40-12:41 (00:01) koenig pts/2 orakel Mon Jun 3 12:39-12:39 (00:00) lohr pts/2 lohr.dialup.fu-b Sat Jun 1 20:07-22:31 (02:23) lichtblu pts/2 troll Sat Jun 1 15:21-15:21 (00:00) root pts/2 stucki Fri May 31 19:41-19:41 (00:00) root pts/2 bombadil Fri May 31 13:05-13:31 (00:25) schweppe pts/2 pd9e6aa49.dip.t- Fri May 31 07:39-07:39 (00:00) voges pts/6 server9.gameserv Thu May 30 15:24-15:24 (00:00) schweppe pts/6 pd9e6b258.dip.t- Thu May 30 07:38-07:41 (00:02) schweppe pts/6 pd9e6b7c9.dip.t- Wed May 29 08:17-08:19 (00:01) lohr pts/6 lohr.dialup.fu-b Tue May 28 13:21-15:20 (01:59) SS-7 8
Beispiele Warn- und Fehlermeldungen: jefe: more messages.3 May 13 11:14:50 jefe bootpd[28515]: [ID 864722 daemon.notice] IP address not fou May 13 11:14:53 jefe last message repeated 1 time May 14 10:08:59 jefe bootpd[15814]: [ID 688103 daemon.notice] IP address not fou May 14 10:09:03 jefe last message repeated 1 time May 14 16:27:11 jefe ufs: [ID 845546 kern.notice] NOTICE: alloc: /export/home: f May 14 16:28:19 jefe last message repeated 17 times May 14 19:07:28 jefe afpd[19008]: [ID 988586 daemon.error] afp_flushfork: of_fin May 15 13:40:35 jefe bootpd[19585]: [ID 205861 daemon.notice] IP address not fou May 15 13:40:39 jefe last message repeated 1 time May 15 18:59:36 jefe /usr/dt/bin/ttsession[29901]: [ID 862433 daemon.error] chil May 16 17:12:17 jefe ufs: [ID 845546 kern.notice] NOTICE: alloc: /export: file s IP address not found: 160.45.110.120 IP address not found: 160.45.110.188 NOTICE: alloc: /export/home: file system full afp_flushfork: of_find: No such file or directory IP address not found: 160.45.110.142 child (29937) exited due to signal 1 NOTICE: alloc: /export: file system full
athos: more messages.0 Dec 7 13:57:38 athos nfs: [ID 333984 kern.notice] NFS server datsche not respon Dec 7 13:57:38 athos last message repeated 1 time Dec 7 14:15:38 athos nfs: [ID 333984 kern.notice] NFS server datsche not respon Dec 7 14:21:02 athos nfs: [ID 563706 kern.notice] NFS server datsche ok Dec 7 14:21:02 athos last message repeated 2 times Dec 7 16:18:05 athos krtld: [ID 819705 kern.notice] /kernel/drv/sparcv9/openeep Dec 7 16:18:05 athos krtld: [ID 826211 kern.notice] 'plat_stdin_is_keyboard' Dec 7 16:18:05 athos krtld: [ID 819705 kern.notice] /kernel/drv/sparcv9/openeep Dec 7 16:18:05 athos krtld: [ID 826211 kern.notice] 'plat_stdout_is_framebuffe Dec 7 16:18:05 athos krtld: [ID 472681 kern.notice] WARNING: mod_load: cannot l Dec 7 16:18:05 athos pseudo: [ID 129642 kern.info] pseudo-device: ramdisk1024 Dec 7 16:18:05 athos genunix: [ID 936769 kern.info] ramdisk1024 is /pseudo/ramd Dec 7 16:18:05 athos pseudo: [ID 129642 kern.info] pseudo-device: lockstat0 Dec 7 16:18:05 athos genunix: [ID 936769 kern.info] lockstat0 is /pseudo/lockst Dec 7 16:18:05 athos pseudo: [ID 129642 kern.info] pseudo-device: fcp0 Dec 7 16:18:05 athos genunix: [ID 936769 kern.info] fcp0 is /pseudo/fcp@0 etc. SS-7 10
6.1.2 Sicherheits-Protokollierung in Solaris beim Einsatz des Basic Security Module (BSM) (Alle BSM-Daten findet man unter dem Verzeichnis /etc/security) Was, wie viel, wo? Obligatorische Protokollierung durch Betriebssystem-Kern über Audit Daemon auditd gemäß den Angaben in /etc/security/audit_control (was soll protokolliert werden?) /etc/security/audit_data (wo soll protokolliert werden?) SS-7 11
Typischer Inhalt von /etc/security/audit_control : dir: /etc/security/audit/localhost dir: /etc/security/audit.aux/localhost flags: lo,ad,-all,^-fm naflags: lo,ad Ereignisklassen mit Präfixen (s.s. 13/14) Typischer Inhalt von /etc/security/audit_data : 64:/etc/security/audit/elfe/ 20020506081249.not_terminated.elfe Audit Daemon current audit log file Inhalt eines audit log file: binär codierte Ereignisdaten siehe audit.log(4) SS-7 12
Ereignisklassen ( /etc/security/audit_class ) : no no_class null value for turning off event preselection fr file_read Read of data, open for reading, etc. fw file_write Write of data, open for writing, etc. fa file_attr_acc Access of object attributes: stat, pathconf, etc. fm file_attr_mod Change of object attributes: chown, flock, etc. fc file_creation Creation of object fd file_deletion Deletion of object cl file_close close(2) system call pc process Process operations: fork, exec, exit, etc. nt network Network events: bind, connect, accept, etc. ip ipc System V IPC operations na non_attrib non-attributable events ad administrative administrative actions: mount, exportfs, etc. lo login_logout Login and logout events ap application Application auditing io ioctl ioctl(2) system call ex exec exec(2) system call ot other Everything else all all All flags set SS-7 13
# File Format: # # mask:name:description SS-7 # 0x00000000:no:invalid class 0x00000001:fr:file read 0x00000002:fw:file write 0x00000004:fa:file attribute access 0x00000008:fm:file attribute modify 0x00000010:fc:file create 0x00000020:fd:file delete 0x00000040:cl:file close 0x00000100:nt:network 0x00000200:ip:ipc 0x00000400:na:non-attribute 0x00001000:lo:login or logout 0x00004000:ap:application 0x00010000:ss:change system state 0x00020000:as:system-wide administration 0x00040000:ua:user administration 0x00070000:am:administrative (meta-class) 0x00080000:aa:audit utilization 0x000f0000:ad:old administrative (meta-class) 0x00100000:ps:process start/stop 0x00200000:pm:process modify 0x00300000:pc:process (meta-class) 0x20000000:io:ioctl 0x40000000:ex:exec 0x80000000:ot:other 0xffffffff:all:all classes (meta-class) 14
Präfixe von Ereignisklassen: + erfolgreiche Operationen protokollieren - abgewiesene Operationen protokollieren (ohne) ^ erfolgreiche und abgewiesene Op. protokollieren... nicht protokollieren naflags (non-attributable flags): für Ereignisse, die keinem bestimmten Benutzer zugeordnet werden können SS-7 15
Ereignisse ( /etc/security/audit_event ): Nummer : Name : Ereignis : Ereignisklasse(n) 0:AUE_NULL:indir system call:no 1:AUE_EXIT:exit(2):pc 2:AUE_FORK:fork(2):pc 3:AUE_OPEN:open(2) - place holder:fa 4:AUE_CREAT:creat(2):fc 5:AUE_LINK:link(2):fc 6:AUE_UNLINK:unlink(2):fd 7:AUE_EXEC:exec(2):pc,ex 8:AUE_CHDIR:chdir(2):pc 9:AUE_MKNOD:mknod(2):fc 10:AUE_CHMOD:chmod(2):fm 11:AUE_CHOWN:chown(2):fm 12:AUE_UMOUNT:umount(2) - old version:ad 13:AUE_JUNK:junk:no 14:AUE_ACCESS:access(2):fa 15:AUE_KILL:kill(2):pc 16:AUE_STAT:stat(2):fa... usw. SS-7 16
Befehle audit, auditon, auditreduce, praudit,... (nur für Systemverwalter) : audit -s konfiguriert den Audit Daemon gemäß audit_control audit n veranlaßt den Audit Daemon, mit neu erzeugter Protokoll-Datei weiterzuarbeiten audit t veranlaßt den Audit Daemon, die aktuelle Protokolldatei zu schließen und das Protokollieren einzustellen SS-7 17
Verarbeitung der protokollierten Daten: auditreduce hat Filter-Funktion praudit produziert lesbare Version Beispiele: (Verarbeitung aller Daten aus /etc/security/audit/server/files/*) % auditreduce -d 19880413 -u lorenz -c lo praudit day user class after before user % auditreduce -a 19880413 -b 19880416 -u lorenz -m AUE_CHDIR praudit event SS-7 18
6.1.3 Protokollierung in Windows 3 Protokolle werden geführt: Systemprotokoll für allgemeine Ereignisse Sicherheitsprotokoll für sicherheitsrelevante Ereignisse Anwendungsprotokoll für anwendungsbezogene Ereignisse Start Einstellungen Systemsteuerung Verwaltung - Ereignisanzeige SS-7 19
z.b. Systemprotokoll: SS-7 20
Eigenschaften eines Ereignisses abfragen: Ereignistypen sind 1. Fehler (sicherheitsrelevant:) 2. Warnung 4. Erfolgsüberwachung 3. Informationen 5. Fehlerüberwachung
Sicherheitsprotokoll ist nur für Systemverwalter einsehbar: SS-7 22
Steuerung der Protokollierung sicherheitsrelevanter Ereignisse (durch den Systemverwalter): Start Einstellungen Systemsteuerung Verwaltung Lokale Sicherheitsrichtlinie Überwachungsrichtlinien SS-7 23
Systemverwalter kann Überwachung dateispezifisch steuern: Eigenschaften - Sicherheitseinstellungen der Datei (vgl. 4.3.2.2) SS-7 24
Eintrag Alles Jeder Eintrag Fehl... Jeder SS-7 25
6.2 Angriffsentdeckung (intrusion detection) mittels automatischer On-Line-Auswertung der Protokolle: Anomalie-Erkennung (anomaly detection): Entdeckung bestimmter Verhaltensmuster Sicherheitsadministrator alarmieren Anomalien gegenüber den normalen Abläufen entdecken - schwierig (z.b. Einsatz neuronaler Netze), - typisches Problem falscher Alarm versus Nichterkennung Missbrauchs-Erkennung (misuse detection): vorgegebene unzulässige oder verdächtige Muster entdecken - mit regelbasierten Systemen gut handhabbar, - aber man muss die Angriffe kennen! SS-7 26
6.2.1 Angriffssprachen für Missbrauchs-Erkennung (attack languages) erlauben Beschreibung von Mustern (signatures) missbräuchlicher oder verdächtiger Benutzung Beispiel 1: Muster: nach login 3-mal falsches Paßwort eingegeben Beispiel 2: Vor.: ~lohr/private hat Schutzstatus rwx--x--x Muster: wiederholter Versuch von ls -l ~lohr/private/test mit verschiedenen test SS-7 27
Beispiel 3: Vor.: hosts enthält den Text elfe.inf.fu-berlin.de alt Muster: elfe:alt% cp hosts ~lohr/.rhosts elfe:alt% rlogin -l lohr elfe (ermöglicht im Standard-Unix Einloggen als lohr ohne Angabe eines Passworts) Beispiel 4: Angriff über setuid Shell script (siehe 4.3.3, Beispiel 3) SS-7 28
Angriffssprache STATL [Kemmerer et al. 2000] (State Transition Analysis Technique Language): Modellierung: endlicher Automat, als Diagramm graphisch darstellbar Zustandsübergang = sicherheitsrelevantes Ereignis Auszeichnung unerwünschter Zustände Alarm Erkennungssystem verarbeitet die gemeldeten Ereignisse, z.b. von BSM (6.1.2), gemäß den mit STATL formulierten Vorgaben, die nach Übersetzung als Plugins hinzugefügt werden SS-7 29
Obiges Beispiel 3: elfe:alt% cp hosts ~lohr/.rhosts elfe:alt% rlogin -l lohr elfe Modellierung des Angriffsmusters als Diagramm: enter login readrhosts s0 s1 s2 s3 (da vorhanden!) als STATL-Text: SS-7 30
als STATL-Text: use unix, bsm; Bezugnahme auf Bibliotheken scenario rhostsattack { int user; int pid; int inode; initial state s0 { } Buchführung über Daten Abstraktion eines BSM event type transition enter (s0 -> s1) nonconsuming { Voraussetzung: [WRITE w] : (w.euid!=0) && (w.owner!=w.ruid) Buchführung: { inode = w.inode; } } state s1 { }......... (nächste Seite) SS-7 31
..... transition login (s1 -> s2) nonconsuming { [EXECUTE e] : match_name(e.objname, "login") { user = e.ruid; pid = e.pid; } } state s2 { } transition readrhosts (s2 -> s3) consuming { [READ r] : (r.pid == pid) && (r.inode ==inode) } state s3 { string username; userid2name(user,username); log("rhosts attack by %s", username); } } SS-7 32
... und zahlreiche weitere Intrusion-Detection-Systeme, auch kommerziell oder Open Source, insbesondere für Network Intrusion Detection, z.b. Snort (http://www.snort.org): analysiert übers Netz eintreffende Datenpakete (packet sniffing) Vorteil: Paketinhalt detailliert analysierbar Nachteil: zustandslos SS-7 33