run level
Transcrição
run level
Verlässliche Verteilte Systeme 1 Angewandte IT-Robustheit und IT-Sicherheit Vorlesung im Wintersemester 2004/2005 Prof. Dr. Felix Gärtner Teil 15: Sichern von TCP- und UDP-Diensten (System Setup) 1 Lehr- und Forschungsgebiet Informatik 4, RWTH Aachen, http://www-i4.informatik.rwth-aachen.de/lufg/ Motivation Lokale Zugriffskontrolle sichert einen Rechner vor direktem, physischem Zugang ● ● ● Rechner sind heute oft ans Internet angeschlossen Zugriff auf die angebotenen Dienste aus der ganzen Welt möglich Man sollte nie "einfach so" einen Rechner ans Internet anschliessen! ● ● ● Zunächst prüfen, ob es bekannte Sicherheitsprobleme mit dem System gibt Ansonsten wird das System früher oder später kompromittiert werden Heute: sicheres System-Setup ● ● ● Aufsetzen eines neuen Servers Grundlage: Garfinkel, Spafford, Schwartz, Kapitel 12 2 Übersicht Service-Konfiguartion Der Unix-Boot-Prozess inetd und xinetd Zugriffskontrolle durch wrappers Lokale Paketfilter Ausgewählte Dienste: ● ● ● ● ● ● ● ● ● ● ● ● SSH Telnet SMTP DNS HTTP X 3 Unix Dienste und Ports Unix Netzwerkdienste werden durch individuelle Programme angeboten (Server), charakterisiert durch: ● ● ● Server müssen irgendwann einmal gestartet werden ● ● meist beim Boot-Vorgang, aber auch on demand Portnummern sind beliebig, werden aber für bestimmte Internetdienste fest vergeben ● ● ● ● ● Protokoll (TCP oder UDP) Portnummer well-known ports (0-1023) registered ports (1024-49151) private ports (ab 49152) Standardisierung durch IANA, siehe: http://www.iana.org/assignments/port-numbers ● Lokale Datenbank: /etc/services 4 /etc/services ● ● Gegenüberstellung von Ports, Protokollen, Dienstnamen und Aliasen Beispiel: # /etc/services # Network services, Internet style [...] ssh 22/tcp # SSH Remote Login Protocol ssh 22/udp # SSH Remote Login Protocol telnet 23/tcp # Telnet telnet 23/udp # Telnet smtp 25/tcp mail # Simple Mail Transfer smtp 25/udp mail # Simple Mail Transfer [...] mumps 188/tcp # Plus Five's MUMPS [...] 5 Port-Nummern Server können die ihnen zugewiesene Portnummer mittels getservbyname() aus /etc/services auslesen ● ● ● ● Manchmal sind Portnummern auch ins Programm hart hineincodiert Manchmal wird die Portnummer in einer Konfigurationsdatei spezifiziert Manchmal ä ndert ein Server seine Portnummer zur Laufzeit (passiert selten bei well-known ports) Portzuweisung ist ein akzeptierter Unix-Standard, keine technische Notwendigkeit ● ● ● ● ● well-known ports heissen manchmal auch trusted ports Aber auf Port 22 kann auch etwas anderes horchen als der sshd Windows-Maschinen müssen nicht den Unix-Standard gehorchen Dienste können über andere Ports getunnelt werden 6 Das Tunnel-Prinzip ● ● Prinzipiell kann jeder Datenstrom in jeden anderen Datenstrom hineincodiert werden Beispiel: X-Window-Verbindungen über eine SSHVerbindung 7 Übersicht Service-Konfiguartion Der Unix-Boot-Prozess inetd und xinetd Zugriffskontrolle durch wrappers Lokale Paketfilter Ausgewählte Dienste: ● ● ● ● ● ● ● ● ● ● ● ● SSH Telnet SMTP DNS HTTP X 8 Zwei Arten von Netzwerkservern (Netzwerk-)Server sind Prozesse, die Dienste anbieten ● Als "Server" werden manchmal auch Rechner bezeichnet, auf denen Server laufen ● Zwei Arten von Servern: ● Server, die immer laufen ● ● ● ● Werden beim Systemstart (boot) gestartet Normalerweise Server, die schnell reagieren sollen und hohe Lasten erwarten Beispiele: httpd, nsfd Server, die bei Bedarf gestartet werden ● ● ● ● ● Meta-Server inetd (Internet Daemon) lauscht an vielen Ports Startet entsprechenden Server-Prozess bei eingehender Verbindung Spart Systemressourcen bei wenig benutzten Diensten Beispiele: fingerd, popper 9 Systemstart (boot) Server stehen typischerweise in /usr/sbin oder /usr/libexec Server werden beim Systemstart in gewählter Reihenfolge gestartet ● ● ● ● Früher: einzelnes Shell-Skript /etc/rc mit lokalen Anteilen in /etc/rc.local Heute je nach System unterschiedlich System V (Solaris, Linux): ● ● komplexes System mit vielen Verzeichnissen und run levels (gleich mehr dazu) BSD-basierte Systeme: ● ● ● Server stehen in /usr/local/etc/rc.d/ Start-Skripte /etc/rc.conf und / etc/defaults/rc.conf Mac OS X: ● ● Start-Skripte in /System/Library/StartupItems/ 10 Linux Bootvorgang siehe man boot bzw. man init.d Normalerweise fünf Phasen: ● ● 1. 2. 3. 4. 5. Hardware boot OS loader kernel startup init und inittab boot-Skripte Phase 1: Hardware boot ● ● ● ● Computer liest Start-Routine aus dem BIOS Im wesentlichen: welche boot devices sollen in welcher Reihenfolge angesprochen werden Anschliessend: Zugriff auf festgelegte Stelle auf einem boot device, laden des OS loaders 11 Linux Bootvorgang (Forts.) Phase 2: OS loader ● OS loader ist ein kleines Programm, liegt im ersten Sektor des boot devices (Master boot record - MBR) Starke Platzrestriktionen, normalerweise 512 bytes inklusive Partitionstabelle ● ● ● ● ● ● Oft lädt der OS loader im MBR einen zweiten OS loader, der woanders auf dem boot device liegt Unter Linux: lilo und grub OS loader lädt und startet das Betriebssystem Teilweise interaktive Auswahl möglich (dual boot Systeme) Phase 3: kernel startup ● ● ● Betriebssystem initialisiert die devices, startet den swapper, mountet das root Dateisystem Startet den ersten Prozess (PID 1) mit dem Programm /sbin/init 12 Linux Bootvorgang (Forts.) Phase 4: init und inittab ● Das Programm init liest die Datei /etc/inittab Dort steht, was laufen soll in welchem run level ● ● ● ● ● ● ● ● ● ● ● Run level 0: Level used for halting the system (nur ein erlaubter Service: halt) Run level 6: Level used for rebooting the system (nur ein erlaubter Service: reboot) Run level S: Used to switch from boot phase to single user mode (hier hat man am Ende nur eine Konsole) Run level 1: Used to switch from normal run level to single user mode Run level 2: Normalbetrieb ohne Netzwerk (mehrere Konsolen möglich) Run level 3: Normalbetrieb mit Netzwerk Run level 5: Normalbetrieb mit Netzwerk und X-Window-System Administrator kann zwischen run levels wechseln Verweise auf einzelne Start-Skripte pro run level 13 Linux Bootvorgang (Forts.) Phase 5: boot-Skripte (Solaris und die meisten Linuxe) ● Jeder Dienst hat ein einzelnes Start-Skript in /etc/init.d Skript akzeptiert als Parameter das Wort "start" Um einzelne Skripte in bestimmten run levels zu starten: ● ● ● ● ● ● ● ● ● ● Symbolische Links in speziellen Verzeichnissen für run level X ist das /etc/rc.d/rcX.d/ Skripte mit dem Namen S... werden mit dem Parameter "start" aufgerufen Beispiel: /etc/rc.d/rc3.d/S05network ● Beim Übergang zu run level 3 wird /etc/init.d/network start aufgerufen Entsprechend beim Verlassen des run levels werden die Skripte mit Namen K... mit dem Parameter "stop" aufgerufen chkconfig als Programm, mit dem die Skripte (und Links) verwaltet werden (siehe man chkconfig) Beispiel: Netzwerk von Hand neu starten: /etc/init.d/network restart 14 Übersicht Service-Konfiguartion Der Unix-Boot-Prozess inetd und xinetd Zugriffskontrolle durch wrappers Lokale Paketfilter Ausgewählte Dienste: ● ● ● ● ● ● ● ● ● ● ● ● SSH Telnet SMTP DNS HTTP X 15 inetd Viele Server werden nur selten benutzt ● belegen aber trotzdem Systemressourcen (Swap-Speicher und Einträge in der Prozesstabelle) ● Idee: benutzen einen einzelnen Server-Prozess, der an vielen Ports gleichzeitig horcht und bei Bedarf ServerProzesse startet ● inetd – Internet Daemon benutzt bind() um sich an Ports zu binden (siehe man 2 bind) benutzt select() um herauszubekommen, an welchem Port sich etwas getan hat (siehe man 2 select) startet einen Subprozess mittels fork() gibt dem Subprozess die richtige UID vereinfacht das Schreiben von Servern ● ● ● ● ● ● ● ● ● können von stdin lesen und nach stdout schreiben keine expliziten Socket-Operationen nötig konfiguriert mittels /etc/inetd.conf 16 /etc/inetd.conf Ausschnitt aus einem beispielhaften Konfigurationsdatei Aufgeführt sind: service name, socket type, protocol type, wait/nowait (ob der Server selbst die Verbindungen bearbeitet oder ein Subprozess), user, command name and arguments (starting with argv[0]) ● ● ● Internal = triviale Dienste (werden vom inetd selbst bearbeitet) # Internet server configuration # insecure services also shown [...] ftpstream tcp nowait root talk dgram udp wait talkd echo stream tcp nowait root echo dgram udp nowait [...] /usr/sbin/ftpd ftpd root /usr/sbin/talkd internal root internal 17 xinetd Viele Unixe benutzen heute eine Alternative zu inetd: xinetd – extended Internet service daemon ● ● ● selbe Idee wie inetd stellt zusätzlich Zugriffskontrolle und Logging zur Verfügung Konfigurationsdatei /etc/xinetd.conf ● ● ● liest rekursiv Konfigurationsdateien in /etc/inetd.d/ siehe man 5 xinetd.conf, Beispiel: # CVS pserver (remote acces to your CVS repositories) # /etc/inetd.d/cvs – read section on passwords in CVS manual first service cvspserver { disable socket_type protocol wait user server server_args } = = = = = = = yes stream tcp no root /usr/bin/cvs -f --allow-root=/home/cvsroot pserver 18 Beispiel /etc/xinetd.conf # /etc/xinetd.conf # Copyright (c) 2002 SuSE Linux AG, Nuernberg, Germany. # defaults { # specify logging: log_type = FILE /var/log/xinetd.log log_on_success = HOST EXIT DURATION log_on_failure = HOST ATTEMPT # only_from = localhost # max. 30 concurrent server instances: instances = 30 # max. 50 connections per second before disabling service # and 10 seconds pause before subsequent enabling: cps = 50 10 } includedir /etc/xinetd.d 19 Übersicht Service-Konfiguartion Der Unix-Boot-Prozess inetd und xinetd Zugriffskontrolle durch wrappers Lokale Paketfilter Ausgewählte Dienste: ● ● ● ● ● ● ● ● ● ● ● ● SSH Telnet SMTP DNS HTTP X 20 IP-basierte Zugriffskontrolle Unix "out of the box" ist in der Regel ein freundliches und naives Betriebssystem ● ● ● die meisten Dienste sind per default angeschaltet niemandem wird der Zugriff verweigert Gilt nur für Dienste im internen Netzwerk ● ● im Internet muss man genau überlegen, wem man den Zugriff erlaubt Einfache Zugriffskontrolle: basierend auf der IP-Adresse des Rechners, der die Verbindung anfragt ● ● ● nicht besonders sicher (IP spoofing), aber besser als nichts für bessere Authentifikation benötigt man eine Infrastruktur (z.B. Kerberos) Verschiedene Umsetzungen: ● ● ● TCP wrappers Paketfilter (Firewall) 21 Prinzip eines Wrappers Wrapper = transparentes Einpacken kritischer Systemaufrufe durch eine zusätzliche Softwareschicht ● ● ● kurzfristige und elegante Lösung für akute Sicherheitsprobleme kann nachträglich hinzugefügt werden 22 Beispiel: TCP wrappers Software von Wietse Venema (mittlerweile Teil von viele Linux-Distributionen, siehe man tcpd) Idee: "whenever a request for service arrives, the inetd daemon is tricked into running the tcpd program instead of the desired server." ● ● ● ● ● ● ● ● ● tcpd schreibt Zeilen in Protokolldatei tcpd macht double reverse DNS-Lookup der IP-Adresse kann zudem über ident oder finger prüfen, welcher Benutzer die Verbindung aufbaut Zugriffskontrolle aufgrund der IP-Adresse lehnt ggf. Verbindungswunsch ab ansonsten übergibt das Programm die Verbindung an den echten Server Konfiguration über die Dateien /etc/hosts.allow und /etc/hosts.deny 23 Beispiel /etc/hosts.allow ● # # # # # # # # Beispiel aus Garfinkel, Spafford, Schwartz, Seite 401 /etc/hosts.allow allow ssh from sleepy.com but nowhere else allow nothing from pirate.net display unfriendly banner to all external finger requests telnetd and rlogind are disabled in /etc/inetd.conf but we list them here anyway in case someone accidentally re-enables them sshd : sleepy.com : allow sshd : all : deny in.fingerd : LOCAL : allow in.fingerd : all : twist /usr/local/bin/ext_fingerd_message all : .pirate.net : deny telnetd,rlogind : all : deny all : all : allow 24 Diskussion Zugriffskontrolle basierend auf IP-Adresse ist schwach ● ● IP spoofing ist heute aber schwerer als früher, weil die Sequenznummern schwerer zu raten sind Zwei Dateien hosts.allow und hosts.deny wegen Rückwärtskompatibilität ● ● ● ● ● eigentlich reicht eine Empfehlung: alles in hosts.allow, in hosts.deny nur die Zeile all : all : deny Programm tcpdchk macht einen sanity check aller Konfiguratuionsdateien (/etc/services, / etc/inetd.conf, /etc/hosts.allow, / etc/hosts.deny) Mit tcpdmatch kann man eingehende Verbindungen simulieren und die Konfiguration testen Es gibt auch noch andere wrapper-Implementierungen ● ● z.B. für sendmail 25 Übersicht Service-Konfiguartion Der Unix-Boot-Prozess inetd und xinetd Zugriffskontrolle durch wrappers Lokale Paketfilter Ausgewählte Dienste: ● ● ● ● ● ● ● ● ● ● ● ● SSH Telnet SMTP DNS HTTP X 26 Lokaler Paketfilter (Firewall) Man kann mittels Software den Netzwerkverkehr von und zum Rechner kontrollieren ● ● ● Regeln können viele Arten von security policies für den Netzverkehr regeln, zum Beispiel: ● ● ● ● ● Viele Unixe sind direkt damit ausgestattet Normalerweise implementiert als einfacher, regelbasierter Paketfilter (auch Firewall genannt) Per default jede eingehende ssh-Verbindung verbieten, ausser Verbindungen von bestimmten Rechnern Keine eingehenden HTTP-Verbindungen zulassen aber alle ausgehenden HTTP-Verbindungen Fehlgeschlagene Verbindungsversuche protokollieren Regeln werden zusätzlich zu anderen Kontrollen definiert (zum Beispiel TCP wrappers) 27 Unix-Firewalls Paketfilter kommen in unterschiedlicher Ausführung, haben aber im wesentlichen die gleiche Funktionalität: ● Linux mit 2.2er kernel: ipchains Linux mit 2.4er kernel: netfilter (auch iptables genannt) BSD-Systeme (inklusive Mac OS X): ipfirewall (andere Namen: ipfw, ipf, pf) Solaris: SunScreen (oder die public domain Software ipfilter) ● ● ● ● Nachteile von Firewalls: ● Bei hohem Netzwerkverkehr kann es zu starker Prozessorbelastung kommen ● ● ● Normalerweise im Heimbereich kein Problem mehr (ein 486er mit 33 MHz kann locker einer voll belastete DSL-Leitung filtern) Sie können "zu gut" sein und gewünschte Verbindungen verhindern (zum Beispiel backups über das Netz) 28 Paketfilter-Prinzipien Eine Firewall enthält eine Reihe von chains: ● Beispiel: iptables hat standardmäßig drei chains: ● ● ● ● INPUT: für Pakete direkt an den Firewall-Rechner OUTPUT: für Pakete, die vom Firewall-Rechner selbst nach "draußen" gehen FORWARD: für Pakete, die nur durch den Firewall-Rechner hindurchgeleitet werden (wenn der Rechner zum Beispiel ein Router oder Gateway ist) Eine chain ist eine Liste von Regeln; Regeln haben: ● ● Regelnummer, Filter-Spezifikation, Aktion ein ein-/ausgehendes Paket wird gegen die entsprechende chain gehalten: ● ● ● ● Regeln werden nacheinander durchgegangen wenn der Filter matcht, wird die entsprechende Aktion ausgeführt je nach Aktion wird das Durchgehen beendet oder weitergeführt 29 Beispiel: iptables iptables erlaubt die Definition eigener chains ● ● Aktionen können momentane chain verlassen und in "subchain" springen (wie Unterprozedur) iptables kann auch verschiedene chain sets (sogenannte tables) verwalten ● ● ● ● filter table: normaler Paketfilter, hat INPUT, OUTPUT und FORWARD chains nat table: zur Implementierung von NAT mangle table: kann Pakete gezielt verändern Aktionen in iptables: ● ● ● ● ● ACCEPT: Paket wird durchgelassen DROP: Paket wird verworfen RETURN: zurückkehren von sub-chain matching oder Name einer benutzerdefinierten chain (dort wird dann mit dem matching weitergemacht) 30 Beispiel: iptables (Forts.) Normaler Aufruf: ● iptables [-t table] -[AD] chain rule-specification Rule specification kann sich beziehen auf Protokoll, Quelle, Ziel, Netzwerkinterface, Verbindungszustand, jedes Feld im IP-Paket, etc. ● ● -A = add, -j = Aktion, -p = Protokoll, -s = Quelle, -d = Ziel, usw. Beispiele: ● ● ● iptables -A INPUT -j DROP iptables -A INPUT -p tcp -s 192.168.0.192 -j ACCEPT Zusätzliche Kommandos: ● ● iptables-save, iptables-restore: schreibt nach stdout bzw. liest von stdin Firewall-Konfiguration Konfiguriert in SuSe Linux unter: /etc/init.d/firewall.sh ● ● wird beim Übergang in run level 5 als eines der ersten Dienste gestartet 31 Auszüge aus meiner /etc/init.d/firewall.sh # Accept ourselves (loopback interface) $IPTABLES -A INPUT -i lo -j ACCEPT # Drop those nasty packets! # These are all TCP flag combinations that should never, # ever occur in the wild. $IPTABLES -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP $IPTABLES -A INPUT -p tcp --tcp-flags ALL ALL -j DROP [...] # Drop icmp, but only after letting certain types through $IPTABLES -A INPUT -p icmp --icmp-type 0 -j ACCEPT $IPTABLES -A INPUT -p icmp --icmp-type 3 -j ACCEPT $IPTABLES -A INPUT -p icmp --icmp-type 11 -j ACCEPT # Accept related and established connections $IPTABLES -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT # Accept SSH $IPTABLES -A INPUT -p tcp --dport 22 -j ACCEPT # Our final trap $IPTABLES -A INPUT -j DROP 32 Übersicht Service-Konfiguartion Der Unix-Boot-Prozess inetd und xinetd Zugriffskontrolle durch wrappers Lokale Paketfilter Ausgewählte Dienste: ● ● ● ● ● ● ● ● ● ● ● ● SSH Telnet SMTP DNS HTTP X 33 Generelle Bemerkungen zu Netzwerkdiensten TCP wrapper und Paketfilter arbeiten an der Systemgrenze, bevor die Server mit einem Paket gefüttert werden ● ● ● ● Die Server selbst können bekannte oder unbekannte Schwachstellen haben Mit jedem neuen Server steigt die Wahrscheinlichkeit, dass das System durch eine Schwachstelle kompromittiert wird Gute security policy: alle Dienste abschalten, die nicht wirklich gebraucht werden Dienst ausschalten entweder durch Auskommentierung in den entsprechenden Konfigurationsdateien ● ● oder über grafisches Interface für die Systemkonfiguration (wie SuSe YaST) Wir gehen jetzt einzelne ausgewählte Netzwerkdienste durch und besprechen kurz ihre Sicherheitsrisiken ● ● weitere werden besprochen bei Garfinkel, Spafford, Schwartz in Kapitel 12 34 ssh (TCP-Port 22) ssh (secure shell) ist ein kryptographisch-abgesichertes Protokoll für remote login, Kopieren von Dateien und dem sicheren Tunneln von TCP-Verbindungen ● ● ● Original von Tatu Ylonen, als Ersatz für rlogin und rsh heute auch populär: OpenSSH vom OpenBSD-Projekt ssh liegt mittlerweile in Version 2 vor ● ● ● Unterstützt RSA und DSA für die Authentifikation hat mehrere Schwachstellen der Version 1 ausgebügelt Konfigurationsdatei sshd_config ● ● Je nach Version woanders, es sollte jeweils nur eine geben! ssh benutzt Kryptographie für ● ● ● ● Host-Authentifikation Client bzw. Benutzer-Authentifikation Vertraulichkeit und Integrität des Nachrichtenverkehrs 35 Host-Authentifikation bei ssh Jeder ssh-Host hat eine (asymmetrisches) RSA und DSA Schlüsselpaar ● Wird bei der Installation bzw. ersten Benutzung erzeugt Anzahl der Bits kann in sshd_config konfiguriert werden ● ● ● ssh-Verbindungsaufbau: Aushandeln der Protokollversion (im Klartext) Aushandeln der verwendeten Kryptoalgorithmen (KEXINIT, auch im Klartext) Diffie-Hellmann-Schlüsseltausch, erzeugt gemeinsamen Schlüssel K, zunächst serverseitig (DH_GEX) Server schickt seinen öffentlichen Schlüssel zusammen mit einer Signatur auf dem Hash des Verbindungsaufbaus an den Client Client überprüft Signatur anhand von known_hosts und berechnet gemeinsamen Schlüssel K Session-keys für Verschlüsselung und Integrität werden aus K, dem Hash, der Session ID etc. berechnet ● ● ● ● ● ● ● ab NEWKEYS gelten die neuen Schlüssel 36 Verbindungsaufbau bei ssh (Beispiel) gaertner@explorer:~> ssh -v [email protected] OpenSSH_3.7.1p2, SSH protocols 1.5/2.0, OpenSSL 0.9.7b 10 Apr 2003 debug1: Reading configuration data /home/gaertner/.ssh/config [...] debug1: Connecting to houston.informatik.rwth-aachen.de [137.226.59.9] port 22. debug1: Connection established. [...] debug1: Remote protocol version 2.0, remote software version OpenSSH_3.8.1p1 Debian 1:3.8.1p1-8 debug1: match: OpenSSH_3.8.1p1 Debian 1:3.8.1p1-8 pat OpenSSH* debug1: Enabling compatibility mode for protocol 2.0 debug1: Local version string SSH-2.0-OpenSSH_3.7.1p2 debug1: SSH2_MSG_KEXINIT sent debug1: SSH2_MSG_KEXINIT received debug1: kex: server->client aes128-cbc hmac-md5 none debug1: kex: client->server aes128-cbc hmac-md5 none debug1: SSH2_MSG_KEX_DH_GEX_REQUEST sent debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP debug1: SSH2_MSG_KEX_DH_GEX_INIT sent debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY debug1: Host 'houston.informatik.rwth-aachen.de' is known and matches the RSA host key. debug1: Found key in /home/gaertner/.ssh/known_hosts:12 debug1: ssh_rsa_verify: signature correct debug1: SSH2_MSG_NEWKEYS sent debug1: expecting SSH2_MSG_NEWKEYS debug1: SSH2_MSG_NEWKEYS received [...] 37 Host-Authentifikation (Forts.) Ist der ssh-Server unbekannt, wird um Bestätigung gebeten: ● The authenticity of host 'explorer' can't be established. RSA key fingerprint is a4:70:69:80:ac:72:7d:88:b9:a5:2c:98:58:1c:44:4a. Are you sure you want to continue connecting (yes/no)? Bei Akzeptierung wird der Host-Key der Datei ~/.ssh/known_hosts hinzugefügt Bei zukünftigen Verbindungen wird nicht nochmal nachgefragt ● ● ● ● dann wird vorausgesetzt, dass der Host mit demselben Namen auch der ist, der er bei der letzten Verbindung war Warum wird hierdurch IP-Spoofing verhindert? 38 Host-Authentifikation (Forts.) Wenn ein Host, der vorher bekannt war, plötzlich einen anderen Schlüssel hat ● ● ● ● Veränderungen bzw. Erneuerung des Host-Schlüssels passiert je nach Kontext selten bis häufig: ● ● ● ● VORSICHT: Es könnte jemand spoofen (und zum Beispiel eine man-in-the-middle-Attacke fahren)! ssh warnt davor mit einer drastischen Meldung Der Benutzer muss selbst die Datei ~/.ssh/known_hosts editieren, um die Warnung loszuwerden und die Verbindung herzustellen teilweise bei jedem System-Upgrade oder bei Neuinstallation von ssh Wenn der Schlüssel sich ändert, sollte man die Ursache untersuchen 39 Client-Authentifikation in SSH Es gibt verschiedene Authentifikationsmöglichkeiten: ● per Kennung und Passwort ● ● per public key-Kryptographie ● ● Client kann nachweisen, dass er den geheimen Schlüssel eines öffentlichen Schlüssels in der Datei ~/.ssh/authorized_keys kennt bei Zugriff von einem "trusted host" ● ● ● ● ● NB: Beides wird verschlüsselt übetragen wenn sie von einem Host zugreifen, der in der Datei ~/.ssh/known_hosts steht wenn sie von einem Host zugreifen, der in der Datei /etc/hosts.equiv oder /etc/ssh/shosts.equiv steht wenn der Host nachweisen kann, dass er den geheimen Schlüssel eines öffentlichen Schlüssels in der Datei /etc/ssh_known_hosts kennt per Kerberos (wollen wir hier nicht betrachten) 40 Client-Authentifikation (Forts.) Authentifikationsmethoden können konfiguriert werden ● ● beste Methode wird wieder ausgehandelt Beispiel einer ssh-Session (Fortsetzung) ● ● ● mit Option -v werden debug-Meldungen über den Protokollverlauf ausgegeben mehr Meldungen mit -v -v usw. [...] debug1: Authentications that can continue: publickey debug1: Next authentication method: publickey debug1: Trying private key: /home/gaertner/.ssh/identity debug1: Trying private key: /home/gaertner/.ssh/id_rsa debug1: Offering public key: /home/gaertner/.ssh/id_dsa debug1: Server accepts key: pkalg ssh-dss blen 433 debug1: read PEM private key done: type DSA debug1: Authentication succeeded (publickey). debug1: channel 0: new [client-session] debug1: Entering interactive session. [...] 41 telnet (TCP-Port 23) Klassische Dienst für ein virtual terminal ● Client: telnet, Server: telnetd ● Mit dem telnet-Client kann man sich zu jedem TCP/IPServer verbinden, der ein textbasiertes Protokoll fährt Telnet ist bekannt unsicher: ● ● Kennung und Passwort ist nicht verschlüsselt und kann sehr leicht gesnifft werden ● ● ● einfach die ersten 100 Bytes einer Verbindung auf Port 23 sniffen Gefahr von session hijacking (speziell bei älteren Implementierunge von telnet) Wer telnet trotzdem braucht: Einmalpasswörter verwenden! ● ● Ansonsten besser ssh benutzen 42 Mail (SMTP, TCP-Port 25) SMTP ist der Internet-Standard für E-Mail ● ● ● ● ● SMTP wird in Unix-Systemen implementiert durch Programme, die Mail Transfer Agents (MTAs) genannt werden MTAs implementieren in der Regel sowohl die Client- and auch Server-Seite des Protokolls Populäre MTAs: exim, postfix, qmail, sendmail MTAs sind schwer zu konfigurieren und administrieren Zum benutzerseitigen Versenden, Abrufen und Lesen von E-Mail gibt es einfacherer Programme: Message User Agents (MUAs) ● ● Beispiele: Eudora, Emacs, Microsoft Outlook, Pegasus Mail, mutt; MUAs benutzen einen MTA als "SMTP Server" Hauptprobleme bei E-Mail: ● ● ● Viren, SPAM (mehr dazu später) Vertraulichkeit, Authentizität und Integrität der Nachrichten 43 Mail-Spoofing E-Mails sind Textnachrichten, können beliebig gescannt und verändert werden ● ● ● Echelon-System (siehe Bamford: Body of Secrets) Beispiel für eine Mail-Spoofing-Session mittels telnet: gaertner@explorer:~> telnet localhost smtp [...] Connected to localhost. Escape character is '^]'. 220 explorer.local ESMTP Postfix HELO gaertner 250 explorer.local MAIL FROM: <[email protected]> 250 Ok RCPT TO: <[email protected]> 250 Ok DATA 354 End data with <CR><LF>.<CR><LF> Great lecture! George . 250 Ok: queued as 3CF0B85A0E QUIT 221 Bye Connection closed by foreign host. 44 DNS (TCP- und UDP-Port 53) DNS ist der Namensdienst, der symbolische Adressen in IP-Adressen verwandelt ● aber auch: Mailserver einer Domain herausbekommen Hostname zu einer IP-Adresse herausbekommen Programm: host ● ● ● Konfiguration des verwendeten DNS-Servers in /etc/resolv.conf Als Antwort auf eine Anfrage bekommt man Einträge aus der Nameserver-Datenbank zurückgeliefert: ● ● A = authorative address (IP-Adresse) MX = mail exchange (Mailserver einer Domäne) CNAME = canonical name (alias für den Host) NS = name server (responsible for resolving a domain) PTR = pointer record (maps IP address to hostname) ● ● ● ● ● ● ● PTR implementiert durch Domain IN-ADDR.ARPA Probe: host 20.19.10.128.IN-ADDR.ARPA 45 DNS-Beispiele gaertner@houston:~$ host i4mail i4mail.informatik.rwth-aachen.de A 137.226.12.21 gaertner@houston:~$ host -a www.cs.purdue.edu www.cs.purdue.edu CNAME lucan.cs.purdue.edu lucan.cs.purdue.edu A 128.10.19.20 gaertner@houston:~$ host -t MX cs.purdue.edu cs.purdue.edu MX 1 mailslot.cs.purdue.edu gaertner@houston:~$ host -t PTR 137.226.12.21 Name: i4mail.informatik.RWTH-Aachen.DE Address: 137.226.12.21 gaertner@houston:~$ 46 DNS-Gefahren DNS kann sowohl per UDP (Normalfall) als auch TCP angesprochen werden ● ● TCP wird für das Auslesen der gesamten Datenbank eines Nameservers verwendet (zone transfer) Zone transfers geben (zu) viele Informationen ü ber ein internes Netz preis ● ● viele Administratoren erlauben DNS via UDP aber nicht via TCP DNS-Einträge werden im lokalen Nameserver gecacht: ● ● Cache poisoning z.B. über DNS spoofing DNS-Server gleichen regelmäßig ihre Inhalte ab: ● ● sollte nur über authentifizierte Kanäle geschehen 47 HTTP (TCP-Port 80) Zugriffsprotokoll auf Seiten des WWW ● ● ● ● Client fragt beim Server nach einer Seite Server antwortet mit einer ASCII oder HTML-Seite Hier gibt es viel mehr zu erzählen: siehe Vorlesung im Sommersemester 48 X (TCP-Ports 6000-6063) X: populäres grafisches Fenstersystem, verfügbar auf allen Unixen ● Jedes Display wird von einem X-Server verwaltet X-Clients kontaktieren den X-Server, wenn sie etwas anzeigen wollen populäre X-Clients: xterm, xclock, ... ● ● ● X-Server kapselt Zugriffe auf Maus, Keyboard, Bildschirm ● Devices sind "world readable" – jeder kann den Bildschirminhalt auslesen Besser: Rechte der Devices ändern auf den, der gerade an der Konsole eingeloggt ist ● ● ● Datei /etc/logindevperm enthält Liste von Devices, deren Rechte man dann ändern muss 49 X Security Sicherheitsmodell in X: alles oder nichts ● Wenn ein X-Client Zugriff auf den X-Server hat, darf er alles ● Gefahr: Trojanische Pferde in beliebten X-Applikationen ● liest das Strategiespiel gerade meinen Bildschirm aus und schneidet meine Tastaturanschläge mit? ● ● ● Transparentes Fenster, was den gesamten Bildschirm überlagert "secure" input in X11R4 und xterm: CTRL – linke Maustaste erzeugt einen direkten Kanal zum xterm, den kein transparentes Fenster mitschneiden kann Zugriffskontrolle über xhost: ● ● mit xhost kann man Rechnern den Zugriff erlauben oder entziehen X durch einen ssh-Tunnel ● ● ssh -X rechner 50 Übersicht Service-Konfiguartion Der Unix-Boot-Prozess inetd und xinetd Zugriffskontrolle durch wrappers Lokale Paketfilter Ausgewählte Dienste: ● ● ● ● ● ● ● ● ● ● ● ● SSH Telnet SMTP DNS HTTP X 51 Zusammenfassung und Ausblick Generell sollte man beim Aufsetzen eines InternetRechners so wenige Dienste wie möglich laufen lassen: ● ● bietet weniger Angriffsfläche Dienste am besten auf Rechner verteilen ● ● Kompromittierung von HTTP führt dann nicht automatisch zur Komprommitierung von ssh Möglichst mehrere Verteidigungsschichten verwenden ● ● Zum Beispiel TCP Wrappers und Paketfilter Das System erst ans Netz bringen, wenn es abgesichert ist, nie vorher ● ● Herunterladen von Patches auf einem sicheren Computer Das System vorher einem Test unterziehen ● ● Security Scanner, etc., kommt im nächsten Teil 52