Prof. Dr. Heiko Knospe SS 2004 1. Praktikumsaufgabe zur IT-Sicherheit 2 X.509 Zertifikate In praktischen Teil dieses Versuchs werden mit Hilfe des OpenSSL Paketes unter Linux X.509 Zertifikate erzeugt und eingesetzt. Im schriftlichen Teil soll der Aufbau einer Public-Key Infrastruktur und die Verwendung von Zertifikaten beschrieben werden. Sie können (falls Sie möchten) in Zweiergruppen zusammenarbeiten. Aufgabe 1 (a) Legen Sie zunächst einige notwendige Verzeichnisse an und kopieren Sie die Konfigurationsdatei in Ihr Home-Directory: mkdir certs newcerts private crl touch index.txt; echo 01 > serial cp /usr/lib/ssl/openssl.cnf. Modifizieren Sie den certificate Eintrag in der Datei openssl.cnf : $dir/certs/<your-name>cacert.pem (b) Erzeugen Sie ein 2048 Bit RSA Schlüsselpaar für Ihre Root-CA: openssl genrsa -des3 -out private/cakey.pem 2048 Welche Rolle spielt das symmetrische 3DES Verfahren hier? (c) Erzeugen Sie ein selbst-signiertes Root-Zertifikat. openssl req -new -x509 -days 1460 -key private/cakey.pem -out certs/<your-name>cacert.pem -config openssl.cnf Lassen Sie sich das Zertifikat in lesbarer Form anzeigen: openssl x509 -in certs/<your-name>cacert.pem -noout -text Kopieren Sie das Zertifikat in ein allgemein verfügbares Verzeichnis: cp certs/<your-name>cacert.pem /home/share/certs (d) Erzeugen Sie eine Certificate Revocation List: openssl ca -gencrl -out crl/crl.pem -config openssl.cnf Wozu wird eine CRL benötigt? Die CRL können Sie sich mit folgendem Kommando anzeigen lassen: openssl crl -in crl/crl.pem -noout -text Aufgabe 2 (a) Erzeugen Sie ein eigenes 1024 Bit RSA Schlüsselpaar: openssl genrsa -des3 -out private/<your-name>key.pem 1024 Wählen Sie nicht die Passphrase des privaten Schlüssels der Root CA, sondern eine neue Passphrase. 1
(b) Erzeugen Sie eine Zertifikatsanforderung: openssl req -new -key private/<your-name>key.pem -out certs/<your-name>req.pem -config openssl.cnf (c) Ihr Trustcenter signiert jetzt die Anforderung: openssl ca -notext -in certs/<your-name>req.pem -out certs/<your-name>cert.pem -config openssl.cnf Welchen privaten Schlüssel setzen Sie hier ein? (d) Lassen Sie sich Ihr neues Zertifikat in lesbarer Form anzeigen. Geben Sie Ihren öffentlichen RSA Schlüssel an, d.h. ermitteln Sie den Exponent e und den Modulus n. Vergleichen Sie das Zertifikat mit dem Root- Zertifikat aus Aufgabe 1. Aufgabe 3 Schreiben Sie Ihre Namen, Matrikelnummer und Studiengang in ein Textfile und erstellen Sie mit Hilfe von openssl daraus eine signierte Mail: openssl smime -sign -in <textfile> -text -out mailfile.sgn -inkey private/<your-name>key.pem -signer certs/<your-name>cert.pem -from <your-email> -to xxx@xxx.xxx -subject Praktikum Es handelt sich hierbei um eine S/MIME Signatur, die insofern eine Alternative zu PGP darstellt. S/MIME (Secure Multipurpose Internet Mail Exchange) ist ein Standard für den sicheren Mailaustausch. Beschreiben Sie den Aufbau der signierten Mail. Schicken Sie die Mail ab: /usr/sbin/exim xxx@xxx.xxx < mailfile.sgn Mit Hilfe des eingebetteten Zertifikats und des Root-Zertifikats kann die Signatur überprüft werden. Auf diese Weise arbeiten auch die S/MIMEkompatiblen Mail-Clients (z.b. Mozilla, Netscape, Outlook). Ändern Sie die Empfängeradresse und schicken Sie die Mail an Ihre Adresse. Ein S/MIMEfähiges Mailprogramm sollte die Signatur automatisch verifizieren, sofern Sie Ihr Root-Zertifikat importiert haben (unter Windows die.pem Datei in.crt umbenennen und Doppelklick). Aufgabe 4 Beschreiben Sie in einem Aufsatz (ca. 2 Seiten), was die wesentlichen technischen Schritte beim Aufbau einer Public-Key Infrastruktur (PKI) einer Firma sind. Die PKI soll vor allem intern genutzt werden und den Mitarbeitern Funktionen zur Signatur, Verschlüsselung und Authentifikation bereitstellen. Gehen Sie insbesondere auf das CA-Schlüsselpaar und das Root-Zertifikat, die Ausgabe und die Verwendung der Zertifikate und den Rückruf von Zertifikaten ein. 2
2. Praktikumsaufgabe zur IT-Sicherheit 2 Der Einsatz von IPsec In diesem Praktikumsversuch soll die Sicherung der Netzwerkkommunikation mit IPsec unter dem Linux Betriebssystem mit dem Kernel 2.6 praktisch implementiert und analysiert werden. Sie können in Zweiergruppen zusammenarbeiten. Aufgabe 1 Es soll eine IPsec Verbindung zwischen Ihrem Arbeitsplatzrechner und dem Dozentenrechner konfiguriert und untersucht werden. (a) Die Authentifikation soll mittels Zertifikaten und Signatur erfolgen. Sie verwenden dazu Ihr Schlüsselpaar aus dem 1. Praktikum. Lassen Sie sich mit Hilfe des Zertifikatsrequest aus dem 1. Praktikum (<your-name>req.pem) ein Zertifikat von der Dozenten CA ausstellen. Kopieren Sie den Request dazu nach /home/share/req auf dem Serversystem. Das ausgestellte Zertifikat und das CA Zertifikat cacert.pem werden im Verzeichnis /home/share/prak2certs bereitgestellt. Für die Authentifikation benötigt der ISAKMP Daemon Ihres Systems nun noch den privaten Schlüssel ohne eine Passphrase: openssl rsa -in private/<your-name>key.pem -out <your-name>openkey.pem (b) Legen Sie auf Ihrem Linux-System ein Verzeichnis /opt/ipsec-prak an, auf das ausschließlich root zugreifen kann. Kopieren Sie mit scp das neu ausgestelle Zertifikat, den privaten Schlüssel (ohne Passphrase) und das CA Zertifikat vom Serversystem in dieses Verzeichnis. Der ISAKMP Daemon racoon erwartet das CA Zertifikat in der Form hashvalue.0. Legen Sie einen entsprechenden Link an: ln -sf cacert.pem openssl x509 -hash -noout -in cacert.pem.0 (c) Richten Sie nun die SPD (Security Policy Database) so ein, dass für die gesamte IP Kommunikation von und nach 139.6.236.10 ein ESP Tunnel verlangt wird. Ein Beispielskript finden Sie auf der Homepage dieser Vorlesung. Modifizieren Sie es entsprechend und starten Sie das Skript. Lassen Sie sich die SPD mit setkey -D -P anzeigen. (d) Die Security Associations sollen mit dem IKE Protokoll durch den ISAKMP Daemon racoon aufgebaut werden. Legen Sie ein Konfigurationsfile racoon.conf in Ihrem Verzeichnis /opt/ipsec-prak an. Es 3
soll eine Authentifikation mit Zertifikaten und dem Main Mode durchgeführt werden. Eine Beispielkonfiguration finden Sie auf der Homepage der Vorlesung. Starten Sie nun den ISAKMP Daemon mit racoon -f /opt/ipsec-prak/racoon.conf -l /opt/ipsec-prak/racoon.log. (e) Starten Sie den Network-Analysator ethereal und schicken Sie Ping Pakete an 139.6.236.10. Schreiben Sie auf, welche ISAKMP Nachrichten zum Aufbau der SA s zwischen den Systemen ausgetauscht werden. Wieviel Zeit vergeht zwischen der ersten und letzten ISAKMP Nachricht? Notieren Sie auch, wie groß (Anzahl der Bytes ab dem äußeren IP Header) diese Pakete jeweils sind. Ermitteln Sie die ausgehandelten Schlüssel (setkey -D). (f) Senden Sie mit ping -s N 139.6.236.10 (für N = 10, 50, 100, 200, 500, 1000) Pakete an den Dozentenrechner und ermitteln Sie durch Vergleich mit einer ungeschützten IP Verbindung (zu einem anderen Rechner) schriftlich den Overhead des ESP Tunnelprotokolls (vergleichen Sie die Paketgrößen ab dem äußeren IP Header). (g) Untersuchen Sie nun IKE im Aggressive Mode. Stellen Sie dazu in racoon.conf den Exchange Mode von main auf aggressive um. Beenden Sie dann racoon mit kill -9, löschen Sie die SAD mit setkey -F und starten Sie racoon neu. Beschreiben Sie die ISAKMP Nachrichten im Aggressive Mode und erläutern Sie die Unterschiede zum Main Mode. Aufgabe 2 Untersuchen Sie das AH Protokoll im Transport Modus. Die Sicherheitsbeziehungen werden nun nicht über IKE ausgehandelt wie in Aufgabe 1 sondern auf beiden Seiten direkt konfiguriert (manual keying). (a) Arbeiten Sie mit einer Partnergruppe zusammen. Modifizieren oder erweitern Sie Ihre SPD analog zu Aufgabe 1c (mit transport statt tunnel). Die SAD Einträge konfigurieren Sie manuell mit einem Skript nach folgendem Muster: #!/usr/sbin/setkey -f flush; add (src-ip) (dest-ip) ah 0x200 -m transport -A hmac-md5 0x(128-Bit-Key0); add (dest-ip) (src-ip) ah 0x201 -m transport -A hmac-md5 0x(128-Bit-Key1); Welche SPI und Schlüssel muss dann die Partnergruppe wählen? (b) Testen Sie diese AH/Transport-Verbindung. Lassen Sie sich die gesicherten (authentifizierten) Pakete mit ethereal anzeigen und erläutern Sie mündlich die einzelnen Bestandteile des Authentication Header. 4
3. Praktikumsaufgabe zur IT-Sicherheit 2 Die Konfiguration einer Firewall (Paketfilter) Ziel dieser Praktikumsaufgabe ist die Konfiguration eines Paketfilters mit Hilfe von iptables unter Linux. Vorbereitung: Bestimmen Sie die Protokollnummern bzw. die Portnummern für folgende Protokolle: ESP, AH, ICMP, HTTP, HTTPS, SSH, Domain (DNS), ISAKMP/IKE. Welcher grundsätzliche Unterschied besteht zwischen Protokoll- und Portnummern? Aufgabe 1 Arbeiten Sie mit Root Rechten auf dem lokalen System. Legen Sie zunächst ein Verzeichnis /opt/fw-prak an und speichern Sie Ihre Skripten und andere Daten ausschließlich in diesem Verzeichnis. Legen Sie ein Skript aufg1.sh an: #!/bin/sh iptables -F iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT DROP Der iptables Paketfilter verwendet die drei Verarbeitungsketten INPUT (Pakete an das lokale System), FORWARD (Pakete, die weitergeleitet werden) und OUTPUT (lokal erzeugte Pakete). Zunächst werden alle Firewall Regeln gelöscht und die Pakete verworfen (Default Deny Strategie). iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --sport 80 --tcp-flags ACK ACK -j ACCEPT iptables -A OUTPUT -d 139.6.0.0/16 -p udp --dport 53 -j ACCEPT iptables -A INPUT -s 139.6.0.0/16 -p udp --sport 53 -j ACCEPT Das lokale Interface lo wird allgemein freigegeben. Dann werden ausgehende TCP Pakete an Port 80 erlaubt. Eingehende TCP Pakete von Port 80 werden nur mit gesetztem ACK Flag erlaubt. Schließlich werden UDP Pakete mit Port 53 an und von Rechnern im angegebenen Netz gestattet. 5
Starten Sie Ihr Skript und analysieren Sie die Wirkung auf die Protokolle HTTP, HTTPS, SSH, ICMP. Erläutern Sie die genaue Wirkung der einzelnen iptables Befehle. Warum wird Port 53 freigegeben? Aufgabe 2 Erweitern Sie die Paketfilter Konfiguration in folgender Weise und schreiben Sie ein Skript aufg2.sh: Es soll zusätzlich HTTPS (TCP Port...) Verkehr gestattet werden (d.h. Verkehr, der vom lokalen System initiiert wird) sowie eingehender SSH (TCP Port...) Verkehr vom lokalen Netz (d.h. Verkehr, der von Systemen aus dem Netz 139.6.236.0/24 initiiert wird). Die ausgefilterten eingehenden Pakete sollen in /var/log/messages geloggt werden. Ergänzen Sie dazu als letzte Zeile: iptables -A INPUT -j LOG Aufgabe 3 Führen Sie folgende Erweiterung durch und schreiben Sie ein Skript aufg3.sh: Nun soll zusätzlich auch ein- und ausgehende IPsec Kommunikation gestattet werden. Beachten Sie, dass dazu die Protokolle AH und ESP sowie ISAKMP/IKE freigegeben werden müssen. Verwenden Sie die iptables Optionen -p... bzw. -p udp --sport... --dport...). Kontrollieren Sie Ihre Konfiguration mit iptables -L -v. Erzeugen Sie Netzwerkverkehr und überprüfen Sie, dass die Kommunikation je nach Protokoll funktioniert oder die Pakete ausgefiltert und geloggt werden. Aufgabe 4 Löschen Sie die Firewall-Regeln nach erteiltem Testat und aktivieren Sie die Default Permit Strategie wieder: iptables -F iptables -P INPUT ACCEPT iptables -P FORWARD ACCEPT iptables -P OUTPUT ACCEPT Anmerkung: Hierbei handelt es sich um einen einfachen Stateless Packetfilter, der die Selektionsentscheidungen nur auf der Basis des aktuellen Paketes trifft. iptables bietet auch die Möglichkeit, einen Stateful Packetfilter zu konfigurieren. Dann wird der Verbindungsstatus in internen Tabellen gespeichert, um z.b. auch ein- und ausgehenden UDP Verkehr unterscheiden und getrennt behandeln zu können. 6